Files
connettore_metadataexporter/__pycache__/main.cpython-313.pyc
T

129 lines
22 KiB
Plaintext
Raw Normal View History

2026-09-22 15:51:56 +02:00
ó
„´üiœ<ãóH•%SrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK r SSK
r
SSK J r SSK
Jr SSKJr SSKrSSKJr SSKJrJrJrJrJrJrJr SSKJr SS KJrJ r SS
K!J"r" \"5 \RF"S S 5r$\%\&S
'\RF"SS5r'\%\&S'\RF"SS5RQS5Vs1sHoRS5iM snr*\+\%\&S'\RF"SS5r,\%\&S'\RF"SS5r-\%\&S'\RF"SS5r.\%\&S'\/"\RF"SS55r0\/\&S'\RF"SS5r1\%\&S'\RF"SS5r2\%\&S'\RF"S S5r3\%\&S '\RF"S!S"5r4\%\&S!'\RF"S#S$5r5\%\&S#'\RF"S%S&5\RF"S'S(5\RF"S)S(5\RF"S*S&5\RF"S+S(5\RF"S,S(5S-.r6\7\%\%4\&S.'\6Rq5VVs1sH+upURS5Rs5S/;dM)UiM- snnr:\+\%\&S0'S1S2S3S4S5S6S6S3S3S6S3S7. r;\7\%\/4\&S8'\Rx"\RzS9S:9 \R|"S;5r?\"SSS<9r@\"5rAS=\R„4S>jrCS?\7S@\D\%S=\/4SAjrESB\%S=\%4SCjrFSD\GS=\74SEjrHSF\%SD\GS=\\%4SGjrIS=\J4SHjrKS?\7S=\74SIjrLSJ\%S=\%4SKjrMSF\%SL\%SM\%SN\NSO\%SP\%SQ\%SR\%SS\%ST\D\%SU\/SV\GS=\/4SWjrO\"\A54SX\SY\ S=S4SZjjrP\@R£S[\S\9\"S]5\"S]5\"\P54SX\S^\%S_\S`SS=\%4
Sajj5rR\@R£Sb\S\9\"\P54SX\S`SS=\%4Scjj5rS\TSd:Xa@SSKUrU\UR¬"Se\RF"SfS5\/"\RF"SgSh55SiSj9 ggs snfs snnf)ku!
connettore_metadataexporter
HTTP receiver for Rspamd metadata_exporter, compatibile con il database rqwatch.
Endpoints:
POST /api/metadata_importer_multipart — formatter = "multipart" (raccomandata)
POST /api/metadata_importer — formatter = "default" + meta_headers
éN)Údate)ÚPath)ÚOptional)Ú load_dotenv)ÚDependsÚFastAPIÚFileÚFormÚ
HTTPExceptionÚRequestÚ
UploadFile)ÚPlainTextResponse)Ú HTTPBasicÚHTTPBasicCredentials)Ú
DictCursorÚRSPAMD_API_USERÚrspamdÚAPI_USERÚRSPAMD_API_PASSÚÚAPI_PASSÚRSPAMD_API_ACLz 127.0.0.1Ú,ÚAPI_ACLÚQUARANTINE_DIRz /quarantineÚMY_API_SERVER_ALIASÚmx1Ú SERVER_ALIASÚDB_HOSTÚDB_PORTÚ3306ÚDB_NAMEÚrqwatchÚDB_USERÚDB_PASSÚMAILLOGS_TABLEÚ mail_logsÚMAIL_RECIPIENTS_TABLEÚmail_log_recipientsÚSTORE_NO_ACTIONÚfalseÚSTORE_ADD_HEADERÚtrueÚSTORE_REWRITE_SUBJECTÚSTORE_GREYLISTÚ
STORE_DISCARDÚ STORE_REJECT)z no actionz
add headerzrewrite subjectÚgreylistÚdiscardÚrejectÚ _store_flags)Ú1r-ÚyesÚ
STORE_ACTIONSéé
ééé2éÿ) ÚqidÚserverÚsubjectÚactionÚipÚ mail_fromÚ mime_fromÚrcpt_toÚmime_toÚ
mail_locationÚ
message_idÚ FIELD_LIMITSz2%(asctime)s %(levelname)s [connettore] %(message)s)ÚlevelÚformatÚ
connettore)Údocs_urlÚ redoc_urlÚreturnc óh•[R"[[[[
[ S[SS9$)NÚutf8mb4F)ÚhostÚportÚuserÚpasswordÚdatabaseÚcharsetÚ cursorclassÚ
autocommit)ÚpymysqlÚconnectrr r$r%r"r©óÚmain.pyÚ_dbr`Us&€Ü �?Š?Ü
œ7¬¼7Ü )¼Øñ ðr^ÚdataÚ
recipientsc
ó.•[5nUR5nSRSU55nSRS/[U5-5nUR S[
SUSUS3[
UR555 URnU(a�U(az[
UVs1sH7owR5(dMUR5R5iM9 sn5nURS[S3UVs/sHovU4PM sn5 SSS5 UR5 WUR5 $s snfs snf!,(df  N:=f![a UR!5 ef=f!UR5 f=f) Nú, c3ó.# •UH nSUS3v• M
g7f)Ú`Nr])Ú.0Úks r_Ú <genexpr>Ú_insert.<locals>.<genexpr>asé€Ð4ªt¨!˜q   1�Xªtùs‚z%sz
INSERT INTO `z` (z
) VALUES (Ú)z0` (mail_log_id, recipient_email) VALUES (%s, %s))r`ÚcursorÚjoinÚlenÚexecuter&ÚlistÚvaluesÚ lastrowidÚstripÚlowerÚ executemanyr(ÚcommitÚcloseÚ ExceptionÚrollback) rarbÚconnÚcurÚcolsÚphÚdb_idÚrÚuniques r_Ú_insertr�]sF€Ü ‹5€DðØ
�[‰[Œ]˜cØ—9‘9Ñ4©tÓ4Ó4ˆDØ—‘˜D˜6¤C¨£IÑ-Ó.ˆBØ �K‰KؤÐ/¨s°4°&¸
À2À$ÀaÐHÜ�T—[‘[“]Ó#ô
🙈Eޞܹ*ÓRº*°QÏÉÏ Ó0˜qŸw™w›yŸ™Ö0¹*ÑRÓS�Ø—‘Ø#Ô$9Ð#:ð;EðEá)/Ó0ª A˜Q“Z©Ñ0ô÷ð
� ‰ Œ
Øð
�
‰
� ùòSùò1÷�]ûô" óØ �
‰
ί
ðûð
�
‰
� úsSŒE#œBEÂ-E
à "E
Ã+EÄ
E
ÄEÄE#Å
EÅ
E ÅE#Å#E?Å?FÆFÚvaluecóB•[RRU5n/nUHUup4[U[5(a*UR UR
U=(d SSS95 MDUR U5 MW SRU5$![a Us$f=f)Núutf-8Úreplace)Úerrorsr) Ú_emailÚheaderÚ
decode_headerÚ
isinstanceÚbytesÚappendÚdecodermrx)r‚ÚpartsÚoutÚrawrXs r_Ú_decode_headerr‘zs†€ð
Ü—
‘
×+Ñ+¨EÓ2ˆØˆÛ!‰LˆCܘ#œu×%Ñ%Ø—
‘
˜3Ÿ:™: g×&8°À˜:ÐKÖLà—
‘
˜3–ñ "ð
�w‰w�s‹|ÐøÜ óØŠ ðús‚B BÂ BÂBr�cóú^•[R"U[RRS9mS[S[4U4SjjnTR 5VVs/sH up#USU3PM nnnSR
U5RSS5RS5nU"S 5U"S
5SS U"S 5U"S
5US.$s snnf![a*n[RSU35 SSSSSS.sSnA$SnAff=f)N)ÚpolicyÚnamerPcób>•TRUS5nU(a[[U55$S$)Nr)Úgetr‘Ústr)r”ÚvÚmsgs €r_ÚhdrÚ_parse_mime.<locals>.hdrŒs)ø€Ø—‘˜˜bÓ!ˆAÞ-.”>¤# a£&Ó)Ð 6°BÐ 6r^ú: z
r„ÚignoreÚFromÚTor;ÚSubjectz
Message-ID)rErGÚ mime_subjectrIÚ headers_rawzMIME parse error: r) r‡Úmessage_from_bytesr“Úcompat32r—ÚitemsrmÚencoder�rxÚlogÚwarning)r�ršrhr˜Ú raw_linesr¢Úexcr™s @r_Ú _parse_mimer«ˆsùø€ð
Ü×'Ò'¨´F·M±M×4JÑ4JÑKˆð 7”cð 7œc÷ 7ð.1¯Y©Y¬[Ô9ª[¡T Q˜�s˜"˜Q˜C“[©[ˆ Ñ9Ø—k‘k )Ó,×3Ñ3°G¸XÓF×MÑMÈgÓVˆ ñ  ›KÙ ›I e tÐ,Ù  ›NÙ  Ó-Ø'ñ 
ð
ùó:øô ó
Ü � ‰ Ð(¨¨Ð.Ô/ਸBبRñ
õ
ûð
ús1ƒACÁCÁ*ACÃCÃ
C:ÃC5Ã/C:Ã5C:r?có¨•[[5nUR5(a3[R"[ U5[R 5(d[RS[35 g[R"5R5n[R"SU5(aUOSnU(aUS:waUO!S[R"5R 3nX#- U- nUR#SSS9 US- nUR%U5 [ U5$![&a%n[RS US
U35 SnAgSnAff=f) Nz Quarantine dir non accessibile: ú^[a-zA-Z0-9]+$rÚunknownzunknown/T)ÚparentsÚexist_okzmail.emlzScrittura fallita rœ)rrÚis_dirÚosÚaccessr—ÚW_OKr§ÚerrorrÚtodayÚ isoformatÚreÚmatchÚuuidÚuuid4ÚhexÚmkdirÚ write_bytesrx) r?r�Úqr¶ÚsafeÚsubdirÚmail_dirÚdestrªs r_Ú _store_emailrĤs€Ü Œ^Ó€AØ �8‰8�:‰:œRŸYšY¤s¨1£v¬r¯w©w×7Ñ7Ü � ‰ Ð4´^Ð4DÐEÔFØä �JŠJ‹L× "Ñ "Ó $€EÜ—(’(Ð,¨c×2Ñ2‰3¸€DÞ˜d iÓ/‰T°xÄÇ
Â
à ×@PÑ@PÐ?QÐ5R€F؉y˜6Ñ!€HØ ‡N�N˜4¨$€NÑ/à �jÑ €DðØ ×јÔÜ�4‹yÐøÜ óÜ � ‰ Ð& t f¨B¨s¨eÐ4Ô5ÜûðúsÄD"Ä"
EÄ,E Å Ecó¼•[U[5(a [SUR555$[U[5(a[SU55$g)Nc3óx# •UH0n[U[5=(a URS5S:Hv• M2 g7f©ÚgroupÚ antivirusN©rŠÚdictr–)rgr˜s r_riÚ_has_virus.<locals>.<genexpr>»s3é€ð
â%�ô
�qœ$Ó × A A§E¡E¨'£N°kÑ$AÔ AÚ%ùó‚8:c3óx# •UH0n[U[5=(a URS5S:Hv• M2 g7frÇrÊ)rgÚss r_rirÌÀs3é€ð
â�ô
�qœ$Ó × A A§E¡E¨'£N°kÑ$AÔ AÚùrÍF)rŠrËÚanyrqrp)Úsymbolss r_Ú
_has_virusrÒ¹s^€Ü�'œ4× Ñ Üñ
à—^‘^Ô%ó
ó
ð
ô�'œ4× Ñ Üñ
áó
ó
ð
ð r^cóø•[R5HaupURU5n[U[5(dM-[ U5U:”dM>[ RSUSUS35 USUX'Mc U$)NzCampo 'z
' troncato a z
caratteri)rJr¥r–rŠr—rnr§r¨)raÚfieldÚlimitr˜s r_Ú _trim_fieldsrÖÇsj€Ü$×*Ñ*Ö,‰ ˆØ �H‰H�U‹OˆÜ �aœ× Ó ¤# a£&¨5¥.Ü �K‰K˜' % ¨
°e°W¸JÐGÔ HؘF˜U˜)ˆD‹Kñ -ð
€Kr^rÏcó8•[R"SSU5SS$)Nz[^a-zA-Z0-9.\-]rr:)r¸Úsub)rÏs r_Ú_sanitize_serverrÙÐs€Ü
�6Š6Ð$ b¨!Ó ,¨S¨bÐ 1Ð1r^r@rAÚscorerBÚ symbols_jsonÚ
fuzzy_jsonrCrDÚ rcpt_listÚsizeÚ raw_emailc ó•[R"U5n [U 5n
SupïU[;dU
(aG[ X 5nU(aSn[ RUSU35 O[ RUS35 U(dSn[U 5n0SU_S[U5_SUS =(d U=(d S
_S [US 5_S
U_SU=(d S_SU
(aSOS_SU=(d S_SU=(d S
_SU=(d S
R5_SUS_SU (dSOSRSU 55_SUS_SU_SU_SU
_SUS_S US 0En[U5n[UU 5$![a 0n GNhf=f)!N)rNéz in quarantena: z salvataggio quarantena fallitozempty-mail-from@localhostr?r@rAr¡rrÚérBrÑú[]Ú has_virusrÚ fuzzy_hashesrCrDrErFr®rdc3ó@# •UHoR5v• M g7f)N)rt)rgrs r_riÚ_process.<locals>.<genexpr>sé€ÐB`ÒV_ÐQRÇ7Á7Ç9À9ÒV_ùs‚rGÚ mail_storedrHrÞÚheadersr¢rI)ÚjsonÚloadsrxrÒr8rÄr§Úinforµr«rÙÚroundrtrmrÖr�)r?r@rArÚrBrÛrÜrCrDrÝrÞrßrÑÚvirusrèrHÚmimeras r_Ú_processrðÖsï€ðÜ—*’*˜\Ó*ˆô
�wÓ €EØ!(Ñ€Kà
”Ó¦%Ü$ SÓ4ˆ
Þ ØˆKÜ �H‰H˜�uÐ,¨]¨OÐ<Õ =ä �I‰I˜˜Ð<Ð=Ô >æ Ø/ˆ ä �yÓ !€Dð Ø
˜ð àÔ)¨&Ó1ð 𠘘nÑ-×>°×>¸Bð 𠜘u a›ð  ð
˜ð  ð ˜×-¨ð
 ð že™¨ð ð ˜×+ tð ð
˜Ÿ˜rð ð ˜)Ÿ/ r×0Ñ0Ó2ð 𠘘kÑ*ð ð ®)™¸¿¹ÑB`ÑV_ÓB`Ó9`ð 𠘘i™ð ð ˜ð ð ˜ð ð ˜ð! ð" ˜˜mÑ,ð# ð$ ˜˜lÑ+ñ% €Dô* ˜Ó €DÜ �4˜Ó #Ð#øôS óØ‹ðús‚E1Å1 FÆFÚrequestÚ credentialscƒóò# •UR(aURROSnU[;a#[R SUS35 [ SSS9e[ R"URR5[R55=(aA [ R"URR5[R55nU(d
[ SSS S
0S 9eg7f) Nrz
Richiesta da z" rifiutata (non in RSPAMD_API_ACL)i“Ú Forbidden©Ú status_codeÚdetaili‘Ú UnauthorizedzWWW-AuthenticatezBasic realm="rqwatch-api")rör÷ré)
ÚclientrSrr§r¨r ÚsecretsÚcompare_digestÚusernamer¦rrVr)rñròÚ client_ipÚoks r_Ú_authrÿsÈé€ð(/§~§~�—‘×#Ò#¸2€IØœÓÜ � ‰ �m I ;Ð.PÐQÔRܨ°KÑ@Ð@ô ×Ò˜{×3Ñ3×:Ñ:Ó<¼h¿o¹oÓ>OÓP÷ UÜ × "Ò " ;×#7Ñ#7×#>Ñ#>Ó#@Ä(Ç/Á/ÓBSÓ Tðö ÜØØ!Ø'Ð)DÐEñ
ð
ð ùs‚C5C7z /api/metadata_importer_multipart)Úresponse_class.ÚmetadataÚmessageÚ_cƒóò# •[R"U5nUR 5IShv•N nU(d
[SSS9e[ UR
S5=(d S5n[R"SU5(dSn[UR
S5=(d S 5n[ UR