query('SELECT * FROM `builds` WHERE `id`="'.$request['build'].'"'); if ($r->rowCount() == 0) { debug('builds_download', 'build not found or not owned by user'); return '404'; } $build=new sql_build($r->fetch(PDO::FETCH_ASSOC)); if (!owner_or_admin($build->owner)) { debug('builds_download', 'Permission denied'); return '404'; } $files=glob(COMPLETED.'/build-'.$build->id.'.*'); if (count($files)) { if (count($files) > 1) { debug('builds_download', 'extraneous file(s) found - don\'t know which to give them'); return '404'; } $S['builds_download']['file']=$files[0]; if (!is_readable($S['builds_download']['file'])) { debug('builds_download', 'found file, but no read perms'); return '404'; } $ext=substr($S['builds_download']['file'], strpos($S['builds_download']['file'], '.')); } else { debug('builds_download', 'image file not found'); return '404'; } $S['builds_download']['dl']=new sql_download($build->id, $S['user']->id, time()); contenttype('application/octet-stream'); header('Content-Length: '.filesize($S['builds_download']['file'])); header('Content-Description: File Transfer'); header('Content-Transfer-Encoding: binary'); header('Content-Disposition: attachment; filename="'.(isset($build->name) && strlen($build->name)?str_replace('"', '\"', $build->name):'ingenue-'.$build->id).$ext); } function body_builds_download() { global $S; readfile($S['file']); // Log the download to db after sending data so hopefully HEAD requests won't artificially inflate the # of dls $S['builds_download']['dl']->write(); } ?>