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;
 }
示例#3
0
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;
 }
示例#10
0
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;
 }
示例#13
0
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;
}