/* Ċ Ġ* Ġ ĠCopyright Ġ 2 0 1 7 ĠC urity ĠAB Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . curity . identity server . plugin . username . authentication Ċ Ċ import Ġio . curity . identity server . plugin . username . config . Username Authenticator Plugin Config Ċ import Ġse . curity . identity server . sdk . attribute . Attribute Ċ import Ġse . curity . identity server . sdk . attribute . Attributes Ċ import Ġse . curity . identity server . sdk . attribute . Authentication Attributes Ċ import Ġse . curity . identity server . sdk . attribute . Context Attributes Ċ import Ġse . curity . identity server . sdk . attribute . Subject Attributes Ċ import Ġse . curity . identity server . sdk . authentication . Authentication Result Ċ import Ġse . curity . identity server . sdk . authentication . Authenticator RequestHandler Ċ import Ġse . curity . identity server . sdk . errors . ErrorCode Ċ import Ġse . curity . identity server . sdk . web . Request Ċ import Ġse . curity . identity server . sdk . web . Response Ċ import Ġse . curity . identity server . sdk . web . Response Model . template Response Model Ċ import Ġjava . util . Date Ċ import Ġjava . util . Optional Ċ Ċ class ĠUsername Authenticator RequestHandler ( config : ĠUsername Authenticator Plugin Config ) ĊĠĠĠ Ġ: ĠAuth enticator RequestHandler < Request Model > Ċ { ĊĊĠĠĠ Ġprivate Ġval Ġuser Preferences Manager Ġ= Ġconfig . user Preferences Manager ĊĠĠĠ Ġprivate Ġval Ġauto Post Login Hint Ġ= Ġconfig . auto Submit Preferred UserName () ĊĠĠĠ Ġprivate Ġval Ġexception Factory Ġ= Ġconfig . exception Factory ĊĊĠĠĠ Ġoverride Ġfun Ġget ( request Model : ĠRequest Model , Ġresponse : ĠResponse ): ĠOptional < Authentication Result > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( auto Post Login Hint Ġ&& Ġrequest Model . getRequest Model ?. preferred UserName Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOptional . of ( create Authentication Result ( request Model . getRequest Model . preferred UserName )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠOptional . empty () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġpost ( request Model : ĠRequest Model , Ġresponse : ĠResponse ): ĠOptional < Authentication Result > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpost Request Model Ġ= Ġrequest Model . post Request Model ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow Ġexception Factory . internal Server Exception ( ErrorCode . GENERIC _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Could Ġnot Ġfind Ġcorrect Ġrequest Ġmodel ") ĊĊĠĠĠĠĠĠĠ Ġuser Preferences Manager . save Username ( post Request Model . username ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠOptional . of ( create Authentication Result ( post Request Model . username )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Authentication Result ( userName : ĠString ) Ġ= ĠAuthentication Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuthentication Attributes . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSubject Attributes . of ( userName , ĠAttributes . of ( Attribute . of (" username ", ĠuserName ))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Attributes . of ( Attributes . of ( Attribute . of (" iat ", ĠDate (). time ))))) ĊĊĠĠĠ Ġcompanion Ġobject ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġtemplate Name Ġ= Ġ" authenticate / get " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpre Process ( request : ĠRequest , Ġresponse : ĠResponse ): ĠRequest Model ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request . is GetRequest ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGET Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . put ViewData (" username ", Ġuser Preferences Manager . username , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Response Model Scope . NOT _ FAILURE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġon Ġrequest Ġvalidation Ġfailure , Ġwe Ġshould Ġuse Ġthe Ġsame Ġtemplate Ġas Ġfor ĠNOT _ FAILURE ĊĠĠĠĠĠĠĠ Ġresponse . set Response Model ( template Response Model ( empty Map < String , ĠAny >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Name ), ĠResponse . Response Model Scope . ANY ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRequest Model ( request , Ġuser Preferences Manager ) ĊĠĠĠ Ġ} Ċ }