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 71ffd566d62b019302ffaeebaae0ab5edddc93d3

Bulk changes.
Author: Catalin(ux) M. BOIE
Author date (UTC): 2011-03-05 23:42
Committer name: Catalin(ux) M. BOIE
Committer date (UTC): 2011-03-05 23:42
Parent(s): 4a55c6d1cbe7d70e3982412d93c451d1f22e9448
Signing key:
Tree: 7df094e6a7b4279539bd4685f7059aaa667e9a7b
File Lines added Lines deleted
TODO 4 1
admin/sql.php 3 2
inc/admin/admin.php 12 0
inc/admin/repos/repos.php 23 0
inc/admin/users/add.form.php 44 0
inc/admin/users/add.php 33 0
inc/admin/users/users.php 10 4
inc/login/login.form.php 1 0
inc/login/login.php 1 1
inc/repo.inc.php 7 3
inc/repo/repo.form.php 1 0
inc/repo/repo.php 1 1
inc/sess.inc.php 8 3
inc/user.inc.php 113 13
root/index.php 10 8
File TODO changed (mode: 100644) (index 1192868..27052f2)
3 3 [ ] Allow to configure the limit of the patch size to prevent abuses. [ ] Allow to configure the limit of the patch size to prevent abuses.
4 4 [ ] Allow to configure to refuse binary files. [ ] Allow to configure to refuse binary files.
5 5 [ ] Allow to configure to refuse commits with broken spcaes/tab mixes. [ ] Allow to configure to refuse commits with broken spcaes/tab mixes.
6 [ ]
6 [ ] Add a repo_prop_set/get function that will set/get a file in .git folder. THis way we can
7 speed up some lookups (no need for database). Hm.
8 [ ] When we delete an repository, we will do repo_prop_set(repo, disabled) and we will
9 return OK, in the background we will do the removing. Do not forget to also remove clones. Hm.
File admin/sql.php changed (mode: 100644) (index cbbf521..afdd9d0)
... ... $res = sql_query($db, $sql);
38 38 if ($res === FALSE) if ($res === FALSE)
39 39 echo "WARN: Cannot create 'keys' table!\n"; echo "WARN: Cannot create 'keys' table!\n";
40 40
41 $sql = "CREATE TABLE users (uid INT PRIMARY KEY, user TEXT, salt TEXT"
41 $sql = "CREATE TABLE users (uid INTEGER PRIMARY KEY, user TEXT, salt TEXT"
42 42 . ", pass TEXT, email TEXT, itime INTEGER" . ", pass TEXT, email TEXT, itime INTEGER"
43 43 . ", suspended INTEGER" . ", suspended INTEGER"
44 44 . ", session_time INTEGER" . ", session_time INTEGER"
45 . ", last_seen INTEGER)";
45 . ", last_seen INTEGER"
46 . ", is_admin INTEGER)";
46 47 $res = sql_query($db, $sql); $res = sql_query($db, $sql);
47 48 if ($res === FALSE) if ($res === FALSE)
48 49 echo "WARN: Cannot create 'users' table!\n"; echo "WARN: Cannot create 'users' table!\n";
File inc/admin/admin.php changed (mode: 100644) (index f8a6d58..e206e85)
1 1 <?php <?php
2 xlog("/admin");
3
4 if ($gg_ui['is_admin'] != 1) {
5 $_admin = "You do not have access here!";
6 return;
7 }
8
2 9 $subop = @intval($_REQUEST['subop']); $subop = @intval($_REQUEST['subop']);
3 10
4 11 // menu // menu
 
