diff --git a/apps/oauth2/appinfo/routes.php b/apps/oauth2/appinfo/routes.php index 55b3c5bc7f..96817bb6a3 100644 --- a/apps/oauth2/appinfo/routes.php +++ b/apps/oauth2/appinfo/routes.php @@ -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' + ], ], ]; diff --git a/apps/oauth2/lib/Controller/OauthApiController.php b/apps/oauth2/lib/Controller/OauthApiController.php index 2fbaf45626..c4b80fda6b 100644 --- a/apps/oauth2/lib/Controller/OauthApiController.php +++ b/apps/oauth2/lib/Controller/OauthApiController.php @@ -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() + ]); + } }