package Ġcom . jer em iah zu cker . p android . ui . auth Ċ Ċ import Ġandroid . util . Log Ġ// ĠTODO : ĠRemove Ġandroid Ġclass Ċ import Ġcom . jer em iah zu cker . p android . P android Application . Companion . Preferences Ċ import Ġcom . jer em iah zu cker . p android . crypt . B low Fish Ċ import Ġcom . jer em iah zu cker . p android . request . P and ora Ċ import Ġcom . jer em iah zu cker . p android . request . json . v 5 . method . auth . Partner Login Ċ import Ġcom . jer em iah zu cker . p android . request . json . v 5 . method . auth . User Login Ċ import Ġcom . jer em iah zu cker . p android . util . hex StringTo ByteArray Ċ Ċ /** Ċ Ġ* ĠAuth Presenter Ċ Ġ* Ċ Ġ* ĠAuthor : ĠJer em iah ĠZu cker Ċ Ġ* ĠDate : ĠĠĠ 8 / 2 9 / 2 0 1 7 Ċ Ġ* ĠDesc : ĠĠ ĠTODO : ĠComplete Ċ Ġ*/ Ċ class ĠAuth Presenter Ġ: ĠAuth Contract . Presenter Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġ= ĠAuth Presenter :: class . java . simple Name ĊĠĠĠ Ġprivate Ġvar Ġview : ĠAuth Contract . View ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġattach ( view : ĠAuth Contract . View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . view Ġ= Ġview ĊĊĠĠĠĠĠĠĠ Ġdo Partner Login (). subscribe ( this :: handle Partner Login Success ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdetach () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . view Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattempt Login ( username : ĠString ?, Ġpassword : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// ĠReset Ġerrors . ĊĠĠĠĠĠĠĠ Ġview ?. clear Errors () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( username Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Error Username Required () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( password Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Error Password Required () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! is Username Valid ( username )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Error Username Invalid () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! is Password Valid ( password )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Error Password Invalid () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġa Ġprogress Ġspinner , Ġand Ġkick Ġoff Ġa Ġbackground Ġtask Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġperform Ġthe Ġuser Ġlogin Ġattempt . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Progress ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠImplement Ġp ig gy back ing Ġin Ġorder Ġpreserve Ġnetworking Ġresources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preferences . partner AuthToken Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Partner Login (). subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Partner Login Success ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo User Login ( username , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview !! :: show Error Network ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġdo User Login ( username , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Password Valid ( password : ĠString ) Ġ= Ġpassword . length Ġ> Ġ 4 ĊĠĠĠ Ġprivate Ġfun Ġis Username Valid ( username : ĠString ) Ġ= Ġusername . any Ġ{ Ġit Ġ== Ġ'@ ' Ġ} ĊĊĠĠĠ Ġ// ĠSo Ġmuch Ġprettier Ġ< 3 Ġ&& ĠTODO : ĠConvert Ġinto Ġstore Ġcall Ġ( well , Ġnot Ġfor Ġlogin Ġcall ) ĊĠĠĠ Ġprivate Ġfun Ġdo User Login ( username : ĠString , Ġpassword : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPreferences . username Ġ= Ġusername ĊĠĠĠĠĠĠĠ ĠPreferences . password Ġ= Ġpassword ĊĠĠĠĠĠĠĠ ĠP and ora . HTTPS . RequestBuilder ( User Login ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. auth Token ( Preferences . partner AuthToken ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( User Login . RequestBody ( username , Ġpassword )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build < User Login . ResponseBody >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( this :: handle User Login Success , Ġthis :: handle User Login Error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle User Login Success ( result : ĠUser Login . ResponseBody ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠPass Ġto Ġmodel ? ĠMaybe ? ĊĠĠĠĠĠĠĠ ĠPreferences . userId Ġ= Ġresult . userId ĊĠĠĠĠĠĠĠ ĠPreferences . user AuthToken Ġ= Ġresult . user AuthToken ĊĊĠĠĠĠĠĠĠ Ġview ?. show Main () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle User Login Error ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOh Ġno ! ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġthrowable . message , Ġthrowable ) ĊĠĠĠĠĠĠĠ Ġview ?. show Error Network ( throwable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Partner Login () Ġ= ĠP and ora . HTTPS . RequestBuilder ( Partner Login ) ĊĠĠĠĠĠĠĠ Ġ. body ( Partner Login . RequestBody ()) ĊĠĠĠĠĠĠĠ Ġ. encrypted ( false ) ĊĠĠĠĠĠĠĠ Ġ. build < Partner Login . ResponseBody >() ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Partner Login Success ( result : ĠPartner Login . ResponseBody ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFollowing ĠP ith os Ġimpl . ĠDiff ers Ġfrom Ġdocs . ĊĠĠĠĠĠĠĠ ĠPreferences . sync Time Offset Ġ= Ġdecrypt Sync Time ( result . sync Time ). to Long () Ġ- Ġ( System . currentTimeMillis () Ġ/ Ġ 1 0 0 0 L ) ĊĠĠĠĠĠĠĠ ĠPreferences . partner Id Ġ= Ġresult . partner Id ĊĠĠĠĠĠĠĠ ĠPreferences . partner AuthToken Ġ= Ġresult . partner AuthToken ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Partner Login Error ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. show Error Network ( throwable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecrypt Sync Time ( raw : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġf ugu Ġ= ĠB low Fish () ĊĠĠĠĠĠĠĠ Ġval Ġdecoded Ġ= Ġraw . hex StringTo ByteArray () ĊĠĠĠĠĠĠĠ Ġvar Ġdecrypted Ġ= Ġf ugu . decrypt ( decoded ) ĊĊĠĠĠĠĠĠĠ Ġdecrypted Ġ= Ġdecrypted . copyOf Range ( 4 , Ġdecrypted . size ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠString ( de crypted , ĠChar sets . UTF _ 8 ) ĊĠĠĠ Ġ} Ċ } Ċ