
    sil4                     \   d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z d dlmZmZmZmZmZ ddl ddl ddl dd	lmZ ddl ddl e ed
      d               Ze ed      d               Ze ed      d               Ze ed      d               Ze ed      d               Zy)    )messages)
connection)JsonResponse)redirectrender)gettext_lazy)hx_request_requiredlogin_requiredmanager_can_enterowner_can_enterpermission_required   )*)is_supported_databasezbackup.add_localbackupc           	         t               }d}d}t               st        | d      S t        j                  j                         rt        j                  j                         }t        |      }d}t        j                  j                         j                  }| j                  dk(  rHt        | j                  | j                  |      }|j                         r|j                         }d|_        |j                          t                	 ddlm} |j                   dk(  rd	|j"                  j$                  i}n6|j                   d
k(  r%|j&                  |j(                  |j*                  d}ni } ||j                   |j,                  fi |}|d   r)t/        j0                  | t3        d      d|d    z          n(t/        j4                  | t3        d      d|d    z          t;        d      S t        | d|||d      S | j                  dk(  r$t        | j                  | j                        }|j                         r|j                         }	 ddlm} |j                   dk(  rd	|j"                  j$                  i}n6|j                   d
k(  r%|j&                  |j(                  |j*                  d}ni } ||j                   |j,                  fi |}|d   r)t/        j0                  | t3        d      d|d    z          n(t/        j4                  | t3        d      d|d    z          t;        d      S t        | d|||d      S # t6        $ rB}	t/        j4                  | t3        d      dt9        |	       z          Y d}	~	t;        d      S d}	~	ww xY w# t6        $ rB}	t/        j4                  | t3        d      dt9        |	       z          Y d}	~	t;        d      S d}	~	ww xY w)z
    function used to setup gdrive backup.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return gdrive backup setup template
    POST : return gdrive backup update template
    Fzbackup/404.html)instanceTPOSTr   )validate_folder_accessservice_accountservice_account_fileoauth)	client_idclient_secretrefresh_tokensuccessz'gdrive backup automation setup updated. messagez
 Warning: z* Note: Could not validate configuration - Ngdrivezbackup/gdrive_setup_form.html)formshowactivez'gdrive backup automation setup Created.)GdriveBackupSetupFormr   r   GoogleDriveBackupobjectsexistsfirstr!   methodr   FILESis_validsavestop_gdrive_backup_jobr   r   auth_methodr   pathoauth_client_idoauth_client_secretoauth_refresh_tokengdrive_folder_idr   r   _warning	Exceptionstrr   )
requestr   r    r!   r   google_driver   auth_params
validationes
             8/var/www/python-projects/worksol/horilla_backup/views.pygdrive_setupr<   e   s.    !"DDF "g011  '')$,,224$h7"**00299>>V#(w}}xXD}}#yy{&+#!!#&(T> $//3DD'=|?`?`?e?e&f%11W<)5)E)E-9-M-M-9-M-M' ')!7$00$55" &"J "), ((!4]2^cdeopyezd{a|2|} ((!4]2^cmnx  zC  oD  nE  bF  3F  G  ))+46:
 	
 ~~$W\\7==A==?99;LP:  ++/@@#9<;\;\;a;a"bK!--8%1%A%A)5)I)I)5)I)I#K #%K3 ,, 11 "
 i($$Wa0Y.Z_`akluav`w]x.xy$$Wa0Y.Z_ijtu~j  jA  ^B  /B  C H%%'tv6 [ ! T$$Wa0Y.Z  `J  KN  OP  KQ  JR  ^S  /S  T  T))TR  P  !,U*V  \F  GJ  KL  GM  FN  ZO  +O  P  PH%%Ps2   CM CN 	N.NN	O.OOzbackup.change_localbackupc                 Z   t         j                  j                         rt         j                  j                         }|j                  dk(  rd|_        t                d}nd|_        t                d}|j                          t        j                  | t        |             t        d      S )z
    function used to stop or start gdrive backup.

    Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return gdrive backup setup template
    POST : return gdrive backup update template
    TFz.Gdrive Backup Automation Stopped Successfully.z.Gdrive Backup Automation Started Successfully.r   )r#   r$   r%   r&   r!   r+   start_gdrive_backup_jobr*   r   r   r2   r   )r6   gdive_backupr   s      r;   gdrive_Backup_stop_or_startr@      s       '')(00668$&"'L"$FG"&L#%FG!G*-H    zbackup.delete_localbackupc                    t         j                  j                         rWt         j                  j                         }|j	                          t                t        j                  | t        d             t        d      S )z
    function used to delete gdrive backup.

        Parameters:
    request (HttpRequest): The HTTP request object.

    Returns:
    GET : return gdrive backup setup template
    z.Gdrive Backup Automation Removed Successfully.r   )
