package Ġfactory Ċ Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . jackson . Jack son Converter Factory Ċ import Ġservice . Chunk Repo Service Ċ import Ġservice . Classes Service Ċ import Ġservice . Github Service Ċ import Ġservice . RateLimit Service Ċ import Ġjava . util .* Ċ Ċ class ĠGithub Service Factory Ġ{ ĊĊĠĠĠ Ġfun Ġcreate Default Repo Service ( login : ĠString , Ġpassword : ĠString ): ĠGithub Service Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGithub Service ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Default Chunk Repo Service ( login , Ġpassword ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Default Classes Service ( login , Ġpassword ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate RateLimit Service ( login , Ġpassword ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Query Factory () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Default Chunk Repo Service ( login : ĠString , Ġpassword : ĠString ): ĠChunk Repo Service Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠhttpClient Ġ= Ġcreate HttpClient ( login , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġval Ġretrofit Ġ= Ġcreate Ret rofit ( httpClient ) ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit . create ( Chunk Repo Service :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Default Classes Service ( login : ĠString , Ġpassword : ĠString ): ĠClasses Service Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠhttpClient Ġ= Ġcreate HttpClient ( login , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġval Ġretrofit Ġ= Ġcreate Ret rofit ( httpClient ) ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit . create ( Classes Service :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate RateLimit Service ( login : ĠString , Ġpassword : ĠString ): ĠRate Limit Service Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠhttpClient Ġ= Ġcreate HttpClient ( login , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġval Ġretrofit Ġ= Ġcreate Ret rofit ( httpClient ) ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit . create ( RateLimit Service :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Ret rofit ( httpClient : ĠOk HttpClient ): ĠRet rofit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl (" https :// api . github . com ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Jack son Converter Factory . create ( jackson ObjectMapper ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( httpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate HttpClient ( login : ĠString , Ġpassword : ĠString ): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauth Token Ġ= Ġ" Basic Ġ" Ġ+ ĠBase 6 4 . get Encoder (). encode ("${ login }:${ password }". toByteArray ()). toString ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġoriginal . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Accept ", Ġ" application / vnd . github . v 3 + json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġauth Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ } Ċ