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.
<root> / root / index.php (179d76d26dc28c8a7949d8133eeeca0afc32e4d1) (3,359B) (mode 100644) [raw]
<?php
error_reporting(E_ALL);
ini_set("track_errors", "On");

$more = array();
$INC = dirname(__FILE__) . "/../inc";
require_once("/etc/rocketgit/config.php");
require_once($INC . "/init.inc.php");
require_once($INC . "/log.inc.php");
include_once($INC . "/sql.inc.php");
include_once($INC . "/struct.inc.php");
include_once($INC . "/user.inc.php");
include_once($INC . "/repo.inc.php");
include_once($INC . "/keys.inc.php");
include_once($INC . "/token.inc.php");
include_once($INC . "/prof.inc.php");
include_once($INC . "/mr.inc.php");
include_once($INC . "/bug.inc.php");
include_once($INC . "/fixes.inc.php");

rg_prof_start("MAIN");

rg_log_set_file($rg_web_log_dir . "/main.log");

// Init variables
$THEME_URL = "/themes/" . $rg_theme;
$sparas = "";
$login_ui = array();

// We have variable 'vv' passed from webserver - build 'op' and rest of paras
$sparas = rg_var_str("vv");
rg_log("DEBUG: sparas=$sparas.");
$more['url'] = $sparas;
$paras = explode("/", trim($sparas, "/"));
$_t = empty($paras) ? "" : $paras[0];
rg_log("DEBUG: paras: " . rg_array2string($paras));
if (strcmp($_t, "op") == 0) {
	array_shift($paras);
	$_op = empty($paras) ? "" : array_shift($paras);
} else {
	$_op = "";
}

$doit = rg_var_uint("doit");
$sid = rg_var_re("sid", "/[^A-Za-z0-9]/");
$token = rg_var_re("token", "/[^A-Za-z0-9]/");
$user = ""; $repo = ""; $organization = 0;

rg_log("IP: " . @$_SERVER['REMOTE_ADDR']);
rg_log("_REQUEST: " . rg_array2string($_REQUEST));
rg_log("_COOKIE: " . rg_array2string($_COOKIE));
rg_log("Start! sid=$sid");


// database connection
$db = rg_sql_open($rg_sql);
if ($db === FALSE) {
	// TODO: Retry?
	die("Cannot open database!");
}

while (1) {
	$r = rg_sql_struct_update_needed($db);
	if ($r === FALSE) {
		$r = rg_fixes_needed($db);
		if ($r === FALSE)
			break;
	}

	rg_log("Schema/fixes is not up-to-date! Sleep 1 second...");
	sleep(1);
}

rg_user_login_by_sid($db, $sid, $login_ui);
rg_log("After login_by_sid, login_ui=" . rg_array2string($login_ui));


$body = "";
$rg_menu = array();
// first level menu
$_m = array(
	"login" => array(
		"text" => "Login",
		"uid0" => 1,
		"op" => "/op/login"),
	"settings" => array(
		"text" => "Settings",
		"op" => "/op/settings"),
	"repo" => array(
		"text" => "Repositories",
		"op" => "/op/repo"),
	"admin" => array(
		"text" => "Admin",
		"needs_admin" => 1,
		"op" => "/op/admin"),
	"suggestion"=> array(
		"text" => "Suggestion",
		"op" => "/op/suggestion"),
	"logout" => array(
		"text" => "Logout",
		"op" => "/op/logout")
);
rg_menu_add($rg_menu, $_m, $_op);


rg_log("Dispatching to [$_op]");
include($INC . "/dispatch/dispatch.php");


$_m = rg_menu($rg_menu, "", $login_ui);
$more['HTML:rg_menu'] = implode("", $_m);

if ($login_ui['uid'] > 0) {
	$more['rg_username'] = $login_ui['username'];
	$more['rg_homepage'] = rg_re_userpage($login_ui);
} else {
	$more['rg_username'] = "";
	$more['rg_homepage'] = "";
}

// home page

// Some variables from the database
$r = rg_state_get_uint($db, "first_install");
if ($r > 0) {
	$more['first_install_text'] = gmdate("Y-m-d", $r);
} else {
	$more['first_install_text'] = "?";
}


rg_prof_end("MAIN");

// TODO: Do something with the profiling, here: log it in database etc.

$more['HTML:rg_theme_url'] = $THEME_URL;
$more['HTML:rg_body'] = $body;
echo rg_template("index.html", $more);

rg_log("DONE!");
rg_prof_log("rg_log");
?>
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