package Ġme . x ana . f ans . data . network . auth Ċ Ċ import Ġandroid . util . Base 6 4 Ċ import Ġjava . io . Unsupported EncodingException Ċ import Ġjava . net . URL Decoder Ċ import Ġjava . security . Invalid Key Exception Ċ import Ġjava . security . NoSuch AlgorithmException Ċ import Ġjava . util .* Ċ import Ġjavax . crypto . Mac Ċ import Ġjavax . crypto . spec . SecretKey Spec Ċ Ċ /** Ċ Ġ* ĠProject : Ġ ĠF ans 2 App Ċ Ġ* ĠAuthor : ĠĠ ĠX ana ĠH op per ( x an ah op per @ 1 6 3 . com ) Ċ Ġ* ĠCreated : ĠĠ 2 0 1 8 / 8 / 1 5 Ġ 2 2 : 5 9 Ċ Ġ*/ Ċ class ĠX Auth Provider ( client Provider : ĠClient Provider , Ġauth Token : ĠAuth Token ?) ĊĠĠĠ Ġ: ĠClient Auth Provider ( Client Auth Type . X Auth , Ġclient Provider , Ġauth Token ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġauth Value : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠSystem . nano Time () Ġ+ ĠR AND . nextInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoauth HeaderParams Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" oauth _ consumer _ key ", Ġclient Provider . client Key ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" oauth _ signature _ method ", ĠHMAC _ SHA 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" oauth _ timestamp ", Ġtimestamp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" oauth _ nonce ", Ġnonce ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" oauth _ version ", ĠO AUTH _ VERSION 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" x _ auth _ username ", Ġauth UserName Ġ?: Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" x _ auth _ password ", Ġauth Password Ġ?: Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" x _ auth _ mode ", Ġ" client _ auth ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspec Ġ= Ġget Secret Spec ( client Provider , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġ"$ method & ${ encode ( construct Request URL ( request Url )) }& ${ encode ( align Params ( oauth HeaderParams )) }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġget Signature ( base , Ġspec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoauth HeaderParams . add ( RequestParam (" oauth _ signature ", Ġsignature )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauth Ġ= Ġencode Parameters ( oauth HeaderParams , Ġ",", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" OAuth Ġ$ auth " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġrequest Value : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= ĠSystem . nano Time () Ġ+ ĠR AND . nextInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoauth HeaderParams Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" oauth _ consumer _ key ", Ġclient Provider . client Key ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" oauth _ signature _ method ", ĠHMAC _ SHA 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" oauth _ timestamp ", Ġtimestamp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" oauth _ nonce ", Ġnonce ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Param (" oauth _ version ", ĠO AUTH _ VERSION 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth Token ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoauth HeaderParams . add ( RequestParam (" oauth _ token ", Ġit . token )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse Get Params ( request Url , Ġoauth HeaderParams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspec Ġ= Ġget Secret Spec ( client Provider , Ġauth Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġget Signature ("$ method & ${ encode ( construct Request URL ( request Url )) }& ${ encode ( align Params ( oauth HeaderParams )) }", Ġspec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoauth HeaderParams . add ( RequestParam (" oauth _ signature ", Ġsignature )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauth Ġ= Ġencode Parameters ( oauth HeaderParams , Ġ",", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" OAuth Ġ$ auth " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Signature ( data : ĠString , Ġspec : ĠSecret KeySpec ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbyte HMAC : ĠByteArray ? ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmac Ġ= ĠMac . getInstance ( HMAC _ SHA 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmac . init ( spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbyte HMAC Ġ= Ġmac . do Final ( data . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . encode ToString ( byte HMAC , ĠBase 6 4 . DEFAULT ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ike : ĠInvalid Key Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError ( ike ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ns ae : ĠNoSuch AlgorithmException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError ( ns ae ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Secret Spec ( client Provider : ĠClient Provider , Ġauth Token : ĠAuth Token ?): ĠSecret KeySpec Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSecret KeySpec ( auth Token ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ encode ( client Provider . client Secret )} & ${ it . secret }". toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ"${ encode ( client Provider . client Secret )} & ". toByteArray (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHMAC _ SHA 1 ) ĊĊĠĠĠ Ġprivate Ġfun Ġconstruct Request URL ( url : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġurl ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġresult . indexOf (" ?") ĊĠĠĠĠĠĠĠ Ġif Ġ(- 1 Ġ!= Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult . substring ( 0 , Ġindex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġslash Index Ġ= Ġresult . indexOf ("/", Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġbase URL Ġ= Ġresult . substring ( 0 , Ġslash Index ). toLowerCase () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġbase URL Ġ+ Ġresult . substring ( slash Index ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Get Params ( url : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature Base Params : ĠMutable List < RequestParam >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Start Ġ= Ġurl . indexOf (" ?") ĊĠĠĠĠĠĠĠ Ġif Ġ(- 1 Ġ!= Ġquery Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Str s Ġ= Ġurl . substring ( query Start Ġ+ Ġ 1 ). split ("& "). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( query Ġin Ġquery Str s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġquery . split (" =". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( split . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature Base Params . add ( RequestParam ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL Decoder . decode ( split [ 0 ], Ġ" UTF - 8 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL Decoder . decode ( split [ 1 ], Ġ" UTF - 8 "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature Base Params . add ( RequestParam ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL Decoder . decode ( split [ 0 ], Ġ" UTF - 8 "), Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠUnsupported EncodingException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠO AUTH _ VERSION 1 Ġ= Ġ" 1 . 0 " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠHMAC _ SHA 1 Ġ= Ġ" HMAC - SHA 1 " ĊĠĠĠĠĠĠĠ Ġval ĠR AND Ġ= ĠRandom () ĊĠĠĠ Ġ} Ċ }