function main()
{
    $db = connect();
    $data = ensure_privileged_api_data_and_token_or_slave($db);
    $author = remote_user_name($data);
    $name = array_get($data, 'name');
    $start_run_id = array_get($data, 'startRun');
    $end_run_id = array_get($data, 'endRun');
    $segmentation_name = array_get($data, 'segmentationStrategy');
    $test_range_name = array_get($data, 'testRangeStrategy');
    if (!$name) {
        exit_with_error('MissingName', array('name' => $name));
    }
    $range = array('startRunId' => $start_run_id, 'endRunId' => $end_run_id);
    if (!$start_run_id || !$end_run_id) {
        exit_with_error('MissingRange', $range);
    }
    $start_run = ensure_row_by_id($db, 'test_runs', 'run', $start_run_id, 'InvalidStartRun', $range);
    $end_run = ensure_row_by_id($db, 'test_runs', 'run', $end_run_id, 'InvalidEndRun', $range);
    $config = ensure_config_from_runs($db, $start_run, $end_run);
    $start_run_time = time_for_run($db, $start_run_id);
    $end_run_time = time_for_run($db, $end_run_id);
    if (!$start_run_time || !$end_run_time) {
        exit_with_error('InvalidTimeRange', array('startTime' => $start_run_time, 'endTime' => $end_run_time));
    }
    $db->begin_transaction();
    $segmentation_id = NULL;
    if ($segmentation_name) {
        $segmentation_id = $db->select_or_insert_row('analysis_strategies', 'strategy', array('name' => $segmentation_name));
        if (!$segmentation_id) {
            $db->rollback_transaction();
            exit_with_error('CannotFindOrInsertSegmentationStrategy', array('segmentationStrategy' => $segmentation_name));
        }
    }
    $test_range_id = NULL;
    if ($test_range_name) {
        $test_range_id = $db->select_or_insert_row('analysis_strategies', 'strategy', array('name' => $test_range_name));
        if (!$test_range_id) {
            $db->rollback_transaction();
            exit_with_error('CannotFindOrInsertTestRangeStrategy', array('testRangeStrategy' => $test_range_name));
        }
    }
    $duplicate = $db->select_first_row('analysis_tasks', 'task', array('start_run' => $start_run_id, 'end_run' => $end_run_id));
    if ($duplicate) {
        $db->rollback_transaction();
        exit_with_error('DuplicateAnalysisTask', array('duplicate' => $duplicate));
    }
    $task_id = $db->insert_row('analysis_tasks', 'task', array('name' => $name, 'author' => $author, 'platform' => $config['config_platform'], 'metric' => $config['config_metric'], 'start_run' => $start_run_id, 'start_run_time' => $start_run_time, 'end_run' => $end_run_id, 'end_run_time' => $end_run_time, 'segmentation' => $segmentation_id, 'test_range' => $test_range_id));
    $db->commit_transaction();
    exit_with_success(array('taskId' => $task_id));
}
Пример #2
0
function main()
{
    $db = connect();
    $data = ensure_privileged_api_data_and_token_or_slave($db);
    $author = remote_user_name($data);
    $task_id = array_get($data, 'task');
    $name = array_get($data, 'name');
    $root_sets = array_get($data, 'rootSets');
    $repetition_count = intval(array_get($data, 'repetitionCount', 1));
    if (!$name) {
        exit_with_error('MissingName');
    }
    if (!$root_sets) {
        exit_with_error('MissingRootSets');
    }
    if ($repetition_count < 1) {
        exit_with_error('InvalidRepetitionCount', array('repetitionCount' => $repetition_count));
    }
    $task = $db->select_first_row('analysis_tasks', 'task', array('id' => $task_id));
    if (!$task) {
        exit_with_error('InvalidTask', array('task' => $task_id));
    }
    $triggerable = find_triggerable_for_task($db, $task_id);
    if (!$triggerable) {
        exit_with_error('TriggerableNotFoundForTask', array('task' => $task_id));
    }
    $commit_sets = commit_sets_from_root_sets($db, $root_sets);
    $db->begin_transaction();
    $root_set_id_list = array();
    foreach ($commit_sets as $commit_list) {
        $root_set_id = $db->insert_row('root_sets', 'rootset', array());
        foreach ($commit_list as $commit) {
            $db->insert_row('roots', 'root', array('set' => $root_set_id, 'commit' => $commit), 'commit');
        }
        array_push($root_set_id_list, $root_set_id);
    }
    $group_id = $db->insert_row('analysis_test_groups', 'testgroup', array('task' => $task['task_id'], 'name' => $name, 'author' => $author));
    $order = 0;
    for ($i = 0; $i < $repetition_count; $i++) {
        foreach ($root_set_id_list as $root_set_id) {
            $db->insert_row('build_requests', 'request', array('triggerable' => $triggerable['id'], 'platform' => $triggerable['platform'], 'test' => $triggerable['test'], 'group' => $group_id, 'order' => $order, 'root_set' => $root_set_id));
            $order++;
        }
    }
    $db->commit_transaction();
    exit_with_success(array('testGroupId' => $group_id));
}
Пример #3
0
<?php

require_once '../include/json-header.php';
$data = ensure_privileged_api_data();
$expiritaion = time() + 3600;
// Valid for one hour.
$_COOKIE['CSRFSalt'] = rand();
$_COOKIE['CSRFExpiration'] = $expiritaion;
setcookie('CSRFSalt', $_COOKIE['CSRFSalt']);
setcookie('CSRFExpiration', $expiritaion);
exit_with_success(array('user' => remote_user_name($data), 'token' => compute_token(), 'expiration' => $expiritaion * 1000));
Пример #4
0
function compute_token()
{
    if (!array_key_exists('CSRFSalt', $_COOKIE) || !array_key_exists('CSRFExpiration', $_COOKIE)) {
        return NULL;
    }
    $user = remote_user_name(array());
    $salt = $_COOKIE['CSRFSalt'];
    $expiration = $_COOKIE['CSRFExpiration'];
    return hash('sha256', "{$salt}|{$user}|{$expiration}");
}