%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Services/Object/ |
Current File : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Services/Object/ChallengeService.php |
<?php namespace OCA\Passwords\Services\Object; use Exception; use OCA\Passwords\Db\AbstractMapper; use OCA\Passwords\Db\Challenge; use OCA\Passwords\Db\ChallengeMapper; use OCA\Passwords\Db\EntityInterface; use OCA\Passwords\Helper\Uuid\UuidHelper; use OCA\Passwords\Services\EncryptionService; use OCA\Passwords\Services\EnvironmentService; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\MultipleObjectsReturnedException; use OCP\EventDispatcher\IEventDispatcher; /** * Class ChallengeService * * @package OCA\Passwords\Services\Object */ class ChallengeService extends AbstractService { /** * @var ChallengeMapper|AbstractMapper */ protected AbstractMapper $mapper; /** * @var EncryptionService */ protected EncryptionService $encryption; /** * @var string */ protected string $class = Challenge::class; /** * ChallengeService constructor. * * @param ChallengeMapper $mapper * @param UuidHelper $uuidHelper * @param IEventDispatcher $eventDispatcher * @param EncryptionService $encryption * @param EnvironmentService $environment */ public function __construct( ChallengeMapper $mapper, UuidHelper $uuidHelper, IEventDispatcher $eventDispatcher, EncryptionService $encryption, EnvironmentService $environment ) { parent::__construct($uuidHelper, $eventDispatcher, $environment); $this->mapper = $mapper; $this->encryption = $encryption; } /** * @param string $uuid * @param bool $decrypt * * @return Challenge * @throws DoesNotExistException * @throws MultipleObjectsReturnedException * @throws Exception */ public function findByUuid(string $uuid, bool $decrypt = false): EntityInterface { /** @var Challenge $challenge */ $challenge = parent::findByUuid($uuid); return $decrypt ? $this->encryption->decryptChallenge($challenge):$challenge; } /** * @param string $userId * @param bool $decrypt * * @return Challenge[] * @throws Exception */ public function findByUserId(string $userId, bool $decrypt = false): array { /** @var Challenge[] $challenges */ $challenges = $this->mapper->findAllByUserId($userId); if(!$decrypt) return $challenges; foreach($challenges as $challenge) { $this->encryption->decryptChallenge($challenge); } return $challenges; } /** * @param string $type * @param string $secret * @param string $clientData * @param string $serverData * * @return Challenge */ public function create(string $type, string $secret, string $clientData, string $serverData): Challenge { $challenge = $this->createModel($type, $secret, $clientData, $serverData); $this->fireEvent('instantiated', $challenge); return $challenge; } /** * @param EntityInterface|Challenge $challenge * * @return mixed * @throws Exception */ public function save(EntityInterface $challenge): EntityInterface { if($challenge->_isDecrypted()) $this->encryption->encryptChallenge($challenge); return parent::save($challenge); } /** * @param string $type * @param string $secret * @param string $clientData * @param string $serverData * * @return Challenge */ protected function createModel(string $type, string $secret, string $clientData, string $serverData): Challenge { $challenge = new Challenge(); $challenge->setUserId($this->userId); $challenge->setUuid($this->uuidHelper->generateUuid()); $challenge->setCreated(time()); $challenge->setUpdated(time()); $challenge->setDeleted(false); $challenge->_setDecrypted(true); $challenge->setType($type); $challenge->setClientData($clientData); $challenge->setServerData($serverData); $challenge->setSecret($secret); return $challenge; } }