... ... case 1: // users
15 22 include($INC . "/admin/users/users.php"); include($INC . "/admin/users/users.php");
16 23 $_admin_body .= $_admin_users; $_admin_body .= $_admin_users;
17 24 break; break;
25
26 case 2: // repos
27 include($INC . "/admin/repos/repos.php");
28 $_admin_body .= $_admin_repos;
29 break;
18 30 } }
19 31
20 32 $_admin = $_admin_menu . $_admin_body; $_admin = $_admin_menu . $_admin_body;
File inc/admin/repos/repos.php added (mode: 100644) (index 0000000..4a0e298)
1 <?php
2 xlog("/admin/repos");
3
4 $subsubop = @intval($_REQUEST['subsubop']);
5
6 // menu
7 $_admin_repos_url = $_admin_url . "&amp;subop=$subop";
8 $_admin_repos_menu = "";
9 $_admin_repos_menu .= "[<a href=\"$_admin_repos_url&amp;subsubop=1\">List</a>]";
10 //$_admin_repos_menu .= "&nbsp;[<a href=\"$_admin_repos_url&amp;subsubop=2\">Add</a>]";
11 $_admin_repos_menu .= "<br />\n";
12 $_admin_repos_menu .= "<br />\n";
13
14 $_admin_repos_body = "";
15
16 switch ($subsubop) {
17 case 1: // list
18 $_admin_repos_body .= repo_list($db, $_admin_repos_url . "&amp;subsubop=$subsubop", 0);
19 break;
20 }
21
22 $_admin_repos = $_admin_repos_menu . $_admin_repos_body;
23 ?>
File inc/admin/users/add.form.php added (mode: 100644) (index 0000000..e42bdc2)
1 <?php
2
3 $_form = '
4 <form type="post" action="' . $_SERVER['PHP_SELF'] . '">
5 <input type="hidden" name="op" value="' . $op . '">
6 <input type="hidden" name="subop" value="' . $subop . '">
7 <input type="hidden" name="subsubop" value="' . $subsubop . '">
8 <input type="hidden" name="doit" value="1">
9
10 <table>
11 <tr>
12 <td>Name:</td>
13 <td><input type="text" name="xuser" value="' . $xuser . '"/></td>
14 </tr>
15
16 <tr>
17 <td>E-mail:</td>
18 <td><input type="text" name="email" value="' . $email . '"/></td>
19 </tr>
20
21 <tr>
22 <td>Password:</td>
23 <td><input type="password" name="xpass" value="' . $xpass . '"/></td>
24 </tr>
25
26 <tr>
27 <td>Admin?</td>
28 <td>
29 <select name="is_admin">
30 <option value="0">No</option>
31 <option value="1">Yes</option>
32 </select>
33 </td>
34 </tr>
35
36 <tr>
37 <td colspan="2"><input type="submit" value="Go!"/></td>
38 </tr>
39 </table>
40 </form>
41 ';
42
43
44 ?>
File inc/admin/users/add.php added (mode: 100644) (index 0000000..bd02e82)
1 <?php
2 xlog("/admin/users/add");
3
4 $_user_add = "";
5
6 if ($doit == 1) {
7 $xuser = @$_REQUEST['xuser'];
8 $email = @$_REQUEST['email'];
9 $xpass = @$_REQUEST['xpass'];
10 xlog("xxx: " . print_r($_REQUEST, TRUE));
11 $is_admin = @intval($_REQUEST['is_admin']);
12
13 $_ui = user_info($db, 0, $xuser);
14 if ($_ui['ok'] == 0) {
15 $_user_add .= "Error: Internal error!";
16 } else if ($_ui['exists'] == 0) {
17 if (user_add($db, $xuser, $xpass, $email, $is_admin)) {
18 $_user_add .= "OK!<br />";
19 }
20 } else {
21 xlog("User already in use!");
22 $_user_add .= "Error: User already taken!";
23 }
24 } else {
25 $xuser = "";
26 $email = "";
27 $xpass = "";
28 }
29
30 include($INC . "/admin/users/add.form.php");
31 $_user_add .= $_form;
32
33 ?>
File inc/admin/users/users.php changed (mode: 100644) (index d98ec17..ef85c8a)
1 1 <?php <?php
2 xlog("/admin/users");
3
2 4 $subsubop = @intval($_REQUEST['subsubop']); $subsubop = @intval($_REQUEST['subsubop']);
3 5
4 6 // menu // menu
5 $_admin_users_url = $_SERVER['PHP_SELF'] . "?op=$op&amp;subop=$subop";
7 $_admin_users_url = $_admin_url . "&amp;subop=$subop";
6 8 $_admin_users_menu = ""; $_admin_users_menu = "";
7 9 $_admin_users_menu .= "[<a href=\"$_admin_users_url&amp;subsubop=1\">List</a>]"; $_admin_users_menu .= "[<a href=\"$_admin_users_url&amp;subsubop=1\">List</a>]";
8 10 $_admin_users_menu .= "&nbsp;[<a href=\"$_admin_users_url&amp;subsubop=2\">Add</a>]"; $_admin_users_menu .= "&nbsp;[<a href=\"$_admin_users_url&amp;subsubop=2\">Add</a>]";
 
