* * @author Roeland Jago Douma * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ namespace OC\Settings\Personal\Security; use function array_map; use OC\Authentication\Exceptions\InvalidTokenException; use OC\Authentication\Token\INamedToken; use OC\Authentication\Token\IProvider as IAuthTokenProvider; use OC\Authentication\Token\IToken; use OCP\AppFramework\Http\TemplateResponse; use OCP\IInitialStateService; use OCP\ISession; use OCP\Session\Exceptions\SessionNotAvailableException; use OCP\Settings\ISettings; class Authtokens implements ISettings { /** @var IAuthTokenProvider */ private $tokenProvider; /** @var ISession */ private $session; /** @var IInitialStateService */ private $initialStateService; /** @var string|null */ private $uid; public function __construct(IAuthTokenProvider $tokenProvider, ISession $session, IInitialStateService $initialStateService, ?string $UserId) { $this->tokenProvider = $tokenProvider; $this->session = $session; $this->initialStateService = $initialStateService; $this->uid = $UserId; } public function getForm(): TemplateResponse { $this->initialStateService->provideInitialState( 'settings', 'app_tokens', $this->getAppTokens() ); return new TemplateResponse('settings', 'settings/personal/security/authtokens'); } public function getSection(): string { return 'security'; } public function getPriority(): int { return 100; } private function getAppTokens(): array { $tokens = $this->tokenProvider->getTokenByUser($this->uid); try { $sessionId = $this->session->getId(); } catch (SessionNotAvailableException $ex) { return []; } try { $sessionToken = $this->tokenProvider->getToken($sessionId); } catch (InvalidTokenException $ex) { return []; } return array_map(function (IToken $token) use ($sessionToken) { $data = $token->jsonSerialize(); $data['canDelete'] = true; $data['canRename'] = $token instanceof INamedToken; if ($sessionToken->getId() === $token->getId()) { $data['canDelete'] = false; $data['canRename'] = false; $data['current'] = true; } return $data; }, $tokens); } }