package Ġorg . http 4 k . security . oauth . server Ċ Ċ import Ġorg . http 4 k . core . Body Ċ import Ġorg . http 4 k . core . Method . POST Ċ import Ġorg . http 4 k . core . Request Ċ import Ġorg . http 4 k . core . then Ċ import Ġorg . http 4 k . format . Auto Marshall ing Ċ import Ġorg . http 4 k . lens . FormField Ċ import Ġorg . http 4 k . lens . Query Ċ import Ġorg . http 4 k . lens . Validator . Strict Ċ import Ġorg . http 4 k . lens . uri Ċ import Ġorg . http 4 k . lens . web Form Ċ import Ġorg . http 4 k . routing . bind Ċ import Ġorg . http 4 k . routing . routes Ċ import Ġorg . http 4 k . security . Nonce Ċ import Ġorg . http 4 k . security . Response Mode Ċ import Ġorg . http 4 k . security . ResponseType Ċ import Ġorg . http 4 k . security . State Ċ import Ġorg . http 4 k . security . oauth . core . RefreshToken Ċ import Ġorg . http 4 k . security . oauth . server . ac ces sto ken . AccessToken Request Authentication Ċ import Ġorg . http 4 k . security . oauth . server . ac ces sto ken . Client Secret AccessToken Request Authentication Ċ import Ġorg . http 4 k . security . oauth . server . ac ces sto ken . Grant Type Ċ import Ġorg . http 4 k . security . oauth . server . ac ces sto ken . Grant Types Configuration Ċ import Ġorg . http 4 k . security . oauth . server . ref res ht o ken . Refresh Tokens Ċ import Ġorg . http 4 k . security . oauth . server . request . Request JWT Validator Ċ import Ġorg . http 4 k . security . openid . Request Jwt Container Ċ import Ġjava . time . Clock Ċ Ċ /** Ċ Ġ* ĠProvide Ġhelp Ġcreating ĠOAuth ĠAuthorization ĠServer Ġwith ĠAuthorization ĠCode ĠFlow Ċ Ġ* Ċ Ġ* ĠNote Ġthat Ġif Ġyou Ġare Ġusing Ġyour Ġown ĠAuto Marshall ing Ġinstance , Ġeither ĠKotlin - Reflection Ġor Ġthe Ġability Ġto Ċ Ġ* Ġun marshall Ġthe ĠAccess Token Response Ġis Ġrequired . Ċ Ġ* Ċ Ġ* ĠReferences : Ċ Ġ* Ġ Ġ- ĠAuthorization ĠCode ĠGrant Ġflow Ġspec : Ġhttps :// tools . ietf . org / html / rfc 6 7 4 9 # page - 2 3 Ċ Ġ* Ġ Ġ- ĠOAuth Ġ 2 ĠSecurity ĠBest ĠCurrent ĠPract ices : Ġhttps :// tools . ietf . org / html / draft - ietf - oauth - security - topics - 1 1 Ċ Ġ*/ Ċ class ĠOAuth Server ( ĊĠĠĠ Ġtoken Path : ĠString , ĊĠĠĠ Ġauth Request Tracking : ĠAuth Request Tracking , ĊĠĠĠ Ġauthor ise Request Validator : ĠAuthor ise Request Validator , ĊĠĠĠ ĠaccessToken Request Authentication : ĠAccess Token Request Authentication , ĊĠĠĠ Ġauthorization Codes : ĠAuthorization Codes , ĊĠĠĠ Ġaccess Tokens : ĠAccess Tokens , ĊĠĠĠ Ġclock : ĠClock , ĊĠĠĠ Ġjson : ĠAuto Marshall ing Ġ= ĠOAuth Server M oshi , ĊĠĠĠ Ġauth Request Extractor : ĠAuth Request Extractor Ġ= ĠAuth Request From Query Parameters , ĊĠĠĠ Ġgrant Types : ĠGrant Types Configuration Ġ= ĠGrant Types Configuration . default ( accessToken Request Authentication ), ĊĠĠĠ Ġid Tokens : ĠId Tokens Ġ= ĠId Tokens . Unsupported , ĊĠĠĠ Ġrefresh Tokens : ĠRefresh Tokens Ġ= ĠRefresh Tokens . unsupported , ĊĠĠĠ Ġrequest JWT Validator : ĠRequest JWT Validator Ġ= ĠRequest JWT Validator . Unsupported , ĊĠĠĠ Ġdocumentation Uri : ĠString ? Ġ= Ġnull Ċ ) Ġ{ ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġtoken Path : ĠString , ĊĠĠĠĠĠĠĠ Ġauth Request Tracking : ĠAuth Request Tracking , ĊĠĠĠĠĠĠĠ Ġclient Validator : ĠClient Validator , ĊĠĠĠĠĠĠĠ Ġauthorization Codes : ĠAuthorization Codes , ĊĠĠĠĠĠĠĠ Ġaccess Tokens : ĠAccess Tokens , ĊĠĠĠĠĠĠĠ Ġclock : ĠClock , ĊĠĠĠĠĠĠĠ Ġjson : ĠAuto Marshall ing Ġ= ĠOAuth Server M oshi , ĊĠĠĠĠĠĠĠ Ġauth Request Extractor : ĠAuth Request Extractor Ġ= ĠAuth Request From Query Parameters , ĊĠĠĠĠĠĠĠ Ġgrant Types : ĠGrant Types Configuration Ġ= ĠGrant Types Configuration . default ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClient Secret AccessToken Request Authentication ( client Validator ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġid Tokens : ĠId Tokens Ġ= ĠId Tokens . Unsupported , ĊĠĠĠĠĠĠĠ Ġrefresh Tokens : ĠRefresh Tokens Ġ= ĠRefresh Tokens . unsupported , ĊĠĠĠĠĠĠĠ Ġrequest JWT Validator : ĠRequest JWT Validator Ġ= ĠRequest JWT Validator . Unsupported , ĊĠĠĠĠĠĠĠ Ġdocumentation Uri : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġtoken Path , ĊĠĠĠĠĠĠĠ Ġauth Request Tracking , ĊĠĠĠĠĠĠĠ ĠSimple Author ise Request Validator ( client Validator ), ĊĠĠĠĠĠĠĠ ĠClient Secret AccessToken Request Authentication ( client Validator ), ĊĠĠĠĠĠĠĠ Ġauthorization Codes , ĊĠĠĠĠĠĠĠ Ġaccess Tokens , ĊĠĠĠĠĠĠĠ Ġclock , ĊĠĠĠĠĠĠĠ Ġjson , ĊĠĠĠĠĠĠĠ Ġauth Request Extractor , ĊĠĠĠĠĠĠĠ Ġgrant Types , ĊĠĠĠĠĠĠĠ Ġid Tokens , ĊĠĠĠĠĠĠĠ Ġrefresh Tokens , ĊĠĠĠĠĠĠĠ Ġrequest JWT Validator , ĊĠĠĠĠĠĠĠ Ġdocumentation Uri ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġerror Renderer Ġ= ĠJsonResponse Error Renderer ( json , Ġdocumentation Uri ) ĊĠĠĠ Ġprivate Ġval Ġauthor ise Request Error Render Ġ= ĠAuthor ise Request Error Render ( ĊĠĠĠĠĠĠĠ Ġauthor ise Request Validator , ĊĠĠĠĠĠĠĠ Ġrequest JWT Validator , ĊĠĠĠĠĠĠĠ Ġerror Renderer , ĊĠĠĠĠĠĠĠ Ġdocumentation Uri ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// Ġendpoint Ġto Ġretrieve Ġaccess Ġtoken Ġfor Ġa Ġgiven Ġauthorization Ġcode ĊĠĠĠ Ġval Ġtoken Route Ġ= Ġroutes ( ĊĠĠĠĠĠĠĠ Ġtoken Path Ġbind ĠPOST Ġto ĠGenerate AccessToken ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthorization Codes , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccess Tokens , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclock , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Tokens , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Tokens , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Renderer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Types ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// Ġuse Ġthis Ġfilter Ġto Ġprotect Ġyour Ġauthentication / authorization Ġpages ĊĠĠĠ Ġval Ġauthentication Start Ġ= ĊĠĠĠĠĠĠĠ ĠClient Validation Filter ( author ise Request Validator , Ġauthor ise Request Error Render , Ġauth Request Extractor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then ( Auth Request Tracking Filter ( auth Request Tracking , Ġauth Request Extractor , Ġauthor ise Request Error Render )) ĊĊĠĠĠ Ġ// Ġendpoint Ġto Ġhandle Ġauthorization Ġcode Ġgeneration Ġand Ġred irection Ġback Ġto Ġclient ĊĠĠĠ Ġval Ġauthentication Complete Ġ= ĊĠĠĠĠĠĠĠ ĠAuthentication Complete ( authorization Codes , Ġauth Request Tracking , Ġid Tokens , Ġdocumentation Uri ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠclientId QueryParameter Ġ= ĠQuery . map (:: ClientId , ĠClient Id :: value ). required (" client _ id ") ĊĠĠĠĠĠĠĠ Ġval Ġscopes QueryParameter Ġ= ĠQuery . map ({ Ġit . split (" Ġ"). toList () Ġ}, Ġ{ Ġit . join ToString (" Ġ") Ġ}). optional (" scope ") ĊĠĠĠĠĠĠĠ Ġval Ġredirect Uri QueryParameter Ġ= ĠQuery . uri (). optional (" redirect _ uri ") ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠQuery . map (:: State , ĠState :: value ). optional (" state ") ĊĠĠĠĠĠĠĠ Ġval Ġresponse Type Ġ= ĠQuery . map ( ResponseType . Companion :: from QueryParameter Value , ĠResponse Type :: query Parameter Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. required (" response _ type ") ĊĠĠĠĠĠĠĠ Ġval Ġresponse Mode Ġ= ĠQuery . map ( Response Mode . Companion :: from QueryParameter Value , ĠResponse Mode :: query Parameter Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. optional (" response _ mode ") ĊĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠQuery . map (:: Nonce , ĠN once :: value ). optional (" nonce ") ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠQuery . map (:: Request Jwt Container , ĠRequest Jwt Container :: value ). optional (" request ") ĊĊĠĠĠĠĠĠĠ Ġval ĠclientId Form Ġ= ĠForm Field . map (:: ClientId , ĠClient Id :: value ). optional (" client _ id ") ĊĠĠĠĠĠĠĠ Ġval Ġclient Secret Ġ= ĠForm Field . optional (" client _ secret ") ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠForm Field . optional (" code ") ĊĠĠĠĠĠĠĠ Ġval Ġredirect Uri Form Ġ= ĠForm Field . uri (). optional (" redirect _ uri ") ĊĠĠĠĠĠĠĠ Ġval Ġscopes Form Ġ= ĠForm Field . map ({ Ġit . split (" Ġ"). toList () Ġ}, Ġ{ Ġit . join ToString (" Ġ") Ġ}). optional (" scope ") ĊĠĠĠĠĠĠĠ Ġval Ġclient Assertion Type Ġ= ĠForm Field . uri (). optional (" client _ assertion _ type ") ĊĠĠĠĠĠĠĠ Ġval Ġclient Assertion Ġ= ĠForm Field . optional (" client _ assertion ") ĊĠĠĠĠĠĠĠ Ġval Ġrefresh Token Ġ= ĠForm Field . optional (" refresh _ token ") ĊĠĠĠĠĠĠĠ Ġval Ġtoken Request Web Form Ġ= ĠBody . web Form ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStrict , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠclientId Form , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Secret , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġredirect Uri Form , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscopes Form , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Assertion Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Assertion , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Token ĊĠĠĠĠĠĠĠ Ġ). to Lens () ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠClient Id ( val Ġvalue : ĠString ) Ċ Ċ data Ġclass ĠAuthorization Code ( val Ġvalue : ĠString ) Ċ Ċ fun ĠRequest . authorization Request () Ġ= ĊĠĠĠ ĠAuth Request ( ĊĠĠĠĠĠĠĠ ĠOAuth Server . clientId QueryParameter ( this ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . scopes QueryParameter ( this ) Ġ?: ĠlistOf (), ĊĠĠĠĠĠĠĠ ĠOAuth Server . redirect Uri QueryParameter ( this ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . state ( this ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . response Type ( this ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . nonce ( this ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . response Mode ( this ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . request ( this ) ĊĠĠĠ Ġ) Ċ Ċ internal Ġfun ĠRequest . token Request ( grant Type : ĠGrant Type ): ĠToken Request Ġ{ ĊĠĠĠ Ġval Ġtoken Request Web Form Ġ= ĠOAuth Server . token Request Web Form ( this ) ĊĠĠĠ Ġreturn ĠToken Request ( ĊĠĠĠĠĠĠĠ Ġgrant Type , ĊĠĠĠĠĠĠĠ ĠOAuth Server . clientId Form ( token Request Web Form ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . client Secret ( token Request Web Form ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . code ( token Request Web Form ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . redirect Uri Form ( token Request Web Form ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . scopes Form ( token Request Web Form ) Ġ?: ĠlistOf (), ĊĠĠĠĠĠĠĠ ĠOAuth Server . client Assertion Type ( token Request Web Form ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . client Assertion ( token Request Web Form ), ĊĠĠĠĠĠĠĠ ĠOAuth Server . refresh Token ( token Request Web Form )?. let Ġ{ ĠRefresh Token ( it ) Ġ}) Ċ } Ċ