o
    $g                     @   s   d dl Z d dlmZ d dlZd dlZd dlmZmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ 	 d	d
 Z	 dd Z	 dd Z	 dd Z	 dddZdS )    N)MIMEText)datetimetimezone	timedelta)
TOKEN_PATHRECIPIENT_EMAIL)Request)Credentials)build)	HttpErrorc              
   C   s4  d}t j| std|   dS znt| d}t|}W d   n1 s'w   Y  |r3t|ts:td W dS |j	sFtd |dfW S |j
swtd	 |t  t| d
}t|| W d   n1 siw   Y  td |dfW S td |dfW S  ty } ztd|  W Y d}~dS d}~ww )uY    リフレッシュトークンの有効性を確認し、必要なら更新して返す Nu7   [ERROR] トークンファイルが存在しません: )N	not_foundrbu&   [ERROR] 無効な認証情報です。)Ninvalid_credsu@   [WARNING] リフレッシュトークンが存在しません。no_refresh_tokenuU   [INFO] アクセストークンが無効です。リフレッシュを試みます。wbu7   [SUCCESS] トークンを正常に更新しました。	refreshedu4   [INFO] トークンは有効です。更新不要。validu7   [ERROR] トークンチェック中に例外が発生: )Nerror)ospathexistsprintopenpickleload
isinstancer	   refresh_tokenr   refreshr   dump	Exception)
token_pathcreds
token_filee r$   $/var/www/html/salon/python/common.pycheck_and_refresh_token   s:   


r&   c                 C   s0   d}|  dkr d}|S dkrd}|S 	 d}|S )NFr   Tr   r$   )statusresr$   r$   r%   getTokenStatus6   s   
r)   c                 C   s(  d}	 | dkr t | dd d}t d d}nn dkr4 t | dd d	}t d d
}nV dkrI d}t d dt d}nA dkr^ d}t d dt d}n, dkrs d}t d dt d}ndkrd}t d d}n	 d}td 	 t| t||}|S )NFr   T)r   u.   【成功】Gmail API トークン更新完了z%Y-%m-%d %H:%M:%SuK   

Gmail API のアクセストークンが正常に更新されました。r   u1   【情報】Gmail API トークンは有効ですu?   

Gmail API のアクセストークンは現在有効です。r   u4   【警告】Gmail API トークンファイル不在z

u    が見つかりませんでした。
OAuth認証フロー（例: test_gmail_send.py の /authorize エンドポイントへのアクセス）を実行する必要があります。r   u:   【警告】Gmail API リフレッシュトークン不在u    内にリフレッシュトークンが見つかりませんでした。
OAuth認証フローを再度実行する必要があります。r   u<   【エラー】トークンファイル読み込みエラーu    の読み込みに失敗しました。
ファイルが破損しているか、形式が不正です。OAuth認証を再実行してください。r   u?   【エラー】トークン更新スクリプト実行エラーuk   

トークン確認中に予期せぬエラーが発生しました。ログを確認してください。u'   【エラー】予測しないエラーu   どれでもない)print_token_expiryr   nowstrftimer   r   send_gmail_messager   )r!   r'   	mail_sentsubjectbodyr$   r$   r%   send_refreshToken_result_gmailB   s:   




r1   c              
   C   s  | r| j std dS zAtdd| d}t|dd}||d< ||d	< | }t| }d
|i}| 	 j
d|d }	td| d|	d  d W dS  typ }
 ztd|
  |
jjdv retd W Y d}
~
dS d}
~
w ty } ztd|  W Y d}~dS d}~ww )u1   Gmail API を使用してメールを送信するuV   エラー: 有効な認証情報がないため、メールを送信できません。Fgmailv1)credentialsplainzutf-8tor/   rawme)userIdr0   u)   通知メール送信成功 (Gmail API): z (Message ID: id)Tu$   Gmail API メール送信エラー: )i  i  uW   認証トークンが無効か、権限が不足している可能性があります。Nu&   予期せぬメール送信エラー: )r   r   r
   r   as_bytesbase64urlsafe_b64encodedecodeusersmessagessendexecuter   respr'   r   )r!   r6   r/   message_textservicemessagemessage_bytesmessage_encodedcreate_messagesend_messager   r#   r$   r$   r%   r-   p   s2   
r-   Fc              
   C   s   | r
t | dr
| jstd dS | j}|jdu s |j|du r'|jtjd}z$|tt	dd}|s6dnd}td	|  td
|
d  W dS  tyo } ztd|  td|
d  W Y d}~dS d}~ww )uK   アクセストークンの有効期限をログ出力（UTCとJST両方）expiryuB   アクセストークンの有効期限情報がありません。N)tzinfo	   )hoursu   更新なし（有効）u'   リフレッシュトークンで更新u#   アクセストークンの状態: u/   アクセストークンの有効期限 (JST): z%Y-%m-%d %H:%M:%S %Z%zu8   有効期限のタイムゾーン変換中にエラー: u/   アクセストークンの有効期限 (UTC): )hasattrrL   r   rM   	utcoffsetreplacer   utc
astimezoner   r,   r   )r!   r   
expiry_utc
expiry_jstr'   r#   r$   r$   r%   r*      s    "r*   )F)r=   email.mime.textr   r   r   r   r   r   
my_accountr   r   google.auth.transport.requestsr   google.oauth2.credentialsr	   googleapiclient.discoveryr
   googleapiclient.errorsr   r&   r)   r1   r-   r*   r$   r$   r$   r%   <module>   s(   #,!