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> / inc / repo / repo_page.php (253a3fa25ccd2acd94b2e043d30668066cd81eec) (4,079B) (mode 100644) [raw]
<?php
rg_log("/inc/repo/repo_page");

$repo_id = rg_var_uint("repo_id");
$name = rg_var_str("name");
$max_commit_size = rg_var_uint("max_commit_size");
$description = rg_var_str("description");
$rights = @rg_rights_a2s($_REQUEST['rights']);
$max_users = rg_var_uint("max_users");
$user = rg_var_str("user");
$master_repo_id = 0;

// menu
$_url = rg_re_repopage($repo_id, $name);
$_menu = "";
$_menu .= "[<a href=\"$_url&amp;subop=1\">Edit</a>]";
$_menu .= "&nbsp;[<a href=\"$_url&amp;subop=2\">Rights</a>]";
$_menu .= "&nbsp;[<a href=\"$_url&amp;subop=3\">Delete</a>]";
$_menu .= "<br />\n";
$_menu .= "<br />\n";

$_body = "";

$repo_ok = rg_repo_ok($name);
if ($repo_ok === TRUE) {
	$ri = rg_repo_info($db, $repo_id, $name);
	if (($ri['ok'] != 1) || ($ri['exists'] != 1) || ($ri['deleted'] == 1))
		$repo_ok = FALSE;
}

if ($repo_ok !== TRUE) {
	$_repo = "Invalid repository!";
	return;
}

// we need it in forms
$repo_id = $ri['repo_id'];

$show_repo_info = 1;
$errmsg = array();

switch ($subop) {
case 1: // edit
	if ($doit == 1) {
		while (1) {
			if (rg_repo_allow($db, $ri, $rg_ui, "A") === FALSE) {
				$_body .= "Not allowed!<br />\n";
				break;
			}

			$ri['name'] = $name; // TODO: filter name!
			$ri['max_commit_size'] = $max_commit_size;
			$ri['description'] = $description; // TODO: filter
			$ri['default_rights'] = $rights; // TODO: filter
			$ri['max_users'] = $max_users;
			$_r = rg_repo_update($db, $ri);
			if ($_r === FALSE) {
				$_body .= rg_repo_error();
				break;
			}

			$_body .= "OK!";
			break;
		}
	} else {
		// load variables
		$name = $ri['name'];
		$rights = $ri['default_rights'];
		$max_commit_size = $ri['max_commit_size'];
		$max_users = $ri['max_users'];
		$description = $ri['description'];

		$_action = "Update";
		include($INC . "/repo/repo.form.php");
		$_body .= $_form;
	}
	break;

case 2: // rights
	$remove_uid = rg_var_uint("remove_uid");
	rg_log("\tDEBUG remove_uid=$remove_uid");

	if ($remove_uid + $doit > 0) {
		if (rg_repo_allow($db, $ri, $rg_ui, "A") === FALSE) {
			$errmsg[] = "Not allowed!";
			// cancel further checking
			$doit = 0;
			$remove_uid = 0;
		}
	}

	while ($remove_uid > 0) {
		$e = rg_repo_rights_set($db, $ri, $remove_uid, "");
		if ($e !== TRUE) {
			$errmsg[] = rg_repo_error();
			break;
		}

		break;
	}

	while ($doit == 1) {
		// lookup user
		$_ui = rg_user_info($db, 0, $user, "");
		if ($_ui['exists'] != 1) {
			$errmsg[] = "User <b>$user</b> does not exists!";
			break;
		}

		$e = rg_repo_rights_set($db, $ri, $_ui['uid'], $rights);
		if ($e === FALSE) {
			$errmsg[] = rg_repo_error();
			break;
		}

		break;
	}

	// list rights
	$_url = rg_re_repopage($ri['repo_id'], $ri['name']);
	$_body .= rg_repo_rights_list($db, $ri, $_url);

	$_body .= "<br />\n";

	include($INC . "/repo/rights.form.php");
	$_body .= $_form;
	break;

case 3: // delete
	while (1) {
		if (rg_repo_allow($db, $ri, $rg_ui, "A") === FALSE) {
			$errmsg[] = "Not allowed!";
			break;
		}

		$r = rg_repo_delete($db, $repo_id, $rg_ui);
		if ($r === FALSE) {
			$errmsg[] = "Error: " . rg_repo_error();
			break;
		}

		break;
	}

	$_err = implode("<br />\n", $errmsg);
	if (!empty($_err)) {
		$_body .= $_err;
	} else {
		$_body .= "OK";
		$show_repo_info = 0;
	}

	break;
}

$_rt = "";
if ($show_repo_info == 1) {
	$_rt = "Repo <b>" . $ri['name'] . "</b><br />\n";
	if (!empty($ri['description']))
		$_rt .= "<small>" . $ri['description'] . "</small><br />\n";
	$_rt .= "<br />\n";
	$_dr = rg_rights_text("repo", $ri['default_rights']);
	$_rt .= "Default rights: " . implode(", ", $_dr) . "<br />\n";
	$_rt .= "Maxim commit size: " . rg_1024($ri['max_commit_size']) . "<br />\n";
	$_rt .= "Maxim number of users: " . $ri['max_users'] . "<br />\n";
	$_url = "git://" . $_SERVER['SERVER_NAME'] . "/" . $ri['name'] . ".git";
	if (!empty($_dr))
		$_rt .= "Git URL: <a href=\"$_url\">$_url</a><br />\n";
	$_url = "ssh://rocketgit@" . $_SERVER['SERVER_NAME'] . "/" . $ri['name'] . ".git";
	$_rt .= "Git over SSH URL: <a href=\"$_url\">$_url</a><br />\n";
	$_rt .= "<br />\n";
}

$_repo = $_menu . $_rt . $_body;
?>
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