
    i*                         S SK r S SKJr  S SKJr  S SKJrJrJr  SS jr	S r
/ SSSS4S	 jrSS/ 4S
 jrS rS rS rS rg)    N)handle_truncated_response)generate_password)	printInfo
printErrorprintExceptionFc                 L    U(       d  [        SU-  5        U R                  X!S9  g)z{
Add an IAM user to an IAM group

:param iam_client:
:param group:
:param user:
:param user_info:
:param dry_run:
:return:
zAdding user to group %s...	GroupNameUserNameN)r   add_user_to_group)
iam_clientusergroupquiets       P/home/kali/Scout2/scout2-env/lib/python3.13/site-packages/opinel/services/iam.pyr   r      s&     .67  U D    c                 @   / n[        U5      [        :w  a  U/nU H6  n/ n [        SU-  5        U R                  US9  UR                  X4S.5        M8     U$ ! [         a<  nUR
                  S   S   S:w  a  [        U5        UR                  S5         SnANZSnAff = f)	a(  
Create a number of IAM group, silently handling exceptions when entity already exists
                                    .
:param iam_client:                  AWS API client for IAM
:param groups:                      Name of IAM groups to be created.

:return:                            None
zCreating group %s...)r
   ErrorCodeEntityAlreadyExistsziam:creategroupN)	groupnameerrors)typelistr   create_group	Exceptionresponser   append)r   groupsgroups_datar   r   es         r   create_groupsr"      s     KF|t	1,u45###6
 	AB    	1zz'"6*.CCq!/0	1s   A
B!2BBTc                 "   U/ S.n[        SU-  5         U R                  US9  [	        U5      [
        :w  a  U/nU H  n	 [        XU	5        M     U(       a,   [        S5        [        5       US	'   U R                  XS	   US
9   U(       a0   [        S5        U R                  US9S   nUS   US'   US   US'   U$ U$ ! [         a   nUS   R                  S5        Us SnA$ SnAff = f! [         a-  n[        U5        US   R                  SU	-  5         SnAM  SnAff = f! [         a)  n[        U5        US   R                  S5         SnANSnAff = f! [         a*  n[        U5        US   R                  S5         SnAU$ SnAff = f)a  

:param iam_client:                  AWS API client for IAM
:param user:                        Name of the user to create
:param groups:                      Name of the IAM groups to add the user to
:param with_password:               Boolean indicating whether creation of a password should be done
:param with_mfa:                    Boolean indicating whether creation of an MFA device should be done
:param with_access_key:             Boolean indicating whether creation of an API access key should be done
:param require_password_reset:      Boolean indicating whether users should reset their password after first login
:return:
)usernamer   zCreating user %s...r   r   ziam:createuserNziam:addusertogroup - %szCreating a login profile...password)r   PasswordPasswordResetRequiredziam:createloginprofilezCreating an API access key...	AccessKeyAccessKeyIdSecretAccessKeyziam:createaccesskey)r   create_userr   r   r   r   r   r   r   create_login_profilecreate_access_key)r   r   r   with_passwordwith_mfawith_access_keyrequire_password_reset	user_datar!   r   serial	mfa_code1	mfa_code2
mfa_serial
access_keys                  r   r,   r,   4   s    "R0I#d*+$/
 F|t	Jj6  	A34$5$7Ij!++tR\H]  yO+  P
  	>56#55t5D[QJ'1-'@Im$+56G+HI'( 9U  (""#34  	J1h&&'@5'HII	J  	A1h&&'?@@	A*  	>1h&&'<==	>se   B=  C*+D$ -E =
C'C"C'"C'*
D!4"DD!$
E.EE
F$F		Fc                 p
   / n[        SU-  5         [        X5      nU H4  n [        SUS   -  S5        U R                  US   US9  [        S5        M6      U R                  US9S   n	U	 H=  n
U
S   n [        SU-  S5        U R                  XS9  [        S5        [        X5        M?     U(       a  [        X5         U R                  US9S   nU H4  n [        SUS   -  S5        U R                  US   US9  [        S5        M6     / n U R                  US9S   n [        U5      (       a&  [        SS5        U R                  US9  [        S5         [        SS5        U R!                  US9nUS    H  nU R#                  UUS9  M     [        S5         [        SS5        U R%                  US9nUS    H  nU R'                  UUS   S9  M     [        S5         U(       d  U R)                  US9  [        S U-  5        U$ U H  n[+        XU5        M      U$ ! [         aC  n[        S5        [	        U5        UR                  UR                  S   S	   5         S
nAGMI  S
nAff = f! [         a$  n[	        U5        [        SU-  5         S
nAGNBS
nAff = f! [         aB  n[        S5        [	        U5        UR                  UR                  S   S	   5         S
nAGNJS
nAff = f! [         aE  n[	        U5        [        SU-  5        UR                  UR                  S   S	   5         S
nAGN{S
nAff = f! [         aC  n[        S5        [	        U5        UR                  UR                  S   S	   5         S
nAGM  S
nAff = f! [         aE  n[	        U5        [        SU-  5        UR                  UR                  S   S	   5         S
nAGNS
nAff = f! [         a  n S
nAGNS
nAff = f! [         aB  n[        S5        [	        U5        UR                  UR                  S   S	   5         S
nAGNS
nAff = f! [         aB  n[        S5        [	        U5        UR                  UR                  S   S	   5         S
nAGNS
nAff = f! [         aB  n[        S5        [	        U5        UR                  UR                  S   S	   5         S
nAGN S
nAff = f! [         aB  n[	        U5        [        S!5        UR                  UR                  S   S	   5         S
nAU$ S
nAff = f)"zz
Delete IAM user

:param iam_client:
:param user:
:param mfa_serial:
:param keep_user:
:param terminated_groups:
:return:
zDeleting user %s...zDeleting access key ID %s... r*   F)r*   r   SuccessFailedr   r   Nz&Failed to get access keys for user %s.r%   
MFADevicesSerialNumberzDeactivating MFA device %s... )r=   r   z;Faile to fetch/delete MFA device serial number for user %s.GroupszRemoving from group %s... r
   r	   z'Failed to fetch IAM groups for user %s.LoginProfilezDeleting login profile... zDeleting inline policies... PolicyNames)r   
PolicyNamezDetaching managed policies... AttachedPolicies	PolicyArn)r   rC   zUser %s deleted.zFailed to delete user.)r   get_access_keysdelete_access_keyr   r   r   r   r   list_mfa_devicesdeactivate_mfa_devicedelete_virtual_mfa_devicelist_groups_for_userremove_user_from_groupget_login_profilelendelete_login_profilelist_user_policiesdelete_user_policylist_attached_user_policiesdetach_user_policydelete_userr   )r   r   r7   	keep_userterminated_groupsr   aws_keysaws_keyr!   mfa_devices
mfa_devicer4   r   r   login_profilepoliciespolicys                    r   rR   rR   q   s    F#d*+D":4G;9GM<RRTYZ,,7=;Q^b,c)$	  3 11T1B<P%J/F;:VCUK000X)$
 &j9 & %j=300D0A(KE;6{9KKUS11eK>P]a1b)$	  M"444EnU3}2E:++t+<i 	30%800D0A}-F))T)O .)	32E:99T9J12F))TvkGZ)[ 3)""d"3(4/0 M +!*T: + M{  ;(#q!ajj1&9::;  Dq;dBCCD  ;(#q!ajj1&9::;  3qPSWWXajj)&1223  ;(#q!ajj1&9::;  3q<tCDajj)&1223    3(qajj)&1223  3(qajj)&1223  3(qajj)&1223  q+,ajj)&12Ms>  I0 0H I0 K0 5)J!!K0  N 0MN O$ "6O< AQ AR "$S) S)  
I-*7I(!I0 (I--I0 0
J:JJ!
K-+7K("K0 (K--K0 0
L?::L::L?
N7N
N 
NN 
O!:OO!$
O94O9<
Q7QQ
R7RR
S&$7S!!S&)
T537T00T5c                      [        SU-  5        U R                  US9  g! [         a#  n[        U5        [	        SU-  5         SnAgSnAff = f)ze
Delete a vritual MFA device given its serial number

:param iam_client:
:param mfa_serial:
:return:
zDeleting MFA device %s...)r=   zFailed to delete MFA device %sN)r   rH   r   r   r   )r   r7   r!   s      r   rH   rH      sO    -
:;,,J,G q3j@As     
AAAc                 @    [        U R                  SU0S/5      S   nU$ )0

:param iam_client:
:param user_name:
:return:
r   AccessKeyMetadata)r   list_access_keys)r   	user_namekeyss      r   rD   rD      s3     %Z%@%@:yBY\o[pq  sF  GDKr   c                 F   / nSn[        U5      (       a$  [        U 5      [        U5      :w  a  [        S5        gU Hb  n[        U5      S:  a+  US:  a  UR                  S5        US-  nM0  [        S5          gUR                  [        R                  " U5      5        Md     U$ )z
Initialize and compile regular expression for category groups

:param category_regex_args:         List of string regex

:return:                            List of compiled regex
   z9Error: you must provide as many regex as category groups.Nr   zYError: you cannot have more than one empty regex to automatically assign groups to users.)rL   r   r   recompile)category_groupscategory_regex_argscategory_regexauthorized_empty_regexregexs        r   init_group_category_regexrl     s     N
C$8C@S<T$TNO$u:>%)%%d+&!+&vw!!"**U"34 % r   c                     [        X5      n[        SU< S[        U5      < S35        U H  n[        SUS   < SUS   < S35        M     g	)
r^   zUser 'z' currently has z access keys:	r*   z (Status)N)rD   r   rL   )r   ra   rb   keys       r   show_access_keysrr     s?     :1DYD	RS]!3S]CD r   )F)re   opinel.utils.awsr   opinel.utils.credentialsr   opinel.utils.consoler   r   r   r   r"   r,   rR   rH   rD   rl   rr    r   r   <module>rw      sa    
 6 6 F FE 2 ,.ePUin  JN :z 04\^ rj 6
Er   