function config_defaults($config = array()) { $config['authentication'] = empty($config['authentication']) ? '' : $config['authentication']; $config['aws_access_key_id'] = empty($config['aws_access_key_id']) ? '' : $config['aws_access_key_id']; $config['aws_secret_access_key'] = empty($config['aws_secret_access_key']) ? '' : $config['aws_secret_access_key']; $config['export_audio_codec_audio'] = empty($config['export_audio_codec_audio']) ? 'libmp3lame' : $config['export_audio_codec_audio']; $config['export_audio_bitrate'] = empty($config['export_audio_bitrate']) ? '128' : $config['export_audio_bitrate']; $config['export_audio_codec'] = empty($config['export_audio_codec']) ? 'aac' : $config['export_audio_codec']; $config['export_audio_extension'] = empty($config['export_audio_extension']) ? 'mp3' : $config['export_audio_extension']; $config['export_audio_rate'] = empty($config['export_audio_rate']) ? '44100' : $config['export_audio_rate']; $config['export_dimensions'] = empty($config['export_dimensions']) ? '512x288' : $config['export_dimensions']; $config['export_extension'] = empty($config['export_extension']) ? 'mp4' : $config['export_extension']; $config['export_video_rate'] = empty($config['export_video_rate']) ? '30' : $config['export_video_rate']; $config['export_meta_title'] = empty($config['export_meta_title']) ? '' : $config['export_meta_title']; $config['export_video_bitrate'] = empty($config['export_video_bitrate']) ? '2000' : $config['export_video_bitrate']; $config['export_video_codec'] = empty($config['export_video_codec']) ? 'libx264' : $config['export_video_codec']; $config['web_root_directory'] = empty($config['web_root_directory']) ? $_SERVER['DOCUMENT_ROOT'] : $config['web_root_directory']; $config['temporary_directory'] = empty($config['temporary_directory']) ? sys_get_temp_dir() : $config['temporary_directory']; $config['queue_directory'] = empty($config['queue_directory']) ? path_concat($config['temporary_directory'], 'queue') : $config['queue_directory']; $config['import_audio_bitrate'] = empty($config['import_audio_bitrate']) ? '128' : $config['import_audio_bitrate']; $config['import_audio_extension'] = empty($config['import_audio_extension']) ? 'mp3' : $config['import_audio_extension']; $config['import_audio_basename'] = empty($config['import_audio_basename']) ? 'audio' : $config['import_audio_basename']; $config['import_audio_rate'] = empty($config['import_audio_rate']) ? '44100' : $config['import_audio_rate']; $config['import_dimensions'] = empty($config['import_dimensions']) ? '256x144' : $config['import_dimensions']; $config['import_extension'] = empty($config['import_extension']) ? 'jpg' : $config['import_extension']; $config['import_video_rate'] = empty($config['import_video_rate']) ? '10' : $config['import_video_rate']; $config['import_image_quality'] = empty($config['import_image_quality']) ? '1' : $config['import_image_quality']; $config['import_original_basename'] = empty($config['import_original_basename']) ? 'original' : $config['import_original_basename']; $config['import_waveform_backcolor'] = empty($config['import_waveform_backcolor']) ? 'FFFFFF' : $config['import_waveform_backcolor']; $config['import_waveform_basename'] = empty($config['import_waveform_basename']) ? 'waveform' : $config['import_waveform_basename']; $config['import_waveform_dimensions'] = empty($config['import_waveform_dimensions']) ? '8000x32' : $config['import_waveform_dimensions']; $config['import_waveform_extension'] = empty($config['import_waveform_extension']) ? 'png' : $config['import_waveform_extension']; $config['import_waveform_forecolor'] = empty($config['import_waveform_forecolor']) ? '000000' : $config['import_waveform_forecolor']; $config['module_host'] = empty($config['module_host']) ? $_SERVER['HTTP_HOST'] : http_get_contents($config['module_host']); $config['user_media_host'] = empty($config['user_media_host']) ? $_SERVER['HTTP_HOST'] : http_get_contents($config['user_media_host']); $config['callback_host'] = empty($config['callback_host']) ? $_SERVER['HTTP_HOST'] : http_get_contents($config['callback_host']); $config['log_request'] = empty($config['log_request']) ? '' : $config['log_request']; $config['log_response'] = empty($config['log_response']) ? '' : $config['log_response']; $config['log_api_request'] = empty($config['log_api_request']) ? '' : $config['log_api_request']; $config['log_api_response'] = empty($config['log_api_response']) ? '' : $config['log_api_response']; $config['max_meg_audio'] = empty($config['max_meg_audio']) ? '' : $config['max_meg_audio']; $config['max_meg_image'] = empty($config['max_meg_image']) ? '' : $config['max_meg_image']; $config['max_meg_video'] = empty($config['max_meg_video']) ? '' : $config['max_meg_video']; $config['log_file'] = empty($config['log_file']) ? '' : $config['log_file']; $config['callback_directory'] = empty($config['callback_directory']) ? substr(dirname(dirname(__FILE__)), strlen(path_add_slash_end($config['web_root_directory']))) : $config['callback_directory']; $config['install_directory'] = empty($config['install_directory']) ? substr(dirname(dirname(dirname(__FILE__))), strlen(path_add_slash_end($config['web_root_directory']))) : $config['install_directory']; $config['cgi_directory'] = empty($config['cgi_directory']) ? substr(dirname(dirname(__FILE__)), strlen(path_add_slash_end(path_concat($config['web_root_directory'], $config['install_directory'])))) : $config['cgi_directory']; $config['user_media_directory'] = isset($config['user_media_directory']) ? $config['user_media_directory'] : path_concat(substr(dirname(dirname(dirname(__FILE__))), strlen(path_add_slash_end(path_concat($config['web_root_directory'], $config['install_directory'])))), 'user'); $config['user_media_url'] = isset($config['user_media_url']) ? $config['user_media_url'] : $config['user_media_directory']; $config['user_data_directory'] = isset($config['user_data_directory']) ? $config['user_data_directory'] : path_concat(substr(dirname(dirname(dirname(__FILE__))), strlen(path_add_slash_end($config['web_root_directory']))), 'user'); $config['module_directory'] = empty($config['module_directory']) ? substr(dirname(dirname(dirname(__FILE__))), strlen(path_add_slash_end($config['web_root_directory']))) : $config['module_directory']; $config['s3_bucket'] = empty($config['s3_bucket']) ? '' : $config['s3_bucket']; $config['s3_region'] = empty($config['s3_region']) ? '' : $config['s3_region']; $config['sqs_queue_url'] = empty($config['sqs_queue_url']) ? '' : $config['sqs_queue_url']; $config['chmod_directory_new'] = isset($config['chmod_directory_new']) ? $config['chmod_directory_new'] : '0775'; $config = service_config_defaults($config); ksort($config); return $config; }
function archive_extract($path, $archive_dir, $config = array()) { $result = FALSE; if (class_exists('Archive_Tar')) { if (file_safe(path_concat($archive_dir, 'file.txt'), $config)) { $tar = new Archive_Tar($path); $tar->extract($archive_dir); $result = file_exists($archive_dir); } } return $result; }
function s3_file_import_init($import, $config) { $response = array(); $err = ''; if (!$err) { $response['api'] = array(); $response['data'] = array(); $response['method'] = 'put'; $id = id_unique(); $bucket = $config['s3_bucket']; $region = $config['s3_region'] ? $config['s3_region'] : 'us-east-1'; $key = path_strip_slash_start($config['user_media_directory']); // remove bucket name from url if it's there if (substr($key, 0, strlen($bucket)) == $bucket) { $key = substr($key, strlen(path_add_slash_end($bucket))); } $key = path_concat(path_concat(path_concat($key, $import['uid']), $id), $config['import_original_basename'] . '.' . $import['extension']); $options_array = ['version' => 'latest', 'region' => $region]; if ($config['aws_secret_access_key'] && $config['aws_access_key_id']) { $options_array['credentials'] = []; $options_array['credentials']['key'] = $config['aws_access_key_id']; $options_array['credentials']['secret'] = $config['aws_secret_access_key']; } try { $s3 = new Aws\S3\S3Client($options_array); $cmd = $s3->getCommand('PutObject', ['Bucket' => $config['s3_bucket'], 'Key' => $key, 'ACL' => $config['s3_acl'], 'ContentType' => $import['mime']]); $request = $s3->createPresignedRequest($cmd, $config['s3_expires']); // Get the actual presigned-url $response['endpoint'] = $presignedUrl = (string) $request->getUri(); } catch (Exception $e) { $err = $e->getMessage(); } // data key children all become part of the POST file upload request $response['api']['id'] = $id; $response['api']['type'] = $import['type']; $response['api']['extension'] = $import['extension']; $response['api']['label'] = $import['label']; } if ($err) { $response['error'] = $err; } return $response; }
function __import_complete_callback($payload, $config) { return auth_data(array('host' => $config['callback_host'], 'type' => 'http', 'trigger' => 'complete', 'path' => path_concat($config['callback_directory'], 'import_complete.php'), 'data' => $payload), $config); }
} } } if (!$err) { // enforce size limit from configuration, if defined $max = empty($config["max_meg_{$type}"]) ? '' : $config["max_meg_{$type}"]; if ($max) { $file_megs = round($file_size / (1024 * 1024)); if ($file_megs > $max) { $err = $type . ' files must be less than ' . $max . ' meg'; } } } if (!$err) { // try to move upload into its media directory and change permissions $path = path_concat(path_concat(path_concat(path_concat($config['web_root_directory'], $config['user_media_directory']), $uid), $id), $config['import_original_basename'] . '.' . $file_extension); if (!file_safe($path, $config)) { $err = 'Problem creating media directory'; } else { if (!file_move_upload($file['tmp_name'], $path)) { $err = 'Problem moving file'; } else { if (!file_mode($path, $config)) { $err = 'Problem setting permissions of media: ' . $path; } else { log_file('Saved to: ' . $path, $config); } } } $response['status'] = 'uploaded ok'; }
function data_search($options = array(), $config = array()) { $found_obs = array(); $json_obs = array(); if (!$config) { $config = config_get(); } if (!config_error($config)) { $dir_host = $config['web_root_directory']; $module_dir = path_concat(path_concat($dir_host, $config['module_directory']), 'module'); $userid = empty($options['uid']) ? '' : $options['uid']; $group = empty($options['group']) ? '' : $options['group']; $index = empty($options['index']) ? 0 : $options['index']; $count = empty($options['count']) ? 1000 : $options['count']; $query = empty($options['query']) ? '' : $options['query']; if ($group) { switch ($group) { // group parameter determines which xml file we search through case 'mash': case 'video': case 'audio': case 'image': if ($userid) { $path = path_concat(path_concat(path_concat($dir_host, $config['user_data_directory']), $userid), 'media_' . $group . '.json'); if (file_exists($path)) { $json_obs = array_merge(json_array(file_get($path)), $json_obs); } } break; default: // modules // look for filenames ending in $group.json in first and second tiers of module directory $base_path = path_add_slash_end($module_dir) . '*/*'; $glob_path = $base_path . $group . '.json'; $glob_files = glob($glob_path); $glob_path = $base_path . '/*' . $group . '.json'; $glob_files = array_merge($glob_files, glob($glob_path)); foreach ($glob_files as $file_path) { $obs = json_array(file_get($file_path)); $html_path = str_replace('.json', '.html', $file_path); if (file_exists($html_path)) { $html_path = substr($html_path, strlen(path_add_slash_end($dir_host)) - 1); for ($i = 0; $i < sizeof($obs); $i++) { $obs[$i]['html'] = $html_path; } } $json_obs = array_merge($obs, $json_obs); } } if ($json_obs) { foreach ($json_obs as $ob) { $ok = 1; if ($query) { reset($query); // loop through all parameters foreach ($query as $k => $v) { $test = (string) $ob[$k]; // will match if parameter is empty, equal to or (for label) within attribute $ok = !$v || $v == $test || $k == 'label' && strpos(strtolower($test), strtolower($v)) !== FALSE; if (!$ok) { break; } } } if ($ok) { if ($index) { $index--; } else { // only add tag if within specified range $found_obs[] = $ob; $count--; if (!$count) { break; } } } } } } } return $found_obs; }
} if (!$err) { // make sure there wasn't a problem with the upload if (!empty($file['error'])) { $err = 'Problem with your file: ' . $file['error']; } elseif (!is_uploaded_file($file['tmp_name'])) { $err = 'Not an uploaded file'; } } if (!$err) { // make sure file extension is valid $file_name = $file['name']; $file_ext = file_extension($file_name); if ('tgz' == $file_ext) { set_time_limit(0); $archive_dir = path_concat($config['temporary_directory'], id_unique()); if (!archive_extract($file['tmp_name'], $archive_dir, $config)) { $err = 'Could not extract to ' . $archive_dir; } else { // move select files from the archive to media directory if (!file_move_extension('jpg', $archive_dir, $media_dir, $config)) { $err = 'Could not move jpg files from ' . $archive_dir . ' to ' . $media_dir; } else { if (!file_move_extension($config['export_audio_extension'], $archive_dir, $media_dir, $config)) { $err = 'Could not move ' . $config['export_audio_extension'] . ' files from ' . $archive_dir . ' to ' . $media_dir; } else { if (!file_move_extension($config['export_extension'], $archive_dir, $media_dir, $config)) { $err = 'Could not move ' . $decoder_extension . ' files from ' . $archive_dir . ' to ' . $media_dir; } } }
if (!$err) { $frame_extension = $extension; switch ($type) { case 'video': $frame_extension = 'jpg'; // otherwise use image's original extension (eg. png) // otherwise use image's original extension (eg. png) case 'image': $encoder_fps = $config['import_fps']; if ($type == 'image') { $encoder_fps = '1'; } // move any frames $archive_path = path_concat($archive_dir, $config['import_dimensions'] . 'x' . $encoder_fps); if (file_exists($archive_path)) { $media_path = path_concat($media_dir, $config['import_dimensions'] . 'x' . $encoder_fps); if (!file_move_extension($frame_extension, $archive_path, $media_path, $config)) { $err = 'Could not move ' . $frame_extension . ' files from ' . $archive_path . ' to ' . $media_path; } } break; } } // remove the temporary directory we created, and any remaining files (there shouldn't be any) file_dir_delete_recursive($tmp_path); } if ($err) { header('HTTP/1.1: 400 Bad Request'); header('Status: 400 Bad Request'); print $err; log_file($err, $config);
function api_export_data($response = array(), $config = array()) { $export_data = array(); if (!$config) { $config = config_get(); } $err = config_error($config); if (!$err) { $id = empty($response['id']) ? '' : $response['id']; $job = empty($response['job']) ? '' : $response['job']; $uid = empty($response['uid']) ? '' : $response['uid']; $type = empty($response['type']) ? '' : $response['type']; $extension = empty($response['extension']) ? '' : $response['extension']; if (!($id && $extension && $type && $job && $uid)) { $err = 'Parameters uid, job, id, extension, type required'; } } if (!$err) { // pull in other configuration and check for required input $media_url = service_export_url($response, $config); $export_data['id'] = $id; $export_data['source'] = path_concat(path_concat($media_url, $id), (empty($config["export_{$type}_basename"]) ? $job : $config["export_{$type}_basename"]) . '.' . $extension); } if ($err) { $export_data['error'] = $err; } return $export_data; }
function local_file_import_init($import, $config) { $response = array(); $id = id_unique(); $response['api'] = array(); $response['data'] = array(); $response['endpoint'] = path_concat($config['cgi_directory'], 'import_upload.php'); $response['data']['id'] = $id; $response['data']['type'] = $import['type']; $response['data']['extension'] = $import['extension']; $response['api']['id'] = $id; $response['api']['type'] = $import['type']; $response['api']['extension'] = $import['extension']; $response['api']['label'] = $import['label']; return $response; }
$err = 'Could not parse JSON payload'; } } } if (!$err) { if ($config['log_request']) { log_file(print_r($request, 1), $config); } $job = empty($request['job']) ? '' : $request['job']; if (!$job) { $err = 'Parameter job required'; } } if (!$err) { // get job progress $progress_file = path_concat($config['temporary_directory'], $job . '.json'); $json_str = file_get($progress_file); if (!$json_str) { // no progress file created yet $response['completed'] = 0.01; $response['status'] = 'Queued'; } else { if ($config['log_api_response']) { log_file($json_str, $config); } $json_object = @json_decode($json_str, TRUE); if (!is_array($json_object)) { $err = 'Could not parse response'; } if (!$err) { if (!empty($json_object['error'])) {
function file_write_temporary($path, $data, $config = array()) { $result = FALSE; if (!$config) { $config = config_get(); } if (!config_error($config)) { $result = file_put(path_concat($config['temporary_directory'], $path), $data, $config); } return $result; }
function __s3_key($id, $import, $config, $prefix = 's3') { $bucket = $config[$prefix . '_bucket']; $key = path_strip_slash_start($config['user_media_directory']); // remove bucket name from url if it's there if (substr($key, 0, strlen($bucket)) == $bucket) { $key = substr($key, strlen(path_add_slash_end($bucket))); } $key = path_concat(path_concat(path_concat($key, $import['uid']), $id), $config['import_original_basename'] . '.' . $import['extension']); return $key; }