Improve login flow
* Add page explaining you are about to grant access * Show grant access page after login Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
parent
e970e9f710
commit
177c8972cc
|
@ -204,6 +204,44 @@ class ClientFlowLoginController extends Controller {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
* @NoCSRFRequired
|
||||||
|
* @UseSession
|
||||||
|
*
|
||||||
|
* @param string $stateToken
|
||||||
|
* @param string $clientIdentifier
|
||||||
|
* @return TemplateResponse
|
||||||
|
*/
|
||||||
|
public function grantPage($stateToken = '',
|
||||||
|
$clientIdentifier = '') {
|
||||||
|
if(!$this->isValidToken($stateToken)) {
|
||||||
|
return $this->stateTokenForbiddenResponse();
|
||||||
|
}
|
||||||
|
|
||||||
|
$clientName = $this->getClientName();
|
||||||
|
$client = null;
|
||||||
|
if($clientIdentifier !== '') {
|
||||||
|
$client = $this->clientMapper->getByIdentifier($clientIdentifier);
|
||||||
|
$clientName = $client->getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
return new TemplateResponse(
|
||||||
|
$this->appName,
|
||||||
|
'loginflow/grant',
|
||||||
|
[
|
||||||
|
'client' => $clientName,
|
||||||
|
'clientIdentifier' => $clientIdentifier,
|
||||||
|
'instanceName' => $this->defaults->getName(),
|
||||||
|
'urlGenerator' => $this->urlGenerator,
|
||||||
|
'stateToken' => $stateToken,
|
||||||
|
'serverHost' => $this->request->getServerHost(),
|
||||||
|
'oauthState' => $this->session->get('oauth.state'),
|
||||||
|
],
|
||||||
|
'guest'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @NoAdminRequired
|
* @NoAdminRequired
|
||||||
* @NoCSRFRequired
|
* @NoCSRFRequired
|
||||||
|
|
|
@ -54,6 +54,7 @@ $application->registerRoutes($this, [
|
||||||
['name' => 'ClientFlowLogin#showAuthPickerPage', 'url' => '/login/flow', 'verb' => 'GET'],
|
['name' => 'ClientFlowLogin#showAuthPickerPage', 'url' => '/login/flow', 'verb' => 'GET'],
|
||||||
['name' => 'ClientFlowLogin#redirectPage', 'url' => '/login/flow/redirect', 'verb' => 'GET'],
|
['name' => 'ClientFlowLogin#redirectPage', 'url' => '/login/flow/redirect', 'verb' => 'GET'],
|
||||||
['name' => 'ClientFlowLogin#generateAppPassword', 'url' => '/login/flow', 'verb' => 'POST'],
|
['name' => 'ClientFlowLogin#generateAppPassword', 'url' => '/login/flow', 'verb' => 'POST'],
|
||||||
|
['name' => 'ClientFlowLogin#grantPage', 'url' => '/login/flow/grant', 'verb' => 'GET'],
|
||||||
['name' => 'TwoFactorChallenge#selectChallenge', 'url' => '/login/selectchallenge', 'verb' => 'GET'],
|
['name' => 'TwoFactorChallenge#selectChallenge', 'url' => '/login/selectchallenge', 'verb' => 'GET'],
|
||||||
['name' => 'TwoFactorChallenge#showChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'GET'],
|
['name' => 'TwoFactorChallenge#showChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'GET'],
|
||||||
['name' => 'TwoFactorChallenge#solveChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'POST'],
|
['name' => 'TwoFactorChallenge#solveChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'POST'],
|
||||||
|
|
|
@ -28,9 +28,9 @@ $urlGenerator = $_['urlGenerator'];
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="picker-window">
|
<div class="picker-window">
|
||||||
<h2><?php p($l->t('Account access')) ?></h2>
|
<h2><?php p($l->t('Connect to your account')) ?></h2>
|
||||||
<p class="info">
|
<p class="info">
|
||||||
<?php print_unescaped($l->t('You are about to grant %s access to your %s account.', [
|
<?php print_unescaped($l->t('Please log in before granting %s access to your %s account.', [
|
||||||
'<strong>' . \OCP\Util::sanitizeHTML($_['client']) . '</strong>',
|
'<strong>' . \OCP\Util::sanitizeHTML($_['client']) . '</strong>',
|
||||||
\OCP\Util::sanitizeHTML($_['instanceName'])
|
\OCP\Util::sanitizeHTML($_['instanceName'])
|
||||||
])) ?>
|
])) ?>
|
||||||
|
@ -39,8 +39,8 @@ $urlGenerator = $_['urlGenerator'];
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
<p id="redirect-link">
|
<p id="redirect-link">
|
||||||
<a href="<?php p($urlGenerator->linkToRouteAbsolute('core.ClientFlowLogin.redirectPage', ['stateToken' => $_['stateToken'], 'clientIdentifier' => $_['clientIdentifier'], 'oauthState' => $_['oauthState']])) ?>">
|
<a href="<?php p($urlGenerator->linkToRouteAbsolute('core.ClientFlowLogin.grantPage', ['stateToken' => $_['stateToken'], 'clientIdentifier' => $_['clientIdentifier'], 'oauthState' => $_['oauthState']])) ?>">
|
||||||
<input type="submit" class="login primary icon-confirm-white" value="<?php p($l->t('Grant access')) ?>">
|
<input type="submit" class="login primary icon-confirm-white" value="<?php p($l->t('Log in')) ?>">
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -59,5 +59,5 @@ $urlGenerator = $_['urlGenerator'];
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php if(empty($_['oauthState'])): ?>
|
<?php if(empty($_['oauthState'])): ?>
|
||||||
<a id="app-token-login" class="warning" href="#"><?php p($l->t('Alternative login using app token')) ?></a>
|
<a id="app-token-login" class="warning" href="#"><?php p($l->t('Alternative log in using app token')) ?></a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
|
||||||
|
*
|
||||||
|
* @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 <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
script('core', 'login/authpicker');
|
||||||
|
style('core', 'login/authpicker');
|
||||||
|
|
||||||
|
/** @var array $_ */
|
||||||
|
/** @var \OCP\IURLGenerator $urlGenerator */
|
||||||
|
$urlGenerator = $_['urlGenerator'];
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="picker-window">
|
||||||
|
<h2><?php p($l->t('Account access')) ?></h2>
|
||||||
|
<p class="info">
|
||||||
|
<?php print_unescaped($l->t('You are about to grant %s access to your %s account.', [
|
||||||
|
'<strong>' . \OCP\Util::sanitizeHTML($_['client']) . '</strong>',
|
||||||
|
\OCP\Util::sanitizeHTML($_['instanceName'])
|
||||||
|
])) ?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<p id="redirect-link">
|
||||||
|
<a href="<?php p($urlGenerator->linkToRouteAbsolute('core.ClientFlowLogin.redirectPage', ['stateToken' => $_['stateToken'], 'clientIdentifier' => $_['clientIdentifier'], 'oauthState' => $_['oauthState']])) ?>">
|
||||||
|
<input type="submit" class="login primary icon-confirm-white" value="<?php p($l->t('Grant access')) ?>">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
Loading…
Reference in New Issue