package Ġvideo . api . android kotlin sdk Ċ Ċ import Ġandroid . util . Log Ċ import Ġokhttp 3 .* Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ import Ġorg . json . JSONObject ĊĊ Ċ class ĠToken Authenticator ( private Ġval Ġtoken Holder : ĠToken Holder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġbase Uri : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠapiKey : ĠString Ċ ) Ġ: ĠAuth enticator Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġauthenticate ( route : ĠRoute ?, Ġresponse : ĠResponse ): ĠRequest ? Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e (" response ", Ġresponse . code . toString ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( response . request . header (" Authorization ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġtoken Holder . token ĊĠĠĠĠĠĠĠ Ġif Ġ( token Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Holder . token Ġ= Ġrequest AccessToken ( JSONObject (). put (" apiKey ", ĠapiKey )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" access Ġtoken Ġrequested ") ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Holder . token Ġ= Ġrequest AccessToken ( JSONObject (). put (" refresh Token ", Ġtoken . refresh Token )) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse . request . add Authorization ( token Holder . token ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest AccessToken ( body : ĠJSONObject ): ĠToken Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("$ base Uri / auth / api - key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( body . toString (). to RequestBody ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠOk HttpClient (). new Call ( request ). execute () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( response . code Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( response . body !!. string ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Token Ġ= ĠJSONObject ( response . body !!. string ()); ĊĠĠĠĠĠĠĠ Ġreturn ĠToken ( json Token . getString (" access _ token "), Ġjson Token . getString (" refresh _ token "), Ġjson Token . getString (" token _ type ")) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun ĠRequest . add Authorization ( token : ĠToken ?) Ġ= ĊĠĠĠ Ġif Ġ( token Ġ== Ġnull ) Ġthis ĊĠĠĠ Ġelse ĠnewBuilder () ĊĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ${ token . accessToken }") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