
    Vh"                          d Z ddlmZmZmZ eZdZdZddl	m
Z
 ddlmZmZmZmZ 	 ddlmZ ed        Zd	 Zd
 Zd Zd Zd Zd Zd Zedk(  r e        yy# e$ r Y 2w xY w)z Manage SSO     )absolute_importdivisionprint_functionaG  
---
module: infini_sso
version_added: 2.16.0
short_description: Configures or queries SSO on Infinibox
description:
    - This module configures (present state) or gets information about (absent state) SSO on Infinibox
author: David Ohlemacher (@ohlemacher)
options:
  name:
    description:
      - Sets a name to reference the SSO by.
    required: true
    type: str
  issuer:
    description:
      - URI of the SSO issuer.
    required: false
    type: str
  sign_on_url:
    description:
      - URL for sign on.
    type: str
    required: false
  signed_assertion:
    description:
      - Signed assertion
    type: bool
    required: false
    default: false
  signed_response:
    description:
      - Signed response
    required: false
    type: bool
    default: false
  signing_certificate:
    description:
      - Signing certificate content.
    type: str
    required: false
  enabled:
    description:
      - Determines if the SSO is enabled.
    required: false
    default: true
    type: bool
  state:
    description:
      - Creates/Modifies the SSO, when using state present.
      - For state absent, the SSO is removed.
      - State stat shows the existing SSO's details.
    type: str
    required: false
    default: present
    choices: [ "stat", "present", "absent" ]
extends_documentation_fragment:
    - infinibox
a  
- name: Configure SSO
  infini_sso:
    name: OKTA
    enabled: true
    issuer: "http://www.okta.com/eykRra384o32rrTs"
    sign_on_url: "https://infinidat.okta.com/app/infinidat_psus/exkra32oyyU6KCUCk2p7/sso/saml"
    state: present
    user: admin
    password: secret
    system: ibox001

- name: Stat SSO
  infini_sso:
    name: OKTA
    state: stat
    user: admin
    password: secret
    system: ibox001

- name: Clear SSO configuration
  infini_sso:
    state: absent
    user: admin
    password: secret
    system: ibox001
)AnsibleModule)api_wrappermerge_two_dicts
get_systeminfinibox_argument_spec)APICommandFailedc                     d| }	 t        |       }|j                  j                  |      j                         }|S # t        $ r%}d| d| }| j                  |       Y d}~S d}~ww xY w)z Find a SSO using its name zconfig/sso/idps?name=pathz"Cannot find SSO identity provider : msgN)r	   apiget
get_resultr   	fail_json)modulenamer   system
sso_resulterrr   s          r/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/infinidat/infinibox/plugins/modules/infini_sso.pyfind_ssor   x   s     #4&)D"F#ZZ^^^.99;

 	  "24&3%@S!!	"s   5> 	A,A''A,c                     | j                   d   }t        | |      }|sd| d}| j                  |       t        dd| d      }t	        ||d         }d	|d
