package Ġio . im ul ab . connect . client Ċ Ċ import Ġio . im ul ab . connect . Errors Ċ import Ġorg . j ose 4 j . j we . Content Encryption Algorithm Identifiers Ċ import Ġorg . j ose 4 j . j we . Key Management Algorithm Identifiers Ċ import Ġorg . j ose 4 j . j ws . Algorithm Identifiers Ċ Ċ /** Ċ Ġ* ĠPrimary Ġinterface Ġfor Ġan ĠOpen ĠID ĠConnect Ġ 1 . 0 Ġclient . Ċ Ġ* Ċ Ġ* Ġ@ since Ġin ception Ċ Ġ*/ Ċ interface ĠClient Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġidentifier Ġof Ġthe Ġclient . ĠThe Ġidentifier Ġneeds Ġto Ġbe Ġglobally Ġunique . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġid : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġname Ġof Ġthe Ġclient . ĠImplement ations Ġare Ġencour aged Ġto Ġassign Ġa Ġdefault ĊĠĠĠĠ Ġ* Ġname Ġto Ġclient Ġif Ġnone Ġis Ġprovided Ġby Ġthe Ġuser . ĠHowever , Ġan Ġempty Ġstring Ġis Ġpermitted . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġname : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtype Ġof Ġthe Ġclient . ĠDefaults Ġto Ġ[ Client Type . CONF IDENT IAL ] Ġif Ġuser Ġdidn 't ĊĠĠĠĠ Ġ* Ġexplicitly Ġspecify . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtype : ĠClient Type ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġregistered Ġredirect Ġur is . ĠClient Ġmust Ġregister Ġat Ġleast Ġone Ġredirect Ġuri . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġredirect U ris : ĠSet < String > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġregistered Ġresponse Ġtypes . ĠThis Ġwill Ġbe Ġaffected Ġby Ġthe Ġsupported _ response _ types ĊĠĠĠĠ Ġ* Ġoption Ġdefined Ġin ĠOpen ĠID ĠConnect Ġ 1 . 0 ĠDiscovery Ġconfiguration . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġresponse Types : ĠSet < ResponseType > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġregistered Ġgrant Ġtypes . ĠThis Ġwill Ġbe Ġaffected Ġby Ġthe Ġsupported _ grant _ types ĊĠĠĠĠ Ġ* Ġoption Ġdefined Ġin ĠOpen ĠID ĠConnect Ġ 1 . 0 ĠDiscovery Ġconfiguration . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġgrant Types : ĠSet < Grant Type > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġregistered Ġscopes . ĠRequests Ġmade Ġby Ġthe Ġclient Ġmust Ġprovide Ġscopes Ġthat Ġis Ġacceptable ĊĠĠĠĠ Ġ* Ġby Ġthe Ġlist Ġof Ġscopes Ġregistered Ġhere Ġin Ġorder Ġto Ġbe Ġprocessed . ĠHowever , Ġthe Ġnot ion Ġof Ġacceptable ĊĠĠĠĠ Ġ* Ġis Ġnot Ġlimited Ġto Ġstring Ġequality Ġcomparison , Ġand Ġis Ġsubject Ġto Ġimplementation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġscopes : ĠSet < String > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġapplication Ġtype Ġof Ġthe Ġclient . ĠThe Ġvalue Ġdefaults Ġto Ġ[ Application Type . WEB ] Ġif Ġclient ĊĠĠĠĠ Ġ* Ġdidn 't Ġexplicitly Ġregister Ġa Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġapplication Type : ĠApplication Type ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġregistered Ġlist Ġof Ġemail Ġcontacts . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIn Ġprincipal , Ġthe Ġvalues Ġare Ġunique Ġand Ġhence Ġshould Ġbe Ġmodel led Ġusing Ġ[ Set ]. ĠHowever , Ġto Ġimprove ĊĠĠĠĠ Ġ* Ġease Ġof Ġuse Ġof Ġthe ĠAPI , Ġwe Ġare Ġusing Ġ[ List ] Ġhere . ĠThis Ġis Ġusually Ġnot Ġa Ġhuge Ġissue Ġas Ġthis Ġfield ĊĠĠĠĠ Ġ* Ġis Ġinformation al Ġonly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcontacts : ĠList < String > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġlogo Ġuri Ġof Ġthe Ġclient . ĠAn Ġempty Ġstring Ġindicates Ġno Ġuri Ġregistered . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlogo Uri : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġclient Ġuri . ĠAn Ġempty Ġstring Ġindicates Ġno Ġuri Ġregistered . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġclient Uri : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġpolicy Ġuri Ġof Ġthe Ġclient . ĠAn Ġempty Ġstring Ġindicates Ġno Ġuri Ġregistered . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpolicy Uri : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġterms Ġof Ġservice Ġuri Ġof Ġthe Ġclient . ĠAn Ġempty Ġstring Ġindicates Ġno Ġuri Ġregistered . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġto s Uri : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġjson Ġweb Ġkey Ġset Ġuri Ġof Ġthe Ġclient . ĠAn Ġempty Ġstring Ġindicates Ġno Ġuri Ġregistered . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfield Ġis Ġmut ually Ġexclusive Ġwith Ġ[ jw ks ]. ĠOnly Ġone Ġof Ġ[ jw ks ] Ġor Ġ[ jw ks Uri ] Ġmay Ġbe Ġprovided . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġj w ks Uri : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġraw Ġjson Ġweb Ġkey Ġset Ġvalue Ġregistered Ġby Ġthe Ġclient . ĠAn Ġempty Ġstring Ġindicates Ġclient ĊĠĠĠĠ Ġ* Ġdid Ġnot Ġregister Ġany Ġraw Ġvalue Ġof Ġjson Ġweb Ġkey Ġset . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfield Ġis Ġmut ually Ġexclusive Ġwith Ġ[ jw ks Uri ]. ĠOnly Ġone Ġof Ġ[ jw ks ] Ġor Ġ[ jw ks Uri ] Ġmay Ġbe Ġprovided . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġj w ks : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġsector Ġidentifier Ġuri Ġof Ġthe Ġclient . ĠOnly ĠURL Ġwith ĠHTTPS Ġscheme Ġis Ġacceptable . ĊĠĠĠĠ Ġ* ĠThis Ġuri Ġis Ġused Ġto Ġvalidate Ġ[ redirect U ris ] Ġand Ġconduct Ġpair wise Ġp seud onymous Ġsubject Ġvalue ĊĠĠĠĠ Ġ* Ġcalculation . ĠAn Ġempty Ġstring Ġindicates Ġno Ġuri Ġwas Ġregistered . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsector Identifier Uri : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġsubject Ġtype Ġof Ġthe Ġuser . ĠThis Ġvalue Ġis Ġused Ġto Ġdetermine Ġthe Ġalgorithm Ġduring Ġthe ĊĠĠĠĠ Ġ* Ġp seud onymous Ġsubject Ġvalue Ġcalculation . ĠThe Ġvalue Ġdefaults Ġto Ġ[ Subject Type . PUBLIC ] Ġis Ġuser Ġdid ĊĠĠĠĠ Ġ* Ġnot Ġexplicitly Ġregister . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsubject Type : ĠSubject Type ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe ĠJ WS Ġalgorithm Ġused Ġto Ġsign Ġthe Ġid _ token Ġresponse . ĠThe Ġvalue Ġshould Ġdefault Ġto ĊĠĠĠĠ Ġ* Ġ[ Signing Algorithm . RS 2 5 6 ] Ġif Ġuser Ġdid Ġnot Ġexplicitly Ġspecify . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġid Token Signed Response Algorithm : ĠSign ing Algorithm ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe ĠJ WS Ġalgorithm Ġto Ġneg otiate Ġthe Ġencryption Ġkey Ġfor ĠJ WE . ĠThe Ġvalue Ġshould Ġdefault Ġto ĊĠĠĠĠ Ġ* Ġ[ Encryption Algorithm . NONE ] Ġif Ġuser Ġdid Ġnot Ġexplicitly Ġspecify . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfield Ġhas Ġa Ġnegative ĠXOR Ġrelation Ġwith Ġ[ id Token Encrypted Response Encoding ]. ĠIf Ġvalue Ġis Ġnot ĊĠĠĠĠ Ġ* Ġequal Ġto Ġ[ Encryption Algorithm . NONE ], Ġthe Ġvalue Ġof Ġ[ id Token Encrypted Response Encoding ] Ġcannot Ġequal ĊĠĠĠĠ Ġ* Ġto Ġ[ Encryption Encoding . NONE ] Ġeither . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġid Token Encrypted Response Algorithm : ĠEncryption Algorithm ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe ĠJ WS Ġalgorithm Ġto Ġencode Ġthe Ġcontent Ġfor ĠJ WE . ĠThe Ġvalue Ġshould Ġdefault Ġto ĊĠĠĠĠ Ġ* Ġ[ Encryption Encoding . NONE ] Ġif Ġuser Ġdid Ġnot Ġexplicitly Ġspecify . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfield Ġhas Ġa Ġnegative ĠXOR Ġrelation Ġwith Ġ[ id Token Encrypted Response Algorithm ]. ĠIf Ġvalue Ġis Ġnot ĊĠĠĠĠ Ġ* Ġequal Ġto Ġ[ Encryption Encoding . NONE ], Ġthe Ġvalue Ġof Ġ[ id Token Encrypted Response Algorithm ] Ġcannot Ġequal ĊĠĠĠĠ Ġ* Ġ Ġto Ġ[ Encryption Algorithm . NONE ] Ġeither . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġid Token Encrypted Response Encoding : ĠEncryption Encoding ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe ĠJ WS Ġalgorithm Ġclient Ġwill Ġuse Ġto Ġsign Ġthe Ġrequest Ġobject . ĠThe Ġvalue Ġshould Ġdefault Ġto ĊĠĠĠĠ Ġ* Ġ[ Signing Algorithm . RS 2 5 6 ] Ġif Ġuser Ġdid Ġnot Ġexplicitly Ġspecify . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġrequest Object Signing Algorithm : ĠSign ing Algorithm ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe ĠJ WS Ġalgorithm Ġclient Ġuses Ġto Ġneg otiate Ġthe Ġencryption Ġkey Ġfor ĠJ WE Ġrequest Ġobject . ĠIf Ġnot ĊĠĠĠĠ Ġ* Ġspecified , Ġshould Ġdefault Ġto Ġ[ Encryption Algorithm . NONE ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfield Ġhas Ġa Ġnegative ĠXOR Ġrelation Ġwith Ġ[ request Object Encryption Encoding ]. ĠIf Ġvalue Ġis Ġnot ĊĠĠĠĠ Ġ* Ġequal Ġto Ġ[ Encryption Algorithm . NONE ], Ġthe Ġvalue Ġof Ġ[ request Object Encryption Encoding ] Ġcannot Ġequal ĊĠĠĠĠ Ġ* Ġto Ġ[ Encryption Encoding . NONE ] Ġeither . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġrequest Object Encryption Algorithm : ĠEncryption Algorithm ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe ĠJ WS Ġalgorithm Ġclient Ġuses Ġto Ġencode Ġthe Ġcontent Ġfor ĠJ WE Ġrequest Ġobject . ĠIf Ġnot Ġspecified , ĊĠĠĠĠ Ġ* Ġshould Ġdefault Ġto Ġ[ Encryption Encoding . NONE ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfield Ġhas Ġa Ġnegative ĠXOR Ġrelation Ġwith Ġ[ request Object Encryption Algorithm ]. ĠIf Ġvalue Ġis Ġnot ĊĠĠĠĠ Ġ* Ġequal Ġto Ġ[ Encryption Encoding . NONE ], Ġthe Ġvalue Ġof Ġ[ request Object Encryption Algorithm ] Ġcannot Ġequal ĊĠĠĠĠ Ġ* Ġto Ġ[ Encryption Algorithm . NONE ] Ġeither . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġrequest Object Encryption Encoding : ĠEncryption Encoding ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġsigning Ġalgorithm Ġused Ġto Ġsign Ġthe Ġuser Ġinfo Ġendpoint Ġresponse . ĠIf Ġnot Ġspecified , Ġshould Ġdefault ĊĠĠĠĠ Ġ* Ġto Ġ[ Signing Algorithm . NONE ], Ġwhich Ġmeans Ġthe Ġendpoint Ġwill Ġreturn Ġcontent Ġin Ġapplication / json Ġformat . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠuserInfo Signed Response Algorithm : ĠSign ing Algorithm ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe ĠJ WS Ġalgorithm Ġto Ġneg otiate Ġthe Ġencryption Ġkey Ġfor Ġthe ĠJ WE Ġuser Ġinfo Ġresponse . ĠIf Ġnot Ġspecified , ĊĠĠĠĠ Ġ* Ġshould Ġdefault Ġto Ġ[ Encryption Algorithm . NONE ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfield Ġhas Ġa Ġnegative ĠXOR Ġrelation Ġwith Ġ[ userInfo Encrypted Response Encoding ]. ĠIf Ġvalue Ġis Ġnot ĊĠĠĠĠ Ġ* Ġequal Ġto Ġ[ Encryption Algorithm . NONE ], Ġthe Ġvalue Ġof Ġ[ userInfo Encrypted Response Encoding ] Ġcannot Ġequal ĊĠĠĠĠ Ġ* Ġto Ġ[ Encryption Encoding . NONE ] Ġeither . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠuserInfo Encrypted Response Algorithm : ĠEncryption Algorithm ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe ĠJ WS Ġalgorithm Ġto Ġencode Ġthe ĠJ WE Ġuser Ġinfo Ġresponse Ġcontent . ĠIf Ġnot Ġspecified , Ġshould Ġdefault Ġto ĊĠĠĠĠ Ġ* Ġ[ Encryption Encoding . NONE ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfield Ġhas Ġa Ġnegative ĠXOR Ġrelation Ġwith Ġ[ userInfo Encrypted Response Algorithm ]. ĠIf Ġvalue Ġis Ġnot ĊĠĠĠĠ Ġ* Ġequal Ġto Ġ[ Encryption Encoding . NONE ], Ġthe Ġvalue Ġof Ġ[ userInfo Encrypted Response Algorithm ] Ġcannot Ġequal ĊĠĠĠĠ Ġ* Ġto Ġ[ Encryption Algorithm . NONE ] Ġeither . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠuserInfo Encrypted Response Encoding : ĠEncryption Encoding ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġauthentication Ġmethod Ġemploy ed Ġby Ġthe Ġtoken Ġendpoint . ĠIf Ġnot Ġspecified , Ġdefaults Ġto ĊĠĠĠĠ Ġ* Ġ[ Authentication Method . BASIC ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtoken Endpoint Auth Method : ĠAuthentication Method ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġalgorithm Ġused Ġto Ġsign Ġthe Ġauthentication ĠJWT Ġused Ġat Ġthe Ġtoken Ġendpoint . ĠThis Ġvalue Ġis Ġonly Ġused ĊĠĠĠĠ Ġ* Ġwhen Ġ[ token Endpoint Auth Method ] Ġis Ġ[ Authentication Method . JWT _ PRIVATE ] Ġor Ġ[ Authentication Method . JWT _ SECRET ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWhen Ġ[ token Endpoint Auth Method ] Ġis Ġ[ Authentication Method . BASIC ], Ġ[ Authentication Method . POST ], Ġor ĊĠĠĠĠ Ġ* Ġ[ Authentication Method . NONE ], Ġthis Ġvalue Ġcan Ġdefault Ġto Ġ[ Signing Algorithm . NONE ]. ĠOtherwise , Ġclient Ġmust Ġspecify ĊĠĠĠĠ Ġ* Ġa Ġnot -[ Signing Algorithm . NONE ] Ġvalue Ġfor Ġthis Ġfield . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtoken Endpoint Auth Signing Algorithm : ĠSign ing Algorithm ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġdefault Ġmax Ġage Ġspecified Ġby Ġthe Ġclient . ĠIf Ġthis Ġvalue Ġis Ġgreater Ġthan Ġzero , Ġuser Ġauthentication ĊĠĠĠĠ Ġ* Ġsession Ġwill Ġbe Ġimp osed Ġan Ġexpiry Ġconstraint Ġspecified Ġby Ġthe Ġnumber Ġof Ġseconds Ġin Ġthis Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġmax Ġage Ġvalue Ġcannot Ġbe Ġless Ġthan Ġzero , Ġwhich Ġmeans Ġide ally Ġwe Ġshould Ġmodel Ġit Ġusing Ġunsigned Ġdata Ġtype . ĊĠĠĠĠ Ġ* ĠHowever , Ġsince Ġunsigned Ġlong Ġis Ġstill Ġexperimental Ġin ĠKotlin Ġat Ġthe Ġtime Ġof Ġwriting . ĠWe Ġwill Ġjust Ġuse Ġlong Ġas ĊĠĠĠĠ Ġ* Ġits Ġdata Ġtype Ġand Ġdo Ġextra Ġvalidation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdefault Max Age : ĠLong ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġwhether Ġauth _ time Ġclaim Ġis Ġrequired . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġrequire Auth Time : ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġlist Ġof Ġdefault Ġauthentication Ġclass Ġreference Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdefault Ac r Values : ĠList < String > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġlist Ġof Ġur is , Ġeach Ġpointing Ġto Ġa Ġfile Ġthat Ġcontains Ġa Ġrequest Ġobject . ĠUp on Ġclient Ġregistration , Ġserver ĊĠĠĠĠ Ġ* Ġcan Ġread Ġfrom Ġthese Ġur is Ġand Ġcache Ġits Ġcontent . ĠEach Ġuri Ġcan Ġoptionally Ġcontain Ġa Ġfragment Ġcalculated Ġby Ġhashing ĊĠĠĠĠ Ġ* Ġthe Ġcontent Ġwith ĠSHA - 2 5 6 . ĠIf Ġsuch Ġfragment Ġis Ġpresent , Ġserver Ġwill Ġalso Ġperform Ġhash Ġchecks Ġon Ġthe Ġdata Ġreceived . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġrequest U ris : ĠSet < String > Ċ } Ċ Ċ /** Ċ Ġ* ĠInterface Ġfor Ġobtaining Ġthe Ġclient 's Ġsecret , Ġin Ġany Ġform . ĠThis Ġis Ġintention ally Ġseparated Ġwith Ġthe Ġmain Ġ[ Client ] Ċ Ġ* Ġinterface Ġto Ġgive Ġimplementation Ġa Ġchoice Ġto Ġnot Ġexpose Ġsecret . Ċ Ġ* Ċ Ġ* Ġ@ since Ġin ception Ċ Ġ*/ Ċ interface ĠClient Secret Aware Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġclient Ġsecret Ġin Ġthe Ġform Ġof Ġchoice Ġ( e . g . Ġplain Ġtext , Ġhashed , Ġor Ġencrypted ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsecret : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConvert Ġ[ secret ] Ġto Ġplain Ġtext , Ġused Ġfor Ġsymmetric Ġsigning Ġkeys . ĠDefault Ġto Ġ[ secret ] Ġitself . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġplain Text Secret (): ĠString Ġ= Ġsecret Ċ } Ċ Ċ /** Ċ Ġ* ĠInterface Ġfor Ġobtaining Ġthe Ġclient 's Ġcached Ġjson Ġweb Ġkey Ġset . ĠImplement ing Ġthis Ġinterface Ġwill Ġhelp Ġavoid Ġrequest Ċ Ġ* Ġtime Ġkey Ġset Ġresolution , Ġwhich Ġimpact s Ġresponse Ġtime . ĠThis Ġis Ġintention ally Ġseparated Ġwith Ġthe Ġmain Ġ[ Client ] Ċ Ġ* Ġinterface Ġto Ġgive Ġchoice Ġto Ġimplementation . Ċ Ġ* Ċ Ġ* Ġ@ since Ġin ception Ċ Ġ*/ Ċ interface ĠJ w ks Cache Aware Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġjson Ġweb Ġkey Ġset Ġcached Ġby Ġthe Ġclient . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġj w ks Cache : ĠString Ċ } Ċ Ċ /** Ċ Ġ* ĠInterface Ġfor Ġobtaining Ġthe Ġclient 's Ġcached Ġrequest Ġobject . ĠImplement ing Ġthis Ġinterface Ġwill Ġhelp Ġavoid Ġrequest Ċ Ġ* Ġtime Ġrequest Ġobject Ġresolution , Ġwhich Ġimpact s Ġresponse Ġtime . ĠThis Ġis Ġintention ally Ġseparated Ġwith Ġthe Ġmain Ġ[ Client ] Ċ Ġ* Ġinterface Ġto Ġgive Ġchoice Ġto Ġimplementation . Ċ Ġ* Ċ Ġ* Ġ@ since Ġin ception Ċ Ġ*/ Ċ interface ĠRequest Cache Aware Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġcached Ġrequest Ġobject Ġcorresponding Ġto Ġthe Ġ[ request Uri ]. ĠIf Ġno Ġsuch Ġcache Ġexists , Ġan Ġempty Ġstring ĊĠĠĠĠ Ġ* Ġis Ġreturned Ġinstead . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġuri For Request Cache ( request Uri : ĠString ): ĠString Ċ } Ċ Ċ enum Ġclass ĠClient Type ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠPUBLIC (" public "), ĠCONF IDENT IAL (" conf idential "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠClient Type Ġ= Ġvalues (). find Ġ{ Ġit . value Ġ== Ġvalue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠErrors . invalid Request ("' $ value ' Ġis Ġnot Ġa Ġvalid Ġclient Ġtype .") ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠResponse Type ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠCODE (" code "), ĠTOKEN (" token "), ĠID _ TOKEN (" id _ token "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠResponse Type Ġ= Ġvalues (). find Ġ{ Ġit . value Ġ== Ġvalue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠErrors . invalid Request ("' $ value ' Ġis Ġnot Ġa Ġvalid Ġresponse Ġtype .") ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠGrant Type ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠCODE (" authorization _ code "), ĠIMP LICIT (" implicit "), ĊĠĠĠ ĠCLIENT (" client _ credentials "), ĠP WD (" password "), ĠREF RESH (" refresh _ token "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠGrant Type Ġ= Ġvalues (). find Ġ{ Ġit . value Ġ== Ġvalue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠErrors . invalid Request ("' $ value ' Ġis Ġnot Ġa Ġvalid Ġgrant Ġtype .") ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠApplication Type ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠWEB (" web "), ĠN ATIVE (" native "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠApplication Type Ġ= Ġvalues (). find Ġ{ Ġit . value Ġ== Ġvalue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠErrors . invalid Request ("' $ value ' Ġis Ġnot Ġa Ġvalid Ġapplication Ġtype .") ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠSubject Type ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠPUBLIC (" public "), ĠPA IR WISE (" pair wise "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠSubject Type Ġ= Ġvalues (). find Ġ{ Ġit . value Ġ== Ġvalue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠErrors . invalid Request ("' $ value ' Ġis Ġnot Ġa Ġvalid Ġsubject Ġtype .") ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠSign ing Algorithm ( val Ġvalue : ĠString , Ġval Ġsymmetric : ĠBoolean ) Ġ{ ĊĠĠĠ ĠH S 2 5 6 ( Algorithm Identifiers . HMAC _ SHA 2 5 6 , Ġtrue ), ĊĠĠĠ ĠH S 3 8 4 ( Algorithm Identifiers . HMAC _ SHA 3 8 4 , Ġtrue ), ĊĠĠĠ ĠH S 5 1 2 ( Algorithm Identifiers . HMAC _ SHA 5 1 2 , Ġtrue ), ĊĠĠĠ ĠRS 2 5 6 ( Algorithm Identifiers . RSA _ USING _ SHA 2 5 6 , Ġfalse ), ĊĠĠĠ ĠRS 3 8 4 ( Algorithm Identifiers . RSA _ USING _ SHA 3 8 4 , Ġfalse ), ĊĠĠĠ ĠRS 5 1 2 ( Algorithm Identifiers . RSA _ USING _ SHA 5 1 2 , Ġfalse ), ĊĠĠĠ ĠES 2 5 6 ( Algorithm Identifiers . ECD SA _ USING _ P 2 5 6 _ CUR VE _ AND _ SHA 2 5 6 , Ġfalse ), ĊĠĠĠ ĠES 3 8 4 ( Algorithm Identifiers . ECD SA _ USING _ P 3 8 4 _ CUR VE _ AND _ SHA 3 8 4 , Ġfalse ), ĊĠĠĠ ĠES 5 1 2 ( Algorithm Identifiers . ECD SA _ USING _ P 5 2 1 _ CUR VE _ AND _ SHA 5 1 2 , Ġfalse ), ĊĠĠĠ ĠPS 2 5 6 ( Algorithm Identifiers . RSA _ PSS _ USING _ SHA 2 5 6 , Ġfalse ), ĊĠĠĠ ĠPS 3 8 4 ( Algorithm Identifiers . RSA _ PSS _ USING _ SHA 3 8 4 , Ġfalse ), ĊĠĠĠ ĠPS 5 1 2 ( Algorithm Identifiers . RSA _ PSS _ USING _ SHA 5 1 2 , Ġfalse ), ĊĠĠĠ ĠNONE ( Algorithm Identifiers . NONE , Ġfalse ); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠSign ing Algorithm Ġ= Ġvalues (). find Ġ{ Ġit . value Ġ== Ġvalue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠErrors . invalid Request ("' $ value ' Ġis Ġnot Ġa Ġvalid Ġsigning Ġalgorithm .") ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠEncryption Algorithm ( val Ġvalue : ĠString , Ġval Ġsymmetric : ĠBoolean ) Ġ{ ĊĠĠĠ ĠRSA 1 _ 5 ( Key Management Algorithm Identifiers . RSA 1 _ 5 , Ġfalse ), ĊĠĠĠ ĠRSA _ OA EP ( Key Management Algorithm Identifiers . RSA _ OA EP , Ġfalse ), ĊĠĠĠ ĠRSA _ OA EP _ 2 5 6 ( Key Management Algorithm Identifiers . RSA _ OA EP _ 2 5 6 , Ġfalse ), ĊĠĠĠ ĠE CD H _ ES ( Key Management Algorithm Identifiers . ECD H _ ES , Ġfalse ), ĊĠĠĠ ĠE CD H _ ES _ A 1 2 8 KW ( Key Management Algorithm Identifiers . ECD H _ ES _ A 1 2 8 KW , Ġfalse ), ĊĠĠĠ ĠE CD H _ ES _ A 1 9 2 KW ( Key Management Algorithm Identifiers . ECD H _ ES _ A 1 9 2 KW , Ġfalse ), ĊĠĠĠ ĠE CD H _ ES _ A 2 5 6 KW ( Key Management Algorithm Identifiers . ECD H _ ES _ A 2 5 6 KW , Ġfalse ), ĊĠĠĠ ĠA 1 2 8 KW ( Key Management Algorithm Identifiers . A 1 2 8 KW , Ġtrue ), ĊĠĠĠ ĠA 1 9 2 KW ( Key Management Algorithm Identifiers . A 1 9 2 KW , Ġtrue ), ĊĠĠĠ ĠA 2 5 6 KW ( Key Management Algorithm Identifiers . A 2 5 6 KW , Ġtrue ), ĊĠĠĠ ĠA 1 2 8 GCM KW ( Key Management Algorithm Identifiers . A 1 2 8 GCM KW , Ġtrue ), ĊĠĠĠ ĠA 1 9 2 GCM KW ( Key Management Algorithm Identifiers . A 1 9 2 GCM KW , Ġtrue ), ĊĠĠĠ ĠA 2 5 6 GCM KW ( Key Management Algorithm Identifiers . A 2 5 6 GCM KW , Ġtrue ), ĊĠĠĠ ĠPB ES 2 _ HS 2 5 6 _ A 1 2 8 KW ( Key Management Algorithm Identifiers . PB ES 2 _ HS 2 5 6 _ A 1 2 8 KW , Ġtrue ), ĊĠĠĠ ĠPB ES 2 _ HS 3 8 4 _ A 1 9 2 KW ( Key Management Algorithm Identifiers . PB ES 2 _ HS 3 8 4 _ A 1 9 2 KW , Ġtrue ), ĊĠĠĠ ĠPB ES 2 _ HS 5 1 2 _ A 2 5 6 KW ( Key Management Algorithm Identifiers . PB ES 2 _ HS 5 1 2 _ A 2 5 6 KW , Ġtrue ), ĊĠĠĠ ĠDIRECT ( Key Management Algorithm Identifiers . DIRECT , Ġtrue ), ĊĠĠĠ ĠNONE (" none ", Ġfalse ); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠEncryption Algorithm Ġ= Ġvalues (). find Ġ{ Ġit . value Ġ== Ġvalue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠErrors . invalid Request ("' $ value ' Ġis Ġnot Ġa Ġvalid Ġencryption Ġalgorithm .") ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠEncryption Encoding ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠAES _ 1 2 8 _ CBC _ HMAC _ SHA _ 2 5 6 ( Content Encryption Algorithm Identifiers . AES _ 1 2 8 _ CBC _ HMAC _ SHA _ 2 5 6 ), ĊĠĠĠ ĠAES _ 1 9 2 _ CBC _ HMAC _ SHA _ 3 8 4 ( Content Encryption Algorithm Identifiers . AES _ 1 9 2 _ CBC _ HMAC _ SHA _ 3 8 4 ), ĊĠĠĠ ĠAES _ 2 5 6 _ CBC _ HMAC _ SHA _ 5 1 2 ( Content Encryption Algorithm Identifiers . AES _ 2 5 6 _ CBC _ HMAC _ SHA _ 5 1 2 ), ĊĠĠĠ ĠAES _ 1 2 8 _ GCM ( Content Encryption Algorithm Identifiers . AES _ 1 2 8 _ GCM ), ĊĠĠĠ ĠAES _ 1 9 2 _ GCM ( Content Encryption Algorithm Identifiers . AES _ 1 9 2 _ GCM ), ĊĠĠĠ ĠAES _ 2 5 6 _ GCM ( Content Encryption Algorithm Identifiers . AES _ 2 5 6 _ GCM ), ĊĠĠĠ ĠNONE (" none "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠEncryption Encoding Ġ= Ġvalues (). find Ġ{ Ġit . value Ġ== Ġvalue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠErrors . invalid Request ("' $ value ' Ġis Ġnot Ġa Ġvalid Ġencryption Ġencoding .") ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠAuthentication Method ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠBAS IC (" client _ secret _ basic "), ĠPOST (" client _ secret _ post "), ĊĠĠĠ ĠJWT _ SECRET (" client _ secret _ jwt "), ĠJWT _ PRIVATE (" private _ key _ jwt "), ĊĠĠĠ ĠNONE (" none "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠAuthentication Method Ġ= Ġvalues (). find Ġ{ Ġit . value Ġ== Ġvalue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠErrors . invalid Request ("' $ value ' Ġis Ġnot Ġa Ġvalid Ġauthentication Ġmethod .") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Nothing ] Ġbased Ġimplementation Ġof Ġclient . ĠThis Ġis Ġcreated Ġfor Ġtest Ġclasses Ġto Ġeasily Ġcreated Ġdummy Ċ Ġ* Ġimplementations Ġwithout Ġhaving Ġto Ġimplement Ġevery Ġfield . Ċ Ġ* Ċ Ġ* Ġ@ since Ġin ception Ċ Ġ*/ Ċ open Ġclass ĠNothing Client Ġ: ĠClient , ĠClient Secret Aware , ĠJ w ks Cache Aware , ĠRequest Cache Aware Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġnothing (): ĠNothing Ġ= Ġthrow ĠNotImplementedError (" nothing Ġclient Ġimplements Ġnothing .") ĊĠĠĠ Ġoverride Ġval Ġid : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġtype : ĠClient Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġredirect U ris : ĠSet < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġresponse Types : ĠSet < ResponseType > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġgrant Types : ĠSet < Grant Type > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġscopes : ĠSet < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġapplication Type : ĠApplication Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġcontacts : ĠList < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġlogo Uri : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġclient Uri : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġpolicy Uri : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġto s Uri : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġj w ks Uri : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġj w ks : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġsector Identifier Uri : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġsubject Type : ĠSubject Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġid Token Signed Response Algorithm : ĠSign ing Algorithm ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġid Token Encrypted Response Algorithm : ĠEncryption Algorithm ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġid Token Encrypted Response Encoding : ĠEncryption Encoding ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġrequest Object Signing Algorithm : ĠSign ing Algorithm ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġrequest Object Encryption Algorithm : ĠEncryption Algorithm ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġrequest Object Encryption Encoding : ĠEncryption Encoding ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval ĠuserInfo Signed Response Algorithm : ĠSign ing Algorithm ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval ĠuserInfo Encrypted Response Algorithm : ĠEncryption Algorithm ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval ĠuserInfo Encrypted Response Encoding : ĠEncryption Encoding ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġtoken Endpoint Auth Method : ĠAuthentication Method ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġtoken Endpoint Auth Signing Algorithm : ĠSign ing Algorithm ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġdefault Max Age : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġrequire Auth Time : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġdefault Ac r Values : ĠList < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġrequest U ris : ĠSet < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġsecret : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĠĠĠ Ġoverride Ġval Ġj w ks Cache : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnothing () ĊĊĠĠĠ Ġoverride Ġfun Ġuri For Request Cache ( request Uri : ĠString ): ĠString Ġ= Ġnothing () Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Client ] Ġimplementation Ġwhich Ġonly Ġhas Ġclient _ id Ġavailable . ĠThis Ġimplementation Ġis Ġhelpful Ċ Ġ* Ġto Ġbe Ġused Ġas Ġa Ġplaceholder Ġwhen Ġwe Ġreceived Ġclient _ id Ġdata Ġin Ġrequest , Ġbut Ġhas Ġnot Ġresolved Ċ Ġ* Ġthe Ġclient Ġyet . Ċ Ġ*/ Ċ class ĠId Only Client ( override Ġval Ġid : ĠString ): ĠNothing Client ()