Source of file InteractiveClient.php
Size: 3,002 Bytes - Last Modified: 2021-12-23T10:07:50+00:00
/var/www/docs.ssmods.com/process/src/src/Model/InteractiveClient.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | <?php namespace Symbiote\Interactives\Model; use SilverStripe\ORM\DataObject; use SilverStripe\Security\RandomGenerator; use SilverStripe\Security\Security; use SilverStripe\Versioned\Versioned; use SilverStripe\Security\Member; /** * @author Marcus Nyeholt <marcus@silverstripe.com.au> * @license BSD http://silverstripe.org/BSD-license */ class InteractiveClient extends DataObject { private static $table_name = 'InteractiveClient'; private static $db = array( 'Title' => 'Varchar(128)', 'ContactEmail' => 'Varchar(128)', 'ClientUuid' => 'Varchar(64)', 'Salt' => 'Varchar(64)', 'PublicKey' => 'Varchar(64)', 'ApiKey' => 'Varchar(64)', 'RegenerateKeys' => 'Boolean', ); private static $indexes = [ 'ClientUuid' => 'true', ]; private static $has_many = [ 'Campaigns' => InteractiveCampaign::class, ]; private static $many_many = [ 'Members' => Member::class, ]; private static $extensions = [ Versioned::class ]; public function onBeforeWrite() { parent::onBeforeWrite(); if (!$this->ClientUuid) { $this->ClientUuid = $this->generateUuid(); } if (!$this->ApiKey || $this->RegenerateKeys) { $this->RegenerateKeys = false; $this->PublicKey = bin2hex(random_bytes(32)); $details = Security::encrypt_password($this->PublicKey); $this->ApiKey = $details['password']; $this->Salt = $details['salt']; } } public function getCMSFields() { $fields = parent::getCMSFields(); $fields->makeFieldReadonly('ClientUuid'); $fields->makeFieldReadonly('ApiKey'); $fields->makeFieldReadonly('PublicKey'); $fields->removeByName('Salt'); return $fields; } public function generateUuid() { return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x', // 32 bits for "time_low" mt_rand(0, 0xffff), mt_rand(0, 0xffff), // 16 bits for "time_mid" mt_rand(0, 0xffff), // 16 bits for "time_hi_and_version", // four most significant bits holds version number 4 mt_rand(0, 0x0fff) | 0x4000, // 16 bits, 8 bits for "clk_seq_hi_res", // 8 bits for "clk_seq_low", // two most significant bits holds zero and one for variant DCE1.1 mt_rand(0, 0x3fff) | 0x8000, // 48 bits for "node" mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) ); } public function canView($member = null) { if (!$member) { $member = Member::currentUser(); } if (!$member) { return false; } $has = $this->Members()->filter('ID', $member->ID); $otherHas = $this->extendedCan('canView', $member); return $has || $otherHas; } } |