r#   r$   r%   r&   deleter+   r   r   r2   r   )r6   gdrive_backups     r;   gdrive_Backup_deleterE      s]       ''))11779 !$T"UVHrA   z(horilla_backup.change_googleldrivebackupc                    t         j                  j                         }|s!t        j                  | d       t        d      S |j                  dk7  r!t        j                  | d       t        d      S |j                  r|j                  s!t        j                  | d       t        d      S |j                  r!t        j                  | d       t        d      S 	 ddlm}m} dd	lm} | j!                  d
      }|j"                  s$|j%                  d      r|j'                  ddd      } ||j                  |j                  |      } ||      \  }}|| j(                  d<   |j                  |j                  |d| j(                  d<   t        |      S # t*        $ r7}	t        j                  | dt-        |	              t        d      cY d}	~	S d}	~	ww xY w)z0Start OAuth authorization flow for Google Drive.zFNo Google Drive backup configuration found. Please configure it first.r   r   zKAuthentication method is not set to OAuth. Please change it to OAuth first.zOOAuth credentials not configured. Please add Client ID and Client Secret first.zFOAuth is already authorized. Your Google Drive backup is ready to use.r   )create_oauth_flowget_oauth_authorization_url)settingsz/backup/oauth-callback/zhttp://zhttps://r   oauth_state)r   r   redirect_urioauth_flow_dataOAuth authorization failed: N)r#   r$   r&   r   errorr   r,   r.   r/   r0   infohorilla_backup.gdriverG   rH   django.confrI   build_absolute_uriDEBUG
startswithreplacesessionr4   r5   )
r6   backuprG   rH   rI   rK   flowauth_urlstater:   s
             r;   oauth_authorizer[     s    &&,,.Fw hi!!W$w mn!!!!)C)Cw qr!!!!ggh!!"X( 112KL ~~,"9"9)"D'//	:qIL !7!79S9SUab 6d;% */&//#77(.
)* !! "w">s1vh GH!!"s   B8F 	G,GGGc                 "   | j                   j                  d      }| j                   j                  d      }| j                   j                  d      }|r$t        j                  | d|        t	        d      S |s!t        j                  | d       t	        d      S || j
                  j                  d      k7  r!t        j                  | d       t	        d      S 	 d	d
lm}m} | j
                  j                  d      }|s!t        j                  | d       t	        d      S  ||d   |d   |d         } |||      }t        j                  j                         }	|d   |	_        |	j                          | j
                  j                  dd       | j
                  j                  dd       t        j                  | d       t	        d      S # t         $ r7}
t        j                  | dt#        |
              t	        d      cY d}
~
S d}
~
ww xY w)z"Handle OAuth callback from Google.coderZ   rN   rM   r   zNo authorization code received.rJ   z'OAuth state mismatch. Please try again.r   )rG   exchange_oauth_coderL   z(OAuth session expired. Please try again.r   r   rK   r   NzFOAuth authorization successful! Google Drive backup is now configured.zOAuth callback failed: )GETgetr   rN   r   rV   rP   rG   r^   r#   r$   r&   r0   r*   popr   r4   r5   )r6   r]   rZ   rN   rG   r^   	flow_datarX   tokensrW   r:   s              r;   oauth_callbackrd   6  s    ;;??6"DKKOOG$EKKOOG$Ew">ug FG!!w AB!! ##M22w IJ!!!"P OO''(9:	NN7$NOH%% !k"o&n%
 %T40 #**002%+O%<" 	M40-t4"jk!! "w"9#a& BC!!"s&   AG !B,G 	H,H	H	HN)django.contribr   	django.dbr   django.httpr   django.shortcutsr   r   django.utils.translationr   r2   horilla.decoratorsr	   r
   r   r   r   formsr   pgdumpdb_utilsr   	schedulerzipr<   r@   rE   r[   rd    rA   r;   <module>rq      s    #   $ - 6     +  b -.h / hV 01 2 4 01 2 $ ?@/" A /"d ?@4" A 4"rA   