xaizek / rocketgit (License: AGPLv3+) (since 2018-12-09)
Light and fast Git hosting solution suitable to serve both as a hub or as a personal code storage with its tickets, pull requests, API and much more.
Commit e19235372a5c1f19ce6e070ad6d0173571ebc50b

Checkpoint
Author: Catalin(ux) M. BOIE
Author date (UTC): 2015-03-29 16:03
Committer name: Catalin(ux) M. BOIE
Committer date (UTC): 2015-03-29 16:05
Parent(s): 7a675f59c73ad5383033acbee2de98d2c31d1681
Signing key:
Tree: 9a78c82c6dd99dcc6d92de04bc28259cc6db478b
File Lines added Lines deleted
README 4 4
README.vm 10 0
TODO 6 8
admin/init.php 0 101
artwork/rocketgit v2.png 0 0
artwork/rocketgit v2.svg 76 0
duilder.conf 1 1
inc/admin.inc.php 69 0
inc/admin/plans/plans.php 2 1
inc/dispatch/dispatch.php 16 0
inc/git.inc.php 1 1
inc/plan.inc.php 4 1
inc/struct.inc.php 3 2
root/index.php 14 10
root/themes/default/admin/init.html 44 0
root/themes/default/admin/plans/list/header.html 1 1
root/themes/default/donate.html 30 0
root/themes/default/download.html 41 0
root/themes/default/features.html 118 0
root/themes/default/hints/ssh/key.html 1 1
root/themes/default/index.html 20 6
root/themes/default/logo/rg6.png 0 0
root/themes/default/main.css 64 36
root/themes/default/main.html 76 38
root/themes/default/pricing.html 30 0
root/themes/default/repo/add_edit.html 1 1
root/themes/default/tos.html 2 0
samples/config.php 1 1
scripts/cron.php 9 0
tests/.gitignore 1 0
File README changed (mode: 100644) (index b0ac575..78f0d69)
14 14 . Upgrades with the standard tools of the distributions . Upgrades with the standard tools of the distributions
15 15 . Very little dependencies, all packaged in main-stream distributions . Very little dependencies, all packaged in main-stream distributions
16 16 . SELinux friendly . SELinux friendly
17 . Very small
17 . Very small (RPM is around 300KiB)
18 18
19 19
20 20 == Install == == Install ==
 
81 81 - Edit /etc/mail/trusted-users and add 'rocketgit' and 'apache'. - Edit /etc/mail/trusted-users and add 'rocketgit' and 'apache'.
82 82 - Restart daemon: 'systemctl restart sendmail.service' (Fedora) - Restart daemon: 'systemctl restart sendmail.service' (Fedora)
83 83
84 . Run installation script
85 # php /usr/share/rocketgit/admin/init.php
86
87 84 . Edit firewall to permit ssh, git, http and https ports . Edit firewall to permit ssh, git, http and https ports
88 85 In /etc/sysconfig/iptables (IPv4) and ip6tables (IPv6), add something In /etc/sysconfig/iptables (IPv4) and ip6tables (IPv6), add something
89 86 like this: like this:
 
92 89 -A INPUT -m tcp -p tcp --dport http -j ACCEPT -A INPUT -m tcp -p tcp --dport http -j ACCEPT
93 90 -A INPUT -m tcp -p tcp --dport https -j ACCEPT -A INPUT -m tcp -p tcp --dport https -j ACCEPT
94 91
92 . Point your browser to the newly created server and you will be asked to
93 create the admin account.
94
95 95
96 96 == Thanks == == Thanks ==
97 97 . Special thanks to my family that supported me in this project. . Special thanks to my family that supported me in this project.
File README.vm added (mode: 100644) (index 0000000..6df554d)
1 How to customize Fedora virtual machine image
2
3 - Generate SSL keys
4 - Update the virtual machine to the latest version: "yum -y update".
5 - Edit /etc/sysconfig/clock to set the timezone
6 - Change root password: run 'passwd' (initial password is 'aaaa')
7
8 - Allow this virtual machine to send mail (add it to the relay allow list).
9 - You may want to set to it a static IP address instead of DHCP.
10 - You may want to add it to the DNS server
File TODO changed (mode: 100644) (index a26e75b..f441cb0)
13 13 Apoi as putea elimina description_nice. Apoi as putea elimina description_nice.
14 14 [ ] Security: Link-uri + xss (Ionut) [ ] Security: Link-uri + xss (Ionut)
15 15 [ ] Only one daemon should update the structure, else they will conflict. [ ] Only one daemon should update the structure, else they will conflict.
16 [ ] Seems I must get rid of init.php: locks are owned by root and I cannot
17 do struct_update&fixes as the rocketgit user.
18 [ ] Beta sign.
16 19 [ ] [ ]
17 20
18 21 == BEFORE NEXT RELEASE == == BEFORE NEXT RELEASE ==
22 [ ] Add unit test for 'copy to' into git_log1. There is already one but does
23 not trigger the detection. Maybe we need a bigger file.
19 24 [ ] Make the blob show nicer and remove rg_template_list (replace [ ] Make the blob show nicer and remove rg_template_list (replace
20 25 it with rg_template*). it with rg_template*).
21 26 [ ] If there are a lot of tags/branches, remove oldest ones. [ ] If there are a lot of tags/branches, remove oldest ones.
 
