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 / sess.inc.php (5646012f88413179bdf2e3a394d6a04e23523b40) (2,356B) (mode 100644) [raw]
<?php
require_once($INC . "/log.inc.php");
require_once($INC . "/sql.inc.php");
require_once($INC . "/token.inc.php");

/*
 * Add a session
 */
function rg_sess_add($db, $uid, $sid, $session_time)
{
	rg_log("sess_add: uid=$uid, sid=$sid, session_time=$session_time.");

	$ip = @$_SERVER['REMOTE_ADDR'];
	$now = time();

	$sql = "INSERT INTO sess (sid, uid, expire, session_time, ip)"
		. " VALUES ('$sid', $uid"
		. ", " . ($now + $session_time) . ", $session_time, '$ip')";
	$res = rg_sql_query($db, $sql);
	if ($res === FALSE) {
		rg_log("\tCannot insert (" . rg_sql_error() . ")!");
		return FALSE;
	}
	rg_sql_free_result($res);

	return TRUE;
}

/*
 * Returns if a session is still valid. Will return FALSE or uid
 */
function rg_sess_valid($db, $sid)
{
	rg_log("sess_valid: sid=$sid...");

	$uid = FALSE;

	$e_sid = rg_sql_escape($db, $sid);

	$sql = "SELECT uid, expire FROM sess WHERE sid = '$e_sid'";
	$res = rg_sql_query($db, $sql);
	if ($res === FALSE) {
		rg_log("\tCannot select (" . rg_sql_error() . ")!");
		return FALSE;
	}
	$row = rg_sql_fetch_array($res);
	rg_sql_free_result($res);
	if (isset($row['uid'])) {
		$now = time();
		if ($row['expire'] >= $now) {
			$uid = $row['uid'];
			rg_log("\tSession valid, uid=$uid, expire=+" . ($row['expire'] - $now));
		} else {
			rg_log("\tSession too old (" . ($now - $row['expire']) . "s)");
		}
	} else {
		rg_log("\tSession not found!");
	}

	return $uid;
}

/*
 * Refresh a session
 */
function rg_sess_update($db, $sid)
{
	rg_log("sess_update: sid=$sid...");

	$e_sid = rg_sql_escape($db, $sid);

	$sql = "UPDATE sess SET expire = " . time() . " + session_time"
		. " WHERE sid = '$e_sid'";
	$res = rg_sql_query($db, $sql);
	if ($res === FALSE) {
		rg_log("\tCannot update (" . rg_sql_error() . ")!");
		return FALSE;
	}
	rg_sql_free_result($res);

	return TRUE;
}

/*
 * Destroy session
 */
function rg_sess_destroy($db, $sid, &$rg_ui)
{
	rg_log("sess_destroy: sid=$sid...");

	$e_sid = rg_sql_escape($db, $sid);

	$sql = "DELETE FROM sess WHERE sid = '$e_sid'";
	$res = rg_sql_query($db, $sql);
	if ($res === FALSE) {
		rg_log("\tCannot delete (" . rg_sql_error() . ")!");
		return FALSE;
	}
	rg_sql_free_result($res);

	// Delete all tokens associated with this session
	rg_token_delete($db, $sid, "");

	$rg_ui = array();
	$rg_ui['uid'] = 0;
	$rg_ui['is_admin'] = 0;

	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