package Ġcom . pr 0 gram m . app . util Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Application Ċ import Ġandroid . os . Build Ċ import Ġcom . google . android . gms . common . Connection Result Ċ import Ġcom . google . android . gms . common . Google Api Availability Light Ċ import Ġcom . google . android . gms . security . Provider Installer Ċ import Ġcom . pr 0 gram m . app . Logger Ċ import Ġcom . pr 0 gram m . app . time Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġjava . security . Secure Random Ċ import Ġjava . security . cert . X 5 0 9 Certificate Ċ import Ġjavax . net . ssl . SSL Context Ċ import Ġjavax . net . ssl . Trust Manager Ċ import Ġjavax . net . ssl . X 5 0 9 Trust Manager Ċ Ċ // Setting Ġtest Mode Ġconfiguration . ĠIf Ġset Ġas Ġtest Mode , Ġthe Ġconnection Ġwill Ġskip Ġcert ification Ġcheck Ċ fun ĠOk HttpClient . Builder . configure SS LS ocket Factory And Security ( app : ĠApplication ): ĠOk HttpClient . Builder Ġ{ ĊĠĠĠ Ġval Ġlogger Ġ= ĠLogger (" Ok Http SSL ") ĊĊĠĠĠ Ġ// Ġtry Ġto Ġinstall Ġcertificates Ġon Ġandroid Ġ 5 . 1 + ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ> ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( install G ms Trust Certificates ( app , Ġlogger )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠOkay Ġf uck , Ġwe Ġdon 't Ġhave Ġthe Ġgoogle Ġservices Ġavailable , Ġand Ġssl Ġdoesn 't Ġwork Ġon Ġolder ĊĠĠĠ Ġ// Ġandroid Ġversions . ĠWhat Ġdo Ġwe Ġdo Ġnow ? ĠWe Ġallow Ġeverything ... Ġwell , Ġf uck Ġit ! ĊĠĠĠ Ġlogger . warn Ġ{ Ġ" Disable Ġvalidity Ġchecking Ġof ĠSSL Ġcertificates " Ġ} ĊĊĠĠĠ Ġval Ġtrust All Certs Ġ= ĠarrayOf < Trust Manager >( object Ġ: ĠX 5 0 9 Trust Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Accepted Iss u ers (): ĠArray < X 5 0 9 Certificate > Ġ= ĠarrayOf () ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Trust All X 5 0 9 Trust Manager ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Client Trusted ( chain : ĠArray < X 5 0 9 Certificate >, Ġauth Type : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Trust All X 5 0 9 Trust Manager ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Server Trusted ( chain : ĠArray < X 5 0 9 Certificate >, Ġauth Type : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġ// ĠInstall Ġthe Ġall - trust ing Ġtrust Ġmanager ĊĠĠĠ Ġval Ġssl Context Ġ= ĠSSL Context . getInstance (" SSL ") ĊĠĠĠ Ġssl Context . init ( null , Ġtrust All Certs , ĠSecure Random ()) ĊĊĠĠĠ Ġ// ĠCreate Ġan Ġssl Ġsocket Ġfactory Ġwith Ġour Ġall - trust ing Ġmanager ĊĠĠĠ Ġssl Socket Factory ( ssl Context . socket Factory , Ġtrust All Certs [ 0 ] Ġas ĠX 5 0 9 Trust Manager ) ĊĊĠĠĠ Ġ// Ġalso Ġdon 't Ġdo Ġhost Ġname Ġverification Ġeither ĊĠĠĠ Ġ// Ġhostname Verifier Ġ{ Ġhostname , Ġsession Ġ-> Ġtrue Ġ} ĊĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ private Ġfun Ġinstall G ms Trust Certificates ( app : ĠApplication , Ġlogger : ĠLogger ): ĠBoolean Ġ{ ĊĠĠĠ Ġwhen Ġ( Google Api Availability Light . getInstance (). is Google Play Services Available ( app , Ġ 1 1 9 2 5 0 0 0 )) Ġ{ ĊĠĠĠĠĠĠĠ ĠConnection Result . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Found Ġgoogle Ġservices , Ġinstalling ĠSSL Ġsecurity Ġprovider " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . time (" Trying Ġto Ġinstall Ġsecurity Ġprovider ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider Installer . install IfNeeded ( app ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" SSL Ġsecurity Ġprovider Ġinstalled " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( err : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ( err ) Ġ{ Ġ" Could Ġnot Ġinstall ĠSSL Ġsecurity Ġprovider " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConnection Result . SERVICE _ VERSION _ UPDATE _ REQUIRED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn Ġ{ Ġ" Google Ġservices Ġare Ġtoo Ġold ." Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġfalse Ċ } ĊĊĊ