... ... mails to be saved in a folder, so we can parse them and verify them.
46 51 [ ] php-opcache in docs? [ ] php-opcache in docs?
47 52 [ ] Drop OUTPUT to prevent some attacks? Document in README? [ ] Drop OUTPUT to prevent some attacks? Document in README?
48 53 [ ] Seems I cache not set values: first_install is still "?"! [ ] Seems I cache not set values: first_install is still "?"!
49 [ ] Move into cron the duty for setting first_install and install_id!
50 Maybe other stuff also.
51 [ ] 'first_install' is not present in 'state' table.
52 54 [ ] authorized_keys is missing from 'state' table. Is normal? [ ] authorized_keys is missing from 'state' table. Is normal?
53 [ ] "Running since" apare cu "?"! Rezolvat, dar se pare ca cache-uim raspunsuri
54 negative de la cache daemon. Vrem asta?!
55 [ ] Admin section is not working!
56 55 [ ] Replace -=ROCKETGIT=- with a random generated code. [ ] Replace -=ROCKETGIT=- with a random generated code.
57 56 [ ] La mail-ul de creare repo, las prea mult spatiu intre "Hello!" si "Repo is". [ ] La mail-ul de creare repo, las prea mult spatiu intre "Hello!" si "Repo is".
58 57 [ ] Seems I cannot reliable kill cache.php. It becomes a zombie! [ ] Seems I cannot reliable kill cache.php. It becomes a zombie!
59 58 [ ] Permisiile pentru /home/rocketgit/.ssh nu sint corecte! Sint root! [ ] Permisiile pentru /home/rocketgit/.ssh nu sint corecte! Sint root!
60 Rezolvat cu chown. Poate vreau sa nu mai rulez cua root keys_regen.
59 Rezolvat cu chown. Poate vreau sa nu mai rulez cu root keys_regen.
61 60 Only add the regen event! Why? At start we have no users and the first Only add the regen event! Why? At start we have no users and the first
62 61 key added will generate a trigger. key added will generate a trigger.
63 62 May be other places where I run as root! May be other places where I run as root!
64 [ ] Logged in as admin, Admin -> Plans is not working (redirects to main page)!
65 63 [ ] init.php: do not show the password! [ ] init.php: do not show the password!
66 64 Maybe switch to a web based instalation? Maybe switch to a web based instalation?
67 65 [ ] I must mark that init.php script was not run, and do not start daemons! [ ] I must mark that init.php script was not run, and do not start daemons!
File admin/init.php deleted (index 6fdb06b..0000000)
1 <?php
2 // This is executed at the first instalation.
3 // Or, if you want to create another admin user.
4 error_reporting(E_ALL);
5 ini_set("track_errors", "On");
6
7 require_once("/etc/rocketgit/config.php");
8
9 $INC = dirname(__FILE__) . "/../inc";
10 require_once($INC . "/util.inc.php");
11 require_once($INC . "/log.inc.php");
12 require_once($INC . "/sql.inc.php");
13 require_once($INC . "/struct.inc.php");
14 require_once($INC . "/state.inc.php");
15 require_once($INC . "/rights.inc.php");
16 require_once($INC . "/fixes.inc.php");
17
18 rg_log_set_file($rg_log_dir . "/init.log");
19
20 rg_sql_app("rg-admin-init");
21 $db = rg_sql_open($rg_sql);
22 if ($db === FALSE) {
23 echo "Internal error (" . rg_sql_error() . ")!\n";
24 exit(1);
25 }
26
27 $r = rg_sql_struct_update($db, 0);
28 if ($r !== TRUE) {
29 echo "Cannot init structure. Check the logs!\n";
30 exit(1);
31 }
32
33 $r = rg_fixes_update($db);
34 if ($r !== TRUE) {
35 echo "Cannot apply fixes. Check the logs!\n";
36 exit(1);
37 }
38
39 // Store the timestamp of the first install
40 $first_install = rg_state_get($db, "first_install");
41 if ($first_install == 0)
42 rg_state_set($db, "first_install", time());
43
44 $install_id = rg_state_get($db, "install_id");
45 if (empty($install_id))
46 rg_state_set($db, "install_id", sha512(microtime(TRUE)));
47
48
49 // creating admin user
50 $_u = array();
51 $_u['uid'] = 0;
52 $_u['username'] = "admin";
53 $_u['realname'] = "Master admin";
54 $_u['email'] = $rg_admin_email;
55 $_u['is_admin'] = 1;
56 $_u['rights'] = rg_rights_all("user");
57 $_u['session_time'] = 3600;
58 $_u['confirm_token'] = "";
59 $_u['plan_id'] = 0;
60 while (1) {
61 $username0 = readline("User [" . $_u['username'] . "]: ");
62 if (!empty($username0))
63 $_u['username'] = $username0;
64 $email0 = readline("E-mail [" . $_u['email'] . "]: ");
65 if (!empty($email0))
66 $_u['email'] = $email0;
67
68 while(1) {
69 $_u['pass'] = readline("Password: ");
70 $_u['pass2'] = readline("Password (confirmation): ");
71 if (strcmp($_u['pass'], $_u['pass2']) != 0) {
72 echo "Passwords mismatch!\n";
73 continue;
74 }
75 break;
76 }
77
78 $r = rg_user_info($db, $_u['uid'], $_u['username'], "" /* email */);
79 if ($r['ok'] != 1) {
80 echo "Error looking up user " . $_u['username']
81 . " (" . rg_user_error() . ")!\n";
82 exit(1);
83 }
84 if ($r['exists'] == 1) {
85 echo "User " . $_u['username'] . " already exists."
86 . " Try another one!\n";
87 continue;
88 }
89
90 $r = rg_user_edit($db, $_u);
91 if ($r === FALSE) {
92 echo "Cannot create user (" . rg_user_error() . ")!\n";
93 continue;
94 }
95
96 break;
97 }
98
99
100 echo "Done!\n";
101 ?>
File artwork/rocketgit v2.png added (mode: 100644) (index 0000000..a48b694)
File artwork/rocketgit v2.svg added (mode: 100644) (index 0000000..1a084d8)
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4 <svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12 width="744.09448819"
13 height="1052.3622047"
14 id="svg2"
15 version="1.1"
16 inkscape:version="0.91 r13725"
17 sodipodi:docname="rocketgit v2.svg"
18 inkscape:export-filename="/home/catab/Desktop/rocketgit v2.png"
19 inkscape:export-xdpi="21.18"
20 inkscape:export-ydpi="21.18">
21 <defs
22 id="defs4" />
23 <sodipodi:namedview
24 id="base"
25 pagecolor="#ffffff"
26 bordercolor="#666666"
27 borderopacity="1.0"
28 inkscape:pageopacity="0.0"
29 inkscape:pageshadow="2"
30 inkscape:zoom="1.3568776"
31 inkscape:cx="224.54733"
32 inkscape:cy="810.0693"
33 inkscape:document-units="px"
34 inkscape:current-layer="layer1"
35 showgrid="false"
36 inkscape:window-width="1366"
37 inkscape:window-height="717"
38 inkscape:window-x="0"
39 inkscape:window-y="0"
40 inkscape:window-maximized="1" />
41 <metadata
42 id="metadata7">
43 <rdf:RDF>
44 <cc:Work
45 rdf:about="">
46 <dc:format>image/svg+xml</dc:format>
47 <dc:type
48 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
49 <dc:title></dc:title>
50 </cc:Work>
51 </rdf:RDF>
52 </metadata>
53 <g
54 inkscape:label="Layer 1"
55 inkscape:groupmode="layer"
56 id="layer1">
57 <path
58 style="fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
59 d="m 168.49201,296.77004 70.21523,-22.48364 -53.09792,68.50362 90.14664,-65.99056 -63.13562,81.52475 61.32229,-47.70656 -32.33355,70.85904 65.91111,-61.40636 -41.63285,86.33542 c 0,0 72.97348,-72.30151 59.27549,-46.57935 -5.03411,13.55954 -22.46639,66.3503 -22.46639,66.3503 0,0 40.24328,-21.90608 58.70628,-46.73634 18.45444,-23.95462 26.0347,-49.43698 16.04415,-76.58517 -7.59005,-33.75652 -65.16484,-103.40388 -135.68444,-79.9457 -51.65765,16.792 -73.27042,73.86055 -73.27042,73.86055 z"
60 id="path3786"
61 inkscape:connector-curvature="0"
62 sodipodi:nodetypes="ccccccccccccccc"
63 inkscape:export-filename="/home/catab/Desktop/rg/text2995.png"
64 inkscape:export-xdpi="90"
65 inkscape:export-ydpi="90" />
66 <path
67 style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
68 d="M 336.31599,234.06448 C 365.77129,153.34434 429.58034,95.5685 524.05066,95.669289 513.37748,171.00459 476.65332,255.38691 371.27845,272.02505 c 0,0 31.3277,65.39112 -41.08987,111.35822 36.19336,-61.00007 6.68304,-94.29563 6.68304,-94.29563 l -60.31325,33.27627 27.03697,-62.39301 c 0,0 -35.55506,-24.65517 -101.90859,0 62.12623,-43.48161 98.19298,-41.42017 134.62924,-25.90642 z"
69 id="path2993"
70 inkscape:connector-curvature="0"
71 sodipodi:nodetypes="ccccccccc"
72 inkscape:export-filename="/home/catab/Desktop/rg/text2995.png"
73 inkscape:export-xdpi="90"
74 inkscape:export-ydpi="90" />
75 </g>
76 </svg>
File duilder.conf changed (mode: 100644) (index 27c90d6..cc2e9cd)
1 1 PRJ="rocketgit" PRJ="rocketgit"
2 VER="0.21"
2 VER="0.22"
3 3 REV="1" REV="1"
4 4 EXCLUDE=".exclude" EXCLUDE=".exclude"
5 5 EXPORT_PATH="/data/www/umbrella/kernel/us/rocketgit" EXPORT_PATH="/data/www/umbrella/kernel/us/rocketgit"
File inc/admin.inc.php changed (mode: 100644) (index 81381f6..23bedb9)
... ... function rg_admin_invites_high_level($db, $rg)
156 156 return $ret; return $ret;
157 157 } }
158 158
159 /*
160 * Prepares an instalation for first use
161 */
162 function rg_init($db, $rg)
163 {
164 global $rg_admin_name;
165 global $rg_admin_email;
166
167 rg_prof_start("rg_init");
168
169 $doit = rg_var_uint('doit');
170 if ($doit == 0) {
171 $rg['init']['username'] = 'admin';
172 $rg['init']['realname'] = $rg_admin_name;
173 $rg['init']['email'] = $rg_admin_email;
174 $rg['init']['pass'] = '';
175 $rg['init']['pass2'] = '';
176 $rg['init']['session_time'] = 600;
177 }
178
179 $errmsg = array();
180 $load_form = TRUE;
181 while ($doit == 1) {
182 $rg['init'] = array();
183 $rg['init']['uid'] = 0;
184 $rg['init']['is_admin'] = 1;
185 $rg['init']['rights'] = rg_rights_all('init::user');
186 $rg['init']['confirm_token'] = '';
187 $rg['init']['plan_id'] = 1;
188 $rg['init']['username'] = rg_var_str('init::username');
189 $rg['init']['realname'] = rg_var_str('init::realname');
190 $rg['init']['email'] = rg_var_str('init::email');
191 $rg['init']['pass'] = rg_var_str('init::pass');
192 $rg['init']['pass2'] = rg_var_str('init::pass2');
193 $rg['init']['session_time'] = rg_var_uint('init::session_time');
194
195 if (!rg_valid_referer()) {
196 $errmsg[] = "invalid referer; try again";
197 break;
198 }
199
200 if (!rg_token_valid($db, $rg, FALSE)) {
201 $errmsg[] = "invalid token; try again";
202 break;
203 }
204
205 $r = rg_user_edit($db, $rg['init']);
206 if ($r === FALSE) {
207 $errmsg[] = rg_user_error();
208 break;
209 }
210
211 rg_state_set($db, 'first_install', time());
212
213 $ret .= rg_template('user/create_ok.html', $rg);
214 $load_form = FALSE;
215 break;
216 }
217
218 if ($load_form) {
219 $rg['HTML:errmsg'] = rg_template_errmsg($errmsg);
220 $rg['rg_form_token'] = rg_token_get($db, $rg);
221 $ret .= rg_template("admin/init.html", $rg);
222 }
223
224 rg_prof_end("rg_init");
225 return $ret;
226 }
227
159 228 ?> ?>
File inc/admin/plans/plans.php changed (mode: 100644) (index 0b5ae6c..c770f25)
... ... case 'list': // list
12 12
13 13 case 'edit': // edit case 'edit': // edit
14 14 $rg['pi'] = array(); $rg['pi'] = array();
15 $rg['pi']['id'] = empty($paras) ? 0 : array_shift($paras);
15 $rg['pi']['id'] = empty($paras) ? 0 : sprintf("%u", array_shift($paras));
16 16 // no break here // no break here
17
17 18 case 'add': // add case 'add': // add
18 19 $_admin_plans .= rg_plan_edit_high_level($db, $rg); $_admin_plans .= rg_plan_edit_high_level($db, $rg);
19 20 break; break;
File inc/dispatch/dispatch.php changed (mode: 100644) (index fafacb2..47263dc)
... ... case 'tos':
74 74 $body .= rg_template('tos.html', $rg); $body .= rg_template('tos.html', $rg);
75 75 break; break;
76 76
77 case 'download':
78 $body .= rg_template('download.html', $rg);
79 break;
80
81 case 'features':
82 $body .= rg_template('features.html', $rg);
83 break;
84
85 case 'pricing':
86 $body .= rg_template('pricing.html', $rg);
87 break;
88
89 case 'donate':
90 $body .= rg_template('donate.html', $rg);
91 break;
92
77 93 default: // can be the main page or user page or repo page default: // can be the main page or user page or repo page
78 94 rg_log("DEBUG:paras=" . rg_array2string($paras)); rg_log("DEBUG:paras=" . rg_array2string($paras));
79 95 $type = empty($paras) ? "" : $paras[0]; $type = empty($paras) ? "" : $paras[0];
File inc/git.inc.php changed (mode: 100644) (index 0cdb5ec..ffac97f)
... ... function rg_git_diff2array($diff, &$extra)
527 527 continue; continue;
528 528 } }
529 529
530 if (strncmp($line, "copy to ", 10) == 0)
530 if (strncmp($line, "copy to ", 8) == 0)
531 531 continue; continue;
532 532
533 533 if (strncmp($line, "rename from ", 12) == 0) { if (strncmp($line, "rename from ", 12) == 0) {
File inc/plan.inc.php changed (mode: 100644) (index 25cafb8..60a8c13)
... ... function rg_plan_edit_high_level($db, &$rg)
323 323 break; break;
324 324
325 325 $pi = array(); $pi = array();
326 $pi['id'] = $id;
326 if ($id > 0)
327 $pi['id'] = $id;
328 else
329 $pi['id'] = rg_var_uint("pi::id");
327 330 $pi['name'] = rg_var_str("pi::name"); $pi['name'] = rg_var_str("pi::name");
328 331 $pi['description'] = rg_var_str("pi::description"); $pi['description'] = rg_var_str("pi::description");
329 332 $pi['disk_mb'] = rg_var_uint("pi::disk_mb"); $pi['disk_mb'] = rg_var_uint("pi::disk_mb");
File inc/struct.inc.php changed (mode: 100644) (index 2c9ec7a..cf12bd0)
... ... $rg_sql_struct[18]['other'] = array(
303 303 "disk_quota" => "ALTER TABLE users DROP disk_quota_mb", "disk_quota" => "ALTER TABLE users DROP disk_quota_mb",
304 304 "plan_desc" => "ALTER TABLE plans ADD description TEXT NOT NULL DEFAULT ''", "plan_desc" => "ALTER TABLE plans ADD description TEXT NOT NULL DEFAULT ''",
305 305 "plan_speed" => "ALTER TABLE plans ADD speed INT NOT NULL DEFAULT 0", "plan_speed" => "ALTER TABLE plans ADD speed INT NOT NULL DEFAULT 0",
306 "unlimited" => "INSERT INTO plans (id, name, disk_mb, users, bw"
306 "standard plan" => "INSERT INTO plans (name, disk_mb, users, bw"
307 307 . ", speed, commit_size, description, position)" . ", speed, commit_size, description, position)"
308 . " VALUES (0, 'Unlimited', 0, 0, 0, 0, 0, 'Unlimited plan', 1000)",
308 . " VALUES ('Standard', 0, 0, 0, 0, 0, 'Standard plan', 1000)",
309 309 "key_first" => "ALTER TABLE keys ADD first_use INT NOT NULL DEFAULT 0" "key_first" => "ALTER TABLE keys ADD first_use INT NOT NULL DEFAULT 0"
310 310 ); );
311 311
 
... ... function rg_sql_struct_slaves_update($db)
699 699 rg_prof_end("sql_struct_slaves_update"); rg_prof_end("sql_struct_slaves_update");
700 700 return $ret; return $ret;
701 701 } }
702
702 703 ?> ?>
File root/index.php changed (mode: 100644) (index e395f44..fafbdc5)
... ... if (empty($rg['sid'])) {
117 117
118 118 $body = ""; $body = "";
119 119
120 // Some variables from the database
121 $rg['first_install_text'] = "?";
122
123 $r = rg_state_get($db, "first_install");
124 if ($r === FALSE) {
125 // Probably we cannot connect to database/cache
126 } else if ($r == 0) {
127 $body .= rg_init($db, $rg);
128 } else if ($r > 0) {
129 $rg['first_install_text'] = gmdate("Y-m-d", $r);
130 }
131
132
120 133 rg_log("Dispatching to [$_op]"); rg_log("Dispatching to [$_op]");
121 134 include($INC . "/dispatch/dispatch.php"); include($INC . "/dispatch/dispatch.php");
122 135
 
... ... if ($rg['login_ui']['uid'] > 0) {
130 143 $rg['logout_token'] = ""; $rg['logout_token'] = "";
131 144 } }
132 145
133 // Some variables from the database
134 $r = rg_state_get_uint($db, "first_install");
135 if ($r > 0) {
136 $rg['first_install_text'] = gmdate("Y-m-d", $r);
137 } else {
138 $rg['first_install_text'] = "?";
139 }
140
141
142 rg_prof_end("MAIN");
143 146
144 147 $rg['HTML:rg_body'] = $body; $rg['HTML:rg_body'] = $body;
145 148 echo rg_template("index.html", $rg); echo rg_template("index.html", $rg);
146 149
150 rg_prof_end("MAIN");
147 151 rg_prof_log(); rg_prof_log();
148 152 rg_log("DONE!"); rg_log("DONE!");
149 153 ?> ?>
File root/themes/default/admin/init.html added (mode: 100644) (index 0000000..4f1a4b0)
1 <div class="formarea">
2
3 <div class="formarea_title">Create first admin account</div><br />
4
5 @@errmsg@@
6
7 <form method="post" action="/op/init">
8 <input type="hidden" name="doit" value="1" />
9 <input type="hidden" name="token" value="@@rg_form_token@@" />
10
11 <label for="username" class="form_item_title">User name (public)</label><br />
12 <input type="text" name="init::username" value="@@init::username@@" />
13 <br />
14 <br />
15
16 <label for="realname" class="form_item_title">Name (not public)</label><br />
17 <input type="text" name="init::realname" value="@@init::realname@@" />
18 <br />
19 <br />
20
21 <label for="email" class="form_item_title">E-mail (not public)</label><br />
22 <input type="text" name="init::email" value="@@init::email@@" />
23 <br />
24 <br />
25
26 <label for="pass" class="form_item_title">Password</label><br />
27 <input type="password" name="init::pass" value="@@init::pass@@" />
28 <br />
29 <br />
30
31 <label for="pass2" class="form_item_title">Password (confirmation)</label><br />
32 <input type="password" name="init::pass2" value="@@init::pass2@@" />
33 <br />
34 <br />
35
36 <label for="session_time" class="form_item_title">Preferred session time (in seconds)</label><br />
37 <input type="text" name="init::session_time" value="@@init::session_time@@" />
38 <br />
39 <br />
40
41 <input type="submit" value="Create" />
42 </form>
43
44 </div>
File root/themes/default/admin/plans/list/header.html changed (mode: 100644) (index fe3a61b..4ec2fcf)
2 2
3 3 @@del_errmsg@@ @@del_errmsg@@
4 4
5 <form method="post" action="@@url@@">
5 <form method="post" action="/op/admin/plans/list">
6 6 <input type="hidden" name="delete" value="1" /> <input type="hidden" name="delete" value="1" />
7 7 <input type="hidden" name="token" value="@@rg_form_token@@" /> <input type="hidden" name="token" value="@@rg_form_token@@" />
8 8
File root/themes/default/donate.html added (mode: 100644) (index 0000000..487171e)
1 <div class="islands">
2 <h2>Donate</h2>
3
4 <div class="island_row">
5 <div class="island_cell">
6 <div class="island">
7 <div class="island_title">Donate time</div>
8 The "cheapest" thing to donate to this project is a part of your time.
9 You can help by reporting bugs, sending suggestions, come with ideas
10 to improve this project or by writing code.
11 Thank you!
12 </div>
13 </div>
14
15 <div class="island_cell">
16 <div class="island">
17 <div class="island_title">Donate money</div>
18 You can use our PayPal account to donate any amount of money you wish.
19 <br />
20 <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
21 <input type="hidden" name="cmd" value="_s-xclick">
22 <input type="hidden" name="hosted_button_id" value="9L6N6TRLNKN56">
23 <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
24 <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
25 </form>
26 </div>
27 </div>
28 </div>
29
30 </div>
File root/themes/default/download.html added (mode: 100644) (index 0000000..415ce32)
1 <div class="islands">
2 <h2>Download</h2>
3
4 <div class="island_row">
5 <div class="island_cell">
6 <div class="island">
7 <div class="island_title">By cloning</div>
8 You can just clone RocketGit project and install it from sources.
9 Just follow this <a href="http://rocketgit.com/user/catalinux/rocketgit">link</a>.
10 </div>
11 </div>
12
13 <div class="island_cell">
14 <div class="island">
15 <div class="island_title">Fedora</div>
16 From here you can download all the RPMs needed for a Fedora instalation.
17 Allow us few days to prepare the packages.
18 </div>
19 </div>
20 </div>
21
22 <div class="island_row">
23 <div class="island_cell">
24 <div class="island">
25 <div class="island_title">Other distributions</div>
26 In the near future, we will provide packages ready for instalation
27 for all major distributions. If you know how to do a package, please
28 help us. Thank you.
29 </div>
30 </div>
31
32 <div class="island_cell">
33 <div class="island">
34 <div class="island_title">Virtual machines images</div>
35 Please allow us few days to provide images for KVM, VirtualBox and VMWare.
36 We will do our best to go under 100MiB per image.
37 </div>
38 </div>
39 </div>
40
41 </div>
File root/themes/default/features.html added (mode: 100644) (index 0000000..472bdd0)
1 <div class="islands">
2 <h2>Features</h2>
3
4 <div class="island_row">
5 <div class="island_cell">
6 <div class="island">
7 <div class="island_title">FLOS (free, libre and open-source) software</div>
8 RocketGit is licensed under
9 the GNU General Public License v3+, therefore you have the freedom
10 to share and change all versions of the program and you can
11 distribute your changes as well. No vendor lock-in.
12 </div>
13 </div>
14
15 <div class="island_cell">
16 <div class="island">
17 <div class="island_title">Fastest</div>
18 RocketGit is extremely fast as it doesn't contain any Java,
19 Javascript or Flash. And we plan to rewrite it in C for maximum speed.
20 </div>
21 </div>
22
23 <div class="island_cell">
24 <div class="island">
25 <div class="island_title">Lightest</div>
26 RocketGit is really compact, therefore even if you choose to
27 install it on your machine instead of using it in your web
28 browser, you only need a very small virtual machine for
29 this (1 core, 256MiB RAM are enough).
30 </div>
31 </div>
32 </div>
33
34 <div class="island_row">
35 <div class="island_cell">
36 <div class="island">
37 <div class="island_title">Ready to go</div>
38 You can just open your web browser and start using
39 RocketGit, but even if you choose to install RocketGit on your
40 machine you can have it up and running in under 2 minutes. You
41 can say goodbye to lengthy and boring installations!
42 </div>
43 </div>
44
45 <div class="island_cell">
46 <div class="island">
47 <div class="island_title">Very easy to maintain</div>
48 RocketGit has very little dependencies, all packed
49 in the main-stream distributions. You just upgrade your
50 operating system and RocketGit will be up-to-date too.
51 </div>
52 </div>
53
54 <div class="island_cell">
55 <div class="island">
56 <div class="island_title">Corporate friendly</div>
57 RocketGit is SELinux aware (we wrote the policy),
58 therefore you can keep your system secure when
59 using RocketGit.
60 </div>
61 </div>
62 </div>
63
64 <div class="island_row">
65 <div class="island_cell">
66 <div class="island">
67 <div class="island_title">Platform independent</div>
68 RocketGit is the fastest and lightest platform independent Git hosting
69 solution currently available on the market.
70 You can use RocketGit in your web browser (no matter what
71 operating system is running on your machine) or you can choose to
72 install RocketGit on your machine (natively, if you are
73 using Linux, or in a virtual machine, otherwise).
74 </div>
75 </div>
76
77 <div class="island_cell">
78 <div class="island">
79 <div class="island_title">Integrated bug tracker</div>
80 We built the simplest and the most powerful bug tracker.
81 Minimal input and flexible label based tagging. Then, you can
82 create custom searches and even save them to reuse.
83 </div>
84 </div>
85
86 <div class="island_cell">
87 <div class="island">
88 <div class="island_title">Easy to contribute</div>
89 With the anonymous push feature, to contribute to a project becomes
90 very easy: a clone and a push. You don't even need an account on
91 rocketgit.com.
92 </div>
93 </div>
94 </div>
95
96 <div class="island_row">
97 <div class="island_cell">
98 <div class="island">
99 <div class="island_title">Powerful rights management</div>
100 You have a lot of possibilities to block access to a repository.
101 You can filter by IPv4/IPv6 addresses (including prefix lenght),
102 by reference path (regex), by path (regex). You can reject commits
103 based on size, bad whitespace or operation (create/update/delete) of
104 branches/tags. You can control the non fast-forwards pushes and the
105 merges.
106 </div>
107 </div>
108
109 <div class="island_cell">
110 <div class="island">
111 <div class="island_title">Built on top of top software</div>
112 We use the best products to build upon: Linux, Git, PostgreSQL,
113 Apache, PHP and SELinux.
114 </div>
115 </div>
116 </div>
117
118 </div>
File root/themes/default/hints/ssh/key.html changed (mode: 100644) (index 6821da6..35cd647)
... ... Host @@rg_ssh_host@@<br />
19 19
20 20 To see the fingerprint of your local key (for comparison):<br /> To see the fingerprint of your local key (for comparison):<br />
21 21 <code> <code>
22 ssh-keygen -f ~/.ssh/rocketgit1 -l</br />
22 ssh-keygen -f ~/.ssh/rocketgit1 -l<br />
23 23 </code> </code>
File root/themes/default/index.html changed (mode: 100644) (index 0c87c71..c615232)
12 12 <div id="container"> <div id="container">
13 13
14 14 <div id="header"> <div id="header">
15 <a class="logo" href="/">RocketGit</a>
15 <div class="logo">
16 <a href="/">RocketGit</a> Rocket your launch!
17 </div>
16 18
17 19 <div class="user"> <div class="user">
18 @@if("@@login_ui::username@@" != ""){{
20 <a href="/op/download">Download</a>
21 <a href="/op/features">Features</a>
22 <a href="/op/pricing">Pricing</a>
23 <a href="/op/tos">ToS</a>
24 <a href="/op/donate">Donate</a>
25 @@if(@@login_ui::uid@@ != 0){{
26 <a href="/op/suggestion">Suggestion</a>
27 <a href="/op/logout?token=@@logout_token@@">Logout</a>
19 28 <a href="@@login_ui::homepage@@">@@login_ui::username@@</a> <a href="@@login_ui::homepage@@">@@login_ui::username@@</a>
20 29 }}{{ }}{{
21 30 <a href="/op/login">Sign in</a> <a href="/op/login">Sign in</a>
 
23 32 </div> </div>
24 33 </div> <!-- header --> </div> <!-- header -->
25 34
35 <div class="slogan">
36 FLOS (free, libre and open-source) software for managing Git projects,
37 both public and private.
38 </div>
39
26 40 <!-- main menu --> <!-- main menu -->
27 41 <div id="menus"> <div id="menus">
28 42 <div class="menu"> <div class="menu">
 
30 44 @@if(@@login_ui::uid@@ != 0){{<li@@if(@@menu::settings@@ == 1){{ class="selected"}}{{}}><a href="/op/settings">Settings</a></li>}}{{}} @@if(@@login_ui::uid@@ != 0){{<li@@if(@@menu::settings@@ == 1){{ class="selected"}}{{}}><a href="/op/settings">Settings</a></li>}}{{}}
31 45 <li@@if(@@menu::repo@@ == 1){{ class="selected"}}{{}}><a href="/op/repo">Repositories</a></li> <li@@if(@@menu::repo@@ == 1){{ class="selected"}}{{}}><a href="/op/repo">Repositories</a></li>
32 46 @@if(@@login_ui::is_admin@@ == 1){{<li@@if(@@menu::admin@@ == 1){{ class="selected"}}{{}}><a href="/op/admin">Admin</a></li>}}{{}} @@if(@@login_ui::is_admin@@ == 1){{<li@@if(@@menu::admin@@ == 1){{ class="selected"}}{{}}><a href="/op/admin">Admin</a></li>}}{{}}
33 @@if(@@login_ui::uid@@ != 0){{<li@@if(@@menu::suggestion@@ == 1){{ class="selected"}}{{}}><a href="/op/suggestion">Suggestion</a></li>}}{{}}
34 @@if(@@login_ui::uid@@ != 0){{<li@@if(@@menu::logout@@ == 1){{ class="selected"}}{{}} ><a href="/op/logout?token=@@logout_token@@">Logout</a></li>}}{{}}
35 47 </ul> </ul>
36 48 </div> </div>
37 49
 
48 60
49 61 <div id="footer"> <div id="footer">
50 62 <div id="footer_logo"> <div id="footer_logo">
51 <img src="@@IMG:logo/rg4.png@@" alt="RocketGit logo" /><br />
52 <a class="logo" href="/">RocketGit</a>
63 <img src="@@IMG:logo/rg6.png@@" alt="RocketGit logo" /><br />
64 <div class="logo">
65 <a href="/">RocketGit</a>
66 </div>
53 67 </div> </div>
54 68
55 69 <div id="footer_info"> <div id="footer_info">
File root/themes/default/logo/rg6.png added (mode: 100644) (index 0000000..a48b694)
File root/themes/default/main.css changed (mode: 100644) (index 33098c0..b2eb00b)
... ... form input[type="text"], form input[type="password"], form textarea, form select
45 45 } }
46 46 form select option { padding: 1px 4px 1px 4px; } form select option { padding: 1px 4px 1px 4px; }
47 47 form input[type="submit"] { form input[type="submit"] {
48 color: #FF2700;
48 color: red;
49 49 display: inline-block; display: inline-block;
50 50 font-weight: bold; font-weight: bold;
51 51 font-size: 11pt; font-size: 11pt;
 
... ... form input[type="submit"] {
67 67 float: left; float: left;
68 68 font-size: 16pt; font-size: 16pt;
69 69 font-weight: bold; font-weight: bold;
70 text-decoration: none;
70 padding: 10px 15px;
71 xxx-vertical-align: bottom;
72 color: yellow;
73 font-style: italic;
74 }
75 .logo a {
71 76 text-shadow: 0 0 2px yellow; text-shadow: 0 0 2px yellow;
72 color: #FF2700;
73 padding: 5px 12px 5px 15px;
74 vertical-align: bottom;
75 xxx-display: inline;
77 color: red;
78 text-decoration: none;
79 font-size: 20pt;
80 font-style: normal;
81 }
82
83 .slogan {
84 font-size: 16pt;
85 font-weight: bold;
86 font-style: italic;
87 line-height: 120%;
88 color: yellow;
89 padding: 5px 15px;
76 90 } }
77 91
78 92 .user { .user {
79 padding: 5px 15px 5px 0px;
93 padding: 10px 15px;
80 94 float: right; float: right;
81 95 } }
82 96 .user a { .user a {
 
... ... form input[type="submit"] {
85 99 text-decoration: none; text-decoration: none;
86 100 color: #000000; color: #000000;
87 101 text-shadow: 0 0 3px #ffffff; text-shadow: 0 0 3px #ffffff;
88 xxx-padding: 3px 12px 3px 0px;
89 xxx-padding: 3px 0px 3px 0px;
102 padding-left: 15px;
90 103 } }
91 104
92 105 #menus { #menus {
 
... ... form input[type="submit"] {
110 123 font-weight: bold; font-weight: bold;
111 124 padding: 5px 15px; padding: 5px 15px;
112 125 } }
113 .menu ul li a:hover { color: #FF2700; }
126 .menu ul li a:hover { color: red; }
114 127 .menu ul li.selected { background-color: #BBB; } .menu ul li.selected { background-color: #BBB; }
115 128 .menu ul li.selected a:hover { color: #CCC; } .menu ul li.selected a:hover { color: #CCC; }
116 129
 
... ... form input[type="submit"] {
134 147
135 148 #header { #header {
136 149 overflow: hidden; overflow: hidden;
137 xxx-border-bottom: 1px solid #000000;
138 box-shadow: 0px 2px 3px #666666;
150 box-shadow: 0px 4px 6px #666666;
139 151 background-color: #888888; background-color: #888888;
140 152 width: 100%; width: 100%;
141 margin-bottom: 4px;
153 margin-bottom: 6px;
154 line-height: 120%;
142 155 } }
143 156 #header table { #header table {
144 157 border-collapse: collapse; border-collapse: collapse;
 
... ... form input[type="submit"] {
162 175 line-height: 120%; line-height: 120%;
163 176 } }
164 177
165 tos {
166 }
167
168 178 #footer { #footer {
169 179 width: 100%; width: 100%;
170 180 overflow: hidden; overflow: hidden;
 
... ... tos {
173 183 padding: 0 15px; padding: 0 15px;
174 184 display: table-row; display: table-row;
175 185 vertical-align: bottom; vertical-align: bottom;
186 height: 100px;
187 box-shadow: 0px -4px 6px #666666;
176 188 } }
177 189 #footer_logo { #footer_logo {
178 190 padding: 10px 0; padding: 10px 0;
179 191 float: left; float: left;
180 margin-left: 12px;
181 display: block;
182 border: 1px white;
183 192 } }
193 #footer_logo img { margin-left: auto; margin-right: auto; display: block; }
184 194 #footer_info { #footer_info {
185 195 color: #ffffff; color: #ffffff;
186 background-color: #888888;
187 196 padding: 5px; padding: 5px;
188 197 font-size: 11pt; font-size: 11pt;
189 line-height: 120%;
190 float: left;
198 line-height: 115%;
191 199 margin-left: 20px; margin-left: 20px;
192 display: block;
193 border: 1px white;
200 float: left;
194 201 } }
195 202
196 203 .horizontal_buttons { .horizontal_buttons {
 
... ... tos {
236 243
237 244 .error { .error {
238 245 font-weight: bold; font-weight: bold;
239 color: #FF2700;
246 color: red;
240 247 } }
241 248
242 249 .form_item_title {} .form_item_title {}
 
... ... tos {
249 256
250 257 .blob_title { .blob_title {
251 258 font-size: 11pt; font-size: 11pt;
252 color: #FF2700;
259 color: red;
253 260 } }
254 261
255 262 .source { .source {
 
... ... tos {
314 321 } }
315 322
316 323 .error {} .error {}
317 .error b { color: #FF2700; font-weight: bold; font-size: 11pt; }
324 .error b { color: red; font-weight: bold; font-size: 11pt; }
318 325 .error ul { padding-left: 15pt; } .error ul { padding-left: 15pt; }
319 326 .error ul li {} .error ul li {}
320 327
 
... ... tos {
406 413 margin-top: 5px; margin-top: 5px;
407 414 background-color: #CCC; background-color: #CCC;
408 415 padding: 5px; padding: 5px;
409 border: 1px solid #FF2700;
410 color: #FF2700;
416 border: 1px solid red;
417 color: red;
411 418 display: table; display: table;
412 419 } }
413 420
 
... ... tos {
421 428
422 429 .tos { .tos {
423 430 margin-top: 5px; margin-top: 5px;
424 border: 1px solid #999998;
431 xxx-border: 1px solid #999998;
425 432 padding: 5px; padding: 5px;
426 border-radius: 4px 4px 4px 4px;
433 xxx-border-radius: 4px 4px 4px 4px;
427 434 display: table; display: table;
428 435 } }
429 .tos h2 { margin-bottom: 5px; }
430 436 .tos ul { x-list-style-type: none; padding-left: 15px; } .tos ul { x-list-style-type: none; padding-left: 15px; }
431 437
432 438 .page_title { .page_title {
 
... ... tos {
435 441 font-weight: bold; font-weight: bold;
436 442 } }
437 443
438 .first_page {
444 .islands {
439 445 margin-top: 5px; margin-top: 5px;
440 border: 1px solid #999998;
441 padding: 5px;
446 font-size: 13pt;
447 width: 700px;
448 line-height: 115%;
449 }
450
451 .island_row {
452 display: table;
453 }
454
455 .island_cell {
456 display: table-cell;
457 padding: 15px;
458 }
459
460 .island {
442 461 border-radius: 4px 4px 4px 4px; border-radius: 4px 4px 4px 4px;
462 border: 1px solid #999998;
443 463 font-size: 13pt; font-size: 13pt;
444 width: 600px;
445 464 line-height: 115%; line-height: 115%;
465 padding: 10px;
466 box-shadow: 0px 2px 3px #666666;
467 display: table-cell;
468 }
469
470 .island_title {
471 color: red;
472 font-size: 14pt;
473 font-weight: bold;
446 474 } }
File root/themes/default/main.html changed (mode: 100644) (index aee3807..e238814)
1 <div class="first_page">
2 <div style="font-size: 23pt; font-weight: bold;">
3 Welcome to RocketGit!
1 <div class="islands">
2 <h2>Welcome to RocketGit!</h2>
3
4 <div class="island_row">
5 <div class="island_cell">
6 <div class="island">
7 <div class="island_title">FLOSS</div>
8 We know that many people find inappropriate to host their projects on a
9 proprietary platform. Therefore, we created RocketGit.
10 </div>
11 </div>
12
13 <div class="island_cell">
14 <div class="island">
15 <div class="island_title">Goal</div>
16 Our goal is to become the best FLOS (free, libre and open-source)
17 software for managing Git projects, both public and private.
18 With your help, we will reach our goal. Thank you!
19 </div>
20 </div>
21
22 <div class="island_cell">
23 <div class="island">
24 <div class="island_title">No Enterprise Edition</div>
25 In case you are wondering about the Enterprise Edition, we are happy to
26 inform you that this is the same version as the one running here, on
27 rocketgit.com. Therefore, you can choose to run RocketGit
28 inside the firewall (on-premise) without losing the FLOSS benefits.
29 </div>
30 </div>
31 </div>
32
33 <div class="island_row">
34 <div class="island_cell">
35 <div class="island">
36 <div class="island_title">Business</div>
37 Perhaps you want to know how we intend to sustain this business without a
38 mandatory fee for using the Enterprise Edition. We plan to do this by
39 offering paid support, by charging for customization, by accepting ads
40 (very targeted and no Flash/JavaScript) and
41 <a href="/op/donate">donations</a>.
42 Please support us to be able to keep this project going.
43 </div>
44 </div>
45
46 <div class="island_cell">
47 <div class="island">
48 <div class="island_title">Private repositories?</div>
49 Here, at rocketgit.com, you can create an unlimited number
50 of repositories, both public and private.
51 </div>
52 </div>
53
54 <div class="island_cell">
55 <div class="island">
56 <div class="island_title">Install</div>
57 To install this software on your server, just go to
58 <a href="http://rocketgit.com/user/catalinux/rocketgit/source">RocketGit repo</a>
59 and follow the instructions. It only takes two minutes.
60 In the near future we will provide pre-made virtual machine images to
61 achieve under 10 seconds install time.
62 </div>
63 </div>
4 64 </div> </div>
5 <br />
6
7 We know that a lot of people are not happy at all to host a project
8 on a proprietary platform. So, we created this project.<br />
9 <br />
10
11 Our goal is to become the best FLOSS (free, libre and open-source)
12 software for managing Git both public and private projects.
13 With your help, we will reach our goal. Thank you!<br />
14 <br />
15
16 If you are wondering about the Enterprise Edition, the good news is that
17 this is the same version as the one running here, on rocketgit.com.
18 You can run this software inside the firewall using free software.<br />
19 <br />
20
21 Maybe you want to know how do we intend to sustain the business without
22 a mandatory fee for using the Enterprise Edition.
23 We will do it by offering paid support, by charging for customizations,
24 ads (very targeted and no flash) and donations.
25 Please support us to be able to keep going this project.<br />
26 <br />
27
28 Here at rocketgit.com, you can create an unlimited number of repositories,
29 both public and private.<br />
30 <br />
31
32 To install this software on your server, just go to
33 <a href="http://rocketgit.com/user/catalinux/rocketgit/source"></a>
34 and follow the instructions. Takes two minutes. In the near future we will
35 provide pre-made virtual machine images to achieve under 10 seconds
36 install time.<br />
37 <br />
38
39 You can create an account <a href="/op/create_account">here</a>.<br />
65
66 <div class="island_row">
67 <div class="island_cell">
68 <div class="island">
69 <div class="island_title">Start</div>
70 You can create an account <a href="/op/create_account">here</a>.
71 <br />
72 <br />
73 <b>Enjoy using RocketGit! Rocket your launch!</b>
74 </div>
75 </div>
76 </div>
77
40 78 </div> </div>
File root/themes/default/pricing.html added (mode: 100644) (index 0000000..19d0bc5)
1 <div class="islands">
2 <h2>Pricing</h2>
3
4 <div class="island_row">
5 <div class="island_cell">
6 <div class="island">
7 <div class="island_title">rocketgit.com is free</div>
8 You can have an unlimited number of both public and private
9 repositories. Free of charge.
10 </div>
11 </div>
12
13 <div class="island_cell">
14 <div class="island">
15 <div class="island_title">Behind the firewall (on-premise)</div>
16 You can have an ulimited behind-the-firewall installations.
17 Free of charge.
18 </div>
19 </div>
20
21 <div class="island_cell">
22 <div class="island">
23 <div class="island_title">Support</div>
24 If you need support, please contact us at support@rocketgit.com
25 to discuss your options.
26 </div>
27 </div>
28 </div>
29
30 </div>
File root/themes/default/repo/add_edit.html changed (mode: 100644) (index 2a8d9b6..6ffa2a8)
17 17 <br /> <br />
18 18 <br /> <br />
19 19
20 <label for="license" class="form_item_title">License</label><br />
20 <label for="license" class="form_item_title">License(s)</label><br />
21 21 <input type="text" name="license" value="@@ri::license@@" /> <input type="text" name="license" value="@@ri::license@@" />
22 22 <br /> <br />
23 23 <br /> <br />
File root/themes/default/tos.html changed (mode: 100644) (index 26c1f1a..f499325)
1 1 <div class="tos"> <div class="tos">
2 2 <h2>Terms of service v1</h2> <h2>Terms of service v1</h2>
3 <br />
4
3 5 <ul> <ul>
4 6 <li>You must not abuse RocketGit servers.</li> <li>You must not abuse RocketGit servers.</li>
5 7 <li>You must not abuse other's servers using RocketGit as a proxy.</li> <li>You must not abuse other's servers using RocketGit as a proxy.</li>
File samples/config.php changed (mode: 100644) (index d122ae1..d7e5cb3)
... ... $rg_ssh_paras = "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
37 37
38 38 // From what address we will send mails (forgot pass etc.)? // From what address we will send mails (forgot pass etc.)?
39 39 $rg_admin_name = "RocketGit Admin"; $rg_admin_name = "RocketGit Admin";
40 $rg_admin_email = "admin@site.tld";
40 $rg_admin_email = "op@rocketgit.com";
41 41
42 42 // Set to 1 to allow any visitor to create an account. // Set to 1 to allow any visitor to create an account.
43 43 // Else, only the admin can create accounts. // Else, only the admin can create accounts.
File scripts/cron.php changed (mode: 100644) (index d0ae805..e14d92c)
... ... $r = rg_fixes_update($db);
41 41 if ($r !== TRUE) if ($r !== TRUE)
42 42 exit(1); exit(1);
43 43
44 // Store the timestamp of the first install
45 $first_install = rg_state_get($db, "first_install");
46 if ($first_install == 0)
47 rg_state_set($db, "first_install", time());
48
49 $install_id = rg_state_get($db, "install_id");
50 if (empty($install_id))
51 rg_state_set($db, "install_id", sha512(microtime(TRUE)));
52
44 53 if ((gmdate("H") == 0) && (gmdate("i") == 3)) { if ((gmdate("H") == 0) && (gmdate("i") == 3)) {
45 54 while (1) { while (1) {
46 55 rg_log("Compute repository sizes if dirty..."); rg_log("Compute repository sizes if dirty...");
File tests/.gitignore changed (mode: 100644) (index 4ad44a7..5da79e9)
... ... tree1.copy
6 6 repos repos
7 7 afile.txt afile.txt
8 8 err-* err-*
9 *.diff
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/rocketgit

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/rocketgit

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master