
    V
hI                     V   S SK JrJrJrJrJrJrJr  S SKrS SK	J	r	  S SK
JrJrJrJr  S SKrS SKJrJr  S SKJr  S SKrS SKJr  S SKJr  S S	KJr  S S
KJr  S SKJrJ r   SSK!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+  SSK,J-r-J.r.  S SK/J0r0  \" 5         Sr1Sr2Sr3Sr4Sr5\" 5       r6\6Ro                  S\\(   S9\" \Rp                  5      4S\Rr                  4S jj5       r:\6Ro                  S\\;\\\#   \<4   4   S9S SSSS\" \Rp                  5      4S\<S\<S\\;   S\\;   S\\;   S\Rr                  4S  jj5       r=\6Ro                  S!\"S9\" \Rp                  5      4S"\;S\Rr                  4S# jj5       r>\6Ro                  S$\"S9\" \Rp                  5      4S"\;S\Rr                  4S% jj5       r?\6R                  S\"S9\" S&5      \" \Rp                  5      4S\;S\Rr                  4S' jj5       rA\6R                  S!\"S9\" \Rp                  5      4S"\;S(\S\Rr                  4S) jj5       rCS"\;S*\;4S+ jrD\6R                  S,\&S9\" \Rp                  5      4S-\&S\Rr                  4S. jj5       rE\6Ro                  S/5      \" \Rp                  5      4S0\;S\Rr                  4S1 jj5       rF\6Ro                  S2\&S9\" \Rp                  5      4S0\;S\Rr                  4S3 jj5       rG\6Ro                  S4\\;\\\+   \<4   4   S9S SSSS\" \Rp                  5      4S\<S\<S\\;   S"\\;   S\\;   S\Rr                  4S5 jj5       rH\6R                  S6\&S9\" \Rp                  5      4S0\;S7\'S\Rr                  4S8 jj5       rI\6R                  S95      \" \Rp                  5      4S\;S0\;S\Rr                  4S: jj5       rK\6R                  S;\)S9\" \Rp                  5      4S<\*S\Rr                  4S= jj5       rL\6Ro                  S;\\)   S9SSS\" \Rp                  5      4S"\\;   S\\;   S\<S\Rr                  4S> jj5       rMg)?    )	APIRouterDependsHTTPExceptionFile
UploadFileRequestFormN)datetime)ListOptionalDictUnion)ValidationError	SecretStr)Image)BytesIO)Fernet)load_dotenv)database)str_to_objectidobject_to_str_array   )
AppAppListAppBaseAppCategoryAppIntegrationAppIntegrationUpdateCategoryAppLog
AppLogBaseIntegrations)encrypt_datadecrypt_data)load_api_schema_as_jsonappapptypes	app_usersapp_logsflowsz/categories)response_modeldbc                     U [            R                  0 SSS.5      nU Vs/ s H  n[        US   5      US   S.PM     sn$ s  snf )N   )_idcategoryr/   r0   )idname)APP_CATEGORY_COLLECTIONfindstr)r,   
categoriescats      IC:\Suresh\moveshuttle\MDcreated\moveengine\app\v1\routers\saas\appflow.pylist_categoriesr9      sH    +,11"aQ6OPJHRS
3s5z?C
O<
SSSs   A/
   skiplimitq
