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 (dfd7d1eac69554526a9995bfdcdd46e66884f16b) (2,099B) (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