
    ~Oi*                     h   d dl mZmZmZ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 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lZd d
lZd dlmZ  eddg          Z ed          Z e e                      Zd Zde de fdZ!e"                    de	           ed           ed           ed           ee          fde de de de#fd            Z$ eeddge	          e%                    d          d
d
d
 ee           ee          fded e&d!e&d"e&de#f
d#                        Z'd
S )$    )	APIRouterRequestDependsForm)Jinja2Templates)RedirectResponseHTMLResponse)HTTP_303_SEE_OTHER)
open_mysqlget_mysql_credsget_pingconf_vars)get_current_user)	xor_bytes)nav_context)add_dual_routeN)urlparsez/mailcomposemailcompose)prefixtagsz"/wd/v2025.freedom4um.com/templates)	directoryc                 R    |dk    r|S t          |          }g d}|j        |v r|ndS )z'Restrict iframe src to allowed domains.src)zyoutube.comzwww.youtube.comzbitchute.comzwww.bitchute.comz
rumble.comN)r   netloc)tagattrvalueparsedallowed_domainss        ./wd/v2025.freedom4um.com/routes/mailcompose.pysafe_iframe_srcr       s<    u}}e__FjjjOM_4455$>    	body_textreturnc                 V   d}d}d}d}d }d }d }d }t          j        d	|           st          j        |d
z   |z   d
z   |z   d
z   |z   |           rXt          j        |||           } t          j        |||           } t          j        |||           } t          j        |||           } | S )zHConvert raw YouTube, BitChute, Rumble, or image URLs into HTML elements.zk(?:youtube\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?|shorts)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})z0bitchute\.com\/(?:video|embed)\/([a-zA-Z0-9_-]+)z`rumble\.com\/(?:v|embed\/v)([a-zA-Z0-9_-]{6,})(?:-[^\/]+)?(?:\.html)?(?:\?pub=([a-zA-Z0-9_-]+))?z2(https?:\/\/[^\s<>"\']+\.(?:jpg|jpeg|png|gif|bmp))c                 X    |                      d          }d}d}d| d| d| d| d| d	S )
N     h  (<div class="video-wrapper" style="width:
px;height:,px;" contenteditable="false"><iframe width="
" height="z%" src="https://www.youtube.com/embed/" frameborder="0" allowfullscreen></iframe><div class="video-overlay"></div><div class="video-resize-handle"></div><div class="video-delete-handle"></div></div>groupmatchvideo_idwidthheights       r   youtube_replz+process_media_content.<locals>.youtube_repl"   sv    ;;q>>A5 A AF A A"'A A39A A`hA A A 	Br!   c                 X    |                      d          }d}d}d| d| d| d| d| d	S )
Nr&   r'   i  r)   r*   r+   r,   z&" src="https://www.bitchute.com/embed/z/" frameborder="0" allowfullscreen></iframe><div class="video-overlay"></div><div class="video-resize-handle"></div><div class="video-delete-handle"></div></div>r.   r0   s       r   bitchute_replz,process_media_content.<locals>.bitchute_repl-   sv    ;;q>>A5 A AF A A"'A A39A AaiA A A 	Br!   c                     |                      d          }|                      d          rd|                      d           nd}d}d}d| d| d	| d
| d| d| dS )Nr&      z?pub=z?pub=4r'   r(   r)   r*   z;px;" contenteditable="false"><iframe class="rumble" width="r,   z!" src="https://rumble.com/embed/v/r-   r.   )r1   r2   	pub_paramr3   r4   s        r   rumble_replz*process_media_content.<locals>.rumble_repl8   s    ;;q>>05AL,EKKNN,,,H	A5 A AF A A16A ABHA A2:A A=FA A A 	Br!   c                 8    |                      d          }d| dS )Nr&   zR<div class="image-wrapper" style="width:400px;" contenteditable="false"><img src="z" alt="" width="100%" height="auto"><div class="image-overlay"></div><div class="image-resize-handle"></div><div class="video-delete-handle"></div></div>r.   )r1   urls     r   
image_replz)process_media_content.<locals>.image_replD   s2    kk!nnA A A A 	Br!   z<(?:iframe|img|div)|)researchsub)	r"   youtube_regexbitchute_regexrumble_regeximage_regexr5   r7   r<   r?   s	            r   process_media_contentrH      s    CMHNvLGK	B 	B 	B	B 	B 	B
B 
B 
BB B B 9+Y77 ?BImVYFY\jFjmpFpsF  CF  GF  IT  GT  V_  =`  =` ?F=,	BB	F>=)DD	F<i@@	F;
I>>	r!    )response_class.to_listsubjectCommentcurrent_userc                    |sddiS |d         }d |                      d          D             }t          |                    d                    }t          |                    d                    }t          t                    5 }|                    d          }	|rtd                    d	gt          |          z            }
|	                    d
|
 d|           |		                                }d                    d |D                       }nd}t          |                    d                    }d}|	                    |||||f           |
                                 |	j        }d}|	                    |||df           |D ]}|	                    |||df           |
                                 d d d            n# 1 swxY w Y   t          dt                    S )NerrorUnauthorizedHandleIDc                 x    g | ]7}|                                                                 (t          |          8S  )stripisdigitint).0xs     r   
<listcomp>z$mailcompose_post.<locals>.<listcomp>^   s7    HHHAGGII4E4E4G4GHc!ffHHHr!   ,utf-8T
dictionaryz%sz.SELECT Handle FROM Handles WHERE HandleID IN ()c                     g | ]
}|d          S )HandlerT   )rX   rs     r   rZ   z$mailcompose_post.<locals>.<listcomp>j   s    %F%F%Faak%F%F%Fr!   rI   z
            INSERT INTO PrivateMail (FromHandleID, ToLine, PostDate, Subject, MailBodyBlob)
            VALUES (%s, %s, NOW(), %s, %s)
        z
            INSERT INTO PrivateMailPing (PMailNum, ToHandleID, MailStatus, Folder)
            VALUES (%s, %s, 'N', %s)
        SIz/maillist?folder=S)r>   status_code)splitr   encoder   mysql_credscursorjoinlenexecutefetchallcommit	lastrowidr   r
   )rK   rL   rM   rN   	sender_idto_idsencoded_bodyencoded_subjectconnri   placeholders
recipientsto_line_plainencoded_to_linesql_mailnew_pmail_numsql_pingto_ids                     r   mailcompose_postr}   S   s0     )((Z(IHHgmmC00HHHFW^^G4455Lw 7 788O	K	 	  D-- 	88TFS[[$899LNN[L[[[]cddd**JHH%F%F:%F%F%FGGMMM#M$8$8$A$ABB 	x)_o|!\]]]( 	x-C!@AAA 	B 	BENN8mUC%@AAAA?              B  4BTUUUUs   D5GGGGET)methodsrJ   requestPMNComNumArtNumc                    |st          d          S d }d }d }t          t                    5 }	|	                    d          }
|r|
                    d|f           |
                                }|r|
                    d|f           d |
                                D             }|d         |vr-|d         |d         k    rt          d          cd d d            S t          |d	         pd
                              dd          }t          |          }g d}g dg dddgd}t          j        |||d          |d	<   |
                    d|d         f           |
                                }|r|d         nd|d<   t          |                    d                    pd
}|                    dd          }|                    d          sd|z   }t          j        |g dd          |d<   t          |                    d          pd
                              dd          |d<   d|d <   |}|d         }|d         }n|rl|d!k    rf|
                    d"||f           |
                                }|r7d#|d$         |d%         |d         |d&         |d'         d(}|d         }|d%         }np|d!k    s|rh|pd!}|
                    d)|f           |
                                }|r7d*|d+         |d,         |d%         |d         |d&         d-}|d         }|d%         }d d d            n# 1 swxY w Y   t                              d.| |||||||d/|          S )0Nz/signinTr]   z
                SELECT PMailNum, FromHandleID, ToLine, PostDate, Subject, MailBodyBlob
                FROM PrivateMail
                WHERE PMailNum = %s
            zCSELECT DISTINCT ToHandleID FROM PrivateMailPing WHERE PMailNum = %sc                     g | ]
}|d          S )
ToHandleIDrT   )rX   rows     r   rZ   z#mailcompose_get.<locals>.<listcomp>   s    III#l+IIIr!   rR   FromHandleIDMailBodyBlobr!   r\   replace)errors)biubrpdivimgiframe)r   altr3   r4   )r   r3   r4   frameborderallowfullscreenclassr   style)r   r   r   )r   
attributesrU   z6SELECT Handle AS Name FROM Handles WHERE HandleID = %sNameUnknownFromNameSubjectzRe:zRe: )r   r   r   )r   rU   ToLineprivate_mailtyper   a  
                SELECT c.ComNum, c.ArtNum, c.Comment, h.Handle AS HandleStr, h.HandleID, c.PostDate
                FROM Comments c
                JOIN Handles h ON c.HandleID = h.HandleID
                WHERE c.ArtNum = %s AND c.ComNum = %s
            commentrM   	HandleStrPostDater   )r   rM   r   rR   r   r   z
                SELECT a.ArtNum, a.Title, a.Article, h.Handle AS HandleStr, h.HandleID, a.PostDate
                FROM Articles a
                JOIN Handles h ON a.HandleID = h.HandleID
                WHERE a.ArtNum = %s
            articleTitleArticle)r   r   r   r   rR   r   zmailcompose.html)r   rN   context_item	pmail_numr   r   default_reply_to_iddefault_reply_to_name)r   r   rh   ri   rl   fetchonerm   r   decoderH   bleachcleanget
startswith	templatesTemplateResponse)r   r   r   r   rN   navr   r   r   rt   ri   mailrq   r"   allowed_tagsallowed_attributesfrom_rowsubject_bytessubject_textr   target_art_numr   s                         r   mailcompose_getr      s     +	***L 	K	 	  V=D-- S	=NN  	  
 ??$$D #9dgjflmmmIIv7H7HIII
+699l:>VZ^_mZn>n>n+I66V= V= V= V= V= V= V= V=  &d>&:&AcBBII'ZcIdd	1)<<	QQQ<<<ccc#W-& &"
 (.|%1	( ( (^$ WZ^_mZnYpqqq!??,,7?#N8F#3#3YZ  )$((9*=*= > > E#,33GI3NN#..u55 9#)L#8L"(,|///Y]"^"^"^Y!*488H+=+=+D!E!E!L!LW]f!L!g!gX-V#&*>&:#(,Z(8% '	=

NN 
 &"$ $ $ oo''G 
=%&y1!(!5 '
 3 '
 3%h/    '.j&9#(/(<%kkfk#[qNNN 
 !"$ $ $ oo''G 
=%$W-&y1!(!5 '
 3 '
 3    '.j&9#(/(<%mV= V= V= V= V= V= V= V= V= V= V= V= V= V= V=p %%((#6%:
	
 
	
 
	
  s   B'L5 I	L55L9<L9)(fastapir   r   r   r   fastapi.templatingr   fastapi.responsesr   r	   starlette.statusr
   utils.pingdatar   r   r   
utils.authr   	utils.xorr   	utils.navr   utils.routesr   r   rA   urllib.parser   routerr   rh   r    strrH   postdictr}   r   rW   r   rT   r!   r   <module>r      s   5 5 5 5 5 5 5 5 5 5 5 5 . . . . . . < < < < < < < < / / / / / / I I I I I I I I I I ' ' ' ' ' '       ! ! ! ! ! ! ' ' ' ' ' '  				 ! ! ! ! ! !	.	?	?	?O&JKKK	o//1122? ? ?6S 6S 6 6 6 6p R--499488499 !122	0V 0V0V0V 0V 	0V 0V 0V .-0Vd UGLIIIN  !122t tt	t t 	t
 t t t  JIt t tr!   