
    4&iP                        d dl mZmZmZmZmZmZ ddlmZ ddl	m
Z
mZmZ d dlmZmZ d dlZd dlmZ d dlmZ d d	lmZ d d
l mZ d dlmZmZmZmZ d dlmZ d dlmZ  ede       Z!d Z"e!jG                  d      d        Z$e!jG                  dddg      d        Z%e!jG                  d      d        Z&e!jG                  dddg      d        Z'e!jG                  d      d        Z(e!jG                  dddg      d        Z)e!jG                  ddg      d         Z*e!jG                  d!      d"        Z+e!jG                  d#      d$        Z,e!jG                  d%ddg      d&        Z-y)'    )	Blueprintrender_templaterequestredirecturl_forflash   )db)AdminClient	Provision)check_password_hashgenerate_password_hashN)MIMEText)MIMEMultipart)ceil)jsonify)or_ascdescexists)case)datetimeadminc                    d}d}d}d}t               }||d<   | |d<   ||d<   |j                  t        |d             	 t        j                  ||      }|j                          |j                  ||       |j                  || |j                                |j                          t        d	|        y # t        $ r}	t        d
|	        Y d }	~	y d }	~	ww xY w)Nadmin@allocai.iokfxwlnvuklmckhxozsmtp.gmail.comiK  FromToSubjecthtmlu   ✅ Email sent successfully tou   ❌ Error sending email: )r   attachr   smtplibSMTPstarttlsloginsendmail	as_stringquitprint	Exception)
to_emailsubjectbodysender_emailsender_passwordsmtp_server	smtp_portmsgserveres
             -/var/www/html/allocaisaas/app/routes_admin.py
send_emailr7      s    %L(O"KI
/CCKCIC	NJJxf%&/k95\?3h@.9 /)!-../s   A5B4 4	C=CC/c                  *    t        t        d            S )Nzclient.client_login)r   r        r6   indexr<   (   s    G1233r;   z/admin/loginGETPOST)methodsc                  X   t         j                  j                  d      } | rt        t	        d            S t         j
                  dk(  rt         j                  j                  d      }t         j                  j                  dd      j                         }t        j                  j                  |      j                         }|r>t        |j                  |      r(t        t	        d            }|j                  dd       |S t        d	| d
|        t!        dd       t#        d      S )Nis_admin
admin.homer>   
adminEmailadminPassword email1zDEBUG: Login attempt -> email=z, password=zInvalid credentialsdangerzadmin_login.html)r   cookiesgetr   r   methodformstripr   query	filter_byfirstr   password
set_cookier*   r   r   )rA   rG   rR   r   resps        r6   r&   r&   -   s    "":.H./	/~~  .<<##OR8>>@%%E%288:(B GL12DOOJ,K25'XJOP'2-..r;   z/admin/homec                     t         j                  j                  d      } | st        t	        d            S t
        j                  j                  t
        j                  j                  d            j                         }t        j                  j                  t              j                  t
        t
        j                  t        j                  k(        j                  t
        j                  j                  d            j                         }t
        j                  j                  t
        j                  j                  d            j                         }t        j                  j                  t              j                  t
        t
        j                  t        j                  k(        j                  t
        j                  j                  d            j                         }t!        d||||      S )NrA   admin.loginz	%copilot%z%attribution%zadmin_home.html)copilot_provisionedcopilot_activeattribution_provisionedattribution_active)r   rJ   rK   r   r   r   rO   filterfeaturesilikecountr
   sessionr   joinrG   r   )rA   rW   rX   rY   rZ   s        r6   homera   F   se   "":.H.// $//00  -eg  ZZ%%f-229??fll2f  -eg	  (oo44  1eg  ))&1669??fll2f  1eg	  /% 7- r;   z/admin/provisionc                     t         j                  j                  d      } | st        t	        d            S ddddddg dddddt        j                         j                  d      d	}d }t         j                  d
