/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠR az ew are ĠLLC Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠNot with standing Ġthe Ġfore going , Ġyou Ġmay Ġnot Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ċ Ġ* Ġdistribute , Ġsublicense , Ġcreate Ġa Ġderivative Ġwork , Ġand / or Ġsell Ġcopies Ġof Ġthe Ċ Ġ* ĠSoftware Ġin Ġany Ġwork Ġthat Ġis Ġdesigned , Ġintended , Ġor Ġmarket ed Ġfor Ġped ag og ical Ġor Ċ Ġ* Ġinstruction al Ġpurposes Ġrelated Ġto Ġprogramming , Ġcoding , Ġapplication Ġdevelopment , Ċ Ġ* Ġor Ġinformation Ġtechnology . Ġ ĠPermission Ġfor Ġsuch Ġuse , Ġcopying , Ġmodification , Ċ Ġ* Ġmer ger , Ġpublication , Ġdistribution , Ġsublic ensing , Ġcreation Ġof Ġderivative Ġworks , Ċ Ġ* Ġor Ġsale Ġis Ġexpress ly Ġwith held . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . ray w ender lich . coding comp anion finder . ret rofit Ċ Ċ import Ġcom . ray w ender lich . coding comp anion finder . MainActivity Ċ import Ġcom . ray w ender lich . coding comp anion finder . models . Token Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Response Ċ import Ġorg . k oin . standalone . K oin Component Ċ import Ġorg . k oin . standalone . inject Ċ import Ġjava . io . IOException Ċ Ċ // Ġ 1 Ċ class ĠAuthorization Interceptor Ġ: ĠInter ceptor , ĠK oin Component Ġ{ ĊĠ Ġ// Ġ 2 ĊĠ Ġprivate Ġval Ġpet Finder Service : ĠPet Finder Service Ġby Ġinject () ĊĠ Ġprivate Ġvar Ġtoken Ġ= ĠToken () ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠ Ġvar Ġmain Response Ġ= Ġchain . proceed ( chain . request ()) ĊĠĠĠ Ġval Ġmain Request Ġ= Ġchain . request () ĊĠĠĠ Ġif Ġ(( main Response . code () Ġ== Ġ 4 0 1 Ġ|| Ġmain Response . code () Ġ== Ġ 4 0 3 ) Ġ&& Ġ! ĊĠĠĠĠĠ Ġmain Response . request (). url (). url (). toString (). contains (" oauth 2 / token ")) Ġ{ Ċ // Ġ 3 ĊĠĠĠĠĠ Ġval Ġtoken Request Ġ= Ġpet Finder Service . getToken ( clientId Ġ= ĊĠĠĠĠĠ ĠMainActivity . API _ KEY , Ġclient Secret Ġ= ĠMainActivity . API _ SECRET ) ĊĠĠĠĠĠ Ġval Ġtoken Response Ġ= Ġtoken Request . execute () ĊĠĠĠĠĠ Ġif Ġ( token Response . is Successful ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoken Response . body ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtoken Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Request . newBuilder (). header (" Authorization ", Ġ" Bearer Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . accessToken ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. method ( main Request . method (), Ġmain Request . body ()) ĊĠĠĠĠĠĠĠĠĠ Ġmain Response Ġ= Ġchain . proceed ( builder . build ()) ĊĠĠĠĠĠĠĠ Ġ} Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġmain Response ĊĠ Ġ} Ċ } Ċ