package Ġcom . yes . demo q es client Ċ Ċ import Ġorg . springframework . http . HttpMethod Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . ui . Model Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġorg . springframework . web . bind . annotation . RestController Ċ import Ġorg . springframework . web . client . Rest Template Ċ import Ġorg . springframework . web . server . ResponseStatus Exception Ċ import Ġorg . springframework . web . servlet . view . Redirect View Ċ import Ġorg . springframework . web . util . Uri Components Builder Ċ Ċ @ RestController Ċ @ Session Attributes (" oauth Session ", Ġ" document Session ") Ċ class ĠRest Controller Ġ{ ĊĠĠĠ Ġdata Ġclass ĠIdentity ( val Ġiss : ĠString Ġ= Ġ"") ĊĠĠĠ Ġdata Ġclass ĠRemote Signature Creation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqt sp _ id : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsign Doc : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcon formance _ levels _ supported : ĠSet < String > Ġ= Ġset Of () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠService Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidentity : ĠIdentity Ġ= ĠIdentity (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote _ signature _ creation : ĠSet < Remote Signature Creation > Ġ= Ġset Of () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ GetMapping ("/ q es / ac ") ĊĠĠĠ Ġfun Ġaccount Chooser Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ RequestParam Ġissuer _ url : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠModel , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Model Attribute (" document Session ") Ġdoc S ess : ĠDocument Session ĊĠĠĠ Ġ): ĠRedirect View Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Issuer ĠURL : Ġ${ issuer _ url }") ĊĊĠĠĠĠĠĠĠ Ġval Ġrest Template Ġ= ĠRest Template () ĊĠĠĠĠĠĠĠ Ġ// ĠGet ĠService ĠConfiguration ĊĠĠĠĠĠĠĠ Ġval Ġservice Configuration Entity : ĠResponseEntity < Service Configuration > Ġ= Ġrest Template . exchange ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// api . sandbox . yes . com / service - configuration / v 1 /? iss =${ issuer _ url }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . GET , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠService Configuration :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Configuration Ġ= Ġservice Configuration Entity . body ĊĠĠĠĠĠĠĠ Ġ// ĠSecurity Ġcheck ĊĠĠĠĠĠĠĠ Ġif Ġ( service Configuration Entity . statusCode Ġ!= ĠHttpStatus . OK Ġ|| Ġservice Configuration Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠResponse Status Exception ( HttpStatus . INTERNAL _ SERVER _ ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( service Configuration ) ĊĊĠĠĠĠĠĠĠ Ġval Ġissuer Url Ġ= Ġservice Configuration . identity . iss ĊĊĠĠĠĠĠĠĠ Ġval Ġoauth Configuration : ĠOAuth Configuration ? Ġ= Ġrest Template . get For Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ issuer Url }/. well - known / oauth - authorization - server ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOAuth Configuration :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSecurity Ġcheck ĊĠĠĠĠĠĠĠ Ġif Ġ( oauth Configuration Ġ== Ġnull Ġ|| Ġoauth Configuration . issuer Ġ!= Ġissuer Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠResponse Status Exception ( HttpStatus . INTERNAL _ SERVER _ ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln ( oauth Configuration ) ĊĊĠĠĠĠĠĠĠ Ġval Ġoauth Session Ġ= ĠOAuth Session ( oauth Configuration ) ĊĠĠĠĠĠĠĠ Ġprintln (" OAuth Session : Ġ${ oauth Session }") ĊĠĠĠĠĠĠĠ Ġmodel . addAttribute (" oauth Session ", Ġoauth Session ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest URI Ġ= Ġpushed Auth Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoauth Configuration . pus hed _ authorization _ request _ endpoint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoauth Session , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc S ess ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠUri Components Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from Uri String ( oauth Configuration . authorization _ endpoint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" request _ uri ", Ġrequest URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" client _ id ", Ġclient ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" response _ type ", Ġ" code ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. encode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġredirect View Ġ= ĠRedirect View () ĊĠĠĠĠĠĠĠ Ġredirect View . url Ġ= Ġbuilder . to Uri String () ĊĠĠĠĠĠĠĠ Ġreturn Ġredirect View ĊĠĠĠ Ġ} Ċ }