k(  r|j                  t         j                  j                  dd      j                         t         j                  j                  dd      j                         t         j                  j                  dd      j                         t         j                  j                  dd      j                         t         j                  j                  dd      j                         t         j                  j                  dd      t         j                  j                  d      t         j                  j                  dd      j                         t         j                  j                  d      t         j                  j                  d      t         j                  j                  d      t         j                  j                  d      t         j                  j                  d      d	       t        j                  j                  |d         j!                         rd}t#        d||      S t        |d   |d   |d   |d   |d   |d   dj%                  |d         |d   |d   |d   |d   |d   t        j&                  |d   d            }t(        j*                  j-                  |       t(        j*                  j/                          d fd}g } ||j                  d      |j                  d      d       } ||j                  d      |j                  d      d!      }|r|j1                  |       |r|j1                  |       |s|j1                  d"       dj%                  d# |D              }d$}	d%|d    d&| d'}
t3        |d   |	|
       d(|d    d)|d    d*|d    d+}t3        d,d-|       t5        d.d/       t        t	        d0            S t#        d||      S )1NrA   rV   rE      daysr	   years%Y-%m-%d)	firstNamelastNamerG   companyjobTitlecrmr\   commentscopilot_termcopilot_term_typeattribution_termattribution_term_typeprovisioned_dater>   rg   rh   rG   ri   rj   rk   r\   rl   rm   rn   ro   rp   rq   rF   z+A provision with this email already exists.admin_provision.html	form_dataerror,)
first_name	last_namerG   ri   	job_titlerk   r\   rl   rm   rn   ro   rp   rq   c                     | r|sy t        |       j                         rt        |       n| } | dk(  r|j                  d      r|d d }|  d|j	                          S )Nr	   s-)strisdigitintendswith
capitalize)amountunits     r6   format_termzprovision.<locals>.format_term   s\    $'K$7$7$9S[vF {t}}S1CRyXQt0122r;   c                 *     | |      }|sy | d| S )Nz Free Trial of r:   )r   r   product_nameformatted_termr   s       r6   format_accessz provision.<locals>.format_access   s'    (6N!$%_\NCCr;   zAlloc AI Strategist ProzAttribution ToolzBase Accessc              3   (   K   | ]
  }d | d  yw)z<li>z</li>Nr:   ).0items     r6   	<genexpr>zprovision.<locals>.<genexpr>   s     "O$T$u#5"Os   u*   Welcome to Alloc AI — Just One Step Leftzv
        <html>
        <body style="font-family: Arial, sans-serif; color:#333; line-height:1.6;">
            <p>Hi z,</p>

            <p>Thank you for your interest in Alloc AI. We have provisioned your request.</p>

            <p><strong>Your access includes:</strong></p>
            <ul>
                u  
            </ul>

            <p>
                To complete your registration and activate your access, click below:<br>
                <a href="https://copilot.allocai.io/client/login" 
                style="color:#0066cc; font-weight:bold; text-decoration:none;">
                Login to Alloc AI</a>
            </p>

            <p>If you didn’t request this or need help, just reply to this email.</p>

            <p>Thanks,<br><strong>Alloc AI Team</strong></p>
        </body>
        </html>
        New provision submitted by   ().r   New Provision RequestzProvision request submittedsuccessrB   )r   rJ   rK   r   r   r   utcnowstrftimerL   updaterM   rN   getlistr   rO   rP   rQ   r   r`   strptimer
   r_   addcommitappendr7   r   )rA   rt   ru   prr   access_itemscopilot_accessattribution_accessaccess_list_htmlr-   r.   
admin_bodyr   s               @r6   	provisionr   l   s   "":.H.// #!($OO-66zBI  E~~ ))+r:@@B((R8>>@\\%%gr288:||''	26<<>((R8>>@<<##E2.,,Z8((R8>>@#LL,,^<!(!1!12E!F ' 0 01C D%,\\%5%56M%N ' 0 01C D
 	  ??$$9W+=$>DDFAE"#9YV[\\ -
+G$i(
+% XXi
34z*">2'(;<&'9:"+,C"D%..y9K/LjY
" 	

r



	3	D &MM.)MM-.%
 +MM,-MM12
 / 23. 77"O,"OO ? [)* + "" #	6 	9W%w5 39[3I2J!IV`LaKbbdenovewdxxz{
%'>
K+Y7-..1YeTTr;   z/admin/provisionslistc                     t         j                  j                  d      } | st        t	        d            S t         j
                  j                  ddt              }d}t         j
                  j                  ddt              }t        j                  }|r|j                  t        t        j                  j                  d	| d	      t        j                  j                  d	| d	      t        j                  j                  d	| d	      t        j                   j                  d	| d	                  }|j#                         }|j%                  t        j&                  j)                               j+                  |dz
  |z        j-                  |      j/                         }t1        ||z        }t3        d