... ... $_admin_users_menu .= "<br />\n";
11 13
12 14 $_admin_users_body = ""; $_admin_users_body = "";
13 15
14 switch ($subop) {
15 case 1: // users
16 $_admin_users_body .= user_list($db);
16 switch ($subsubop) {
17 case 1: // list
18 $_admin_users_body .= user_list($db, $_admin_users_url . "&amp;subsubop=$subsubop");
17 19 break; break;
20
21 case 2: //add
22 include($INC . "/admin/users/add.php");
23 $_admin_users_body .= $_user_add;
18 24 } }
19 25
20 26 $_admin_users = $_admin_users_menu . $_admin_users_body; $_admin_users = $_admin_users_menu . $_admin_users_body;
File inc/login/login.form.php changed (mode: 100644) (index 9c0c8a9..182216f)
... ... $_form = '
8 8 User: <input type="text" name="user" value="' . $user . '"><br /> User: <input type="text" name="user" value="' . $user . '"><br />
9 9 Password: <input type="password" name="pass" value="' . $pass . '"><br /> Password: <input type="password" name="pass" value="' . $pass . '"><br />
10 10 <input type="submit" value="Go!"> <input type="submit" value="Go!">
11 </form>
11 12 '; ';
12 13
13 14
File inc/login/login.php changed (mode: 100644) (index c832fb0..267d01d)
... ... $doit = @intval($_REQUEST['doit']);
4 4 $user = @$_COOKIE['user']; $user = @$_COOKIE['user'];
5 5 $pass = ""; $pass = "";
6 6
7 $_login = "";
7 $_login = "<br />\n";
8 8
9 9 if ($doit == 0) { if ($doit == 0) {
10 10 include($INC . "/login/login.form.php"); include($INC . "/login/login.form.php");
File inc/repo.inc.php changed (mode: 100644) (index b730482..9463070)
... ... function repo_create($db, $uid, $name, $public)
83 83 /* /*
84 84 * List repositories * List repositories
85 85 */ */
86 function repo_list($db, $uid)
86 function repo_list($db, $url, $uid)
87 87 { {
88 xlog("repo_list: uid=$uid...");
88 xlog("repo_list: url=$url, uid=$uid...");
89 89
90 $sql = "SELECT * FROM repos WHERE uid = $uid";
90 $add = "";
91 if ($uid > 0)
92 $add = " AND uid = $uid";
93
94 $sql = "SELECT * FROM repos WHERE 1 = 1" . $add;
91 95 $res = sql_query($db, $sql); $res = sql_query($db, $sql);
92 96 if ($res === FALSE) if ($res === FALSE)
93 97 return FALSE; return FALSE;
File inc/repo/repo.form.php changed (mode: 100644) (index 5a5f4f9..ab8add9)
... ... $_form = '
29 29 </tr> </tr>
30 30
31 31 </table> </table>
32 </form>
32 33 '; ';
33 34
34 35
File inc/repo/repo.php changed (mode: 100644) (index fda7752..3d10172)
... ... case 1: // create
25 25 break; break;
26 26
27 27 case 2: //list case 2: //list
28 $_body .= repo_list($db, $uid);
28 $_body .= repo_list($db, "", $uid);
29 29 break; break;
30 30 } }
31 31
File inc/sess.inc.php changed (mode: 100644) (index d5ad020..c22be6b)
... ... function sess_valid($db, $sid)
33 33 if (empty($sid)) if (empty($sid))
34 34 return FALSE; return FALSE;
35 35
36 $now = time();
36 37 $uid = FALSE; $uid = FALSE;
37 38
38 39 $e_sid = sql_escape($db, $sid); $e_sid = sql_escape($db, $sid);
39 40
40 $sql = "SELECT uid FROM sess WHERE sid = '$e_sid'";
41 $sql = "SELECT uid, expire FROM sess WHERE sid = '$e_sid'";
41 42 $res = sql_query($db, $sql); $res = sql_query($db, $sql);
42 43 if ($res === FALSE) { if ($res === FALSE) {
43 44 xlog("\tCannot select (" . sql_error() . ")!"); xlog("\tCannot select (" . sql_error() . ")!");
 
... ... function sess_valid($db, $sid)
45 46 } }
46 47 $row = sql_fetch_array($res); $row = sql_fetch_array($res);
47 48 sql_free_result($res); sql_free_result($res);
48 if (isset($row['uid']))
49 $uid = $row['uid'];
49 if (isset($row['uid'])) {
50 if ($row['expire'] >= $now)
51 $uid = $row['uid'];
52 else
53 xlog("\tSession too old (" . ($now - $row['expire']) . "s)");
54 }
50 55
51 56 xlog("\tuid=$uid."); xlog("\tuid=$uid.");
52 57
File inc/user.inc.php changed (mode: 100644) (index ab17c87..ead7291)
... ... function gg_user_error()
20 20 /* /*
21 21 * Add a user * Add a user
22 22 */ */
23 function user_add($db, $user, $pass, $email)
23 function user_add($db, $user, $pass, $email, $is_admin)
24 24 { {
25 xlog("user_add: user=$user, pass=$pass, email=$email...");
25 xlog("user_add: user=$user, pass=$pass, email=$email, is_admin=$is_admin...");
26 26
27 27 $itime = time(); $itime = time();
28 28 $e_salt = sha1(mt_rand() . microtime(TRUE)); $e_salt = sha1(mt_rand() . microtime(TRUE));
 
... ... function user_add($db, $user, $pass, $email)
31 31 $e_user = sql_escape($db, $user); $e_user = sql_escape($db, $user);
32 32 $e_email = sql_escape($db, $email); $e_email = sql_escape($db, $email);
33 33
34 $sql = "INSERT INTO users (user, salt, pass, email, itime)"
34 $sql = "INSERT INTO users (user, salt, pass, email, itime, is_admin)"
35 35 . " VALUES ('$e_user', '$e_salt', '$e_sha1pass', '$e_email'" . " VALUES ('$e_user', '$e_salt', '$e_sha1pass', '$e_email'"
36 . ", $time)";
36 . ", $itime, $is_admin)";
37 37 $res = sql_query($db, $sql); $res = sql_query($db, $sql);
38 38 if ($res === FALSE) { if ($res === FALSE) {
39 39 gg_user_set_error("Cannot insert user (" . sql_error() . ")!"); gg_user_set_error("Cannot insert user (" . sql_error() . ")!");
 
... ... function user_info($db, $uid, $user)
69 69 { {
70 70 xlog("user_info: uid=[$uid], user=[$user]..."); xlog("user_info: uid=[$uid], user=[$user]...");
71 71
72 $ret = array();
73 $ret['ok'] = 0;
74 $ret['exists'] = 0;
75
72 76 if ($uid > 0) { if ($uid > 0) {
73 77 $add = " AND uid = " . sprintf("%u", $uid); $add = " AND uid = " . sprintf("%u", $uid);
74 78 } else { } else {
 
... ... function user_info($db, $uid, $user)
76 80 $add = " AND user = '$e_user'"; $add = " AND user = '$e_user'";
77 81 } }
78 82
79 $sql = "SELECT * FROM users WHERE suspended = 0" . $add;
83 $sql = "SELECT * FROM users WHERE 1 = 1" . $add;
80 84 $res = sql_query($db, $sql); $res = sql_query($db, $sql);
81 85 if ($res === FALSE) { if ($res === FALSE) {
82 86 gg_user_set_error("Cannot get info (" . sql_error() . ")!"); gg_user_set_error("Cannot get info (" . sql_error() . ")!");
83 return FALSE;
87 return $ret;
84 88 } }
89
90 $ret['ok'] = 1;
85 91 $row = sql_fetch_array($res); $row = sql_fetch_array($res);
86 92 sql_free_result($res); sql_free_result($res);
87 93 if (!isset($row['user'])) { if (!isset($row['user'])) {
88 gg_user_set_error("User not found (" . sql_error() . ")!");
89 return FALSE;
94 gg_user_set_error("User not found!");
95 return $ret;
90 96 } }
91 97
98 $row['ok'] = 1;
99 $row['exists'] = 1;
92 100 return $row; return $row;
93 101 } }
94 102
95 103 /* /*
96 104 * Test if login is OK * Test if login is OK
97 105 */ */
98 function user_login($db, $sid)
106 function user_login($db, $sid, &$ui)
99 107 { {
100 108 xlog("user_login: sid=$sid..."); xlog("user_login: sid=$sid...");
101 109
102 110 if (($uid = sess_valid($db, $sid))) { if (($uid = sess_valid($db, $sid))) {
111 $ui = user_info($db, $uid, "");
103 112 sess_update($db, $sid); sess_update($db, $sid);
104 113 return $uid; return $uid;
105 114 } }
 
... ... function user_login($db, $sid)
111 120 return FALSE; return FALSE;
112 121
113 122 $ui = user_info($db, 0, $user); $ui = user_info($db, 0, $user);
114 if ($ui === FALSE) {
123 if ($ui['ok'] == 0) {
124 gg_user_set_error("Internal error");
125 return FALSE;
126 }
127
128 if ($ui['exists'] == 0) {
115 129 gg_user_set_error("Invalid user or pass!"); gg_user_set_error("Invalid user or pass!");
116 130 return FALSE; return FALSE;
117 131 } }
 
... ... function user_login($db, $sid)
130 144 return $ui['uid']; return $ui['uid'];
131 145 } }
132 146
147 /*
148 * Suspend an account
149 * 1=suspend, 0=unsuspend
150 */
151 function user_suspend($db, $uid, $op)
152 {
153 xlog("user_suspend: uid=$uid, op=$op");
154
155 $now = time();
156
157 if ($op == 1)
158 $v = $now;
159 else
160 $v = 0;
161
162 $sql = "UPDATE users SET suspended = $v WHERE uid = $uid";
163 $res = sql_query($db, $sql);
164 if ($res === FALSE)
165 return FALSE;
166 sql_free_result($res);
167
168 return TRUE;
169 }
170
171 /*
172 * Make/remove admin
173 * 1=make, 0=remove
174 */
175 function user_admin($db, $uid, $op)
176 {
177 xlog("user_admin: uid=$uid, op=$op");
178
179 $now = time();
180
181 $sql = "UPDATE users SET is_admin = $op WHERE uid = $uid";
182 $res = sql_query($db, $sql);
183 if ($res === FALSE)
184 return FALSE;
185 sql_free_result($res);
186
187 return TRUE;
188 }
189
133 190 /* /*
134 191 * List users * List users
135 192 */ */
136 function user_list($db)
193 function user_list($db, $url)
137 194 { {
138 xlog("user_list...");
195 xlog("user_list, url=$url...");
196
197 $ret = "";
198
199 $xuid = sprintf("%u", @$_REQUEST['xuid']);
200
201 if (isset($_REQUEST['suspend'])) {
202 if (!user_suspend($db, $xuid, $_REQUEST['suspend']))
203 $ret .= "<font color=red>Cannot suspend!</font><br />";
204 }
205
206 if (isset($_REQUEST['admin'])) {
207 if (!user_admin($db, $xuid, $_REQUEST['admin']))
208 $ret .= "<font color=red>Cannot make admin!</font><br />";
209 }
210
211 if (isset($_REQUEST['remove'])) {
212 if (!user_remove($db, $xuid))
213 $ret .= "<font color=red>Cannot remove!</font><br />";
214 }
139 215
140 216 $sql = "SELECT * FROM users ORDER BY user"; $sql = "SELECT * FROM users ORDER BY user";
141 217 $res = sql_query($db, $sql); $res = sql_query($db, $sql);
 
... ... function user_list($db)
144 220 return FALSE; return FALSE;
145 221 } }
146 222
147 $ret = "<table>\n";
223 $ret .= "<table>\n";
148 224 $ret .= "<tr>\n"; $ret .= "<tr>\n";
149 225 $ret .= " <th>Name</th>\n"; $ret .= " <th>Name</th>\n";
150 226 $ret .= " <th>E-mail</th>\n"; $ret .= " <th>E-mail</th>\n";
227 $ret .= " <th>Admin</th>\n";
151 228 $ret .= " <th>Creation date</th>\n"; $ret .= " <th>Creation date</th>\n";
152 229 $ret .= " <th>Suspended?</th>\n"; $ret .= " <th>Suspended?</th>\n";
153 230 $ret .= " <th>Session time</th>\n"; $ret .= " <th>Session time</th>\n";
154 231 $ret .= " <th>Last seen</th>\n"; $ret .= " <th>Last seen</th>\n";
232 $ret .= " <th>Operations</th>\n";
155 233 $ret .= "</tr>\n"; $ret .= "</tr>\n";
156 234 while (($row = sql_fetch_array($res))) { while (($row = sql_fetch_array($res))) {
157 235 $ret .= "<tr>\n"; $ret .= "<tr>\n";
158 236 $ret .= " <td>" . $row['user'] . "</td>\n"; $ret .= " <td>" . $row['user'] . "</td>\n";
159 237 $ret .= " <td>" . $row['email'] . "</td>\n"; $ret .= " <td>" . $row['email'] . "</td>\n";
238 $ret .= " <td>" . ($row['is_admin'] == 1 ? "Yes" : "No") . "</td>\n";
160 239 $ret .= " <td>" . date("Y-m-d H:i:s", $row['itime']) . "</td>\n"; $ret .= " <td>" . date("Y-m-d H:i:s", $row['itime']) . "</td>\n";
161 240 $ret .= " <td>" . ($row['suspended'] == 0 ? "No" : "Yes") . "</th>\n"; $ret .= " <td>" . ($row['suspended'] == 0 ? "No" : "Yes") . "</th>\n";
162 241 $ret .= " <td>" . $row['session_time'] . "s</td>\n"; $ret .= " <td>" . $row['session_time'] . "s</td>\n";
163 242 $ret .= " <td>" . date("Y-m-d H:i:s", $row['last_seen']) . "</td>\n"; $ret .= " <td>" . date("Y-m-d H:i:s", $row['last_seen']) . "</td>\n";
243 // operations
244 // suspend
245 $ret .= " <td>";
246 $_url = $url . "&amp;xuid=" . $row['uid'];
247 $v = 1; $t = "Suspend";
248 if ($row['suspended'] > 0) {
249 $t = "Unsuspend";
250 $v = 0;
251 }
252 $ret .= "[<a href=\"$_url&amp;suspend=$v\">$t</a>]";
253 // admin
254 $v = 1; $t = "Make admin";
255 if ($row['is_admin'] == 1) {
256 $t = "Remove admin";
257 $v = 0;
258 }
259 $ret .= "[<a href=\"$_url&amp;admin=$v\">$t</a>]";
260 // remove
261 if ($row['suspended'] > 0)
262 $ret .= "[<a href=\"$_url&amp;remove=1\">Remove!</a>]";
263 $ret .= " </td>";
164 264 $ret .= "</tr>\n"; $ret .= "</tr>\n";
165 265 } }
166 266 $ret .= "</table>\n"; $ret .= "</table>\n";
File root/index.php changed (mode: 100644) (index 0363c36..0398183)
... ... $sid = @$_COOKIE['sid'];
24 24 if (empty($sid)) if (empty($sid))
25 25 $sid = @$_REQUEST['sid']; $sid = @$_REQUEST['sid'];
26 26
27 xlog("_REQUEST: " . print_r($_REQUEST, TRUE));
28 xlog("_COOKIE: " . print_r($_COOKIE, TRUE));
27 29 xlog("Start! op=$op, doit=$doit, sid=$sid..."); xlog("Start! op=$op, doit=$doit, sid=$sid...");
28 30
29 31
 
... ... if ($db === FALSE)
46 48 die("Cannot open database!"); die("Cannot open database!");
47 49
48 50 // deal with login // deal with login
49 $uid = user_login($db, $sid);
51 $uid = user_login($db, $sid, $gg_ui);
50 52 if (($op == 1) && ($doit == 1) && ($uid == 0)) if (($op == 1) && ($doit == 1) && ($uid == 0))
51 53 $op = 0; $op = 0;
52 54
53 55 // deal with logout // deal with logout
54 56 if ($op == 9) { if ($op == 9) {
55 57 sess_destroy($db, $sid); sess_destroy($db, $sid);
56 $uid = "";
58 $uid = 0;
59 $gg_ui = FALSE;
57 60 } }
58 61
59 62 // menu // menu
60 63 $url = $_SERVER['PHP_SELF'] . "?a=1"; $url = $_SERVER['PHP_SELF'] . "?a=1";
61 64 $menu = ""; $menu = "";
62 $ui = user_info($db, $uid);
63 if ($ui === FALSE)
64 $u = "Not logged in";
65 else
66 $u = $ui['user'];
65 $u = "Not logged in";
66 if (isset($gg_ui['user']))
67 $u = $gg_ui['user'];
67 68 $menu .= "[$u]<br />\n"; $menu .= "[$u]<br />\n";
68 69 $menu .= "[<a href=\"$url&amp;op=1\">Login</a>]"; $menu .= "[<a href=\"$url&amp;op=1\">Login</a>]";
69 70 $menu .= "&nbsp;[<a href=\"$url&amp;op=2\">Repositories</a>]"; $menu .= "&nbsp;[<a href=\"$url&amp;op=2\">Repositories</a>]";
70 $menu .= "&nbsp;[<a href=\"$url&amp;op=3\">Admin</a>]";
71 if ($gg_ui['is_admin'] == 1)
72 $menu .= "&nbsp;[<a href=\"$url&amp;op=3\">Admin</a>]";
71 73 $menu .= "&nbsp;[<a href=\"$url&amp;op=9\">Logout</a>]"; $menu .= "&nbsp;[<a href=\"$url&amp;op=9\">Logout</a>]";
72 74
73 75
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