o
    54g                     @   s&  d dl mZ d dlmZ ddlmZ ddlmZ	 dZ
dZG dd	 d	ejZG d
d dejZG dd dejjZG dd deZG dd dejZG dd dejjZG dd deZG dd dejZG dd dejjZG dd deZG dd dejZG dd dejjZG d d! d!eZd"S )#    )models)gettext_lazy   )HexIntegerField)PUSH_NOTIFICATIONS_SETTINGS))FCMzFirebase Cloud Message)GCMzGoogle Cloud Message))CHROMEChrome)FIREFOXFirefox)OPERAOpera)EDGEEdgec                   @   s   e Zd ZejdeddddZejeddeddZej	e
d ddejd	Zejed
dddZejdededdddZG dd dZdd ZdS )Device   NameT)
max_lengthverbose_nameblanknullz	Is activez/Inactive devices will not be sent notifications)r   default	help_text
USER_MODEL)r   r   	on_deletezCreation date)r   auto_now_addr   @   zApplication IDzTOpaque application identity, should be filled in for multiple key/certificate access)r   r   r   r   r   c                   @   s   e Zd ZdZdS )zDevice.MetaTN)__name__
__module____qualname__abstract r"   r"   _/var/www/html/notificationserver/venv/lib/python3.10/site-packages/push_notifications/models.pyMeta*   s    r$   c                 C   s*   | j pt| jpdpd| jj| jpdS )N z	{} for {}zunknown user)namestr	device_idformat	__class__r   userselfr"   r"   r#   __str__-   s
   zDevice.__str__N)r   r   r    r   	CharField_r&   BooleanFieldactive
ForeignKeySETTINGSCASCADEr+   DateTimeFielddate_createdapplication_idr$   r.   r"   r"   r"   r#   r      s*    
	r   c                   @      e Zd Zdd ZdS )GCMDeviceManagerc                 C   
   t | jS N)GCMDeviceQuerySetmodelr,   r"   r"   r#   get_queryset6      
zGCMDeviceManager.get_querysetNr   r   r    r?   r"   r"   r"   r#   r:   5       r:   c                   @   r9   )r=   c                 K   s   |   rlddlm}m} ddlm} t||js.|di }|d ur&||d< ||fi |}| jdd	dj
ddd	 }g }|D ]$}	t| jdd
|	dj
ddd	}
|
rf||
|fd|	i|}||j qB||S d S )Nr   dict_to_fcm_message	messagingsend_messageextramessageTr2   r8   flatr   )r2   cloud_message_typer8   registration_id)existsgcmrD   rE   rG   
isinstanceMessagepopfilterorder_byvalues_listdistinctlistextend	responsesBatchResponse)r-   rI   kwargsrD   rE   fcm_send_messagedataapp_idsrZ   app_idreg_idsrr"   r"   r#   rG   ;   s>   
zGCMDeviceQuerySet.send_messageNr   r   r    rG   r"   r"   r"   r#   r=   :   rB   r=   c                   @   st   e Zd ZeeddddeddZejeded dZ	ej
edd	ed
eddZe ZG dd dZdd ZdS )	GCMDevice	Device IDTz;ANDROID_ID / TelephonyManager.getDeviceId() (always as hex)r   r   r   db_indexr   Registration IDUNIQUE_REG_IDr   uniquezCloud Message Type   r   z(You should choose FCM, GCM is deprecatedr   r   choicesr   r   c                   @      e Zd ZedZdS )zGCMDevice.Metaz
FCM deviceNr   r   r    r0   r   r"   r"   r"   r#   r$   j   rB   r$   c                 K   s|   ddl m}m} ddl m} | jdkrd S t||js1|di }|d ur)||d< ||fi |}|| j|fd| j	i|S )Nr   rC   rF   r   rH   rI   r8   )
rP   rD   rE   rG   rM   rQ   rR   rS   rN   r8   )r-   rI   r\   rD   rE   r]   r^   r"   r"   r#   rG   m   s    
zGCMDevice.send_messageN)r   r   r    r   r0   r(   r   	TextFieldr4   rN   r/   CLOUD_MESSAGE_TYPESrM   r:   objectsr$   rG   r"   r"   r"   r#   rd   Z   s    rd   c                   @   r9   )APNSDeviceManagerc                 C   r;   r<   )APNSDeviceQuerySetr>   r,   r"   r"   r#   r?      r@   zAPNSDeviceManager.get_querysetNrA   r"   r"   r"   r#   rt      rB   rt   c                   @   s   e Zd ZdddZdS )ru   Nc           
      K   s   |   rQddlm} | jdddjddd }g }|D ]0}t| jd|djddd}|d||||d	|}	t|	d
