// ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ // ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ċ package Ġsoftware . aws . tool k its . jetbrains . services . cloud debug . actions Ċ Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . application . Modal ity State Ċ import Ġcom . intellij . openapi . application . run In Ed t Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . ui . components . JB Label Ċ import Ġsoftware . amazon . aw ssdk . services . ecs . E cs Client Ċ import Ġsoftware . amazon . aw ssdk . services . iam . Iam Client Ċ import Ġsoftware . amazon . aw ssdk . services . iam . model . Policy Evaluation Decision Type Ċ import Ġsoftware . aws . tool k its . core . utils . getLogger Ċ import Ġsoftware . aws . tool k its . core . utils . warn Ċ import Ġsoftware . aws . tool k its . jetbrains . core . Aws Client Manager Ċ import Ġsoftware . aws . tool k its . jetbrains . core . aws Client Ċ import Ġsoftware . aws . tool k its . jetbrains . core . credentials . Project Account Settings Manager Ċ import Ġsoftware . aws . tool k its . jetbrains . core . help . Help Ids Ċ import Ġsoftware . aws . tool k its . jetbrains . services . Role Validation Ċ import Ġsoftware . aws . tool k its . jetbrains . services . iam . Iam Resources Ċ import Ġsoftware . aws . tool k its . jetbrains . services . iam . Iam Role Ċ import Ġsoftware . aws . tool k its . jetbrains . ui . Resource Selector Ċ import Ġsoftware . aws . tool k its . resources . message Ċ import Ġjava . awt . event . Item Event Ċ import Ġjava . net . URL Decoder Ċ import Ġjavax . swing . JPanel Ċ Ċ class ĠInstrument Dialog ( private Ġval Ġproject : ĠProject , Ġval Ġcluster Arn : ĠString , Ġval Ġservice Arn : ĠString ) Ġ: ĠDis posable Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġcontent : ĠJPanel ĊĠĠĠ Ġlateinit Ġvar Ġiam Role : ĠResource Selector < Iam Role > ĊĠĠĠ Ġlateinit Ġvar Ġrole Not Valid Warning : ĠJ B Label ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrole Not Valid Warning . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġrole Not Valid Warning . set Copy able ( true ) ĊĠĠĠĠĠĠĠ Ġrole Not Valid Warning . set Allow Auto Wr apping ( true ) ĊĠĠĠĠĠĠĠ Ġrole Not Valid Warning . icon Ġ= ĠAll Icons . General . Warning ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate UI Components () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcredentials Ġ= ĠProject Account Settings Manager . getInstance ( project ). active Credential Provider ĊĠĠĠĠĠĠĠ Ġval Ġregion Ġ= ĠProject Account Settings Manager . getInstance ( project ). active Region ĊĊĠĠĠĠĠĠĠ Ġiam Role Ġ= ĠResource Selector . builder ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. resource Ġ{ ĠI am Resources . LIST _ ALL Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. aws Connection Ġ{ ĠPair ( region , Ġcredentials ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġiam Role . addItem Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Iam Role Selection Changed ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġthe Ġbackground , Ġattempt Ġto Ġselect Ġa Ġrole ĊĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). execute On P ooled Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattempt Select Role () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Iam Role Selection Changed ( item Event : ĠItem Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item Event . state Change Ġ== ĠItem Event . DE SELECTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġiam Role Ġ= Ġitem Event . item ĊĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). execute On P ooled Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrole Validation Warning Ġ= Ġmessage (" cloud _ debug . instrument _ resource . role . not . valid ", ĠHelp Ids . CLOUD _ DEBUG _ ENABLE . url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrole Validation Visible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( iam Role Ġis ĠI am Role ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrole Validation Visible Ġ= Ġ! is Role Valid ( iam Role ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrole Validation Warning Ġ= Ġmessage (" cloud _ debug . instrument _ resource . role . could . not . validate ", Ġe . localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrole Validation Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun In Ed t ( Modal ity State . any ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrole Not Valid Warning . text Ġ= Ġrole Validation Warning ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrole Not Valid Warning . isVisible Ġ= Ġrole Validation Visible ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Role Valid ( iam Role : ĠI am Role ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiam Client Ġ= Ġproject . aws Client < Iam Client >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactions Allowed Ġ= Ġcan Sim ulate Cloud Debug Actions ( iam Client , Ġiam Role . arn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! actions Allowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġiam Role . name ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Role Policy Valid ( iam Client , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠException (" This Ġrole Ġdoes Ġnot Ġhave Ġa Ġname ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . warn ( e ) Ġ{ Ġ" Unable Ġto Ġvalidate Ġrole Ġfor ĠCloud ĠDebug ging " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Role Policy Valid ( iam Client : ĠI am Client , Ġrole Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrole Ġ= Ġiam Client . get Role Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . role Name ( role Name ) ĊĠĠĠĠĠĠĠ Ġ}. role () ĊĊĠĠĠĠĠĠĠ Ġval Ġencoded Role Policy Ġ= Ġrole . assume Role Policy Document () ĊĠĠĠĠĠĠĠ Ġval Ġrole Policy Ġ= ĠURL Decoder . decode ( encoded Role Policy , Ġ" UTF - 8 ") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRole Validation . is Role Policy Valid For Cloud Debug ( role Policy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcan Sim ulate Cloud Debug Actions ( ĊĠĠĠĠĠĠĠ Ġiam Client : ĠI am Client , ĊĠĠĠĠĠĠĠ Ġrole Arn : ĠString ĊĠĠĠ Ġ): ĠBoolean Ġ= Ġiam Client . simulate Principal Policy Ġ{ ĊĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. policy Source Arn ( role Arn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. action Names ( CLOUD _ DEBUG _ ACTION S _ TO _ SI MUL ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ}. evaluation Results (). all Ġ{ ĊĠĠĠĠĠĠĠ Ġit . eval Decision () Ġ== ĠPolicy Evaluation Decision Type . ALLOWED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAuto - select Ġtask - role Ġ( if Ġit Ġexists Ġin Ġthe Ġtask - definition ). ĠRuns Ġon Ġa Ġbackground Ġthread . ĊĠĠĠ Ġprivate Ġfun Ġattempt Select Role () Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient : ĠE cs Client Ġ= ĠAws Client Manager . getInstance ( project ). getClient () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġclient . describe Services Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . cluster ( cluster Arn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . services ( service Arn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Definition Ġ= Ġservice . services (). first (). task Definition () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Definition Description Ġ= Ġclient . describe Task Definition Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . task Definition ( task Definition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrole Arn Ġ= Ġtask Definition Description . task Definition (). task Role Arn () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiam Role . selected Item Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . arn Ġ== Ġrole Arn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . warn ( e ) Ġ{ Ġ" Unable Ġto Ġretrieve Ġtask Ġrole Ġfor Ġcluster Ġ$ cluster Arn Ġservice Ġ$ service Arn " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠLOG Ġ= Ġget Logger < Instrument Dialog >() ĊĠĠĠĠĠĠĠ Ġval ĠCLO UD _ DEBUG _ ACTION S _ TO _ SI MUL ATE Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ssm messages : Create Control Channel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ssm messages : Create Data Channel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ssm messages : Open Control Channel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ssm messages : Open Data Channel " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