File TODO changed (mode: 100644) (index 15b3ab0..a330e13) |
3 |
3 |
[ ] You cannot admin rights of a repository if is not yours. |
[ ] You cannot admin rights of a repository if is not yours. |
4 |
4 |
[ ] Check XSRF attacks and other types. |
[ ] Check XSRF attacks and other types. |
5 |
5 |
[ ] Edit repo (rights) does not work. |
[ ] Edit repo (rights) does not work. |
6 |
|
[ ] Shard by project name not by id! |
|
7 |
6 |
[ ] |
[ ] |
8 |
7 |
|
|
9 |
8 |
== Low priority == |
== Low priority == |
10 |
|
[ ] Make rights generic (both for repo, users etc.). |
|
11 |
9 |
[ ] We should make a repo dirty ony if user pushed something with success. |
[ ] We should make a repo dirty ony if user pushed something with success. |
12 |
10 |
[ ] <link rel="icon" type="image/png" id="favicon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACGFjVEwAAAASAAAAAJNtBPIAAAAaZmNUTAAAAAAAAAAQAAAAEAAAAAAAAAAALuAD6AABhIDeugAAALhJREFUOI2Nk8sNxCAMRDlGohauXFOMpfTiAlxICqAELltHLqlgctg1InzMRhpFAc%2BLGWTnmoeZYamt78zXdZmaQtQMADlnU0OIAlbmJUBEcO4bRKQY2rUXIPmAGnDuG%2FBx3%2FfvOPVaDUg%2BoAPUf1PArIMCSD5glMEsUGaG%2BkyAFWIBaCsKuA%2BHGCNijLgP133XgOEtaPFMy2vUolEGJoCIzBmoRUR9%2B7rxj16DZaW%2FmgtmxnJ8V3oAnApQwNS5zpcAAAAaZmNUTAAAAAEAAAAQAAAAEAAAAAAAAAAAAB4D6AIB52fclgAAACpmZEFUAAAAAjiNY2AYBVhBc3Pzf2LEcGreqcbwH1kDNjHauWAUjAJyAADymxf9WF%2Bu8QAAABpmY1RMAAAAAwAAABAAAAAQAAAAAAAAAAAAHgPoAgEK8Q9%2FAAAAFmZkQVQAAAAEOI1jYBgFo2AUjAIIAAAEEAAB0xIn4wAAABpmY1RMAAAABQAAABAAAAAQAAAAAAAAAAAAHgPoAgHnO30FAAAAQGZkQVQAAAAGOI1jYBieYKcaw39ixHCC%2F6cwFWMTw2rz%2F1MM%2F6Vu%2Ff%2F%2F%2FxTD%2F51qEIwuRjsXILuEGLFRMApgAADhNCsVfozYcAAAABpmY1RMAAAABwAAABAAAAAQAAAAAAAAAAAAHgPoAgEKra7sAAAAFmZkQVQAAAAIOI1jYBgFo2AUjAIIAAAEEAABM9s3hAAAABpmY1RMAAAACQAAABAAAAAQAAAAAAAAAAAAHgPoAgHn3p%2BwAAAAKmZkQVQAAAAKOI1jYBgFWEFzc%2FN%2FYsRwat6pxvAfWQM2Mdq5YBSMAnIAAPKbF%2F1BhPl6AAAAGmZjVEwAAAALAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAQpITFkAAAAWZmRBVAAAAAw4jWNrgAWjYBSMArgAAAQQAAHaszpmAAAAGmZjVEwAAAANAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAeeCPiMAAABAZmRBVAAAAA44jWNrgJ5gpxrDf2LEcIL%2FpzAVYxPDavP%2FUwz%2FpW79%2F%2F%2F%2FFMP%2FnWoQjC5GOxcgu4QYsVEwCmAAAOE0KxUmBL0KAAAAGmZjVEwAAAAPAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAQoU7coAAAAWZmRBVAAAABA4jWNrgAWjYBSMArgAAAQQAAEpOBELAAAAGmZjVEwAAAARAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAeYVWtoAAAAqZmRBVAAAABI4jWNrgAVYQXNz839ixHBq3qnG8B9ZAzYx2rlgFIwCcgAA8psX%2FWvpAecAAAAaZmNUTAAAABMAAAAQAAAAEAAAAAAAAAAAAB4D6AIBC4OJMwAAABZmZEFUAAAAFDiNY2AYBaNgFIwCCAAABBAAAcBQHOkAAAAaZmNUTAAAABUAAAAQAAAAEAAAAAAAAAAAAB4D6AIB5kn7SQAAAEBmZEFUAAAAFjiNY2AYnmCnGsN%2FYsRwgv%2BnMBVjE8Nq8%2F9TDP%2Blbv3%2F%2F%2F8Uw%2F%2BdahCMLkY7FyC7hBixUTAKYAAA4TQrFc%2BcEoQAAAAaZmNUTAAAABcAAAAQAAAAEAAAAAAAAAAAAB4D6AIBC98ooAAAABZmZEFUAAAAGDiNY2AYBaNgFIwCCAAABBAAASCZDI4AAAAaZmNUTAAAABkAAAAQAAAAEAAAAAAAAAAAAB4D6AIB5qwZ%2FAAAACpmZEFUAAAAGjiNY2AYBVhBc3Pzf2LEcGreqcbwH1kDNjHauWAUjAJyAADymxf9cjJWbAAAABpmY1RMAAAAGwAAABAAAAAQAAAAAAAAAAAAHgPoAgELOsoVAAAAFmZkQVQAAAAcOI1jYBgFo2AUjAIIAAAEEAAByfEBbAAAABpmY1RMAAAAHQAAABAAAAAQAAAAAAAAAAAAHgPoAgHm8LhvAAAAQGZkQVQAAAAeOI1jYBieYKcaw39ixHCC%2F6cwFWMTw2rz%2F1MM%2F6Vu%2Ff%2F%2F%2FxTD%2F51qEIwuRjsXILuEGLFRMApgAADhNCsVlxR3%2FgAAABpmY1RMAAAAHwAAABAAAAAQAAAAAAAAAAAAHgPoAgELZmuGAAAAFmZkQVQAAAAgOI1jYBgFo2AUjAIIAAAEEAABHP5cFQAAABpmY1RMAAAAIQAAABAAAAAQAAAAAAAAAAAAHgPoAgHlgtAOAAAAKmZkQVQAAAAiOI1jYBgFWEFzc%2FN%2FYsRwat6pxvAfWQM2Mdq5YBSMAnIAAPKbF%2F0%2FMvDdAAAAAElFTkSuQmCC"/> |
[ ] <link rel="icon" type="image/png" id="favicon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACGFjVEwAAAASAAAAAJNtBPIAAAAaZmNUTAAAAAAAAAAQAAAAEAAAAAAAAAAALuAD6AABhIDeugAAALhJREFUOI2Nk8sNxCAMRDlGohauXFOMpfTiAlxICqAELltHLqlgctg1InzMRhpFAc%2BLGWTnmoeZYamt78zXdZmaQtQMADlnU0OIAlbmJUBEcO4bRKQY2rUXIPmAGnDuG%2FBx3%2FfvOPVaDUg%2BoAPUf1PArIMCSD5glMEsUGaG%2BkyAFWIBaCsKuA%2BHGCNijLgP133XgOEtaPFMy2vUolEGJoCIzBmoRUR9%2B7rxj16DZaW%2FmgtmxnJ8V3oAnApQwNS5zpcAAAAaZmNUTAAAAAEAAAAQAAAAEAAAAAAAAAAAAB4D6AIB52fclgAAACpmZEFUAAAAAjiNY2AYBVhBc3Pzf2LEcGreqcbwH1kDNjHauWAUjAJyAADymxf9WF%2Bu8QAAABpmY1RMAAAAAwAAABAAAAAQAAAAAAAAAAAAHgPoAgEK8Q9%2FAAAAFmZkQVQAAAAEOI1jYBgFo2AUjAIIAAAEEAAB0xIn4wAAABpmY1RMAAAABQAAABAAAAAQAAAAAAAAAAAAHgPoAgHnO30FAAAAQGZkQVQAAAAGOI1jYBieYKcaw39ixHCC%2F6cwFWMTw2rz%2F1MM%2F6Vu%2Ff%2F%2F%2FxTD%2F51qEIwuRjsXILuEGLFRMApgAADhNCsVfozYcAAAABpmY1RMAAAABwAAABAAAAAQAAAAAAAAAAAAHgPoAgEKra7sAAAAFmZkQVQAAAAIOI1jYBgFo2AUjAIIAAAEEAABM9s3hAAAABpmY1RMAAAACQAAABAAAAAQAAAAAAAAAAAAHgPoAgHn3p%2BwAAAAKmZkQVQAAAAKOI1jYBgFWEFzc%2FN%2FYsRwat6pxvAfWQM2Mdq5YBSMAnIAAPKbF%2F1BhPl6AAAAGmZjVEwAAAALAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAQpITFkAAAAWZmRBVAAAAAw4jWNrgAWjYBSMArgAAAQQAAHaszpmAAAAGmZjVEwAAAANAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAeeCPiMAAABAZmRBVAAAAA44jWNrgJ5gpxrDf2LEcIL%2FpzAVYxPDavP%2FUwz%2FpW79%2F%2F%2F%2FFMP%2FnWoQjC5GOxcgu4QYsVEwCmAAAOE0KxUmBL0KAAAAGmZjVEwAAAAPAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAQoU7coAAAAWZmRBVAAAABA4jWNrgAWjYBSMArgAAAQQAAEpOBELAAAAGmZjVEwAAAARAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAeYVWtoAAAAqZmRBVAAAABI4jWNrgAVYQXNz839ixHBq3qnG8B9ZAzYx2rlgFIwCcgAA8psX%2FWvpAecAAAAaZmNUTAAAABMAAAAQAAAAEAAAAAAAAAAAAB4D6AIBC4OJMwAAABZmZEFUAAAAFDiNY2AYBaNgFIwCCAAABBAAAcBQHOkAAAAaZmNUTAAAABUAAAAQAAAAEAAAAAAAAAAAAB4D6AIB5kn7SQAAAEBmZEFUAAAAFjiNY2AYnmCnGsN%2FYsRwgv%2BnMBVjE8Nq8%2F9TDP%2Blbv3%2F%2F%2F8Uw%2F%2BdahCMLkY7FyC7hBixUTAKYAAA4TQrFc%2BcEoQAAAAaZmNUTAAAABcAAAAQAAAAEAAAAAAAAAAAAB4D6AIBC98ooAAAABZmZEFUAAAAGDiNY2AYBaNgFIwCCAAABBAAASCZDI4AAAAaZmNUTAAAABkAAAAQAAAAEAAAAAAAAAAAAB4D6AIB5qwZ%2FAAAACpmZEFUAAAAGjiNY2AYBVhBc3Pzf2LEcGreqcbwH1kDNjHauWAUjAJyAADymxf9cjJWbAAAABpmY1RMAAAAGwAAABAAAAAQAAAAAAAAAAAAHgPoAgELOsoVAAAAFmZkQVQAAAAcOI1jYBgFo2AUjAIIAAAEEAAByfEBbAAAABpmY1RMAAAAHQAAABAAAAAQAAAAAAAAAAAAHgPoAgHm8LhvAAAAQGZkQVQAAAAeOI1jYBieYKcaw39ixHCC%2F6cwFWMTw2rz%2F1MM%2F6Vu%2Ff%2F%2F%2FxTD%2F51qEIwuRjsXILuEGLFRMApgAADhNCsVlxR3%2FgAAABpmY1RMAAAAHwAAABAAAAAQAAAAAAAAAAAAHgPoAgELZmuGAAAAFmZkQVQAAAAgOI1jYBgFo2AUjAIIAAAEEAABHP5cFQAAABpmY1RMAAAAIQAAABAAAAAQAAAAAAAAAAAAHgPoAgHlgtAOAAAAKmZkQVQAAAAiOI1jYBgFWEFzc%2FN%2FYsRwat6pxvAfWQM2Mdq5YBSMAnIAAPKbF%2F0%2FMvDdAAAAAElFTkSuQmCC"/> |
13 |
11 |
[ ] Add key form may be joined with list keys command! |
[ ] Add key form may be joined with list keys command! |
|
24 |
22 |
return OK, in the background we will do the removing. Do not forget to also remove clones. Hm. |
return OK, in the background we will do the removing. Do not forget to also remove clones. Hm. |
25 |
23 |
[ ] E-mail aliases section. |
[ ] E-mail aliases section. |
26 |
24 |
[ ] User details section (full name, e-mail, blog, avatar, mail notifications). |
[ ] User details section (full name, e-mail, blog, avatar, mail notifications). |
27 |
|
[ ] Change password section. |
|
28 |
25 |
[ ] Check if user is over-quota on push. |
[ ] Check if user is over-quota on push. |
29 |
26 |
[ ] The cron will have to: |
[ ] The cron will have to: |
30 |
27 |
[ ] Compute disk usage, ignoring hard links. Hm. Probably we will add |
[ ] Compute disk usage, ignoring hard links. Hm. Probably we will add |
|
38 |
35 |
[ ] Timeout for connections (ssh/git-daemon/etc.)! |
[ ] Timeout for connections (ssh/git-daemon/etc.)! |
39 |
36 |
[ ] Check if we have to respect 4HEXA also on SSH. I think not. |
[ ] Check if we have to respect 4HEXA also on SSH. I think not. |
40 |
37 |
[ ] Limit number of simultaneously connection per repo and per user. Maybe also the time! |
[ ] Limit number of simultaneously connection per repo and per user. Maybe also the time! |
41 |
|
[ ] Add /var/run/rg to spec file, to be created at instalation. |
|
42 |
|
[ ] We should add a dependency on php-process? |
|
43 |
38 |
[ ] Make everywhere present a "Make a sugestion" area. |
[ ] Make everywhere present a "Make a sugestion" area. |
44 |
39 |
[ ] On rocketgit website, add "Feedback" area. |
[ ] On rocketgit website, add "Feedback" area. |
45 |
|
[ ] Do not forget to pack /etc/httpd/conf.d/rg.conf. |
|
46 |
40 |
[ ] Allow multiple virtual hosts, with different configurations. |
[ ] Allow multiple virtual hosts, with different configurations. |
47 |
41 |
[ ] session_time should be set at login time? And/or default s_t should be set from database? |
[ ] session_time should be set at login time? And/or default s_t should be set from database? |
48 |
42 |
[ ] Do not let user upload an already uploaded key. |
[ ] Do not let user upload an already uploaded key. |
49 |
43 |
[ ] Do not permit more than X auth attempts per second. |
[ ] Do not permit more than X auth attempts per second. |
50 |
|
[ ] See HTTP Only to prevent scripts to access the session cookie. |
|
51 |
|
[ ] Set correct group in spec file. |
|
52 |
44 |
[ ] See prepare-commit-msg.sample - we can auto add a line to every commit. |
[ ] See prepare-commit-msg.sample - we can auto add a line to every commit. |
53 |
45 |
[ ] Check http://plathrop.tertiusfamily.net/blog/2010/05/11/git-hooks-branch-acls-and-more/ to block updates that have not pull - a la SVN |
[ ] Check http://plathrop.tertiusfamily.net/blog/2010/05/11/git-hooks-branch-acls-and-more/ to block updates that have not pull - a la SVN |
54 |
46 |
[ ] Maybe we should mark the repository as dirty, only in the post-receive hook? Or update is the best place? |
[ ] Maybe we should mark the repository as dirty, only in the post-receive hook? Or update is the best place? |
55 |
|
[ ] |
|
|
47 |
|
[ ] Limit number of commits per push. |
|
48 |
|
[ ] logrotate |
|
49 |
|
[ ] |
File admin/init.php changed (mode: 100644) (index a11ba03..53c015c) |
... |
... |
require_once($INC . "/db.inc.php"); |
12 |
12 |
require_once($INC . "/db/struct.inc.php"); |
require_once($INC . "/db/struct.inc.php"); |
13 |
13 |
require_once($INC . "/repo.inc.php"); |
require_once($INC . "/repo.inc.php"); |
14 |
14 |
|
|
|
15 |
|
rg_log_set_file("init.log"); |
|
16 |
|
|
15 |
17 |
$db = rg_sql_open($rg_db); |
$db = rg_sql_open($rg_db); |
16 |
18 |
if ($db === FALSE) { |
if ($db === FALSE) { |
17 |
19 |
echo "Internal error (" . rg_sql_error() . ")!"; |
echo "Internal error (" . rg_sql_error() . ")!"; |
|
... |
... |
while (1) { |
47 |
49 |
break; |
break; |
48 |
50 |
} |
} |
49 |
51 |
|
|
|
52 |
|
$r = rg_user_info($db, $uid, $user, "" /* email */); |
|
53 |
|
if ($r['ok'] != 1) { |
|
54 |
|
echo "Error looking up user $user (" . rg_user_error() . ")!\n"; |
|
55 |
|
exit(1); |
|
56 |
|
} |
|
57 |
|
if ($r['exists'] == 1) { |
|
58 |
|
echo "User $user already exists. Try another one!\n"; |
|
59 |
|
continue; |
|
60 |
|
} |
|
61 |
|
|
50 |
62 |
$r = rg_user_edit($db, $uid, $user, $email, $pass, $is_admin, |
$r = rg_user_edit($db, $uid, $user, $email, $pass, $is_admin, |
51 |
63 |
$disk_quota_mb, $rights); |
$disk_quota_mb, $rights); |
52 |
64 |
if ($r !== TRUE) { |
if ($r !== TRUE) { |
File inc/db/struct.inc.php changed (mode: 100644) (index 2f2d9c8..a5dc4bd) |
1 |
1 |
<?php |
<?php |
2 |
|
error_reporting(E_ALL); |
|
3 |
|
|
|
4 |
2 |
$rg_db_struct = array(); |
$rg_db_struct = array(); |
5 |
3 |
|
|
6 |
4 |
$rg_db_struct[0] = array( |
$rg_db_struct[0] = array( |
7 |
5 |
"repos" => "CREATE TABLE repos" |
"repos" => "CREATE TABLE repos" |
8 |
6 |
. " (repo_id SERIAL PRIMARY KEY" |
. " (repo_id SERIAL PRIMARY KEY" |
9 |
|
. ", name TEXT" |
|
10 |
|
. ", uid INTEGER" |
|
11 |
|
. ", itime INTEGER" |
|
12 |
|
. ", disk_quota_mb INTEGER" |
|
13 |
|
. ", max_commit_size INTEGER" |
|
14 |
|
. ", master INTEGER" |
|
15 |
|
. ", description TEXT" |
|
16 |
|
. ", git_dir_done INTEGER" |
|
17 |
|
. ", default_rights TEXT" |
|
18 |
|
. ", deleted INTEGER" |
|
19 |
|
. ", max_users INTEGER" |
|
|
7 |
|
. ", name TEXT UNIQUE NOT NULL" |
|
8 |
|
. ", uid INTEGER NOT NULL" |
|
9 |
|
. ", itime INTEGER NOT NULL" |
|
10 |
|
. ", disk_quota_mb INTEGER NOT NULL" |
|
11 |
|
. ", max_commit_size INTEGER NOT NULL" |
|
12 |
|
. ", master INTEGER NOT NULL" |
|
13 |
|
. ", description TEXT NOT NULL" |
|
14 |
|
. ", git_dir_done INTEGER NOT NULL" |
|
15 |
|
. ", default_rights TEXT NOT NULL" |
|
16 |
|
. ", deleted INTEGER NOT NULL" |
|
17 |
|
. ", max_users INTEGER NOT NULL" |
20 |
18 |
. ")", |
. ")", |
21 |
19 |
"rights" => "CREATE TABLE rights" |
"rights" => "CREATE TABLE rights" |
22 |
|
. " (type TEXT" |
|
23 |
|
. ", obj_id INTEGER" |
|
24 |
|
. ", uid INTEGER" |
|
25 |
|
. ", rights TEXT" |
|
26 |
|
. ", itime INTEGER)", |
|
|
20 |
|
. " (type TEXT NOT NULL" |
|
21 |
|
. ", obj_id INTEGER NOT NULL" |
|
22 |
|
. ", uid INTEGER NOT NULL" |
|
23 |
|
. ", rights TEXT NOT NULL" |
|
24 |
|
. ", itime INTEGER NOT NULL)", |
27 |
25 |
"state" => "CREATE TABLE state" |
"state" => "CREATE TABLE state" |
28 |
26 |
. " (var TEXT PRIMARY KEY" |
. " (var TEXT PRIMARY KEY" |
29 |
|
. ", value TEXT)", |
|
|
27 |
|
. ", value TEXT NOT NULL)", |
30 |
28 |
"keys" => "CREATE TABLE keys" |
"keys" => "CREATE TABLE keys" |
31 |
29 |
. " (key_id SERIAL PRIMARY KEY" |
. " (key_id SERIAL PRIMARY KEY" |
32 |
|
. ", itime INTEGER" |
|
33 |
|
. ", uid INTEGER" |
|
34 |
|
. ", key TEXT)", |
|
|
30 |
|
. ", itime INTEGER NOT NULL" |
|
31 |
|
. ", uid INTEGER NOT NULL" |
|
32 |
|
. ", key TEXT NOT NULL)", |
35 |
33 |
"users" => "CREATE TABLE users" |
"users" => "CREATE TABLE users" |
36 |
34 |
. " (uid SERIAL PRIMARY KEY" |
. " (uid SERIAL PRIMARY KEY" |
37 |
|
. ", username TEXT" |
|
38 |
|
. ", salt TEXT" |
|
39 |
|
. ", pass TEXT" |
|
40 |
|
. ", email TEXT" |
|
41 |
|
. ", itime INTEGER" |
|
42 |
|
. ", suspended INTEGER" |
|
43 |
|
. ", session_time INTEGER DEFAULT 3600" |
|
44 |
|
. ", last_seen INTEGER" |
|
45 |
|
. ", is_admin INTEGER" |
|
46 |
|
. ", disk_quota_mb INTEGER" |
|
47 |
|
. ", disk_mb INTEGER" |
|
48 |
|
. ", rights TEXT" |
|
|
35 |
|
. ", username TEXT UNIQUE NOT NULL" |
|
36 |
|
. ", salt TEXT NOT NULL" |
|
37 |
|
. ", pass TEXT NOT NULL" |
|
38 |
|
. ", email TEXT NOT NULL" |
|
39 |
|
. ", itime INTEGER NOT NULL" |
|
40 |
|
. ", suspended INTEGER NOT NULL" |
|
41 |
|
. ", session_time INTEGER DEFAULT 3600 NOT NULL" |
|
42 |
|
. ", last_seen INTEGER NOT NULL" |
|
43 |
|
. ", is_admin INTEGER NOT NULL" |
|
44 |
|
. ", disk_quota_mb INTEGER NOT NULL" |
|
45 |
|
. ", disk_mb INTEGER NOT NULL" |
|
46 |
|
. ", rights TEXT NOT NULL" |
49 |
47 |
. ")", |
. ")", |
50 |
48 |
"sess" => "CREATE TABLE sess" |
"sess" => "CREATE TABLE sess" |
51 |
49 |
. " (sid TEXT PRIMARY KEY" |
. " (sid TEXT PRIMARY KEY" |
52 |
|
. ", uid INTEGER" |
|
53 |
|
. ", expire INTEGER" |
|
54 |
|
. ", session_time INTEGER" |
|
55 |
|
. ", ip TEXT)", |
|
|
50 |
|
. ", uid INTEGER NOT NULL" |
|
51 |
|
. ", expire INTEGER NOT NULL" |
|
52 |
|
. ", session_time INTEGER NOT NULL" |
|
53 |
|
. ", ip TEXT NOT NULL)", |
56 |
54 |
"forgot_pass" => "CREATE TABLE forgot_pass" |
"forgot_pass" => "CREATE TABLE forgot_pass" |
57 |
55 |
. " (token TEXT PRIMARY KEY" |
. " (token TEXT PRIMARY KEY" |
58 |
|
. ", uid INTEGER" |
|
59 |
|
. ", expire INTEGER)", |
|
|
56 |
|
. ", uid INTEGER NOT NULL" |
|
57 |
|
. ", expire INTEGER NOT NULL)", |
60 |
58 |
"tokens" => "CREATE TABLE tokens" |
"tokens" => "CREATE TABLE tokens" |
61 |
59 |
. " (token TEXT PRIMARY KEY" |
. " (token TEXT PRIMARY KEY" |
62 |
|
. ", sid TEXT" |
|
63 |
|
. ", expire INTEGER)" |
|
|
60 |
|
. ", sid TEXT NOT NULL" |
|
61 |
|
. ", expire INTEGER NOT NULL)" |
64 |
62 |
); |
); |
65 |
63 |
|
|
66 |
64 |
/* |
/* |
|
... |
... |
function rg_db_struct_run($db, $ignore_errors, $drop_tables) |
72 |
70 |
|
|
73 |
71 |
foreach ($rg_db_struct as $index => $sqls) { |
foreach ($rg_db_struct as $index => $sqls) { |
74 |
72 |
foreach ($sqls as $table => $sql) { |
foreach ($sqls as $table => $sql) { |
75 |
|
echo "Drop & create table [$table]...\n"; |
|
76 |
|
|
|
77 |
|
$sql2 = "DROP TABLE IF EXISTS $table"; |
|
78 |
|
$res = rg_sql_query($db, $sql2); |
|
79 |
|
rg_sql_free_result($res); |
|
|
73 |
|
if ($drop_tables == 1) { |
|
74 |
|
echo "Dropping table [$table]...\n"; |
|
75 |
|
$sql2 = "DROP TABLE IF EXISTS $table"; |
|
76 |
|
$res = rg_sql_query($db, $sql2); |
|
77 |
|
rg_sql_free_result($res); |
|
78 |
|
} |
80 |
79 |
|
|
|
80 |
|
echo "Creating table [$table]...\n"; |
81 |
81 |
$res = rg_sql_query($db, $sql); |
$res = rg_sql_query($db, $sql); |
82 |
82 |
if ($res === FALSE) { |
if ($res === FALSE) { |
83 |
83 |
echo "WARN: Cannot create '$table' table ($sql) (" . rg_sql_error() . ")!\n"; |
echo "WARN: Cannot create '$table' table ($sql) (" . rg_sql_error() . ")!\n"; |
84 |
84 |
if (!$ignore_errors) |
if (!$ignore_errors) |
85 |
85 |
return FALSE; |
return FALSE; |
|
86 |
|
} else { |
|
87 |
|
rg_sql_free_result($res); |
86 |
88 |
} |
} |
87 |
|
rg_sql_free_result($res); |
|
88 |
89 |
} |
} |
89 |
90 |
} |
} |
90 |
91 |
|
|
File inc/git.inc.php changed (mode: 100644) (index e711d13..d5e14df) |
... |
... |
function rg_git_init($dst) |
39 |
39 |
} |
} |
40 |
40 |
} |
} |
41 |
41 |
|
|
42 |
|
if (file_exists($dst . "/rg")) { |
|
|
42 |
|
if (file_exists($dst . "/rocketgit")) { |
43 |
43 |
rg_log("\tGit repo was created OK. Skip cloning."); |
rg_log("\tGit repo was created OK. Skip cloning."); |
44 |
44 |
} else { |
} else { |
45 |
45 |
$cmd = "git init --bare '" . escapeshellcmd($dst) . "'"; |
$cmd = "git init --bare '" . escapeshellcmd($dst) . "'"; |
|
... |
... |
function rg_git_init($dst) |
50 |
50 |
return FALSE; |
return FALSE; |
51 |
51 |
} |
} |
52 |
52 |
|
|
53 |
|
if (!@mkdir($dst . "/rg")) { |
|
54 |
|
rg_log("\tCannot create rg dir ($php_errormsg)!"); |
|
|
53 |
|
if (!@mkdir($dst . "/rocketgit")) { |
|
54 |
|
rg_log("\tCannot create '$dst/rocketgit' dir ($php_errormsg)!"); |
55 |
55 |
return FALSE; |
return FALSE; |
56 |
56 |
} |
} |
57 |
57 |
} |
} |
|
... |
... |
function rg_git_clone($src, $dst) |
75 |
75 |
} |
} |
76 |
76 |
} |
} |
77 |
77 |
|
|
78 |
|
if (file_exists($dst . "/rg")) { |
|
|
78 |
|
if (file_exists($dst . "/rocketgit")) { |
79 |
79 |
rg_log("\tGit repo was created OK. Skip cloning."); |
rg_log("\tGit repo was created OK. Skip cloning."); |
80 |
80 |
} else { |
} else { |
81 |
81 |
$cmd = "git clone --bare '" . escapeshellcmd($src) . "'" |
$cmd = "git clone --bare '" . escapeshellcmd($src) . "'" |
|
... |
... |
function rg_git_clone($src, $dst) |
87 |
87 |
return FALSE; |
return FALSE; |
88 |
88 |
} |
} |
89 |
89 |
|
|
90 |
|
if (!@mkdir($dst . "/rg")) { |
|
91 |
|
rg_log("\tCannot create rg dir ($php_errormsg)!"); |
|
|
90 |
|
if (!@mkdir($dst . "/rocketgit")) { |
|
91 |
|
rg_log("\tCannot create '$dst/rocketgit' dir ($php_errormsg)!"); |
92 |
92 |
return FALSE; |
return FALSE; |
93 |
93 |
} |
} |
94 |
94 |
} |
} |
File scripts/ssh.php changed (mode: 100644) (index 4ce8b50..9f9e45d) |
... |
... |
require_once($INC . "/log.inc.php"); |
13 |
13 |
require_once($INC . "/db.inc.php"); |
require_once($INC . "/db.inc.php"); |
14 |
14 |
require_once($INC . "/repo.inc.php"); |
require_once($INC . "/repo.inc.php"); |
15 |
15 |
|
|
16 |
|
rg_log_set_file("/tmp/rg_ssh.log"); |
|
|
16 |
|
rg_log_set_file("/var/log/rocketgit/ssh.log"); |
17 |
17 |
|
|
18 |
18 |
$rg_sql_debug = $rg_db_debug; |
$rg_sql_debug = $rg_db_debug; |
19 |
19 |
|
|
|
... |
... |
rg_log("[$run] returned $ret."); |
140 |
140 |
$diff = sprintf("%u", (microtime(TRUE) - $_start) * 1000); |
$diff = sprintf("%u", (microtime(TRUE) - $_start) * 1000); |
141 |
141 |
rg_log("Took " . $diff . "ms."); |
rg_log("Took " . $diff . "ms."); |
142 |
142 |
|
|
143 |
|
@file_put_contents($repo_path . "/rg/last_access", |
|
|
143 |
|
@file_put_contents($repo_path . "/rocketgit/last_access", |
144 |
144 |
"repo: " . $repo . " ($repo_path)" |
"repo: " . $repo . " ($repo_path)" |
145 |
145 |
. "\nat: " . sprintf("%u", $_start) |
. "\nat: " . sprintf("%u", $_start) |
146 |
146 |
. "\nuid: " . $uid |
. "\nuid: " . $uid |