Skip to content

Commit

Permalink
Merge pull request #14457 from nextcloud/refactor/auth-tokens-initial…
Browse files Browse the repository at this point in the history
…-state

Load auth tokens with the initial state API
  • Loading branch information
rullzer authored Mar 1, 2019
2 parents ba155a9 + 102f700 commit 1cfa870
Show file tree
Hide file tree
Showing 10 changed files with 324 additions and 145 deletions.
65 changes: 63 additions & 2 deletions lib/private/Settings/Personal/Security.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,20 @@
use function array_filter;
use function array_map;
use function is_null;
use OC\Authentication\Exceptions\InvalidTokenException;
use OC\Authentication\Token\INamedToken;
use OC\Authentication\Token\IProvider as IAuthTokenProvider;
use OC\Authentication\Token\IToken;
use OC\Authentication\TwoFactorAuth\Manager as TwoFactorManager;
use OC\Authentication\TwoFactorAuth\ProviderLoader;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\Authentication\TwoFactorAuth\IProvider;
use OCP\Authentication\TwoFactorAuth\IProvidesPersonalSettings;
use OCP\IInitialStateService;
use OCP\ISession;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\Session\Exceptions\SessionNotAvailableException;
use OCP\Settings\ISettings;

class Security implements ISettings {
Expand All @@ -44,34 +51,60 @@ class Security implements ISettings {
/** @var TwoFactorManager */
private $twoFactorManager;

/** @var IAuthTokenProvider */
private $tokenProvider;

/** @var ProviderLoader */
private $providerLoader;

/** @var IUserSession */
private $userSession;

/** @var ISession */
private $session;

/** @var IInitialStateService */
private $initialStateService;
/**
* @var string|null
*/
private $uid;

public function __construct(IUserManager $userManager,
TwoFactorManager $providerManager,
IAuthTokenProvider $tokenProvider,
ProviderLoader $providerLoader,
IUserSession $userSession) {
IUserSession $userSession,
ISession $session,
IInitialStateService $initialStateService,
?string $UserId) {
$this->userManager = $userManager;
$this->twoFactorManager = $providerManager;
$this->tokenProvider = $tokenProvider;
$this->providerLoader = $providerLoader;
$this->userSession = $userSession;
$this->session = $session;
$this->initialStateService = $initialStateService;
$this->uid = $UserId;
}

/**
* @return TemplateResponse returns the instance with all parameters set, ready to be rendered
* @since 9.1
*/
public function getForm() {
$user = $this->userManager->get(\OC_User::getUser());
$user = $this->userManager->get($this->uid);
$passwordChangeSupported = false;
if ($user !== null) {
$passwordChangeSupported = $user->canChangePassword();
}

$this->initialStateService->provideInitialState(
'settings',
'app_tokens',
$this->getAppTokens()
);

return new TemplateResponse('settings', 'settings/personal/security', [
'passwordChangeSupported' => $passwordChangeSupported,
'twoFactorProviderData' => $this->getTwoFactorProviderData(),
Expand Down Expand Up @@ -116,4 +149,32 @@ private function getTwoFactorProviderData(): array {
}))
];
}

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);
}

}
114 changes: 78 additions & 36 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 0 additions & 33 deletions settings/Controller/AuthSettingsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,39 +92,6 @@ public function __construct(string $appName,
$this->logger = $logger;
}

/**
* @NoAdminRequired
* @NoSubadminRequired
*
* @return JSONResponse|array
*/
public function index() {
$tokens = $this->tokenProvider->getTokenByUser($this->uid);

try {
$sessionId = $this->session->getId();
} catch (SessionNotAvailableException $ex) {
return $this->getServiceNotAvailableResponse();
}
try {
$sessionToken = $this->tokenProvider->getToken($sessionId);
} catch (InvalidTokenException $ex) {
return $this->getServiceNotAvailableResponse();
}

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);
}

/**
* @NoAdminRequired
* @NoSubadminRequired
Expand Down
Loading

0 comments on commit 1cfa870

Please sign in to comment.