package Ġcom . alex sci . android . lamb dar un ner . aws . iam Ċ Ċ import Ġandroid . util . Log Ċ import Ġarrow . core . Either Ċ import Ġcom . alex sci . android . lamb dar un ner . aws . base .* Ċ import Ġcom . amazonaws .* Ċ import Ġcom . amazonaws . auth . AWSC redentials Provider Ċ import Ġcom . amazonaws . http . Amazon HttpClient Ċ import Ġcom . amazonaws . http . ExecutionContext Ċ import Ġcom . amazonaws . http . Http MethodName Ċ import Ġcom . amazonaws . http . HttpResponse Ċ import Ġcom . amazonaws . regions . Region Ċ import Ġcom . amazonaws . util . Xml Utils Ċ import Ġcom . google . api . client . util . DateTime Ċ import Ġorg . xml . sax . Attributes Ċ import Ġorg . xml . sax . Content Handler Ċ import Ġorg . xml . sax . Locator Ċ import Ġjava . net . URI Ċ Ċ class ĠI am Client ( cred Provider : ĠAW SC redentials Provider ): ĊĠĠĠĠĠĠĠ ĠBase Client ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcred Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" iam ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRegion . get Region (" us - east - 1 ") ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġ/* ĊĠĠĠĠĠ ĠSee Ġhttps :// docs . aws . amazon . com / IAM / latest / API Reference / API _ GetUser . html ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetUser ( getUser Request : ĠGetUser Request ? Ġ= Ġnull ) Ġ: ĠEither < Amazon ClientException , ĠGetUser Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠgetUser Request Ġ= ĠgetUser Request Ġ?: ĠGetUser Request () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠDefault Request < Void >(" iam ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . http Method Ġ= ĠHttp MethodName . GET ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġglobal Ġendpoint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . endpoint Ġ= ĠURI . create (" https :// iam . amazonaws . com ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . add Parameter (" Action ", ĠgetUser Request . action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . add Parameter (" Version ", ĠgetUser Request . version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . add Parameter If NonNull (" UserName ", ĠgetUser Request . username ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsign ( request ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠAmazon HttpClient ( Client Configuration ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGetUser Response Handler (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple ErrorHandler (), ĠExecutionContext () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEither . right ( response . aws Response ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠAmazon ClientException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEither . left ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠGetUser Response Handler Ġ: ĠBase Response Handler < Amazon WebService Response < GetUser Response >>() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdo Handle ( response : ĠHttpResponse ): ĠAmazon WebService Response < GetUser Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparsed Result Ġ= Ġparse Response () ĊĠĠĠĠĠĠĠ ĠLog . i (" R AA ", Ġparsed Result . response Metadata . requestId ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparsed Result ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Response () Ġ: ĠAmazon WebService Response < GetUser Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠGetUser Content Handler () ĊĠĠĠĠĠĠĠ ĠSystem . setProperty (" org . xml . sax . driver "," org . xml pull . v 1 . sax 2 . Driver ") ĊĠĠĠĠĠĠĠ ĠXml Utils . parse ( response !!. content , Ġhandler ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠAmazon WebService Response < GetUser Response >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Metadata Ġ= Ġhandler . response . response Metadata . as Aws Type () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġhandler . response ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠGetUser Content Handler : ĠContent Handler Ġ{ ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġresponse : ĠGetUser Response ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġresponse Builder : ĠGetUser Response . Builder ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar ĠgetUser Result Builder : ĠGetUser Result . Builder ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Builder : ĠUser . Builder ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġresponse Metadata Builder : ĠResponse Metadata . Builder ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġelement Chars : ĠStringBuilder ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstart Element ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Name : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq Name : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġat ts : ĠAttributes ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreset Ġto Ġstore Ġthe Ġchars Ġof Ġthis Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Chars Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( local Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" GetUser Response " Ġ-> Ġresponse Builder Ġ= ĠGetUser Response . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" GetUser Result " Ġ-> ĠgetUser Result Builder Ġ= ĠGetUser Result . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" User " Ġ-> Ġuser Builder Ġ= ĠUser . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Response Metadata " Ġ-> Ġresponse Metadata Builder Ġ= ĠResponse Metadata . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġend Element ( uri : ĠString ?, Ġlocal Name : ĠString ?, Ġq Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfound Chars Ġ= Ġelement Chars . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" R AA ", Ġ" Ending : Ġ$ local Name Ġ$ found Chars ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( local Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" GetUser Response " Ġ-> Ġresponse Ġ= Ġresponse Builder . build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" GetUser Result " Ġ-> Ġresponse Builder . getUser Result ( getUser Result Builder . build ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" User " Ġ-> ĠgetUser Result Builder . user ( user Builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" UserId " Ġ-> Ġuser Builder . userId ( found Chars ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Path " Ġ-> Ġuser Builder . path ( found Chars ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" UserName " Ġ-> Ġuser Builder . userName ( found Chars ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Arn " Ġ-> Ġuser Builder . arn ( found Chars ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Create Date " Ġ-> Ġuser Builder . create Date ( DateTime ( found Chars )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Password Last Used " Ġ-> Ġuser Builder . password Last Used ( DateTime ( found Chars )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Response Metadata " Ġ-> Ġresponse Builder . response Metadata ( response Metadata Builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" RequestId " Ġ-> Ġresponse Metadata Builder . requestId ( found Chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcharacters ( ch : ĠChar Array ?, Ġstart : ĠInt , Ġlength : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Chars . append ( ch . slice ( Int Range ( start , Ġstart + length - 1 )). join ToString ("")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠUn used ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstart Document () Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġend Document () Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġskipped Entity ( name : ĠString ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Document Locator ( locator : ĠLoc ator ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġend Prefix Mapping ( prefix : ĠString ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprocessing Instruction ( target : ĠString ?, Ġdata : ĠString ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstart Prefix Mapping ( prefix : ĠString ?, Ġuri : ĠString ?) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġign orable Whitespace ( ch : ĠChar Array ?, Ġstart : ĠInt , Ġlength : ĠInt ) Ġ{} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠGetUser Request ( val Ġusername : ĠString ? Ġ= Ġnull ) Ġ: ĊĠĠĠ ĠAWS Common Request Parameters ( ĊĠĠĠĠĠĠĠ Ġ" GetUser ", ĊĠĠĠĠĠĠĠ Ġ" 2 0 1 0 - 0 5 - 0 8 " ĊĠĠĠ Ġ) Ċ Ċ class ĠGetUser Response Ġprivate Ġconstructor ( ĊĠĠĠ Ġval ĠgetUser Result : ĠGetUser Result , ĊĠĠĠ Ġval Ġresponse Metadata : ĠResponse Metadata Ċ ) Ġ{ ĊĠĠĠ Ġdata Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠ Ġvar ĠgetUser Result : ĠGetUser Result ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġresponse Metadata : ĠResponse Metadata ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠgetUser Result ( getUser Result : ĠGetUser Result ) Ġ{ Ġthis . getUser Result Ġ= ĠgetUser Result Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġresponse Metadata ( response Metadata : ĠResponse Metadata ) Ġ{ Ġthis . response Metadata Ġ= Ġresponse Metadata Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠGetUser Response Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGetUser Response ( getUser Result !! , Ġresponse Metadata !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠGetUser Result Ġprivate Ġconstructor ( ĊĠĠĠ Ġval Ġuser : ĠUser Ċ ) Ġ{ ĊĠĠĠ Ġdata Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠ Ġvar Ġuser : ĠUser ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġuser ( user : ĠUser ) Ġ{ Ġthis . user Ġ= Ġuser Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠGetUser Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGetUser Result ( user !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠResponse Metadata Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval ĠrequestId : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġdata Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠ Ġvar ĠrequestId : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠrequestId ( requestId : ĠString ) Ġ{ Ġthis . requestId Ġ= ĠrequestId Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠResponse Metadata Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse Metadata ( requestId !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġas Aws Type () Ġ: Ġcom . amazonaws . Response Metadata Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġmap [ com . amazonaws . Response Metadata . AWS _ REQUEST _ ID ] Ġ= ĠrequestId ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse Metadata ( map ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠUser Ġprivate Ġconstructor ( ĊĠĠĠ Ġval ĠuserId : ĠString , ĊĠĠĠ Ġval Ġpath : ĠString , ĊĠĠĠ Ġval ĠuserName : ĠString , ĊĠĠĠ Ġval Ġar n : ĠString , ĊĠĠĠ Ġval Ġcreate Date : ĠDateTime , ĊĠĠĠ Ġval Ġpassword Last Used : ĠDateTime ? Ċ ) Ġ{ ĊĠĠĠ Ġdata Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠ Ġvar ĠuserId : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġpath : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar ĠuserName : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġar n : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġcreate Date : ĠDateTime ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġpassword Last Used : ĠDateTime ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠuserId ( userId : ĠString ) Ġ{ Ġthis . userId Ġ= ĠuserId Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġpath ( path : ĠString ) Ġ{ Ġthis . path Ġ= Ġpath Ġ} ĊĠĠĠĠĠĠĠ Ġfun ĠuserName ( userName : ĠString ) Ġ{ Ġthis . userName Ġ= ĠuserName Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġar n ( arn : ĠString ) Ġ{ Ġthis . arn Ġ= Ġar n Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Date ( create Date : ĠDateTime ) Ġ{ Ġthis . create Date Ġ= Ġcreate Date Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġpassword Last Used ( password Last Used : ĠDateTime ) Ġ{ Ġthis . password Last Used Ġ= Ġpassword Last Used Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild () Ġ: ĠUser Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUser ( userId !! , Ġpath !! , ĠuserName !! , Ġar n !! , Ġcreate Date !! , Ġpassword Last Used ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