||||      S )NrA   rV   pager	   )type
   searchrE   %zadmin_provisions_list.html)
provisionsr   total_pagesr   )r   rJ   rK   r   r   argsr   r~   r   rO   r[   r   rw   r]   rx   rG   ri   r^   order_byidr   offsetlimitallr   r   )rA   r   per_pager   rO   totalr   r   s           r6   provisions_listr     sp   "":.H.//<<FAC0DH\\h5FOOE$$**Qvha=9##))AfXQ-8%%&m4!!''!F816	
 KKME	 1 1 34;;T!VX<MNTTU]^bbdJux'(K$ r;   z/admin/provision/edit/<int:id>c                    t         j                  j                  d      }|st        t	        d            S t
        j                  j                  |       }t         j                  dk(  r/t         j                  j                  d      |_
        t         j                  j                  d      |_        t         j                  j                  d      |_        t         j                  j                  d      |_        t         j                  j                  d      |_        t         j                  j                  d	      |_        d
j!                  t         j                  j#                  d            |_        t         j                  j                  d      |_        t         j                  j                  d      xs |j(                  |_        t         j                  j                  d      |_        t         j                  j                  d      |_        t         j                  j                  d      |_        t         j                  j                  d      |_        t2        j4                  j7                          t9        dd       t        t	        d            S t;        d|j                  |j                  |j                  |j                  |j                  |j                  |j$                  r|j$                  j=                  d
      ng |j&                  |j(                  r|j(                  j?                  d      nd|j*                  |j,                  |j.                  |j0                  d      S )NrA   rV   r>   rg   rh   rG   ri   rj   rk   rv   r\   rl   rq   rm   rn   ro   rp   zProvision updated successfully!r   admin.provisions_listrr   rf   rE   )rg   rh   rG   ri   rj   rk   r\   rl   rq   rm   rn   ro   rp   )rt   ) r   rJ   rK   r   r   r   rO   
