Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace MSN\Authentication;
- /*
- * PHP Authentifizierungs-API von Martins Servernetzwerk
- * Copyright (C) 2018 Martin Michael Griesbeck
- *
- * Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public
- * License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren,
- * entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
- *
- * Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird,
- * aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der
- * VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
- *
- * Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben.
- * Falls nicht, siehe <http://www.gnu.org/licenses/>.
- */
- use \mysqli;
- /**
- * Die Klasse, die für die Datenbankverbindung und alle Abfragen zur Datenbank zuständig ist.
- * Zusätzlich enthält die Klasse nützliche Methoden, deren Nutzen in der Verarbeitung der
- * gewonnen Daten liegt.
- */
- class MSN_Authentication
- {
- /**
- * @var string Beinhaltet die Adresse des Datenbankservers (Standard: "localhost")
- */
- protected $msn_db_address = "localhost";
- /**
- * @var string Beinhaltet den Namen der Authentifizierungsdatenbank (Standard: "msn_auth")
- */
- protected $msn_db_name = "msn_auth";
- /**
- * @var string Beinhaltet den Benutzernamen, der zum Aufbau der Verbindung zur Authentifizierungsdatenbank benötigt wird (Standard: "root")
- */
- protected $msn_db_username = "root";
- /**
- * @var string Beinhaltet das Passwort, das zum Aufbau der Verbindung zur Authentifizierungsdatenbank benötigt wird (Standard: "")
- */
- protected $msn_db_password = "";
- /**
- * @var \mysqli Die Verbindung zur Authentifizierungsdatenbank
- */
- protected $mysqli = null;
- /**
- * @var bool Sagt aus, ob die Verbindung zur Authentifizierungsdatenbank zum Zeitpunkt der Abfrage schon hergestellt wurde
- */
- protected $connection_established = false;
- /**
- * Konstruktur für die MSN_Authentication Klasse
- *
- * @param string $msn_db_address Adresse der Authentifizierungsdatenbank
- * @param string $msn_sb_name Name der Authentifizierungsdatenbank
- * @param string $msn_db_username Benutzername zum Zugriff auf die Authentifizierungsdatenbank
- * @param string $msn_db_password Passwort zum Zugriff auf die Authentifizierungsdatenbank
- */
- public function __construct(string $msn_db_address = "localhost", string $msn_db_name = "msn_auth", string $msn_db_username = "root", string $msn_db_password = "")
- {
- $this->msn_db_address = $msn_db_address;
- $this->msn_db_name = $msn_db_name;
- $this->msn_db_username = $msn_db_username;
- $this->msn_db_password = $msn_db_password;
- }
- /**
- * Baut die Verbindung zur Authentifizierungsdatenbank auf
- *
- * @return void
- * @throws \Exception Wirft einen Fehler, wenn der Verbindugsaufbau nicht gelingt
- */
- public function establish_connection()
- {
- @ $mysqli = new mysqli($this->msn_db_address,$this->msn_db_username,$this->msn_db_password,$this->msn_db_name);
- @ $mysqli->set_charset("utf8");
- if($mysqli->connect_errno) trigger_error("Unable to connect to the authentication database", E_USER_ERROR);
- $this->mysqli = $mysqli;
- $this->connection_established = true;
- }
- /**
- * Überprüft, ob eine Verbindung zur Authentifizierungsdatenbank besteht, und wirft einen Fehler, wenn nicht!
- *
- * @return void
- * @throws \Exception Wirft einen Fehler, wenn noch keine Verbindung zur Authentifizierungsdatenbank eröffnet wurde
- */
- public function require_connection()
- {
- if(!$this->connection_established) trigger_error("No established connection to the authentication database", E_USER_ERROR);
- }
- /**
- * Erstellt einen Benutzer in der Authentifizierungsdatenbank
- *
- * @param string $name Eindeutiger Benutzername
- * @param string $password Ungehashtes Passwort des Benutzers
- * @param int $gid Gruppen-ID des neuen Benutzers (Standard: 1)
- * @return MSN_User Neu erstellter Benutzer
- * @return null Wenn der Benutzer nicht erstellt werden konnte
- */
- public function create_user(string $name, string $password, int $gid = 1)
- {
- $this->require_connection();
- $mysqli = $this->mysqli;
- if($this->query_user_from_name($name) != null)
- return null;
- $query = "INSERT INTO auth_user (name,password,gid) VALUES (\"" . $mysqli->real_escape_string($name) . "\",\"" . md5($mysqli->real_escape_string($password)) . "\"," . $mysqli->real_escape_string($gid) . ")";
- $result = $mysqli->query($query);
- if ($result) return $this->query_user($mysqli->insert_id); else return null;
- }
- /**
- * Erstellt eine Gruppe in der Authentifizierungsdatenbank
- *
- * @param string $name Eindeutiger Gruppenname
- * @return MSN_Group Neu erstellte Gruppe
- * @return null Wenn die Gruppe nicht erstellt werden konnte
- */
- public function create_group(string $name)
- {
- $this->require_connection();
- $mysqli = $this->mysqli;
- if($this->query_group_from_name($name) != null)
- return null;
- $query = "INSERT INTO auth_group (name) VALUES (\"" . $mysqli->real_escape_string($name) . "\")";
- $result = $mysqli->query($query);
- if ($result) return $this->query_group($mysqli->insert_id); else return null;
- }
- /**
- * Erstellt eine Berechtigung in der Authentifizierungsdatenbank
- *
- * @param string $pid Eindeutiger Berechtigungsidentifikationsname
- * @param string $default_value Standardwert für die Berechtigung
- * @return MSN_Permission Neu erstellte Berechtigung
- * @return null Wenn die Berechtigung nicht erstellt werden konnte
- */
- public function create_permission(string $pid, string $default_value)
- {
- $this->require_connection();
- $mysqli = $this->mysqli;
- if($this->query_permission($pid) != null)
- return null;
- $query = "INSERT INTO auth_permission (pid,default_value) VALUES (\"" . $mysqli->real_escape_string($pid) . "\",\"" . $mysqli->real_escape_string($default_value) . "\")";
- $result = $mysqli->query($query);
- if ($result) return $this->query_permission($pid); else return null;
- }
- /**
- * Setzt eine Gruppenberechtigung
- *
- * @param MSN_Group $group Gruppe, dessen Recht gesetzt werden soll
- * @param MSN_Permission $permission Recht, das gesetzt werden soll
- * @param string $value Wert, auf den die Berechtigung gesetzt werden soll
- * @return bool War es möglich, die Berechtigung zu setzen?
- */
- public function set_group_permission(MSN_Group $group, MSN_Permission $permission, string $value)
- {
- $this->require_connection();
- $mysqli = $this->mysqli;
- if($this->query_group_permission($group,$permission) != null)
- $query = "UPDATE auth_permissions_group SET value = \"" . $mysqli->real_escape_string($value) . "\" WHERE gid = " . $mysqli->real_escape_string($group->gid) . " AND pid = \"" . $mysqli->real_escape_string($permission->pid) . "\"";
- else
- $query = "INSERT INTO auth_permissions_group (gid,pid,value) VALUES (" . $mysqli->real_escape_string($group->gid) . ",\"" . $mysqli->real_escape_string($permission->pid) . "\",\"" . $mysqli->real_escape_string($value) . "\")";
- if ($mysqli->query($query)) return true; else return false;
- }
- /**
- * Sucht anhand einer Benutzer-ID einen Benutzer aus der Authentifizierungsdatenbank und gibt ihn zurück
- *
- * @param int $uid Benutzer-ID nach der gesucht werden soll
- * @return null Wenn keine Benutzer gefunden wurde
- * @return MSN_User Wenn ein Benutzer gefunden wurde der Benutzer, wenn nicht dann null
- */
- public function query_user(int $uid)
- {
- $this->require_connection();
- $mysqli = $this->mysqli;
- $query = "SELECT * FROM auth_user WHERE uid = " . $mysqli->real_escape_string($uid);
- $result = $mysqli->query($query);
- if ($row = $result->fetch_assoc()) return new MSN_User($row["uid"],$row["gid"],$row["name"],$row["password"],$row["exists_since"]); else return null;
- }
- /**
- * Sucht anhand eines Benutzernamens einen Benutzer aus der Authentifizierungsdatenbank und gibt ihn zurück
- *
- * @param string $name Benutzername nach dem gesucht werden soll
- * @return null Wenn keine Benutzer gefunden wurde
- * @return MSN_User Wenn ein Benutzer gefunden wurde
- */
- public function query_user_from_name(string $name)
- {
- $this->require_connection();
- $mysqli = $this->mysqli;
- $query = "SELECT * FROM auth_user WHERE name = \"" . $mysqli->real_escape_string($name) . "\"";
- $result = $mysqli->query($query);
- if ($row = $result->fetch_assoc()) return new MSN_User($row["uid"],$row["gid"],$row["name"],$row["password"],$row["exists_since"]); else return null;
- }
- /**
- * Sucht anhand einer Gruppen-ID eine Gruppe aus der Authentifizierungsdatenbank und gibt sie zurück
- *
- * @param int $gid Gruppen-ID nach der gesucht werden soll
- * @return null Wenn keine Gruppe gefunden wurde
- * @return MSN_Group Wenn eine Gruppe gefunden wurde
- */
- public function query_group(int $gid)
- {
- $this->require_connection();
- $mysqli = $this->mysqli;
- $query = "SELECT * FROM auth_group WHERE gid = " . $mysqli->real_escape_string($gid);
- $result = $mysqli->query($query);
- if ($row = $result->fetch_assoc()) return new MSN_Group($row["gid"],$row["name"],$row["exists_since"]); else return null;
- }
- /**
- * Sucht anhand eines Gruppennamens eine Gruppe aus der Authentifizierungsdatenbank und gibt sie zurück
- *
- * @param string $name Gruppenname nach dem gesucht werden soll
- * @return null Wenn keine Gruppe gefunden wurde
- * @return MSN_Group Wenn eine Gruppe gefunden wurde
- */
- public function query_group_from_name(string $name)
- {
- $this->require_connection();
- $mysqli = $this->mysqli;
- $query = "SELECT * FROM auth_group WHERE name = \"" . $mysqli->real_escape_string($name). "\"";
- $result = $mysqli->query($query);
- if ($row = $result->fetch_assoc()) return new MSN_Group($row["gid"],$row["name"],$row["exists_since"]); else return null;
- }
- /**
- * Sucht anhand einer Berechtigungs-ID eine Berechtigung aus der Authentifizierungsdatenbank und gibt sie zurück
- *
- * @param string $pid Berechtigungs-ID nach der gesucht werden soll
- * @return null Wenn keine Berechtigung gefunden wurde
- * @return MSN_Permission Wenn eine Berechtigung gefunden wurde
- */
- public function query_permission(string $pid)
- {
- $this->require_connection();
- $mysqli = $this->mysqli;
- $query = "SELECT * FROM auth_permission WHERE pid = \"" . $mysqli->real_escape_string($pid) . "\"";
- $result = $mysqli->query($query);
- if ($row = $result->fetch_assoc()) return new MSN_Permission($row["pid"],$row["default_value"]); else return null;
- }
- /**
- * Sucht anhand einer Gruppe und einer Berechtigung den zugeordneten Berechtigungswert und gibt diesen zurück
- *
- * @param MSN_Group $group Gruppe nach der gesucht werden soll
- * @param MSN_Permission $permission Berechtigung nach der gesucht werden soll
- * @return string Wenn ein Berechtigungswert gefunden wurde, der Berechtigungswert, sonst der Standardwert
- */
- public function query_group_permission(MSN_Group $group, MSN_Permission $permission)
- {
- $this->require_connection();
- $mysqli = $this->mysqli;
- $query = "SELECT * FROM auth_permissions_group WHERE gid = " . $mysqli->real_escape_string($group->gid) . " AND pid = \"" . $mysqli->real_escape_string($permission->pid) . "\"";
- $result = $mysqli->query($query);
- if ($row = $result->fetch_assoc()) return new MSN_GroupPermission($row["gid"],$row["pid"],$row["value"]); else return null;
- }
- /**
- * Überprüft, ob das gegeben Passwort dem des Benutzers entspricht.
- *
- * @param MSN_User $user Benutzer, dessen Passwort abgeglichen werden soll
- * @param string $password Passwort, das mit dem des Benutzers abgeglichen werden soll
- * @return bool Ist das Passwort korrekt?
- */
- public function authenticate_user(MSN_User $user, string $password)
- {
- return md5($password) == $user->password;
- }
- /**
- * Gibt den Berechtigungswert eines Benutzers aus, falls nicht vorhanden den Standardwert
- *
- * @param MSN_User $user Benutzer, dessen Berechtigung überprüft werden soll
- * @param MSN_Permission $permission Berechtigung zum überprüfen
- * @return string Berechtigungswert oder Standardwert
- */
- public function get_user_perm_value(MSN_User $user, MSN_Permission $permission)
- {
- $user_group = $this->query_group($user->gid);
- $group_permission = $this->query_group_permission($user_group, $permission);
- if($group_permission != null) return $group_permission->value; else return $permission->default_value;
- }
- /**
- * Gibt den Berechtigungswert einer Gruppe aus, falls nicht vorhanden den Standardwert
- *
- * @param MSN_Group $group Gruppe, deren Berechtigung überprüft werden soll
- * @param MSN_Permission $permission Berechtigung zum überprüfen
- * @return string Berechtigungswert oder Standardwert
- */
- public function get_group_perm_value(MSN_Group $group, MSN_Group $permission)
- {
- $group_permission = $this->query_group_permission($group, $permission);
- if($group_permission != null) return $group_permission->$value; else return $permission->default_value;
- }
- }
- /**
- * Spiegelt die Datenbankstruktur eines Benutzers wieder.
- */
- class MSN_User
- {
- /**
- * @var int Benutzer-ID
- */
- public $uid;
- /**
- * @var int Gruppen-ID
- */
- public $gid;
- /**
- * @var string Eindeutiger Benutzername
- */
- public $name;
- /**
- * @var string MD5-Hash des Benutzerpassworts
- */
- public $password;
- /**
- * @var string Zeitstempel des Erstellungszeitpunktes
- */
- public $exists_since;
- /**
- * Konstruktur für die MSN_User Klasse
- *
- * @param int $uid Benutzer-ID
- * @param int $gid Gruppen-ID
- * @param string $name Eindeutiger Benutzername
- * @param string $password MD5-Hash des Benutzerpassworts
- * @param string $exists_since Zeitstempel des Erstellungszeitpunktes
- */
- function __construct(int $uid, int $gid, string $name, string $password, string $exists_since)
- {
- $this->uid = $uid;
- $this->gid = $gid;
- $this->name = $name;
- $this->password = $password;
- $this->exists_since = $exists_since;
- }
- }
- /**
- * Spiegelt die Datenbankstruktur einer Gruppe wieder.
- */
- class MSN_Group
- {
- /**
- * @var int Gruppen-ID
- */
- public $gid;
- /**
- * @var string Eindeutiger Gruppenname
- */
- public $name;
- /**
- * @var string Zeitstempel des Erstellungszeitpunktes
- */
- public $exists_since;
- /**
- * Konstruktur für die MSN_Group Klasse
- *
- * @param int $gid Gruppen-ID
- * @param string $name Eindeutiger Gruppenname
- * @param string $exists_since Zeitstempel des Erstellungszeitpunktes
- */
- function __construct(int $gid, string $name, string $exists_since)
- {
- $this->gid = $gid;
- $this->name = $name;
- $this->exists_since = $exists_since;
- }
- }
- /**
- * Spiegelt die Datenbankstruktur einer Berechtigung wieder.
- */
- class MSN_Permission
- {
- /**
- * @var string Berechtigungs-ID
- */
- public $pid;
- /**
- * @var string Standardwert
- */
- public $default_value;
- /**
- * Konstruktur für die MSN_Permission Klasse
- *
- * @param string $pid Berechtigungs-ID
- * @param string $name Eindeutiger Berechtigungsname
- * @param string $default_value Standardwert
- */
- function __construct(string $pid, string $default_value)
- {
- $this->pid = $pid;
- $this->default_value = $default_value;
- }
- }
- /**
- * Spiegelt die Datenbankstruktur einer Gruppenberechtigung wieder.
- */
- class MSN_GroupPermission
- {
- /**
- * @var int Gruppen-ID
- */
- public $gid;
- /**
- * @var string Berechtigungs-ID
- */
- public $pid;
- /**
- * @var string Berechtigungswert
- */
- public $value;
- /**
- * Konstruktur für die MSN_UserPermission Klasse
- *
- * @param int $gid Gruppen-ID
- * @param string $pid Berechtigungs-ID
- * @param string $value Berechtigungswert
- */
- function __construct(int $gid, string $pid, string $value)
- {
- $this->uid = $gid;
- $this->pid = $pid;
- $this->value = $value;
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement