
    Pi,0                     ~   d dl mZmZmZ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Zd dlZd dlZd d	lmZ d d
lmZmZ  e            Z ee          Z eddg          Z e	d          Z ej         e!          Z"d Z#de$de$fdZ% eeddge          e&                    d           ee           ee          f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$de'f
d            Z+dS )     )	APIRouterRequestFormDepends)RedirectResponseHTMLResponse)Jinja2Templates)
open_mysqlget_mysql_credsget_pingconf_vars)get_current_user)nav_context)add_dual_routeN)urlparse)ListSetz/postcommentpostcomment)prefixtags	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youtu.bezbitchute.comzwww.bitchute.comz
rumble.comzwww.rumble.comN)r   netloc)tagattrvalueparsedallowed_domainss        ./wd/v2025.freedom4um.com/routes/postcomment.pysafe_iframe_srcr!      sD    u}}e__F  O
 M_4455$>    	body_textreturnc                    d}d}d}d}d }d }d }d }t          j        d	|           sXt          j        |||           } t          j        |||           } t          j        |||           } t          j        |||           } | S )
zBConvert YouTube, BitChute, Rumble, or image URLs into HTML embeds.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           	          |                      d          }d|                      d                                          v }|rd}d}d}nd}d}d}d| d	| d
| d| d	S )N   shortsr   ih  i  zvideo-wrapper youtube-shortzvideo-wrapperz<div class="z)" contenteditable="false"><iframe width="z
" 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">X</div></div>)grouplower)matchvideo_id	is_shortswidthheightwrapper_classs         r    youtube_replz+process_media_content.<locals>.youtube_repl)   s    ;;q>>A 4 4 6 66	 	,EF9MMEF+M=  # /5 2:  		
r"   c                 8    |                      d          }d| dS )Nr'   zx<div class="video-wrapper" contenteditable="false"><iframe width="640" height="480" 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">X</div></div>r*   )r,   r-   s     r    bitchute_replz,process_media_content.<locals>.bitchute_repl?   s-    ;;q>>3;  		
r"   c                     |                      d          }|                      d          rd|                      d           nd}d| d| dS )Nr'      z?pub=z?pub=4zs<div class="video-wrapper" contenteditable="false"><iframe width="640" height="360" src="https://rumble.com/embed/v/r)   r4   )r,   r-   	pub_params      r    rumble_replz*process_media_content.<locals>.rumble_replL   sf    ;;q>>05AL,EKKNN,,,H	.6 9B  		
r"   c                 8    |                      d          }d| dS )Nr'   z=<div class="image-wrapper" contenteditable="false"><img src="z" alt="" width="400" height="auto"><div class="image-overlay"></div><div class="image-resize-handle"></div><div class="image-delete-handle">X</div></div>r4   )r,   urls     r    
image_replz)process_media_content.<locals>.image_replZ   s-    kk!nn  	
r"   z<(?:iframe|img|div))researchsub)	r#   youtube_regexbitchute_regexrumble_regeximage_regexr2   r5   r:   r=   s	            r    process_media_contentrE   "   s     CMHNvLGK
 
 
,
 
 

 
 
	
 	
 	
 9+Y77 ?F=,	BB	F>=)DD	F<i@@	F;
I>>	r"    GET)methodsresponse_classrequestcurrent_userc                 r  K   | j                             d          }t          | j                             dd                    }d }d }d}d }|st          d          S 	 t	          t
                    5 }	|	                    d          }
|r|                                st          d          |dk    r|
	                    d	|f           |

                                }|rKd
|d<   |                    d          rt          |d                   |d<   |}|                    dd          }nt          d| d          |
	                    d||f           |

                                }|rd|d<   |                    d          rt          |d                   |d<   |}|d         |d         d}|	                    d          }|	                    d|f           |
                                }|                                 |r|d         nd}nt          d| d| d          d d d            n# 1 swxY w Y   nP# t          $ rC}t                              dt          |                      t          |          }Y d }~nd }~ww xY wt                               d| |||||||d|          S )NArtNumComNumr   rF   z/signinT
dictionaryzInvalid article number.af  
                    SELECT a.ArtNum, a.Title, a.Article, a.Author, a.PostDate, a.PubDate,
                           a.Source, a.URL AS URL_Source, a.ViewCnt, a.HandleID AS AuthorID, h.Handle 
                    FROM Articles a 
                    JOIN Handles h USING (HandleID) 
                    WHERE a.ArtNum = %s AND a.Deleted = 0
                articletypeArticleTitle	Article #z not found.a  
                    SELECT c.ComNum, c.ArtNum, c.Comment, c.PostDate, h.HandleID, h.Handle
                    FROM Comments c
                    JOIN Handles h ON c.HandleID = h.HandleID
                    WHERE c.ArtNum = %s AND c.ComNum = %s
                commentCommentHandleIDHandle)rX   Namez,SELECT Title FROM Articles WHERE ArtNum = %sz	Comment #z of article #z#Error loading postcomment context: postcomment.html)rJ   