get_or_404rL   rM   rw   rx   rG   ri   ry   rk   r`   r   r\   rl   rq   rm   rn   ro   rp   r
   r_   r   r   r   splitr   r   rA   r   s      r6   edit_provisionr   *  so   "":.H.//**2.I~~&||//<	%ll..z:	!,,**73	#LL,,Y7	%ll..z:	((/	 XXgll&:&::&FG	$\\--j9	 &-\\%5%56H%I%gYMgMg	"!(!1!1.!A	&-ll&6&67J&K	#%,\\%5%56H%I	"*1,,*:*:;R*S	'


/; 7899 1))''$$''}}5>5G5GI&&,,S1R&& PYOiOiI66??
Koq!..&88%66!*!@!@>  r;   z /admin/provision/delete/<int:id>c                 d   t         j                  j                  d      }|st        t	        d            S t
        j                  j                  |       }t        j                  j                  |       t        j                  j                          t        dd       t        t	        d            S )NrA   rV   zProvision deleted successfully!r   r   )r   rJ   rK   r   r   r   rO   r   r
   r_   deleter   r   r   s      r6   delete_provisionr   \  s{    "":.H.//**2.IJJi JJ	
+Y7G3455r;   z/admin/provisions/datac                     t         j                  j                  d      } | st        ddi      dfS t	        t         j
                  j                  dd            }t	        t         j
                  j                  dd            }t	        t         j
                  j                  dd	            }t         j
                  j                  d
d      }t         j
                  j                  d      }t         j
                  j                  dd      }t         j
                  j                  d      }t         j
                  j                  d      }t        t               j                  t        j                  t        j                  k(        dfd      }	|	t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  ft        j                  t        j$                  t        j&                  t        j(                  t        j                  d}
t        j*                  }|j-                         }|r2|j/                  t        j                  j1                  d| d            }|dv rQt               j                  t        j                  t        j                  k(        }|j/                  |dk(  r|n|       }|rd| d}|j/                  t        j"                  j1                  |      t        j                   j1                  |      z  t        j                  j1                  |      z  t        j$                  j1                  |      z  t        j&                  j1                  |      z  t        j(                  j1                  |      z        }|j-                         }d}|)t         j
                  j                  d| d      }||
v r|}|
|   }t3        |t4              r8|D cg c]  }|dk(  rt7        |      n
t9        |       }} |j:                  | }n*|j;                  |dk(  rt7        |      n
t9        |            }|j=                  |      j?                  |      jA                         }g }|D ]  }tB        jD                  j+                  t               j                  t        j                  |j                  k(              jG                         }|j                  r|j                  jI                  dd      nd}|j                  r*tK        |j                        dkD  r|j                  d d dz   n|j                  xs d}|j                  r|j                  jM                  d      nd}d}|jN                  r+|jP                  r|d |jN                   d!|jP                   z  }|jR                  r+|jT                  r|d"|jR                   d!|jT                   z  }|jW                  |j                  |rd#nd$||||j"                   d!|j                    |j                  |j$                  |j&                  |j(                  |d%        t        ||||d&      S c c}w )'NrA   ru   Unauthorizedi  drawr   startlengthr   zsearch[value]rE   zorder[0][column]zorder[0][dir]r   featuresetupr	   )else_)r   rq   termsr\   rl   namerG   ri   ry   rk   r   r   )activeinactiver   r   zcolumns[z][data]r   rv   z, (   z...rf   z	Copilot: r   z | Attribution: ActiveInactive)r   r   rq   r   r\   r   rG   ri   ry   rk   rl   )r   recordsTotalrecordsFiltereddata),r   rJ   rK   r   r   r   r   r   wherer   rG   r   rq   r   r\   rl   rx   rw   ri   ry   rk   rO   r^   r[   r]   
isinstancetupler   r   r   r   r   r   r
   r_   scalarreplacelenr   rm   rn   ro   rp   r   )rA   r   r   r   search_valueorder_col_index	order_dirfeature_filtersetup_filterstatus_expr
column_mapqrecords_totalemail_existsr{   records_filtered	order_colcol_datasort_targetcol
order_listr   r   pexists_clientfeatures_displaycomments_displayprovision_dateoffer_termss                                r6   provisions_datar   h  sO   "":.H01366 w||*+D  !,-E!!(B/0F<<##OR8Lll&&'9:O  %8I \\%%i0N<<##G,L 		7	8!<K %66&&&&$$i&:&:;$$((}}llJ 	AGGIM HHY''--.1A.CDE --x~~fllioo&EFHH\X%=\L=Q ~QHH  &&q)%%a()OO!!!$% ##A&' %%a(	)
 MM"#
 wwy I"<<##h.?w$GHz! IY'K+u%P[\9#6d3iCHD\
\AJJ
#JJI,?tK(SEUV %&&v.224J D 

((HNN6<<17723

&( 	
 =>JJ1::--c48B89

s1::Y[G[AJJsOe3bcblblbrprDEDVDV++44Z@\^>>a11Yq~~&6a8K8K7LMMK!"9"9-a.@.@-A1CZCZB[\\K$$!.XJ . (||nAakk]3WWyy55(
 	!< %+	  S ]s   "Zz/admin/logoutc                  h    t        t        d            } | j                  d       t        dd       | S )NrV   rA   zYou have been logged outinfo)r   r   delete_cookier   )rT   s    r6   logoutr     s/    GM*+Dz"	
$f-Kr;   /1yearofferc                     ddddddddgddd	} d }t         j                  dk(  rP| j                  t         j                  j	                  dd      j                         t         j                  j	                  dd      j                         t         j                  j	                  d	d      j                         t         j                  j	                  d
d      j                         t         j                  j	                  dd      j                         t         j                  j	                  dd      t         j                  j	                  dd      j                         d       t        j                  j                  | d	         j                         rd}t        d| |      S t        | d   | d   | d	   | d
   | d   | d   d| d   t        j                         dddd      }t        j                  j                  |       t        j                  j!                          d}d| d    d}t#        | d	   ||       d| d    d| d    d| d	    d}t#        d d!|       t%        d"d#       t'        d$      S t        d| |      S )%NrE   copilotattributionza30-Day Trial + 1-Year Free Offer to Alloc AI Strategist Pro AND 30-Day Trial of Attribution Tool.)	rg   rh   rG   ri   rj   rk   r\   rl   r   r>   rg   rh   rG   ri   rj   rk   rl   )rg   rh   rG   ri   rj   rk   rl   rF   z'This email has already been registered.zpublic_signup.htmlrs   zcopilot,attributionrc   rd   r	   re   )rw   rx   rG   ri   ry   rk   r\   rl   rq   rm   rn   ro   rp   u,   Welcome to Alloc AI — Your Access Is Readyzj
        <html>
        <body style="font-family: Arial, sans-serif; line-height:1.6;">
            <p>Hi u&  ,</p>

            <p>Welcome to Alloc AI — we’re excited to have you onboard.</p>

            <p><strong>Your access includes:</strong></p>
            <ul>
                <li>30-Day Free Trial + 1-Year Free Access to Alloc AI Strategist Pro</li>
                <li>30-Day Free Trial of Attribution Tool</li>
            </ul>

              <p>
               Get started here:
                 <a href="https://copilot.allocai.io/client/login" 
                    style="color:#0066cc; font-weight:bold; text-decoration:none;">
                    Login to Alloc AI
                </a>
            </p>

            <p>If you didn’t request this or need help, just reply to this email.</p>

            <p>Thanks,<br><strong>Alloc AI Team</strong></p>
        </body>
        </html>
        r   r   r   r   r   r   u=   Signup received — check your inbox for access instructions.r   r   )r   rL   r   rM   rK   rN   r   rO   rP   rQ   r   r   r   r
   r_   r   r   r7   r   r   )rt   ru   new_provisionr-   r.   r   s         r6   public_signupr     sm    .z
I E~~ ))+r:@@B((R8>>@\\%%gr288:||''	26<<>((R8>>@<<##E2.((R8>>@
 	 ??$$9W+=$>DDF=E"#79TYZZ " -
+G$i(
+% *z*%__.$")
  	

}%



 A [)* +	8 	9W%w5 39[3I2J!IV`LaKbbdenovewdxxz{
%'>
KMyY&&/9ERRr;   ).flaskr   r   r   r   r   r   rE   r
   modelsr   r   r   werkzeug.securityr   r   r#   email.mime.textr   email.mime.multipartr   mathr   r   
sqlalchemyr   r   r   r   sqlalchemy.sqlr   r   __name__admin_bpr7   router<   r&   ra   r   r   r   r   r   r   r   r:   r;   r6   <module>r     s   O O  , , I  $ .   - -  Wh'
/, 
4 4 
8/ 9/0 
! !J 
"UFO<YU =YUv 
'( )B 
05&/J- K-b 
2VHE	6 F	6 
()y *yx 
  ! 
v7^S 8^Sr;   