a
    Bwj\                     @  s~   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 ddlmZmZ eddG d	d
 d
ZG dd dZdS )    )annotationsN)	dataclass)Callable   )
AlertEventEventPriorityT)frozenc                   @  sT   e Zd ZU ded< ded< dZded< dZded< dZd	ed
< eddddZdS )
NtfyConfigstr
server_urltopicNz
str | Nonetokendashboard_url   inttimeout_secondsz'NtfyConfig'returnc                 C  sL   t dd }|std| t ddd|t dp<d t dd	d
S )NZHANZ_NTFY_TOPIC zHANZ_NTFY_TOPIC is requiredZHANZ_NTFY_SERVERzhttps://ntfy.sh/ZHANZ_NTFY_TOKENZHANZ_DASHBOARD_URLz"https://fazabihandoko28.github.io/)r   r   r   r   )osgetenvstrip
ValueErrorrstrip)clsr    r   =/home/opc/hanz-radar/runtime/src/hanz_server/ntfy_notifier.pyfrom_env   s    zNtfyConfig.from_env)	__name__
__module____qualname____annotations__r   r   r   classmethodr   r   r   r   r   r	      s   
r	   c                   @  sv   e Zd ZdddddddZdd	d
ddZddd
ddZddddZeddd
ddZeddd
ddZ	dS )NtfyNotifierNzNtfyConfig | NonezCallable[..., object] | NoneNone)configopenerr   c                 C  s    |p
t  | _|ptjj| _d S )N)r	   r   r&   urllibrequesturlopen_opener)selfr&   r'   r   r   r   __init__&   s    zNtfyNotifier.__init__r   bool)eventr   c                 C  s   t jj| jj dtj| |ddddddi| 	 d}z\| j
|| jjd	6}d
tt|dd
  kotdk n  W  d    W S 1 s0    Y  W n  t jjtttfy   Y dS 0 d S )Nr   F)ensure_asciizutf-8POSTzContent-Typezapplication/json; charset=utf-8)datamethodheaders)timeout   statusi,  )r(   r)   Requestr&   r   jsondumpsbuild_payloadencode_auth_headersr+   r   r   getattrerrorURLErrorTimeoutErrorOSErrorr   )r,   r/   r)   responser   r   r   send.   s.    HzNtfyNotifier.sendzdict[str, object]c                 C  s~   | j jd|j d|j | |tjdtjdtjdtj	di|j
 | |d}| j jrz| j j|d< d	d
| j jddg|d< |S )Nu	   HANZ • u    •             )r   titlemessageprioritytagsclickviewz	Buka HANZT)actionlabelurlclearactions)r&   r   symbol
new_action_messager   LOWNORMALHIGHCRITICALrK   _tagsr   )r,   r/   payloadr   r   r   r;   D   s(    zNtfyNotifier.build_payloadzdict[str, str]r   c                 C  s   | j jsi S dd| j j iS )NAuthorizationzBearer )r&   r   )r,   r   r   r   r=   [   s    zNtfyNotifier._auth_headersz	list[str]c                 C  s@   ddgddgddgddgdd	gd
dgd}dg| | jdgS )NZmagZchart_with_upwards_trendZeyesZzapZgreen_circleZshieldZblue_circlewarningZorange_circleZrotating_light
red_circle)AWALSIAGAEKSEKUSITAHANLEPASJUALZhanzZinformation_source)getrU   )r/   mappingr   r   r   r[   `   s    zNtfyNotifier._tagsr
   c                 C  sb   d| j  d| j d| j g}| jd ur@|d| jd | jrX|d| j  d|S )NzAKSI: z
EVIDENCE: zRISIKO: zHARGA: gzPEMICU: 
)rU   evidenceriskpriceappendtriggerjoin)r/   linesr   r   r   rV   o   s    



zNtfyNotifier._message)NN)
r   r    r!   r-   rD   r;   r=   staticmethodr[   rV   r   r   r   r   r$   %   s     r$   )
__future__r   r9   r   urllib.errorr(   urllib.requestdataclassesr   typingr   modelsr   r   r	   r$   r   r   r   r   <module>   s   