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 / admin.inc.php (81381f6d08db6958b78bec1ce23e9bc0af41ba81) (3,136B) (mode 100644) [raw]
<?php
$INC = isset($INC) ? $INC : dirname(__FILE__);
require_once($INC . "/user.inc.php");

/*
 * Event functions
 */
$rg_admin_functions = array(
	6000 => "rg_admin_invite",
	6001 => "rg_admin_invite_one"
);
rg_event_register_functions($rg_admin_functions);

/*
 * Event for invites
 */
function rg_admin_invite($db, $event)
{
	$ret = array();

	rg_log_ml("DEBUG: event[list]=" . print_r($event['list'], TRUE));
	foreach ($event['list'] as $line) {
		$line = trim($line);
		if (empty($line))
			continue;

		$t = explode('|', $line, 2);

		$ret[] = array_merge($event,
			array(
				'category' => 6001,
				'prio' => 100,
				'email' => trim($t[0]),
				'name' => trim($t[1])
			)
		);
	}

	return $ret;
}

/*
 * Event for invites (one e-mail version)
 */
function rg_admin_invite_one($db, $event)
{
	global $rg_admin_email;

	$rg = array();
	$subject = preg_replace('/{NAME}/', $event['name'], $event['subject']);
	$subject = "=?UTF-8?B?" . base64_encode(trim($subject)) . "?=";
	$header = rg_template("mail/common.head.txt", $rg);
	$body = preg_replace('/{NAME}/', $event['name'], $event['body']);

	$r = mail($event['email'], $subject, $body, $header,
		"-f $rg_admin_email");

	if ($r === FALSE)
		return FALSE;

	return array();
}

/*
 * Deals with invites
 */
function rg_admin_invites_high_level($db, $rg)
{
	rg_log_enter("rg_admin_invites_high_level");

	$ret = "";

	$inv = array();
	$inv['list'] = "";
	$inv['subject'] = "";
	$inv['body'] = "";

	$errmsg = array();
	$show_form = TRUE;
	while (1) {
		if (rg_var_int("doit") == 0)
			break;

		$inv['list'] = rg_var_str("inv::list");
		$inv['subject'] = rg_var_str("inv::subject");
		$inv['body'] = rg_var_str("inv::body");

		if (!rg_valid_referer()) {
			$errmsg[] = "invalid referer; try again";
			break;
		}

		if (!rg_token_valid($db, $rg, FALSE)) {
			$errmsg[] = "invalid token; try again";
			break;
		}

		if (empty($inv['list'])) {
			$errmsg[] = "list is empty";
			break;
		}

		if (empty($inv['subject'])) {
			$errmsg[] = "subject is empty";
			break;
		}

		if (empty($inv['body'])) {
			$errmsg[] = "body is empty";
			break;
		}

		$list = explode("\n", trim($inv['list']));
		foreach ($list as $line) {
			$line = trim($line);
			if (empty($line))
				continue;

			$t = explode('|', $line, 2);
			if (count($t) != 2) {
				$errmsg[] = 'invalid line: ' . rg_xss_safe($line);
			} else {
				if (!strstr($t[0], '@'))
					$errmsg[] = 'invalid e-mail in line: ' . rg_xss_safe($line);
			}
		}
		if (!empty($errmsg))
			break;

		$event = array(
			'category' => 6000,
			'prio' => 50);
		$event = array_merge($event, $inv);
		$event['list'] = $list;
		$r = rg_event_add($db, $event);
		if ($r !== TRUE) {
			$errmsg[] = "cannot add event (" . rg_event_error() . ")";
			break;
		}

		rg_event_signal_daemon("", 0);

		$ret .= rg_template("admin/invites/sent.html", $rg);
		$show_form = FALSE;
                break;
	}

	if ($show_form) {
		$rg['inv'] = $inv;
		$rg['HTML:errmsg'] = rg_template_errmsg($errmsg);
		$rg['rg_form_token'] = rg_token_get($db, $rg);
		$ret .= rg_template("admin/invites/invites.html", $rg);
	}

	rg_log_exit();
	return $ret;
}

?>
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