| File inc/repo.inc.php changed (mode: 100644) (index 187a479..bd16481) |
| ... |
... |
function rg_repo_fetch_push_helper($db, $host, $ip, $login_ui, $prefix, $user, |
| 2415 |
2415 |
. ' repo=' . $repo . ' cmd=' . $cmd |
. ' repo=' . $repo . ' cmd=' . $cmd |
| 2416 |
2416 |
. ' need_namespace_copy=' . ($need_namespace_copy ? 'yes' : 'no')); |
. ' need_namespace_copy=' . ($need_namespace_copy ? 'yes' : 'no')); |
| 2417 |
2417 |
|
|
| 2418 |
|
$ret = array('ok' => 0, 'allow' => 1, 'push_allowed' => 1); |
|
|
2418 |
|
$ret = array('ok' => 0, 'allow' => 0, 'push_allowed' => 0); |
| 2419 |
2419 |
while (1) { |
while (1) { |
| 2420 |
2420 |
// Extracts command and computes permissions |
// Extracts command and computes permissions |
| 2421 |
2421 |
if (strncasecmp($cmd, 'git-upload-pack', 15) == 0) { |
if (strncasecmp($cmd, 'git-upload-pack', 15) == 0) { |
| |
| ... |
... |
function rg_repo_fetch_push_helper($db, $host, $ip, $login_ui, $prefix, $user, |
| 2448 |
2448 |
break; |
break; |
| 2449 |
2449 |
} |
} |
| 2450 |
2450 |
|
|
|
2451 |
|
// TODO: What if the user is deleted? |
|
2452 |
|
|
| 2451 |
2453 |
// Loading info about the repository |
// Loading info about the repository |
| 2452 |
2454 |
if (rg_repo_ok($repo) !== TRUE) { |
if (rg_repo_ok($repo) !== TRUE) { |
| 2453 |
2455 |
$ret['error'] = 'Repository is invalid (' |
$ret['error'] = 'Repository is invalid (' |
| |
| ... |
... |
function rg_repo_fetch_push_helper($db, $host, $ip, $login_ui, $prefix, $user, |
| 2488 |
2490 |
$repo_path = rg_repo_path_by_id($ret['owner_ui']['uid'], |
$repo_path = rg_repo_path_by_id($ret['owner_ui']['uid'], |
| 2489 |
2491 |
$ret['ri']['repo_id']); |
$ret['ri']['repo_id']); |
| 2490 |
2492 |
$ret['repo_path'] = $repo_path; |
$ret['repo_path'] = $repo_path; |
| 2491 |
|
rg_log('DEBUG: repo_path=' . $repo_path); |
|
| 2492 |
2493 |
|
|
| 2493 |
2494 |
// TODO: signal user that the repo moved and provide a hint how to follow |
// TODO: signal user that the repo moved and provide a hint how to follow |
| 2494 |
2495 |
|
|
|
2496 |
|
$ret['ok'] = 1; |
|
2497 |
|
|
| 2495 |
2498 |
$x = array(); |
$x = array(); |
| 2496 |
2499 |
$x['obj_id'] = $ret['ri']['repo_id']; |
$x['obj_id'] = $ret['ri']['repo_id']; |
| 2497 |
2500 |
$x['type'] = 'repo_refs'; |
$x['type'] = 'repo_refs'; |
| |
| ... |
... |
function rg_repo_fetch_push_helper($db, $host, $ip, $login_ui, $prefix, $user, |
| 2502 |
2505 |
$x['ip'] = $ip; |
$x['ip'] = $ip; |
| 2503 |
2506 |
$x['misc'] = ''; |
$x['misc'] = ''; |
| 2504 |
2507 |
$r = rg_rights_allow($db, $x); |
$r = rg_rights_allow($db, $x); |
|
2508 |
|
// TODO: what if an error occured? How we signal this?! |
| 2505 |
2509 |
if ($r !== TRUE) { |
if ($r !== TRUE) { |
| 2506 |
2510 |
$ret['error'] = 'You have no rights to access this repo'; |
$ret['error'] = 'You have no rights to access this repo'; |
| 2507 |
|
$ret['allow'] = 0; |
|
| 2508 |
2511 |
break; |
break; |
| 2509 |
2512 |
} |
} |
| 2510 |
2513 |
|
|
| |
| ... |
... |
function rg_repo_fetch_push_helper($db, $host, $ip, $login_ui, $prefix, $user, |
| 2512 |
2515 |
// give the user a chance to authenticate. |
// give the user a chance to authenticate. |
| 2513 |
2516 |
// TODO: change rg_rights_allow to return what rights are |
// TODO: change rg_rights_allow to return what rights are |
| 2514 |
2517 |
// allowed and use it. |
// allowed and use it. |
| 2515 |
|
$x['needed_rights'] = 'P'; |
|
| 2516 |
|
$r = rg_rights_allow($db, $x); |
|
| 2517 |
|
if ($r !== TRUE) |
|
| 2518 |
|
$ret['push_allowed'] = 0; |
|
|
2518 |
|
if ($push == 1) { |
|
2519 |
|
$x['needed_rights'] = 'P'; |
|
2520 |
|
$r = rg_rights_allow($db, $x); |
|
2521 |
|
if ($r === TRUE) |
|
2522 |
|
$ret['push_allowed'] = 1; |
|
2523 |
|
} |
| 2519 |
2524 |
|
|
| 2520 |
2525 |
// If we are enrolled, ask for login token |
// If we are enrolled, ask for login token |
| 2521 |
2526 |
// For push we always ask for it, for fetch only if repo is |
// For push we always ask for it, for fetch only if repo is |
| |
| ... |
... |
function rg_repo_fetch_push_helper($db, $host, $ip, $login_ui, $prefix, $user, |
| 2526 |
2531 |
if (($ret['ri']['public'] == 0) || ($push == 1)) { |
if (($ret['ri']['public'] == 0) || ($push == 1)) { |
| 2527 |
2532 |
$r = rg_totp_verify_ip($db, $login_ui['uid'], |
$r = rg_totp_verify_ip($db, $login_ui['uid'], |
| 2528 |
2533 |
$ip); |
$ip); |
| 2529 |
|
if (($r['ok'] == 0) && (empty($r['list']))) { |
|
|
2534 |
|
if (($r['ok'] !== 1) |
|
2535 |
|
|| ($r['enrolled'] && empty($r['ip_list']))) { |
| 2530 |
2536 |
$ret['error'] = rg_totp_error(); |
$ret['error'] = rg_totp_error(); |
|
2537 |
|
$ret['ok'] = 0; |
| 2531 |
2538 |
break; |
break; |
| 2532 |
2539 |
} |
} |
| 2533 |
2540 |
} |
} |
| |
| ... |
... |
function rg_repo_fetch_push_helper($db, $host, $ip, $login_ui, $prefix, $user, |
| 2551 |
2558 |
break; |
break; |
| 2552 |
2559 |
} |
} |
| 2553 |
2560 |
|
|
|
2561 |
|
// We are allowed at this point |
|
2562 |
|
$ret['allow'] = 1; |
|
2563 |
|
|
| 2554 |
2564 |
// Put in environment all we need |
// Put in environment all we need |
| 2555 |
2565 |
putenv('ROCKETGIT_LOGIN_UID=' . $login_ui['uid']); |
putenv('ROCKETGIT_LOGIN_UID=' . $login_ui['uid']); |
| 2556 |
2566 |
putenv('ROCKETGIT_LOGIN_URL=' . rg_re_userpage($login_ui)); |
putenv('ROCKETGIT_LOGIN_URL=' . rg_re_userpage($login_ui)); |
| File inc/ssh.inc.php changed (mode: 100644) (index f5c2f6d..6c072f4) |
| ... |
... |
function rg_ssh_totp_verify_ip($db, $uid, $ip) |
| 124 |
124 |
$ret = FALSE; |
$ret = FALSE; |
| 125 |
125 |
while (1) { |
while (1) { |
| 126 |
126 |
$r = rg_totp_verify_ip($db, $uid, $ip); |
$r = rg_totp_verify_ip($db, $uid, $ip); |
| 127 |
|
if (($r['ok'] == 0) || (empty($r['ip_list']))) { |
|
|
127 |
|
if ($r['ok'] !== 1) { |
| 128 |
128 |
echo 'Error: ' . rg_totp_error() . ".\n"; |
echo 'Error: ' . rg_totp_error() . ".\n"; |
| 129 |
129 |
break; |
break; |
| 130 |
130 |
} |
} |
|
131 |
|
|
| 131 |
132 |
if ($r['enrolled'] == 0) { |
if ($r['enrolled'] == 0) { |
| 132 |
133 |
echo 'Info: You are not enrolled.' . "\n"; |
echo 'Info: You are not enrolled.' . "\n"; |
| 133 |
134 |
break; |
break; |
| 134 |
135 |
} |
} |
| 135 |
136 |
|
|
|
137 |
|
if (empty($r['ip_list'])) { |
|
138 |
|
echo 'Error: ' . rg_totp_error() . ".\n"; |
|
139 |
|
break; |
|
140 |
|
} |
|
141 |
|
|
| 136 |
142 |
$ret = $r['ip_list']; |
$ret = $r['ip_list']; |
| 137 |
143 |
break; |
break; |
| 138 |
144 |
} |
} |
| |
| ... |
... |
function rg_ssh_dispatch($db, $ip, $uid, $orig_cmd) |
| 374 |
380 |
case 'totp': break; // totp will verify the ip only for some commands |
case 'totp': break; // totp will verify the ip only for some commands |
| 375 |
381 |
default: |
default: |
| 376 |
382 |
$r = rg_totp_verify_ip($db, $uid, $ip); |
$r = rg_totp_verify_ip($db, $uid, $ip); |
| 377 |
|
if (($r['ok'] == 0) |
|
| 378 |
|
|| (($r['enrolled'] == 1) && (empty($r['ip_list'])))) { |
|
|
383 |
|
if (($r['ok'] !== 1) |
|
384 |
|
|| ($r['enrolled'] && empty($r['ip_list']))) { |
| 379 |
385 |
echo 'Error: ' . rg_totp_error() . ".\n"; |
echo 'Error: ' . rg_totp_error() . ".\n"; |
| 380 |
386 |
return TRUE; // = we must exit' |
return TRUE; // = we must exit' |
| 381 |
387 |
} |
} |
| File inc/util.inc.php changed (mode: 100644) (index d6c838b..e367f6f) |
| ... |
... |
function rg_ok($msg) |
| 987 |
987 |
* Execute $cmd and returns the output as a string, binary safe |
* Execute $cmd and returns the output as a string, binary safe |
| 988 |
988 |
* @input: some data to be sent to the process and received as stdin |
* @input: some data to be sent to the process and received as stdin |
| 989 |
989 |
* @cb_stdout - call back called when there is something to be send to stdout |
* @cb_stdout - call back called when there is something to be send to stdout |
| 990 |
|
* if @cb_stdout is FALSE, stdout output will be returned in $ret |
|
|
990 |
|
* if @cb_stdout is FALSE, stdout output will be returned in $ret['data'] |
| 991 |
991 |
* cb_stderr - call back called when there is something to be send to stderr |
* cb_stderr - call back called when there is something to be send to stderr |
| 992 |
|
* if @cb_stderr is FALSE, stderr output will be returned in $ret |
|
|
992 |
|
* if @cb_stderr is FALSE, stderr output will be returned in $ret['stderr'] |
| 993 |
993 |
*/ |
*/ |
| 994 |
994 |
function rg_exec($cmd, $input, $cb_stdout, $cb_stderr) |
function rg_exec($cmd, $input, $cb_stdout, $cb_stderr) |
| 995 |
995 |
{ |
{ |
| File tests/Makefile changed (mode: 100644) (index d5762e9..6dfa24a) |
| 1 |
|
tests := wh_lambda http_keys http_forgot \ |
|
| 2 |
|
api wh_cloud pr_anon wh_http ssh http_totp totp git_log1.sh \ |
|
| 3 |
|
http_admin http_bug \ |
|
| 4 |
|
http_create_account http_login http_settings http_csrf http_top \ |
|
| 5 |
|
token util log state cache prof db event rights keys user repo git \ |
|
| 6 |
|
bug hook_update git2 |
|
| 7 |
|
.PHONY: $(tests) |
|
| 8 |
|
|
|
| 9 |
|
all: clean $(tests) |
|
|
1 |
|
all: clean run |
| 10 |
2 |
@echo "All OK. Good work!" |
@echo "All OK. Good work!" |
| 11 |
3 |
@-ls -l err-* |
@-ls -l err-* |
|
4 |
|
@-ls -l /var/log/rocketgit/err-* |
| 12 |
5 |
@echo "Do not forget to check for errors in /var/log/rocketgit!" |
@echo "Do not forget to check for errors in /var/log/rocketgit!" |
| 13 |
6 |
|
|
| 14 |
|
wh_lambda: |
|
| 15 |
|
php wh_lambda.php |
|
| 16 |
|
|
|
| 17 |
|
http_keys: |
|
| 18 |
|
php http_keys.php |
|
| 19 |
|
|
|
| 20 |
|
http_forgot: |
|
| 21 |
|
php http_forgot.php |
|
| 22 |
|
|
|
| 23 |
|
api: |
|
| 24 |
|
./api.sh |
|
| 25 |
|
|
|
| 26 |
|
wh_cloud: |
|
| 27 |
|
php wh_cloud.php |
|
| 28 |
|
|
|
| 29 |
|
pr_anon: |
|
| 30 |
|
php pr_anon.php |
|
| 31 |
|
|
|
| 32 |
|
wh_http: |
|
| 33 |
|
php wh_http.php |
|
| 34 |
|
|
|
| 35 |
|
ssh: |
|
| 36 |
|
php ssh.php |
|
| 37 |
|
|
|
| 38 |
|
http_totp: |
|
| 39 |
|
php http_totp.php |
|
| 40 |
|
|
|
| 41 |
|
totp: |
|
| 42 |
|
php totp.php |
|
| 43 |
|
|
|
| 44 |
|
git_log1.sh: |
|
| 45 |
|
./git_log1.sh |
|
| 46 |
|
|
|
| 47 |
|
token: |
|
| 48 |
|
php token.php |
|
| 49 |
|
|
|
| 50 |
|
util: |
|
| 51 |
|
php util.php |
|
| 52 |
|
|
|
| 53 |
|
sql: |
|
| 54 |
|
php sql.php |
|
| 55 |
|
|
|
| 56 |
|
keys: |
|
| 57 |
|
php keys.php |
|
| 58 |
|
|
|
| 59 |
|
repo: |
|
| 60 |
|
php repo.php |
|
| 61 |
|
|
|
| 62 |
|
rights: |
|
| 63 |
|
php rights.php |
|
| 64 |
|
|
|
| 65 |
|
state: |
|
| 66 |
|
php state.php |
|
| 67 |
|
|
|
| 68 |
|
user: |
|
| 69 |
|
php user.php |
|
| 70 |
|
|
|
| 71 |
|
git: |
|
| 72 |
|
php git.php |
|
| 73 |
|
|
|
| 74 |
|
prof: |
|
| 75 |
|
php prof.php |
|
| 76 |
|
|
|
| 77 |
|
bug: |
|
| 78 |
|
php bug.php |
|
| 79 |
|
|
|
| 80 |
|
log: |
|
| 81 |
|
php log.php |
|
| 82 |
|
|
|
| 83 |
|
event: |
|
| 84 |
|
php event.php |
|
| 85 |
|
|
|
| 86 |
|
cache: |
|
| 87 |
|
php cache.php |
|
| 88 |
|
|
|
| 89 |
|
hook_update: |
|
| 90 |
|
./hook_update.sh |
|
| 91 |
|
|
|
| 92 |
|
http_create_account: |
|
| 93 |
|
php http_create_account.php |
|
| 94 |
|
|
|
| 95 |
|
http_login: |
|
| 96 |
|
php http_login.php |
|
| 97 |
|
|
|
| 98 |
|
http_settings: |
|
| 99 |
|
php http_settings.php |
|
| 100 |
|
|
|
| 101 |
|
http_csrf: |
|
| 102 |
|
php http_csrf.php |
|
| 103 |
|
|
|
| 104 |
|
http_bug: |
|
| 105 |
|
php http_bug.php |
|
| 106 |
|
|
|
| 107 |
|
http_admin: |
|
| 108 |
|
php http_admin.php |
|
| 109 |
|
|
|
| 110 |
|
http_top: |
|
| 111 |
|
php http_top.php |
|
| 112 |
|
|
|
| 113 |
|
git2: |
|
| 114 |
|
php git2.php |
|
|
7 |
|
.PHONY: run |
|
8 |
|
run: |
|
9 |
|
@./_run_tests.sh |
| 115 |
10 |
|
|
| 116 |
11 |
.PHONY: clean |
.PHONY: clean |
| 117 |
12 |
clean: |
clean: |
| 118 |
13 |
@rm -rf git_log1 *.log *.strace *.strace.* *.out *.lock err-* *.diff \ |
@rm -rf git_log1 *.log *.strace *.strace.* *.out *.lock err-* *.diff \ |
| 119 |
14 |
http.arond *.pub git2key git2 *.in q_merge_requests/mr-* \ |
http.arond *.pub git2key git2 *.in q_merge_requests/mr-* \ |
| 120 |
15 |
qstats/* repos/* helper helper.pub keys/* ca *.pid \ |
qstats/* repos/* helper helper.pub keys/* ca *.pid \ |
| 121 |
|
_pr_anon.git *.tmp base ubase wh_cloud.git export.json |
|
|
16 |
|
_pr_anon.git *.tmp base ubase wh_cloud.git export.json \ |
|
17 |
|
.by_http |
| File tests/by_http.php added (mode: 100644) (index 0000000..b8162a6) |
|
1 |
|
<?php |
|
2 |
|
error_reporting(E_ALL | E_STRICT); |
|
3 |
|
ini_set("track_errors", "On"); |
|
4 |
|
|
|
5 |
|
$INC = dirname(__FILE__) . "/../inc"; |
|
6 |
|
require_once(dirname(__FILE__) . "/config.php"); |
|
7 |
|
require_once($INC . "/init.inc.php"); |
|
8 |
|
require_once($INC . "/git.inc.php"); |
|
9 |
|
require_once("helpers.inc.php"); |
|
10 |
|
require_once("http.inc.php"); |
|
11 |
|
|
|
12 |
|
rg_log_set_file("by_http.log"); |
|
13 |
|
|
|
14 |
|
$rg_sql = "host=localhost user=rocketgit dbname=rocketgit connect_timeout=10"; |
|
15 |
|
$rg_no_db = TRUE; |
|
16 |
|
require_once("common.php"); |
|
17 |
|
|
|
18 |
|
$_testns = 'by_http'; |
|
19 |
|
$rg_cache_enable = TRUE; |
|
20 |
|
|
|
21 |
|
|
|
22 |
|
rg_test_create_user($db, $rg_ui); |
|
23 |
|
rg_log('Created user ' . $rg_ui['uid']); |
|
24 |
|
|
|
25 |
|
putenv('git_username=' . $rg_ui['username']); |
|
26 |
|
putenv('git_password=' . $rg_ui['pass']); |
|
27 |
|
|
|
28 |
|
rg_test_create_repo($db, $rg_ui, $repo); |
|
29 |
|
rg_log('Created repo ' . $repo['repo_id']); |
|
30 |
|
$repo2 = array('public' => 0); |
|
31 |
|
rg_test_create_repo($db, $rg_ui, $repo2); |
|
32 |
|
rg_log('Created repo2 ' . $repo2['repo_id']); |
|
33 |
|
$r = test_login($test_url, $rg_ui, $good_sid); |
|
34 |
|
if ($r === FALSE) { |
|
35 |
|
rg_log("Cannot login!"); |
|
36 |
|
exit(1); |
|
37 |
|
} |
|
38 |
|
|
|
39 |
|
|
|
40 |
|
$commit_body = rg_id(32); |
|
41 |
|
$a = rg_exec('rm -rf .by_http' |
|
42 |
|
. ' && mkdir .by_http' |
|
43 |
|
. ' && cd .by_http' |
|
44 |
|
. ' && git init' |
|
45 |
|
. ' && git remote add origin ' . escapeshellarg($repo['clone_url_http']) |
|
46 |
|
. ' && git remote add origin2 ' . escapeshellarg($repo2['clone_url_http']) |
|
47 |
|
. ' && echo "a signature" > a' |
|
48 |
|
. ' && git add a' |
|
49 |
|
. ' && git commit -a -m "' . $commit_body . '"', '', FALSE, FALSE); |
|
50 |
|
if ($a['ok'] != 1) { |
|
51 |
|
rg_log("Something wrong generating the git repo: " . $a['stderr']); |
|
52 |
|
exit(1); |
|
53 |
|
} |
|
54 |
|
|
|
55 |
|
|
|
56 |
|
rg_log(''); |
|
57 |
|
rg_log_enter('Trying to push master (without user/pass)...'); |
|
58 |
|
putenv('GIT_ASKPASS=/bin/true'); |
|
59 |
|
$r = rg_exec('cd .by_http && git push origin master', '', FALSE, FALSE); |
|
60 |
|
if ($r['ok'] != 1) { |
|
61 |
|
rg_log_ml('out: ' . print_r($r, TRUE)); |
|
62 |
|
rg_log('Seems I cannot push master without authentication (anonymous push)!'); |
|
63 |
|
exit(1); |
|
64 |
|
} |
|
65 |
|
if (!strstr($r['stderr'], 'transformed into a pull request')) { |
|
66 |
|
rg_log_ml('out: ' . print_r($r, TRUE)); |
|
67 |
|
rg_log('The stderr does not contain something about anonymous push!'); |
|
68 |
|
exit(1); |
|
69 |
|
} |
|
70 |
|
rg_log_exit(); |
|
71 |
|
|
|
72 |
|
|
|
73 |
|
rg_log(''); |
|
74 |
|
rg_log_enter('Trying to push master (with user/pass)...'); |
|
75 |
|
putenv('GIT_ASKPASS=' . dirname(__FILE__) . '/ask_pass'); |
|
76 |
|
$r = rg_exec('cd .by_http && strace -s2000 -f -tt -o x.strace git push --verbose origin master', '', FALSE, FALSE); |
|
77 |
|
if ($r['ok'] != 1) { |
|
78 |
|
rg_log_ml('out: ' . print_r($r, TRUE)); |
|
79 |
|
rg_log('Seems I can push master with authentication!'); |
|
80 |
|
exit(1); |
|
81 |
|
} |
|
82 |
|
rg_log_exit(); |
|
83 |
|
|
|
84 |
|
|
|
85 |
|
rg_log(''); |
|
86 |
|
rg_log_enter('Trying to push master (without user/pass; private repo)...'); |
|
87 |
|
putenv('GIT_ASKPASS=/bin/true'); |
|
88 |
|
$r = rg_exec('cd .by_http && git push origin2 master', '', FALSE, FALSE); |
|
89 |
|
if ($r['ok'] == 1) { |
|
90 |
|
rg_log_ml('out: ' . print_r($r, TRUE)); |
|
91 |
|
rg_log('Seems I can push master without authentication (anonymous push)!'); |
|
92 |
|
exit(1); |
|
93 |
|
} |
|
94 |
|
if (!strstr($r['stderr'], 'Authentication failed')) { |
|
95 |
|
rg_log_ml('out: ' . print_r($r, TRUE)); |
|
96 |
|
rg_log('The error is not authentication failure!'); |
|
97 |
|
exit(1); |
|
98 |
|
} |
|
99 |
|
rg_log_exit(); |
|
100 |
|
|
|
101 |
|
|
|
102 |
|
rg_log(''); |
|
103 |
|
rg_log_enter('Trying to push master (with user/pass; private repo)...'); |
|
104 |
|
putenv('GIT_ASKPASS=' . dirname(__FILE__) . '/ask_pass'); |
|
105 |
|
$r = rg_exec('cd .by_http && strace -s2000 -f -tt -o x2.strace git push --verbose origin2 master', '', FALSE, FALSE); |
|
106 |
|
if ($r['ok'] != 1) { |
|
107 |
|
rg_log_ml('out: ' . print_r($r, TRUE)); |
|
108 |
|
rg_log('Seems I can push master with authentication!'); |
|
109 |
|
exit(1); |
|
110 |
|
} |
|
111 |
|
rg_log_exit(); |
|
112 |
|
|
|
113 |
|
|
|
114 |
|
rg_log(''); |
|
115 |
|
$commit = trim(file_get_contents('.by_http/.git/refs/heads/master')); |
|
116 |
|
rg_log('master from .git: ' . $commit); |
|
117 |
|
rg_log_enter('Checking on web that everything is OK...'); |
|
118 |
|
$data = array(); |
|
119 |
|
$headers = array("Cookie: sid=" . $good_sid); |
|
120 |
|
$r = do_req($test_url . '/user/' . rawurlencode($rg_ui['username']) |
|
121 |
|
. '/' . rawurlencode($repo['name']) . '/source/log/commit/' |
|
122 |
|
. $commit, $data, $headers); |
|
123 |
|
if ($r === FALSE) { |
|
124 |
|
rg_log('Cannot load master commit!'); |
|
125 |
|
exit(1); |
|
126 |
|
} |
|
127 |
|
if (!strstr($r['body'], $commit_body)) { |
|
128 |
|
rg_log_ml('r: ' . print_r($r, TRUE)); |
|
129 |
|
rg_log('I cannot find [' . $commit_body . '] inside the body!'); |
|
130 |
|
exit(1); |
|
131 |
|
} |
|
132 |
|
rg_log_exit(); |
|
133 |
|
|
|
134 |
|
|
|
135 |
|
rg_log('OK!'); |
|
136 |
|
?> |
| File tests/helpers.inc.php changed (mode: 100644) (index 25e9608..9254495) |
| ... |
... |
function rg_test_create_user($db, &$rg_ui) |
| 17 |
17 |
if (!is_array($rg_ui)) |
if (!is_array($rg_ui)) |
| 18 |
18 |
$rg_ui = array(); |
$rg_ui = array(); |
| 19 |
19 |
|
|
| 20 |
|
$username = $_testns . '-user-' . $_user_id . '<xss>'; |
|
|
20 |
|
$username = $_testns . '-user-' . $_user_id . '<xss>e'; |
| 21 |
21 |
|
|
| 22 |
22 |
$new = array(); |
$new = array(); |
| 23 |
23 |
$new['uid'] = 0; |
$new['uid'] = 0; |
| |
| ... |
... |
function rg_test_create_user($db, &$rg_ui) |
| 31 |
31 |
$new['confirm_token'] = ''; |
$new['confirm_token'] = ''; |
| 32 |
32 |
$new['confirmed'] = 0; |
$new['confirmed'] = 0; |
| 33 |
33 |
$new['plan_id'] = 0; |
$new['plan_id'] = 0; |
| 34 |
|
$new['pass'] = 'pass-' . $_user_id; |
|
| 35 |
|
$new['pass2'] = 'pass-' . $_user_id; |
|
|
34 |
|
$new['pass'] = 'pass-' . $_user_id . ':'; |
|
35 |
|
$new['pass2'] = 'pass-' . $_user_id . ':'; |
| 36 |
36 |
$new['disk_used_mb'] = 0; |
$new['disk_used_mb'] = 0; |
| 37 |
37 |
$new['last_ip'] = '?'; |
$new['last_ip'] = '?'; |
| 38 |
38 |
$new['ask_for_email_confirmation'] = 0; |
$new['ask_for_email_confirmation'] = 0; |
| 39 |
39 |
$_user_id++; |
$_user_id++; |
| 40 |
40 |
|
|
| 41 |
41 |
// Delete old user |
// Delete old user |
| 42 |
|
$sql = 'DELETE FROM users WHERE username = \'' . $new['username'] . '\''; |
|
| 43 |
|
$res = rg_sql_query($db, $sql); |
|
|
42 |
|
$sql = 'DELETE FROM users WHERE username = @@username@@'; |
|
43 |
|
$res = rg_sql_query_params($db, $sql, $new); |
| 44 |
44 |
if ($res === FALSE) { |
if ($res === FALSE) { |
| 45 |
45 |
rg_log("Cannot delete old user: " . rg_sql_error()); |
rg_log("Cannot delete old user: " . rg_sql_error()); |
| 46 |
46 |
exit(1); |
exit(1); |
| |
| ... |
... |
function rg_test_create_repo($db, $rg_ui, &$extra) |
| 135 |
135 |
|
|
| 136 |
136 |
rg_log("Deleting repo " . $repo_id . "/" . $new['name']); |
rg_log("Deleting repo " . $repo_id . "/" . $new['name']); |
| 137 |
137 |
$sql = 'DELETE FROM repos WHERE repo_id = ' . $repo_id |
$sql = 'DELETE FROM repos WHERE repo_id = ' . $repo_id |
| 138 |
|
. ' OR name = \'' . $new['name'] . '\''; |
|
| 139 |
|
$res = rg_sql_query($db, $sql); |
|
|
138 |
|
. ' OR name = @@name@@'; |
|
139 |
|
$res = rg_sql_query_params($db, $sql, $new); |
| 140 |
140 |
if ($res === FALSE) { |
if ($res === FALSE) { |
| 141 |
141 |
rg_log("Cannot delete old repo: " . rg_sql_error()); |
rg_log("Cannot delete old repo: " . rg_sql_error()); |
| 142 |
142 |
exit(1); |
exit(1); |
| |
| ... |
... |
function rg_test_create_repo($db, $rg_ui, &$extra) |
| 151 |
151 |
rg_log("Cannot insert a repo (" . rg_repo_error() . ")!"); |
rg_log("Cannot insert a repo (" . rg_repo_error() . ")!"); |
| 152 |
152 |
exit(1); |
exit(1); |
| 153 |
153 |
} |
} |
|
154 |
|
rg_repo_cosmetic($db, $extra); |
| 154 |
155 |
|
|
| 155 |
156 |
if ($repo_id > 0) { |
if ($repo_id > 0) { |
| 156 |
157 |
$sql = "UPDATE repos SET repo_id = $repo_id" |
$sql = "UPDATE repos SET repo_id = $repo_id" |
| |
| ... |
... |
function rg_test_create_repo($db, $rg_ui, &$extra) |
| 158 |
159 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
| 159 |
160 |
rg_sql_free_result($res); |
rg_sql_free_result($res); |
| 160 |
161 |
$new['repo_id'] = $repo_id; |
$new['repo_id'] = $repo_id; |
|
162 |
|
// TODO: this is strange |
| 161 |
163 |
rg_cache_unset('repo_by_name::' . $rg_ui['uid'], |
rg_cache_unset('repo_by_name::' . $rg_ui['uid'], |
| 162 |
164 |
RG_SOCKET_NO_WAIT); |
RG_SOCKET_NO_WAIT); |
| 163 |
165 |
} |
} |
| File tests/token.php changed (mode: 100644) (index 07bae60..1405f79) |
| ... |
... |
if ($r === FALSE) { |
| 30 |
30 |
} |
} |
| 31 |
31 |
|
|
| 32 |
32 |
|
|
| 33 |
|
rg_log("Now, test pre-login sessions..."); |
|
|
33 |
|
rg_log_enter("Now, test pre-login sessions..."); |
| 34 |
34 |
$rg_token = FALSE; /* we must remove it from memory */ |
$rg_token = FALSE; /* we must remove it from memory */ |
| 35 |
35 |
$a = array("ua" => "user-agent1", "sid" => "Xsession2", 'debug' => 1); |
$a = array("ua" => "user-agent1", "sid" => "Xsession2", 'debug' => 1); |
| 36 |
36 |
$token = rg_token_get($db, $a, 'tag2'); |
$token = rg_token_get($db, $a, 'tag2'); |
| |
| ... |
... |
if ($r === FALSE) { |
| 54 |
54 |
rg_log("Validating a correct token must work (" . rg_token_error() . ")!"); |
rg_log("Validating a correct token must work (" . rg_token_error() . ")!"); |
| 55 |
55 |
exit(1); |
exit(1); |
| 56 |
56 |
} |
} |
|
57 |
|
rg_log_exit(); |
| 57 |
58 |
|
|
| 58 |
59 |
|
|
| 59 |
|
rg_log("Testing double posting..."); |
|
|
60 |
|
rg_log_enter('Testing double posting...'); |
| 60 |
61 |
$rg_token = FALSE; /* we must remove it from memory */ |
$rg_token = FALSE; /* we must remove it from memory */ |
| 61 |
62 |
$a = array("ua" => "user-agent3", |
$a = array("ua" => "user-agent3", |
| 62 |
63 |
"sid" => "session_double", |
"sid" => "session_double", |
| |
| ... |
... |
if ($r !== FALSE) { |
| 78 |
79 |
rg_log("Calling 'valid' second time must NOT work!"); |
rg_log("Calling 'valid' second time must NOT work!"); |
| 79 |
80 |
exit(1); |
exit(1); |
| 80 |
81 |
} |
} |
|
82 |
|
rg_log_exit(); |
| 81 |
83 |
|
|
| 82 |
84 |
rg_log("OK!"); |
rg_log("OK!"); |
| 83 |
85 |
?> |
?> |
| File tests/wh_lambda.php changed (mode: 100644) (index 6e515e6..b29a163) |
| ... |
... |
rg_log(''); |
| 96 |
96 |
rg_log_enter('Creating a repo and pushing it'); |
rg_log_enter('Creating a repo and pushing it'); |
| 97 |
97 |
$repo = array('name' => 'wh-cloud'); |
$repo = array('name' => 'wh-cloud'); |
| 98 |
98 |
rg_test_create_repo($db, $rg_ui, $repo); |
rg_test_create_repo($db, $rg_ui, $repo); |
|
99 |
|
// TODO: extract url from $repo |
| 99 |
100 |
$repo_url = 'ssh://rocketgit@' . $rg_ssh_host . ':' . $rg_ssh_port |
$repo_url = 'ssh://rocketgit@' . $rg_ssh_host . ':' . $rg_ssh_port |
| 100 |
101 |
. '/user/' . $rg_ui['username'] . '/' . $repo['name']; |
. '/user/' . $rg_ui['username'] . '/' . $repo['name']; |
| 101 |
|
rg_log('repo_url=' . escapeshellarg($repo_url)); |
|
|
102 |
|
rg_log('repo_url=' . $repo_url); |
| 102 |
103 |
$r = rg_exec('./wh_cloud.git.sh ' . escapeshellarg($repo_url), '', FALSE, FALSE); |
$r = rg_exec('./wh_cloud.git.sh ' . escapeshellarg($repo_url), '', FALSE, FALSE); |
| 103 |
104 |
if ($r['ok'] != 1) { |
if ($r['ok'] != 1) { |
| 104 |
|
rg_log('Could not create local git repo: ' . $r['errmsg'] . '!'); |
|
|
105 |
|
rg_log_ml('Could not create local git repo: ' . $r['errmsg'] . '!'); |
| 105 |
106 |
exit(1); |
exit(1); |
| 106 |
107 |
} |
} |
| 107 |
108 |
rg_log_exit(); |
rg_log_exit(); |