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 / user / keys / keys.php (2c9c6f28c23182a605941803cbc717c2316ba706) (2,102B) (mode 100644) [raw]
<?php
rg_log("FILE: /inc/user/keys/keys");

$_keys = '';

$add_errmsg = array();
$del_errmsg = array();

$key = trim(rg_var_str('key'));
$key = str_replace("\n", ' ', $key);
$key = str_replace("\r", ' ', $key);
$key_id = rg_var_uint("key_id");
$key_delete_ids = rg_var_str("key_delete_ids");

$rg['HTML:add_status'] = '';
$rg['HTML:del_status'] = '';

while (rg_var_uint("add") == 1) {
	if (!rg_valid_referer()) {
		$add_errmsg[] = "invalid referer; try again";
		break;
	}

	if (!rg_token_valid($db, $rg, 'keys', FALSE)) {
		$add_errmsg[] = "Invalid token. Try again.";
		break;
	}

	$_r = rg_keys_add($db, $rg['login_ui'], $key);
	if ($_r === FALSE) {
		$add_errmsg[] = rg_keys_error();
		break;
	}

	$rg['HTML:add_status'] = rg_template("user/keys/add_ok.html", $rg, TRUE /* xss */);
	$key = '';
	break;
}

while (rg_var_uint("delete") == 1) {
	if (!rg_valid_referer()) {
		$del_errmsg[] = "invalid referer; try again";
		break;
	}

	if (!rg_token_valid($db, $rg, 'keys', FALSE)) {
		$del_errmsg[] = "Invalid token. Try again.";
		break;
	}

	if (empty($key_delete_ids)) {
		$del_errmsg[] = "No keys selected.";
		break;
	}

	if (rg_keys_remove($db, $rg['login_ui'], $key_delete_ids) !== TRUE) {
		$del_errmsg[] = rg_keys_error();
		break;
	}

	$rg['HTML:del_status'] = rg_template("user/keys/remove_ok.html", $rg, TRUE /* xss */);
	break;
}

$rg['HTML:add_errmsg'] = rg_template_errmsg($add_errmsg);
$rg['HTML:del_errmsg'] = rg_template_errmsg($del_errmsg);

$rg['key'] = $key;
$rg['rg_form_token'] = rg_token_get($db, $rg, 'keys');
$rg['HTML:add_form'] = rg_template("user/keys/add.html", $rg, TRUE /*xss*/);

$keys_list = rg_keys_list($db, $rg['login_ui']);
if ($keys_list === FALSE)
	$rg['HTML:keys'] = rg_warning("Could not load keys. Try later."); // TODO
else
	$rg['HTML:keys'] = rg_template_table("user/keys/list", $keys_list, $rg);

$hints = array();
if ($rg_ssh_port != 0)
	$hints[]['HTML:hint'] = rg_template("hints/ssh/key.html", $rg, TRUE /* xss */);
$rg['HTML:hints'] = rg_template_table("hints/list", $hints, $rg);

$_keys .= rg_template('user/keys/main.html', $rg, TRUE /*xss*/);
?>
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