<    | j
                  di | y)z Handle the stat state r   zSSO identity provider z not found. Cannot stat.r   Fz stat foundchangedr   r   redactedsigning_certificateN )paramsr   r   dictr   	exit_json)r   r   r   r   results        r   handle_statr'      s    == D&$'J&tf,DES!$TF+6F
 VZ]3F$.F !Fv    c                 ~   | j                   d   }| j                   d   }| j                   d   }| j                   d   }| j                   d   }| j                   d   }| j                   d   }t        | |      }|r|d   d	   }	t        | |	       d
}
|||||||d}	 t        |       }|j                  j                  |
|      j                         }|sd| d}nd| d}t        d|      }t        |      }d|d<    | j                  di | y# t        $ r$}d| d| }| j                  |       Y d}~hd}~ww xY w)z Handle the present state enabledissuersign_on_urlsigned_assertionsigned_responser!   r   r   idzconfig/sso/idps)r*   r+   r   r,   r-   r.   r!   )r   dataz-Cannot configure SSO identity provider named r   r   NSSO identity provider named z successfully configuredz; successfully removed and recreated with updated parametersTr   r    r"   )r#   r   
delete_ssor	   r   postr   r   r   r$   r   r%   )r   r*   r+   r,   r-   r.   r!   r   existing_ssoexisting_sso_idr   r0   r   r   r   r   r&   s                    r   handle_presentr6      sv   mmI&G]]8$F--.K}}%78mm$56O --(=>== DFD)L&q/$/6?+D",*2D"F#ZZ__$T_:EEG

 ,TF2JK,TF2mnF VZ0F$.F !Fv  "=dV2cUKS!!"s   6D 	D<D77D<c                     d| }| j                   d   }	 t        |       }|j                  j                  |      j	                         }|S # t
        $ r%}d| d| }| j                  |       Y d}~S d}~ww xY w)z! Delete a SSO. Reference its ID. zconfig/sso/idps/r   r   z$Cannot delete SSO identity provider r   r   N)r#   r	   r   deleter   r   r   )r   sso_idr   r   r   r   r   r   s           r   r2   r2      s    fX&D== D"F#ZZ&&D&1<<>
   "4TF"SEBS!!"s   5A 	A;A66A;c                 N   | j                   d   }t        | |      }|s#t        dd| d      } | j                  di | |d   d   }t	        | |      }|sd| d	| d
}| j                  |       t        dd| d      }t        ||      }d|d<    | j                  di | y)z Handle the absent state r   FzSSO z already not foundr   r   r/   r1   z	 with ID z not found. Cannot delete.r   Tz deletedr    r!   Nr"   )r#   r   r$   r%   r2   r   r   )r   r   	found_ssor&   r9   r   r   s          r   handle_absentr<      s    == D&Itf./
 	"6"q\$FFF+J,TF)F8C]^S!*4&9F
 VZ0F$.F !Fvr(   c                 *   | j                   d   }	 |dk(  rt        |        n7|dk(  rt        |        n&|dk(  rt        |        n| j	                  d|        t        |       }|j                          y# t        |       }|j                          w xY w)zHandle statesstatestatpresentabsentz'Internal handler error. Invalid state: r   N)r#   r'   r6   r<   r   r	   logout)r   r>   r   s      r   execute_staterC      s    MM'"EF?i6"h&!#J5'!RSF# F#s   AA5 5Bc                     | j                   d   }| j                   d   }| j                   d   }d}d}|dv r|s|dz  }d}|s|d	z  }d}|r| j                  |
       yy)zVerify module options are saner!   r,   r>   F )r@   z*A sign_on_url parameter must be provided. Tz2A signing_certificate parameter must be provided. r   N)r#   r   )r   r!   r,   r>   	is_failedr   s         r   check_optionsrG     s     --(=>--.KMM'"EI
C??CI"GGCIS! r(   c                  \   t               } | j                  t        t        ddd      t        dd      t        d      t        dd      t        ddd      t        ddd      t        ddd      t        d	g d
                   t        | d      }t	        |       t        |       y)z Main FboolT)requiredtypedefaultN)rJ   rL   )rJ   )rJ   rL   no_logr@   )r?   r@   rA   )rL   choices)r*   r+   r   r,   r-   r.   r!   r>   )supports_check_mode)r
   updater$   r   rG   rC   )argument_specr   s     r   mainrR     s    +-M%fdC5t$eT:!5vuM %feL $eT$ Oy2OP		
 =dCF&&r(   __main__N)__doc__
__future__r   r   r   rK   __metaclass__DOCUMENTATIONEXAMPLESansible.module_utils.basicr   Fansible_collections.infinidat.infinibox.plugins.module_utils.infiniboxr   r   r	   r
   infinisdk.core.exceptionsr   ImportErrorr   r'   r6   r2   r<   rC   rG   rR   __name__r"   r(   r   <module>r^      s     A @:x< 5 	:
  $,^
8""$, zF m  		s   A AA