Source of file AuthSession.php
Size: 2,567 Bytes - Last Modified: 2021-12-23T10:10:59+00:00
/var/www/docs.ssmods.com/process/src/code/model/AuthSession.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | <?php class AuthSession extends DataObject { private static $db = array( "UID" => "Varchar(64)", "ValidUntil" => "SS_DateTime", "RequestedFromIP" => "Varchar(32)", ); private static $has_one = array( "Member" => "Member", ); private static $indexes = array( "UID" => true, ); private static $api_fields = array( 'Accesstoken', 'ValidUntil', 'IsValid', 'ValidUntilTimestamp', 'User', 'URI' ); static function find_by_accesstoken($token) { return AuthSession::get()->filter(array( 'UID' => $token, 'ValidUntil:GreaterThan' => time(), ))->First(); } /** * We create / get a valid session by a defined accesstoken */ static function find_admin_session_by_accesstoken($token) { $session = self::find_by_accesstoken($token); if (!$session) { if (!(strlen(trim($token))>6)) { return user_error('admin authtoken must be at least 6 chars long'); } $session = AuthSession::create(array( "UID" => $token, )); $session->write(); } if ((!$session->Member()) || (!$session->Member()->inGroup('ADMIN'))) { // we need to attach an admin user to session to fulfill a valid session datao object with admin privileges $admin = Permission::get_members_by_permission('ADMIN')->First(); $session->Member = $admin; $session->MemberID = $admin->ID; $session->write(); } if (!$session->isValid()) { // renew session $session->setValidInMinutesFromNow(302400); $session->write(); } return $session; } function Accesstoken() { return $this->UID; } function User() { return $this->Member(); } function URI() { return Director::absoluteBaseURL().$this->config()->get('urlSegment')."/session/"; } function setValidInMinutesFromNow($minutes = null) { if (!is_integer($minutes)) { $minutes = $this->config()->get('validInMinutesFromNow'); } return $this->ValidUntil = time() + ( $minutes * 60 ); } function ValidUntilTimestamp() { return strtotime($this->dbObject('ValidUntil')->value); } function IsValid() { return time() <= $this->ValidUntilTimestamp(); } function onBeforeWrite() { parent::onBeforeWrite(); if (!$this->ValidUntil) { $this->setValidInMinutesFromNow(); } if (!$this->RequestedFromIP) { $this->RequestedFromIP = $_SERVER['REMOTE_ADDR']; } if (!$this->UID) { $generator = new RandomGenerator(); $this->UID = $generator->randomToken('sha1'); } } } |