article_idparent_comnumcontext_itemarticle_titlereplied_to_usererrorrK   )query_paramsgetintr   r
   mysql_credscursorisdigit	ExceptionexecutefetchonerE   fetchallloggerra   strr   TemplateResponse)rJ   navrK   art_numcom_numr^   r`   r_   ra   connrf   rowcursor2art_rowes                  r    get_post_commentrw   o   s}      "&&x00G'&**8Q7788GLOME +	***3$$ .	\[[D[11F ;'//"3"3 ; 9:::!||   Z! ! ! oo'' F"+CKwwy)) O)>s9~)N)NI#&L$'GGGR$8$8MM#$D$D$D$DEEE   
 w') ) ) oo'' \"+CKwwy)) O)>s9~)N)NI#&L36z?CPXM&Z&ZO"kkTk::GOO$RU\T^___%..00G$$&&&8?$GGG$4$4RMM#$Z$Z$Zg$Z$Z$Z[[[].	\ .	\ .	\ .	\ .	\ .	\ .	\ .	\ .	\ .	\ .	\ .	\ .	\ .	\ .	\`    C3q66CCDDDA %%!$(*.(
	
 
	
 
	
  s=   I 3F8H7+I 7H;;I >H;?I 
J9JJ)rI   .rM   rN   rW   c           
        K   t                               d|d d                     d }|s!d}t                              d| ||d          S 	 |                    d          }|st          d          |                                st          d          t          j        d	d
|t          j	                  }t          t                    5 }|                    d          }|                    d|f           |                                st          d| d          t          |          }	g d}
g dg dg dddgg dg dg dd}t!          j        |	|
|d          }	|                    d|f           |                                d         }|                                  d {V }t'                      }d|v rk|d                                         rQ|d                             d          D ]5}	 |                    t-          |                     &# t.          $ r Y 2w xY w|s|                    d            t1          d! |D                       }g }|rd                    d"gt5          |          z            }|                    d#| d$t7          |                     |                                D ]}|                    |d%                    d |v rt5          |          d&k    rd'g}d(                    |          d d)         }|                    d*||||	||f           |j        }|D ]}|                    d+||d ||f           |                                 d d d            n# 1 swxY w Y   tA          d,| d-| d./          S # t
          $ r`}t           !                    d0tE          |                      t                              d| tE          |          |d          cY d }~S d }~ww xY w)1NzRAW COMMENT: i  z(You must be signed in to post a comment.r[   )rJ   ra   rK   rX   zInvalid user session.zComment cannot be empty.z<p[^>]*>\s*<br\s*/?>\s*</p>z<p>&nbsp;</p>)flagsTrO   z=SELECT ArtNum FROM Articles WHERE ArtNum = %s AND Deleted = 0rU   z does not exist.)biubrpdivspanimgiframeastrongemulolli
blockquotescript)r   altr/   r0   style)r   r/   r0   frameborderallowfullscreenclassr   )r   contenteditabler   r   r   )hreftargetrelr   )r   zdata-tweet-idz	data-langzdata-dnt)r   asynccharset)r   r   r   r   r   r   r   )r   
attributesstripzLSELECT IFNULL(MAX(ComNum), 0) + 1 AS NextCom FROM Comments WHERE ArtNum = %sNextComto_list,r   c                     g | ]
}|d k    |S )r    ).0rids     r    
<listcomp>z'submit_post_comment.<locals>.<listcomp>  s    "H"H"H3a3r"   z%sz8SELECT HandleID, Handle FROM Handles WHERE HandleID IN ()rY   r'   Allz,    z
                INSERT INTO Comments (HandleID, ArtNum, ComNum, PostDate, Comment, ReplyToComNum, ReplyToHandleStr)
                VALUES (%s, %s, %s, NOW(), %s, %s, %s)
            z
                    INSERT INTO Ping (GlobComNum, ArtNum, CatNum, FromHandleID, ToHandleID)
                    VALUES (%s, %s, %s, %s, %s)
                z/readarticle?ArtNum=z#Ci/  )r<   status_codezError submitting comment: )#rl   debugr   rn   rc   rh   r   r>   r@   
IGNORECASEr
   re   rf   ri   rj   rE   bleachcleanformsetsplitaddrd   
ValueErrorsortedjoinlentuplerk   append	lastrowidcommitr   ra   rm   )rJ   rM   rN   rW   rK   ra   user_idrr   rf   comment_textallowed_tagsallowed_attrsnext_comnum	form_data
recipientsxpositive_idsreply_namesplaceholdersrs   reply_to_handle_str
globcomnumto_userrv   s                           r    submit_post_commentr      sE      LL0#00111E 
:))%NN
 
 	

Y
"":.. 	53444}} 	86777 &7'Y[Yfggg$$ E	[[D[11F NNZ]c\efff??$$ F DF D D DEEE 199L  L BAAhhh<<< '*777QQQ555 M "<<TaimnnnL NNilrktuuu //++I6K &llnn,,,,,,I#&55JI%%)I*>*D*D*F*F%"9-33C88  A"s1vv....%    "q!!! ""H"H*"H"H"HIILK 6"xx\1B1B(BCCiZfiiikpq}k~k~!??,, 6 6C&&s8}5555J3z??a#7#7$g"&))K"8"8#"> NN  6;fFYZ\ \ \  )J & @ @   !&!Wg>@ @ @ @
 KKMMMKE	 E	 E	 E	 E	 E	 E	 E	 E	 E	 E	 E	 E	 E	 E	N  $R6$R$R[$R$R`cdddd 
 
 
:#a&&::;;;))#a&&,OO
 
 	
 	
 	
 	
 	
 	

sj   A?N D,M::"HM:
H*'M:)H**EM:.N :M>>N M>N 
P&AP;PP),fastapir   r   r   r   fastapi.responsesr   r   fastapi.templatingr	   utils.pingdatar
   r   r   
utils.authr   	utils.navr   utils.routesr   loggingr   r>   urllib.parser   typingr   r   PingConfre   routerr   	getLogger__name__rl   r!   rm   rE   rc   dictrw   postrd   r   r   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 ' ' ' ' ' ' ! ! ! ! ! ! ' ' ' ' ' '   				 ! ! ! ! ! !        oh''	.	?	?	?Ok222			8	$	$
? 
? 
?IS IS I I I IZ UGLIIIN181E1E\c\cdt\u\u M MG MUY M M M  JIMb R-- $s))$s))499 !122j
 j
j
j
 j
 	j

 j
 j
 j
 .-j
 j
 j
r"   