project_id
account_idc                    0 nU(       a  X6S'   U(       a  XFS'   U(       aN  SUSS.0/US'   U[            R                  SU05      nU(       a"  US   R                  S[        US	   5      05        U[           R                  U5      n[        U[           R                  U5      R                  S
S5      R                  U 5      R                  U5      5      n	[        U	5      n	U	 H  n
[        U
S	   5      U
S'   M     XS.$ )Nr?   r@   r2   iz$regexz$optionsz$orr0   category_idr/   created_dater.   app_id)appstotal_count)r3   find_oneappendr5   APP_COLLECTIONcount_documentslistr4   sortr<   r=   r   )r<   r=   r>   r?   r@   r,   queryr0   
apps_countrG   r&   s              r8   	list_appsrQ   #   s     E(l(lA3!?@Ae-.77QH%LHUO0D EFN#33E:J>"''.33NAFKKDQWWX]^_Dt$D CJH  44    z	/{app_id}rF   c                   #    U[            R                  S[        U 5      05      nUc
  [        SSS9e[	        U5      I S h  vN nU(       d
  [        SSS9eUS   n[
        R                  " U5      US'   S	U;   an  US	   (       ad  S
US	   ;   a  [        US	   S
   5      US	   S
'   SUS	   ;   a;  US	   S   R                  5        VVs0 s H  u  pVU[        U5      _M     snnUS	   S'   [        US   5      US'   U$  Ns  snnf 7f)Nr/     App not foundstatus_codedetail  Failed to load App
components
api_schemaauth_configapi_keyoauth)
rK   rI   r   r   r%   jsondumpsr$   itemsr5   )rF   r,   r&   r\   r[   keyvalues          r8   retrieve_appre   F   s    
^

%
%uof.E&F
GC
{ODD.s33J4HIIL)J

:.C M 2M**,8]9KI9V,WCy)c-((VYZgVhipVqVwVwVy*zVy
3U0C+CVy*zCw'SZCJJ! 4 +{s$   ?DC<BDC>D>Dz/a/{app_id}c                    #    U[            R                  S[        U 5      05      nUc
  [        SSS9e[	        US   5      US'   U$ 7f)Nr/   rT   rU   rV   )rK   rI   r   r   r5   )rF   r,   r&   s      r8   retrieve_admin_apprg   _   sL     
^

%
%uof.E&F
GC
{ODDSZCJJs   AA.c                 n  #     [         R                  " U 5      n [	        S0 UD6nUR                  5       n[        R                  " 5       US'   UR                  S5      (       a  US   R                  S5      (       a  [        US   S   5      US   S'   US   R                  S5      (       a;  US   S   R                  5        VVs0 s H  u  pgU[        U5      _M     snnUS   S'   U[           R                  U5      n0 UES[        UR                  5      0En	[        UR                  5      n
[         R"                  " S	S
S9  UR$                  n['        X5      I S h  vN   U	$ ! [         R                   a    [        SSS9ef = f! [
         a  n[        S[        U5      S9eS nAff = fs  snnf  NS7f)N  Invalid app JSON formatrV   rE   r]   r^   r_   r/   z./public/appiconsT)exist_ok )r`   loadsJSONDecodeErrorr   r   r   r5   dictr
   utcnowgetr#   rb   rK   
insert_oneinserted_idosmakedirsiconcreate_app_icon)r&   r,   raw_app_dataapp_validatedefinal_app_datarc   rd   new_appcreated_app
new_app_idicon_urls               r8   add_appr   i   s    Ozz#
</,/ #'')N%-__%6N>"-((-(,,Y777CNS`DabkDl7mN=))4-(,,W55aop}a~  @G  bH  bN  bN  bP  6Q  bPS]SVc<;N6N  bP  6QN=)'2 ++N;GE^EUC0C0C,DEKW(()J KK#d3!!H
*
...A  O4MNNO  <CF;;< 6Q /sR   F5E& F B F5F-BF5F3 F5&FF5
F*F%%F**
F5requestc                   #    UR                  5       I S h  vN nUR                  S5      n [        R                  " U5      n [        S0 UD6nU[           R                  S[        U 5      05      nUc
  [        SSS9eUR                  SS	9n	U[           R                  S[        U 5      0S
U	05      n
U
R                  S:X  a
  [        SSS9eU[           R                  S[        U 5      05      nU(       a  [        US   5      US'   US   US   :w  a  US   n[        X5      I S h  vN   U$  GN! [        R                   a    [        SSS9ef = f! [         a  n[        S[        U5      S9eS nAff = f NP7f)Nr&   ri   rj   rV   r/   rT   rU   Texclude_unset$setr   rv   rl   )formrq   r`   rm   rn   r   r   r   r5   rK   rI   r   ro   
update_onematched_countrw   )rF   r   r,   	form_dataapp_data_jsonapp_data_dictapp_datarz   existing_appupdated_dataresultupdated_appr   s                r8   
update_appr      s     lln$IMM%(MO

=1
<+]+
 n%..v7N/OPLODD==t=4L**E?63J+KfVbMcdFq ODD^$--uof6M.NOK U!34EF{622v&f...E %  O4MNNO  <CF;;<( 	/sQ   E;D/E;D2 E CE;(E9)E;2EE;
E6E11E66E;r   c                   #    SU  S3nSU  S3n[         R                  " U5      nUR                  S:w  a  [        S5        g [	        UR
                  5      n[        R                  " U5       nUR                  S:X  d0  UR                  S:X  d   UR                  S:X  aX  S	UR                  ;   aH   UR                  5       S
   n[        R                  " SUR                  S5      nUR                  XgS9  UnOUR                  S5      nUR!                  S5      n	U	R#                  US5        UR!                  S5      n
U
R#                  US5        S S S 5        g ! [         a    UR                  S5      n Nlf = f! , (       d  f       g = f7f)Nz./public/appicons/z.jpgz
_small.jpg   zImage URL is not validRGBALAPtransparencyr   RGB)   r   r   )mask)   r   JPEG)0   r   )requestsrq   rW   printr   contentr   openmodeinfosplitnewsizepaste
IndexErrorconvertresizesave)rF   r   	icon_pathsmall_icon_pathresponse
image_dataimalpha
backgroundim_largeim_smalls              r8   rw   rw      sP    $VHD1I*6(*=O||H%Hs"&'))*J	J	277f4BGGsN~Y[Y`Y`G`	 
1 #YYubggG
   0 E"B 99Z(i(99X&ov./ 
 	  'ZZ&' 
 	sD   A*F,AE6.EBE6	FE30E62E33E66
F Fz
/subscribeapp_integrationc                 "  #    U R                  5       nUR                  S0 5      R                  S0 5      R                  5        H?  u  p4[        U[        5      (       d  M  [        UR                  5       5      nXRS   S   U'   MA      U[           R                  U5      n0 UES[        UR                  5      0EnU[           R                  S[        US   5      0SSS005        U$ ! [         a  n[        S	S
[        U5       3S9eS nAff = f7f)Nr]   credentialsintegration_idr/   rF   z$incintegrationsr.   rY   zDatabase insertion error: rV   )ro   rq   rb   
isinstancer   r#   get_secret_valueAPP_INTEGRATION_COLLECTIONrr   r5   rs   rK   r   r   	Exceptionr   )	r   r,   new_integration_datarc   rd   encrypted_valuenew_integrationcreated_integrationrz   s	            r8   subscribe_to_appr      s"     +//1 +..}bAEEmUWX^^`
eY''*5+A+A+CDOFU/>sC a[78CCDXYj!5j7G_MhMhIij 	>%%O$7$ABCna()	

 #" [6PQTUVQWPX4YZZ[s1   AD'DAC' &D'
D1DDDz/endpoints/{integration_id}r   c                 $  #    U[            R                  S[        U 5      05      nU[           R                  S[        US   5      05      n[	        U5      I S h  vN nU(       d
  [        SSS9e[        R                  " U5      US'   US   $  N37f)Nr/   rF   rY   rZ   rV   r\   )r   rI   r   rK   r%   r   r`   ra   )r   r,   integrationr&   r\   s        r8   retrieve_endpointsr      s     /0995/R`Ba:bcK
^

%
%u_[=R-S&T
UC.s33J4HII

:.C| 4s   ABB4Bz/integrations/{integration_id}c                     U[            R                  S[        U 5      05      nUc
  [        SSS9e[	        US   5      US'   U$ )Nr/   rT   Integration not foundrV   )r   rI   r   r   r5   )r   r,   r   s      r8   retrieve_integrationr     sQ    /0995/R`Ba:bcK4KLL[/0KrR   z /integrations/list/{account_id}/c                 f   0 nU(       a  X6S'   U(       a  XFS'   U(       a  USS.US'   U[            R                  U5      nU[            R                  U5      R                  U 5      R	                  U5      n[        U5      n	U	 H  n
[        U
S   5      U
S'   M     [        [        U	5      5      nXS.$ )	NrF   r@   rB   rC   r2   r/   r   )r   rH   )r   rL   r4   r<   r=   rM   r5   r   )r<   r=   r>   rF   r@   r,   rO   integrations_countintegrations_cursorintegrations_listr   r   s               r8   list_app_integrationsr     s     E h(l#$#6f 67GGN78==eDII$OUUV[\ 01((+K,>(?$% ) 't,='>?L(LLrR   z/subscribe/{integration_id}integration_datac                 p   U[            R                  S[        U 5      05      nUc
  [        SSS9eUR	                  5       nUR                  SS9R                  5        H  u  pVUS:X  a  SU;   a  US   (       a  0 nUS   R                  5        H=  u  p[        U	[        5      (       a  [        U	R                  5       5      n
XU'   M9  XU'   M?     UR                  S5      (       d  S0 0US'   US   S   R                  U5        M  SU;   a  US   (       d  M  XdS'   M  US	:X  a  XdS	'   M  XdU'   M     U[            R                  S[        U 5      0S
U05      nUR                  S:X  a
  [        SSS9eU[            R                  S[        U 5      05      nU(       a  [        US   5      US'   U$ [        SSS9e)Nr/   rT   r   rV   Tr   r]   r   configurationsr   r   z"Integration not found after update)r   rI   r   r   copyro   rb   r   r   r#   r   rq   updater   r   r5   )r   r   r,   existing_integrationr   rc   rd   updated_auth_configkvr   r   updated_integrations                r8   update_integrationr   2  s   89BBE?[iKjCkl#4KLL (,,.L&++$+?EEG
-%%*>&(#!-0668DA!!Y//*6q7I7I7K*L1@A. 23A. 9 $''663@"2EL/]+M:AABUV%'m0D /4]+$$-2)* %5 H8 *+66~?^7_bhjvawxFq 4KLL78AA5/ZhJiBjk%()<U)C%DE"""
C0T
UUrR   z2/integrations/remove/{account_id}/{integration_id}c           
        #    U[            R                  [        U5      U S.5      nUc
  [        SSS9eU[            R	                  S[        U5      05      nUR
                  S:X  a
  [        SSS9eU[           R                  SU0SS	05      nU Vs/ s H  n[        US   5      PM     nn[        S
U5        U[           R                  SSU Vs/ s H  n[        U5      PM     sn00SSSS.05      n	US   R                  SSU00SSS005      n
[        SSSU	R                  SU
R                  5        SU	R                  U
R                  S.$ s  snf s  snf 7f)N)r/   r@   rT   z+Integration not found for the given accountrV   r/   r   r   app_integration_idr.   z	flow_ids z$inr   F )statusr   project_flowsflow_idr   messagez Integration deleted successfullyflows_updatedproject_flows_updated)r   r   r   )r   rI   r   r   
delete_onedeleted_countFLOWS_COLLECTIONr4   r5   r   update_manymodified_count)r@   r   r,   r   r   flow_idsflowflow_ids_listr1   flows_update_resultproject_flows_update_results              r8   delete_integrationr   u  s     89BB~. D  #4abb *+66~?^7_`Fq 4KLL "#((	~.	
H 3;;($Se%(M;	+}% -.::	}E},}EFG	E<= #%_"5"A"A	UM*+	(E"##
 
98/K^KmKm  oF  Hc  Hr  Hr  t 6,;;!<!K!K % < Fs   BEE*&EE%A4Ez/logslog_datac                     U R                  5       nU[           R                  U5      n0 UES[        UR                  5      0EnU$ )Nr/   )ro   APP_LOG_COLLECTIONrr   r5   rs   )r   r,   new_log_datanew_logcreated_logs        r8   add_app_logr     sE    ==?L#$//=GC\C5#g.A.A*BCKrR   c                     0 nU (       a  XS'   U(       a  XS'   [        U[           R                  U5      R                  U5      5      nU H  n[	        US   5      US'   M     U$ )NrF   r?   r/   )rM   r   r4   r=   r5   )rF   r?   r=   r,   rO   logslogs          r8   list_app_logsr     sb    E h(l%&++E288?@DU_E
 KrR   )Nfastapir   r   r   r   r   r   r	   r`   r
   typingr   r   r   r   rt   pydanticr   r   PILr   r   ior   cryptography.fernetr   dotenvr   app.dbr   app.v1.libraries.objectr   r   models.saas.appmodelr   r   r   r   r   r   r   r    r!   r"   libraries.cryptor#   r$   app.v1.libraries.jsonloaderr%   rK   r3   r   r   r   routerrq   get_mongo_dbMongoDBr9   r5   intrQ   re   rg   postr   putr   rw   r   r   r   r   r   deleter   r   r   rl   rR   r8   <module>r     sj   V V V   . . 	 /    &   H X  X  X : ? $ (   	M$x.9+283H3H+I T(( T :T CS%Ws0B*C%C DE $ $"8#8#895
55 }5 	5
 5 	5 F5D K,;B8CXCX;Y s (8(8  -0 M#.AHI^I^A_ S h.>.>  / S%!#YwxG\G\?] %s %H,<,< % &%P K,KRS[ShShKi $S $7 $8H8H $ -$L!/# !/ !/L \.9SZ[c[p[pSq [N [@P@P [ :[2 )*IPQYQfQfIg 
S 
h6F6F 
 +
 ,^LELXMbMbEc  (2B2B  M .tCtT`OacfOfIgDg?hi  $"8#8#89M
MM }M SM	M
 M 	M jMB ).Ikrs{  tI  tI  lJ ?&s ?&>R ?&X`XhXh ?& J?&D CDZabjbwbwZx ) )c )xGWGW ) E)Z WV,=DXEZEZ=[ * (*:*:  - GDL1*.D_a  {B  CK  CX  CX  {Y 	(3- 	HSM 	Y\ 	gogwgw 	 2	rR   