Esempio n. 1
0
/**
 * This file is a part of MyWebSQL package
 *
 * @file:      modules/importtbl.php
 * @author     Samnan ur Rehman
 * @copyright  (c) 2008-2012 Samnan ur Rehman
 * @web        http://mywebsql.net
 * @license    http://mywebsql.net/license
 */
function processRequest(&$db)
{
    $importDone = FALSE;
    $message = '';
    $refresh = '0';
    $max_upload_size = min(bytes_value(ini_get('post_max_size')), bytes_value(ini_get('upload_max_filesize'))) / 1024;
    $max_upload_size_text = $max_upload_size < 1024 ? $max_upload_size . 'KB' : $max_upload_size / 1024 . ' MB';
    if (isset($_FILES['impfile'])) {
        if (v($_FILES['impfile']['tmp_name']) != '' && file_exists($_FILES['impfile']['tmp_name'])) {
            //$module_id = create_module_id( 'import' );
            include BASE_PATH . "/lib/import/import.php";
            $type = 'csv';
            $imptype = v($_REQUEST['$imptype']);
            if (in_array($imptype, DataImport::types())) {
                $type = $imptype;
            }
            $importer = DataImport::factory($db, $type);
            $options = extract_vars($_REQUEST, $importer->options());
            $result = $importer->importTable($_FILES['impfile']['tmp_name'], $options);
            $failed = $importer->getFailedQueries();
            $affected = $importer->getRowsAffected();
            if (!$result || $affected > 0 || $failed > 0) {
                $message .= '<div class="message ui-state-default">[ ' . str_replace('{{NUM}}', $affected, __('{{NUM}} record(s) were affected')) . '. ]</div>';
                if ($failed > 0) {
                    $message_tmp = $failed > 1 ? str_replace('{{NUM}}', $failed, __('{{NUM}} queries failed to execute')) : __('Error occurred while executing the query');
                    $message .= '<div class="message ui-state-error">' . $message_tmp . '</div>';
                    if ($failed == 1) {
                        $message .= '<div class="message ui-state-error">' . htmlspecialchars($importer->getError()) . '</div>';
                        $message .= '<div class="sql-text ui-state-error">' . htmlspecialchars($importer->getLastQuery()) . '</div>';
                    }
                }
            } else {
                $message .= '<div class="message ui-state-default">' . __('No queries were executed during import') . '.</div>';
            }
        } else {
            $message .= '<div class="message ui-state-error">' . __('File upload failed. Please try again') . '.</div>';
        }
        $importDone = TRUE;
    }
    if (!$importDone) {
        $message = '<div class="message ui-state-default">' . str_replace('{{SIZE}}', $max_upload_size_text, __('Maximum upload filesize is {{SIZE}}'));
        $message .= '<br/>' . str_replace('{{LIST}}', valid_import_files(), __('Supported filetypes / extensions are: ({{LIST}})')) . '</div>';
    } else {
        $refresh = '1';
    }
    include BASE_PATH . '/lib/html.php';
    $tables = html::arrayToOptions($db->getTables(), '', true, '');
    $replace = array('MESSAGE' => $message, 'MAX_SIZE' => $max_upload_size, 'REFRESH' => $refresh, 'TABLE_LIST' => $tables);
    echo view('importtbl', $replace);
}
Esempio n. 2
0
    public function signaturesProvider()
    {
        function make_ruby_command($body, $secret, $algo)
        {
            $ruby = <<<'R'
BODY='#1' SECRET='#2' ALGO='#3' ruby -e "
require 'openssl'
body = ENV['BODY']
secret = ENV['SECRET']
digest = OpenSSL::Digest.new(ENV['ALGO'])
signature = ENV['ALGO'] + '=' + OpenSSL::HMAC.hexdigest(digest, secret, body)
puts 'body=' + body
puts 'secret=' + secret
puts 'signature=' + signature
"
R;
            $ruby = str_replace('#1', $body, $ruby);
            $ruby = str_replace('#2', $secret, $ruby);
            $ruby = str_replace('#3', $algo, $ruby);
            return $ruby;
        }
        function extract_vars($output)
        {
            $vars = array();
            foreach ($output as $line) {
                $line = explode('=', $line);
                $key = array_shift($line);
                $line = implode('=', $line);
                $vars[$key] = $line;
            }
            return $vars;
        }
        $test_values = array(array('body1', 'secret1', 'sha256'), array(json_encode(array('key' => 'value')), 'howdy!', 'sha256'), array(bin2hex(openssl_random_pseudo_bytes(128)), bin2hex(openssl_random_pseudo_bytes(32)), 'sha256'));
        foreach ($test_values as $k => $run) {
            $body = $run[0];
            $secret = $run[1];
            $algo = $run[2];
            $output = array();
            $cmd = make_ruby_command($body, $secret, $algo);
            exec($cmd, $output);
            $vars = extract_vars($output);
            $test_values[$k][2] = $vars['signature'];
        }
        return $test_values;
    }