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> / tests / helpers.inc.php (fc0f776bd4e91c7f93159f847328e0b0812bab0b) (3,717B) (mode 100644) [raw]
<?php
// Some helper functions dealing with users/repos/bugs/etc.

/*
 * Creating a user
 */
$_user_id = 1;
$_testns = 'main';
function rg_test_create_user($db, &$rg_ui)
{
	global $_testns;
	global $_user_id;

	if (!is_array($rg_ui))
		$rg_ui = array();

	$username = $_testns . '-user-' . $_user_id . '<xss>';

	$new = array();
	$new['uid'] = 0;
	$new['organization'] = 0;
	$new['username'] = $username;
	$new['realname'] = 'realname-' . $_user_id . '<xss>';
	$new['email'] = 'email-' . $_user_id . '<xss>@embedromix.ro';
	$new['is_admin'] = 0;
	$new['rights'] = '';
	$new['session_time'] = 3600;
	$new['confirm_token'] = '';
	$new['confirmed'] = 0;
	$new['plan_id'] = 0;
	$new['pass'] = 'pass-' . $_user_id;
	$new['pass2'] = 'pass-' . $_user_id;
	$_user_id++;

	// Delete old user
	$sql = 'DELETE FROM users WHERE username = \'' . $new['username'] . '\'';
	$res = rg_sql_query($db, $sql);
	if ($res === FALSE) {
		rg_log("Cannot delete old user: " . rg_sql_error());
		exit(1);
	}
	rg_sql_free_result($res);

	rg_cache_unset('username_to_uid::' . $username);

	$rg_ui = array_merge($new, $rg_ui);
	$r = rg_user_edit($db, $rg_ui);
	if ($r === FALSE) {
		rg_log("Cannot create user (" . rg_user_error() . ")!");
		exit(1);
	}
	$rg_ui['uid'] = $r;

	// delete associated bugs
	$sql = "SELECT * FROM repos WHERE uid = " . $rg_ui['uid'];
	$res = rg_sql_query($db, $sql);
	while (($row = rg_sql_fetch_array($res))) {
		$_t = array('bug_labels', 'bug_notes', 'bug_search', 'bugs',
			'merge_requests', 'watch_bug', 'watch_repo');
		foreach ($_t as $_table) {
			$sql = "DELETE FROM $_table WHERE repo_id = " . $row['repo_id'];
			$res2 = rg_sql_query($db, $sql);
			rg_sql_free_result($res2);
		}

		$sql = "DELETE FROM rights WHERE type = 'repo' AND obj_id = " . $row['repo_id'];
		$res2 = rg_sql_query($db, $sql);
		rg_sql_free_result($res2);
	}
	rg_sql_free_result($res);

	// delete associated repos
	$sql = "DELETE FROM repos WHERE uid = " . $rg_ui['uid'];
	$res = rg_sql_query($db, $sql);
	rg_sql_free_result($res);

	// Delete associated keys
	$sql = "DELETE FROM keys WHERE uid = " . $rg_ui['uid'];
	$res = rg_sql_query($db, $sql);
	rg_sql_free_result($res);

	// delete given rights
	$sql = "DELETE FROM rights WHERE uid = " . $rg_ui['uid'];
	$res = rg_sql_query($db, $sql);
	rg_sql_free_result($res);

	return TRUE;
}

/*
 * Creating a repo helper
 * You can enforce a repo-id by setting extra['repo_id'].
 */
$_repo_id = 1;
function rg_test_create_repo($db, $rg_ui, &$extra)
{
	global $_testns;
	global $_repo_id;

	if (!is_array($extra))
		$extra = array();

	$repo_id = isset($extra['repo_id']) ? $extra['repo_id'] : 0;

	rg_log("Creating a repo");
	$new = array();
	$new['master'] = 0;
	$new['name'] = $_testns . '-repo-' . $_repo_id . '<xss>';
	$new['max_commit_size'] = 0;
	$new['description'] = 'desc line1\ndesc line2' . '<xss>';
	$new['git_dir_done'] = 0;
	$new['public'] = 1;
	$new['license'] = 'GPL <xss>';
	$_repo_id++;

	rg_log("Deleting repo " . $repo_id);
	$sql = 'DELETE FROM repos WHERE repo_id = ' . $repo_id
		. ' OR name = \'' . $new['name'] . '\'';
	$res = rg_sql_query($db, $sql);
	if ($res === FALSE) {
		rg_log("Cannot delete old repo: " . rg_sql_error());
		exit(1);
	}
	rg_sql_free_result($res);

	$extra = array_merge($new, $extra);
	$extra['repo_id'] = 0;

	$r = rg_repo_edit($db, $rg_ui, $extra);
	if ($r === FALSE) {
	        rg_log("Cannot insert a repo (" . rg_repo_error() . ")!");
		exit(1);
	}

	if ($repo_id > 0) {
		$sql = "UPDATE repos SET repo_id = $repo_id"
			. " WHERE repo_id = " . $extra['repo_id'];
		$res = rg_sql_query($db, $sql);
		rg_sql_free_result($res);
		$new['repo_id'] = $repo_id;
		rg_cache_unset('repo_by_name::' . $rg_ui['uid']);
	}

	return TRUE;
}

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