rE||	g7 }qt|	drN||	7 }q|S d S )Nr   )apns_send_bulk_messageTrJ   r8   rK   r2   r8   rN   )registration_idsalertr8   credskeys__getitem__r"   )	rO   apnsrv   rT   rU   rV   rW   rX   hasattr)
r-   rI   rz   r\   rv   r_   resr`   ra   rb   r"   r"   r#   rG      s2   

zAPNSDeviceQuerySet.send_messager<   rc   r"   r"   r"   r#   ru      s    ru   c                   @   s^   e Zd ZejeddddeddZejedded dZ	e
 ZG d	d
 d
ZdddZdS )
APNSDevicere   Tz%UUID / UIDevice.identifierForVendor()rf   rh      ri   )r   r   rk   c                   @   ro   )zAPNSDevice.MetazAPNS deviceNrp   r"   r"   r"   r#   r$      rB   r$   Nc                 K   s(   ddl m} |d| j|| j|d|S )Nr   )apns_send_message)rN   ry   r8   rz   r"   )r}   r   rN   r8   )r-   rI   rz   r\   r   r"   r"   r#   rG      s   zAPNSDevice.send_messager<   )r   r   r    r   	UUIDFieldr0   r(   r/   r4   rN   rt   rs   r$   rG   r"   r"   r"   r#   r      s    r   c                   @   r9   )WNSDeviceManagerc                 C   r;   r<   )WNSDeviceQuerySetr>   r,   r"   r"   r#   r?      r@   zWNSDeviceManager.get_querysetNrA   r"   r"   r"   r#   r      rB   r   c                   @   r9   )r   c           	      K   s   ddl m} | jdddjddd }g }|D ].}| jd|djddd}|dt||d	|}t|d
r?||g7 }qt|drH||7 }q|S )Nr   )wns_send_bulk_messageTrJ   r8   rK   rw   rN   )uri_listrI   r{   r|   r"   )wnsr   rT   rU   rV   rW   rX   r~   )	r-   rI   r\   r   r_   r   r`   ra   rb   r"   r"   r#   rG      s$   

zWNSDeviceQuerySet.send_messageNrc   r"   r"   r"   r#   r      rB   r   c                   @   sZ   e Zd ZejeddddeddZejeded dZ	e
 ZG dd	 d	Zd
d ZdS )	WNSDevicere   TzGUID()rf   zNotification URIri   rj   c                   @   ro   )zWNSDevice.Metaz
WNS deviceNrp   r"   r"   r"   r#   r$      rB   r$   c                 K   s&   ddl m} |d| j|| jd|S )Nr   )wns_send_message)urirI   r8   r"   )r   r   rN   r8   )r-   rI   r\   r   r"   r"   r#   rG      s   
zWNSDevice.send_messageN)r   r   r    r   r   r0   r(   rq   r4   rN   r   rs   r$   rG   r"   r"   r"   r#   r      s    r   c                   @   r9   )WebPushDeviceManagerc                 C   r;   r<   )WebPushDeviceQuerySetr>   r,   r"   r"   r#   r?      r@   z!WebPushDeviceManager.get_querysetNrA   r"   r"   r"   r#   r      rB   r   c                   @   r9   )r   c                 K   s8   | j ddd }g }|D ]
}||| q|S )NTrJ   r8   )rT   rU   rW   appendrG   )r-   rI   r\   devicesr   devicer"   r"   r#   rG      s
   z"WebPushDeviceQuerySet.send_messageNrc   r"   r"   r"   r#   r      rB   r   c                   @   s   e Zd Zejeded dZejedddZ	ejedddZ
ejed	d
eed d eddZe ZG dd dZedd Zdd ZdS )WebPushDevicerh   ri   rj   zUser public encryption keyX   )r   r   zUser auth secret   Browser
   r   zBCurrently only support to Chrome, Firefox, Edge and Opera browsersrm   c                   @   ro   )zWebPushDevice.MetazWebPush deviceNrp   r"   r"   r"   r#   r$     rB   r$   c                 C   s   d S r<   r"   r,   r"   r"   r#   r(     s   zWebPushDevice.device_idc                 K   s   ddl m} || |fi |S )Nr   )webpush_send_message)webpushr   )r-   rI   r\   r   r"   r"   r#   rG     s   zWebPushDevice.send_messageN)r   r   r    r   rq   r0   r4   rN   r/   p256dhauthBROWSER_TYPESbrowserr   rs   r$   propertyr(   rG   r"   r"   r"   r#   r      s(    
r   N)	django.dbr   django.utils.translationr   r0   fieldsr   settingsr   r4   rr   r   Modelr   Managerr:   queryQuerySetr=   rd   rt   ru   r   r   r   r   r   r   r   r"   r"   r"   r#   <module>   s&      (
