This commit is contained in:
jlallana 2021-06-03 00:17:13 +01:00 committed by GitHub
commit 5876e798b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 1 deletions

View File

@ -44,5 +44,15 @@ return [
'url' => '/api/v1/token',
'verb' => 'POST'
],
[
'name' => 'OauthApi#discovery',
'url' => '/.well-known/openid-configuration',
'verb' => 'GET',
],
[
'name' => 'OauthApi#getUserInfo',
'url' => '/api/v1/userinfo',
'verb' => 'GET'
],
],
];

View File

@ -43,6 +43,9 @@ use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IRequest;
use OCP\Security\ICrypto;
use OCP\Security\ISecureRandom;
use OCP\Util;
use OCP\IURLGenerator;
use OCP\IUserSession;
class OauthApiController extends Controller {
/** @var AccessTokenMapper */
@ -59,6 +62,10 @@ class OauthApiController extends Controller {
private $time;
/** @var Throttler */
private $throttler;
/** @var IUserSession */
private $userSession;
/** @var IUrlGenerator */
private $urlGenerator;
public function __construct(string $appName,
IRequest $request,
@ -68,7 +75,9 @@ class OauthApiController extends Controller {
TokenProvider $tokenProvider,
ISecureRandom $secureRandom,
ITimeFactory $time,
Throttler $throttler) {
Throttler $throttler,
IUserSession $userSession,
IURLGenerator $urlGenerator) {
parent::__construct($appName, $request);
$this->crypto = $crypto;
$this->accessTokenMapper = $accessTokenMapper;
@ -77,6 +86,8 @@ class OauthApiController extends Controller {
$this->secureRandom = $secureRandom;
$this->time = $time;
$this->throttler = $throttler;
$this->userSession = $userSession;
$this->urlGenerator = $urlGenerator;
}
/**
@ -178,4 +189,35 @@ class OauthApiController extends Controller {
]
);
}
/**
* @PublicPage
* @NoCSRFRequired
*
* @return JSONResponse
*/
public function discovery() {
$util = new Util();
return new JSONResponse([
'issuer' => $this->urlGenerator->linkToRouteAbsolute(''),
'authorization_endpoint' => $this->urlGenerator->linkToRouteAbsolute('oauth2.LoginRedirector.authorize'),
'token_endpoint' => $this->urlGenerator->linkToRouteAbsolute('oauth2.OauthApi.getToken'),
'userinfo_endpoint' => $this->urlGenerator->linkToRouteAbsolute('oauth2.OauthApi.getUserInfo')
]);
}
/**
* @PublicPage
* @NoCSRFRequired
*
* @return JSONResponse
*/
public function getUserInfo() {
$user = $this->userSession->getUser();
return new JSONResponse([
'sub' => $user->getUID(),
'name' => $user->getDisplayName(),
'email' => $user->getEMailAddress()
]);
}
}