From ff96be270883600a4b65ca9d8ea22e8fc2824774 Mon Sep 17 00:00:00 2001 From: nahakubuilder Date: Wed, 12 Aug 2026 12:56:22 +0100 Subject: [PATCH] first commit --- .gitignore | 10 + DEPLOY.md | 73 + go.mod | 35 + go.sum | 106 + graphify-out/.graphify_labels.json | 1 + graphify-out/.graphify_python | 1 + graphify-out/.graphify_root | 1 + graphify-out/GRAPH_REPORT.md | 248 + ...58d4047972c3840a19a3615bc59b75aee09f9.json | 1 + ...9912defc72c760460cc7cf04b3278e00f29bc.json | 1 + ...9003c4fed127d81dfd24e183a37567faaea28.json | 1 + ...7240a9effa5da641c768ec5ec73bbe649ec3f.json | 1 + ...f7e8e01560bc79f30b207e2cbf6fc6bf32c3b.json | 1 + ...25973c41bc325456748db03e2f0e7fb4cf6aa.json | 1 + ...e9162d8aacbea7ddabdf63d91b859166d78d4.json | 1 + ...253981ea30a743cc355aa4f05167bfab5723e.json | 1 + ...0d4aeb97e4b0b1eebd4127fc4e3a6be5d4182.json | 1 + ...0574d80fef057854ca253e281c31224311b63.json | 1 + ...9017dba06c64cdc3eb13c09027fee46932a51.json | 1 + ...75e11d7146bda4514e0c4d365f94b2e2a42db.json | 1 + ...6f9d7dbbbe33d626f48a4115bc01438ea1174.json | 1 + ...a656e9661208c833f48a7758ef6f587be9571.json | 1 + ...f1bd5f903f2bb5a1aa1b2a8af45e5a80d98cc.json | 1 + ...c85753464c6302189270afb000a7013b59981.json | 1 + ...fee8583c558b70b4fdeb33e8f6818d4c0cbd3.json | 1 + ...988acbbaf215305f2ea02898430d9d9ce746e.json | 1 + ...5e41ff6c3d05409b9e05ab1e9b028f710e0bd.json | 1 + ...729ddef6479f806a57df02d5f1001c4a5c790.json | 1 + ...7111626591f9f0473d1b7cd63c70c34cce33e.json | 1 + ...49a288f46488423e4c0c762f8f6608ed302c9.json | 1 + ...946220f23d36f547a8c9ef1640e6d373ee842.json | 1 + ...97257019f60de16815b82b8eee236072594d2.json | 1 + ...e4ca682cea39731566f3b95e60aaa99f03969.json | 1 + ...e1647107f549753fd0473126cd000ae147e86.json | 1 + ...1c5ce70867aec6ce9dcff1906a71f09458baf.json | 1 + ...d3ef33e9caab8c665b3cb3efa0d8302793f3d.json | 1 + ...502b05eb8125fa023e7d34803476616f41613.json | 1 + ...414b44850b85732695008f5dd421f5b8bce85.json | 1 + ...e56c15387111cfa964629eed0242e9784c142.json | 1 + ...ccb6f82e2ecbb6d6753850d02351d7623ddeb.json | 1 + ...851120ad30450fdf2d77773069c4a19d74f69.json | 1 + ...4be38dd39f8c6b7dd54e2538deb12fe87e5d9.json | 1 + ...a2c583fff39eb5d581bd83ae8fc8c99280f42.json | 1 + ...10a328eccfa636815f5708ac10cb08ec2fe7c.json | 1 + ...1693ccaa6f73f4b8f52f7e0fbe92125cb5b6f.json | 1 + ...9456f4d82c2cdd299a1a8d597df3cfdf54112.json | 1 + ...c21f4eb06a714315cd691795f2df8dd8a77ed.json | 1 + ...bf787b639fc7d172b62a6f24346e52fafa845.json | 1 + ...0d867a96225ee14a58e7af6c73057365730cb.json | 1 + ...7fa5b3c554539d7c701f297f5a543ed352bfd.json | 1 + ...70bec3ccea33a448e16946757109bc08310e8.json | 1 + ...285c50092e9bba7e5c330daf12e95ff364e6e.json | 1 + ...d77bf4d8e715c67a53ca7b2dea87fbb1d98b6.json | 1 + ...d3fd8e5ceab26ed42b6aab242000005fd4141.json | 1 + ...c8caf68020a8f0a7e38e073cdf81bc6112305.json | 1 + ...199d2922433b7a59a11607ebd6615e090a5fc.json | 1 + ...e041bf0190d0de47e6684213ae5a607076027.json | 1 + ...0c80ce116d1be663250812a802fd499624682.json | 1 + ...5221f5a5fa2b4e852217b3abf2a0bb3b5a496.json | 1 + ...583ce4b469d01fd542623806f2e61775b729a.json | 1 + ...b7f17f50ab1d7fc3cac2fc7973cbb1ed08a06.json | 1 + ...63fbe4dda35aab77229a7282950aa53342e46.json | 1 + ...0ebad1e675f799448de274eea33668230fbbe.json | 1 + graphify-out/cache/stat-index.json | 1 + graphify-out/cost.json | 12 + graphify-out/graph.html | 320 + graphify-out/graph.json | 15027 ++++++++++++++++ graphify-out/manifest.json | 292 + internal/config/config.go | 146 + internal/config/config_test.go | 48 + internal/db/admin_models.go | 32 + internal/db/crud.go | 58 + internal/db/crud_admin.go | 328 + internal/db/crud_counts.go | 19 + internal/db/crud_dkim.go | 86 + internal/db/crud_domains.go | 132 + internal/db/crud_ips.go | 74 + internal/db/crud_logs.go | 125 + internal/db/crud_senders.go | 90 + internal/db/logs.go | 34 + internal/db/models.go | 115 + internal/db/queries.go | 142 + internal/db/schema.go | 190 + internal/dkim/dkim.go | 239 + internal/dkim/dkim_test.go | 78 + internal/relay/log.go | 75 + internal/relay/relay.go | 217 + internal/smtpserver/attachments.go | 109 + internal/smtpserver/auth.go | 101 + internal/smtpserver/headers.go | 207 + internal/smtpserver/headers_test.go | 67 + internal/smtpserver/server.go | 58 + internal/smtpserver/server_test.go | 217 + internal/smtpserver/session.go | 276 + internal/tlsutil/tlsutil.go | 94 + internal/toolbox/toolbox.go | 134 + internal/webui/account.go | 118 + internal/webui/admins.go | 250 + internal/webui/auth.go | 168 + internal/webui/dashboard.go | 103 + internal/webui/dkim.go | 314 + internal/webui/domains.go | 262 + internal/webui/domains_test.go | 28 + internal/webui/embed.go | 10 + internal/webui/flash.go | 49 + internal/webui/ip_whitelist.go | 157 + internal/webui/login.go | 221 + internal/webui/login_test.go | 162 + internal/webui/logs.go | 118 + internal/webui/multitenant_test.go | 269 + internal/webui/render.go | 185 + internal/webui/senders.go | 222 + internal/webui/senders_test.go | 66 + internal/webui/settings.go | 184 + internal/webui/static/css/smtp-management.css | 260 + internal/webui/static/js/dkim-management.js | 266 + internal/webui/static/js/smtp-management.js | 285 + internal/webui/templates/account.html | 135 + internal/webui/templates/add_admin.html | 66 + internal/webui/templates/add_domain.html | 46 + internal/webui/templates/add_ip.html | 99 + internal/webui/templates/add_sender.html | 80 + internal/webui/templates/admins.html | 62 + internal/webui/templates/base.html | 217 + internal/webui/templates/dashboard.html | 184 + internal/webui/templates/dkim.html | 290 + internal/webui/templates/domains.html | 155 + internal/webui/templates/edit_admin.html | 32 + internal/webui/templates/edit_dkim.html | 82 + internal/webui/templates/edit_domain.html | 71 + internal/webui/templates/edit_ip.html | 63 + internal/webui/templates/edit_sender.html | 79 + internal/webui/templates/error.html | 66 + internal/webui/templates/first_login.html | 37 + internal/webui/templates/ips.html | 116 + internal/webui/templates/login.html | 45 + internal/webui/templates/login_mfa.html | 114 + internal/webui/templates/logs.html | 157 + internal/webui/templates/senders.html | 73 + internal/webui/templates/settings.html | 277 + internal/webui/templates/sidebar_email.html | 150 + internal/webui/templates/totp_setup.html | 30 + .../webui/templates/view_message_content.html | 49 + internal/webui/utils.go | 137 + internal/webui/view_message.go | 147 + internal/webui/webauthn.go | 244 + internal/webui/webui.go | 170 + internal/webui/webui_test.go | 215 + main.go | 190 + script_install_service.sh | 234 + script_nginx_setup.sh | 297 + server_data/.gitkeep | 0 ssl_certs/.gitkeep | 0 153 files changed, 27779 insertions(+) create mode 100644 .gitignore create mode 100644 DEPLOY.md create mode 100644 go.mod create mode 100644 go.sum create mode 100644 graphify-out/.graphify_labels.json create mode 100644 graphify-out/.graphify_python create mode 100644 graphify-out/.graphify_root create mode 100644 graphify-out/GRAPH_REPORT.md create mode 100644 graphify-out/cache/ast/v0.9.37/05251c18c30787c8d604a53604a58d4047972c3840a19a3615bc59b75aee09f9.json create mode 100644 graphify-out/cache/ast/v0.9.37/0cc1b8940b22ee0b0015d25c7819912defc72c760460cc7cf04b3278e00f29bc.json create mode 100644 graphify-out/cache/ast/v0.9.37/2cbfa3c216771845653d30fee2e9003c4fed127d81dfd24e183a37567faaea28.json create mode 100644 graphify-out/cache/ast/v0.9.37/2eb9f60a797877a5036bfc46a427240a9effa5da641c768ec5ec73bbe649ec3f.json create mode 100644 graphify-out/cache/ast/v0.9.37/343c952ee4114c9166787cd08cff7e8e01560bc79f30b207e2cbf6fc6bf32c3b.json create mode 100644 graphify-out/cache/ast/v0.9.37/4c8ecc79aca4fd9640c5b9a840125973c41bc325456748db03e2f0e7fb4cf6aa.json create mode 100644 graphify-out/cache/ast/v0.9.37/4cb75c2dac0d659c2e794ce2f75e9162d8aacbea7ddabdf63d91b859166d78d4.json create mode 100644 graphify-out/cache/ast/v0.9.37/4d43f0ffdbc1bfaff9e8878442c253981ea30a743cc355aa4f05167bfab5723e.json create mode 100644 graphify-out/cache/ast/v0.9.37/5418f4925af9f157470f18a7bc90d4aeb97e4b0b1eebd4127fc4e3a6be5d4182.json create mode 100644 graphify-out/cache/ast/v0.9.37/57f7b0fa0147dcad0c34ea666da0574d80fef057854ca253e281c31224311b63.json create mode 100644 graphify-out/cache/ast/v0.9.37/73552cd042316daf4925b63d54e9017dba06c64cdc3eb13c09027fee46932a51.json create mode 100644 graphify-out/cache/ast/v0.9.37/7bbfa1b55787fd0c9bc29b45cca75e11d7146bda4514e0c4d365f94b2e2a42db.json create mode 100644 graphify-out/cache/ast/v0.9.37/8c531e17c84573bd83a67ef3b456f9d7dbbbe33d626f48a4115bc01438ea1174.json create mode 100644 graphify-out/cache/ast/v0.9.37/8d39786cf5b3da3b2a98aa3dc3ba656e9661208c833f48a7758ef6f587be9571.json create mode 100644 graphify-out/cache/ast/v0.9.37/942a2ceeef2447853d96b06f31af1bd5f903f2bb5a1aa1b2a8af45e5a80d98cc.json create mode 100644 graphify-out/cache/ast/v0.9.37/a5649989118c33ca032b514efc2c85753464c6302189270afb000a7013b59981.json create mode 100644 graphify-out/cache/ast/v0.9.37/ad38a35c39e2aa05007ebe74529fee8583c558b70b4fdeb33e8f6818d4c0cbd3.json create mode 100644 graphify-out/cache/ast/v0.9.37/b013764224b9ff43f3703b70a1d988acbbaf215305f2ea02898430d9d9ce746e.json create mode 100644 graphify-out/cache/ast/v0.9.37/bcda078e5fce29334bb7fd3ebfa5e41ff6c3d05409b9e05ab1e9b028f710e0bd.json create mode 100644 graphify-out/cache/ast/v0.9.37/bcf615dd96ae8d600e5bb49d966729ddef6479f806a57df02d5f1001c4a5c790.json create mode 100644 graphify-out/cache/ast/v0.9.37/cb66b7b4567fe8005046435eeb57111626591f9f0473d1b7cd63c70c34cce33e.json create mode 100644 graphify-out/cache/ast/v0.9.37/d02e9085659d7c0ee4ca204b92a49a288f46488423e4c0c762f8f6608ed302c9.json create mode 100644 graphify-out/cache/ast/v0.9.37/d90980483980ea4ae23d9292908946220f23d36f547a8c9ef1640e6d373ee842.json create mode 100644 graphify-out/cache/ast/v0.9.37/e428638c29836f809dc52800b8097257019f60de16815b82b8eee236072594d2.json create mode 100644 graphify-out/cache/ast/v0.9.37/e435f54e2eb7b2b07ba12b6671ce4ca682cea39731566f3b95e60aaa99f03969.json create mode 100644 graphify-out/cache/ast/v0.9.37/e8ad59f7a3fcb4cca8357809ae0e1647107f549753fd0473126cd000ae147e86.json create mode 100644 graphify-out/cache/ast/v0.9.37/eb1f5a98cf68dfd5b4fb5d0b6ac1c5ce70867aec6ce9dcff1906a71f09458baf.json create mode 100644 graphify-out/cache/ast/v0.9.37/f7563fcd503cf1ec30243d80866d3ef33e9caab8c665b3cb3efa0d8302793f3d.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/12f04d6d3301ed5a7cd9cb20b42502b05eb8125fa023e7d34803476616f41613.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/1d7f8154cc86a460d6cc8e0055f414b44850b85732695008f5dd421f5b8bce85.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/2b6adab1eecfb66bce3a0f8c01be56c15387111cfa964629eed0242e9784c142.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/3ebe56d0428ddfb32df5ca9e090ccb6f82e2ecbb6d6753850d02351d7623ddeb.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/4bc821701f9ac50d2bb005557fc851120ad30450fdf2d77773069c4a19d74f69.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/4c0739b37e5f8ed0a36bf32af034be38dd39f8c6b7dd54e2538deb12fe87e5d9.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/5f322a40caf344ac65d921290cda2c583fff39eb5d581bd83ae8fc8c99280f42.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/62fa91c3279485b5a18726c164710a328eccfa636815f5708ac10cb08ec2fe7c.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/77814578c9915effecea5e4a8001693ccaa6f73f4b8f52f7e0fbe92125cb5b6f.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/78e29ce4bc0f115da08230351ff9456f4d82c2cdd299a1a8d597df3cfdf54112.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/79df8711fb8b03d77a33cb9dfbec21f4eb06a714315cd691795f2df8dd8a77ed.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/80207426a564652a2a2e7803663bf787b639fc7d172b62a6f24346e52fafa845.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/8846098c083875993fe8f15817c0d867a96225ee14a58e7af6c73057365730cb.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/8d499361c1003fae2ac64da14c57fa5b3c554539d7c701f297f5a543ed352bfd.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/8ddb7adedab85944270a86583b270bec3ccea33a448e16946757109bc08310e8.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/9af8dd27ccf9b6a86c3bf955b48285c50092e9bba7e5c330daf12e95ff364e6e.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/a35fe477b23ea7ec07f723c1964d77bf4d8e715c67a53ca7b2dea87fbb1d98b6.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/a8a6e7a1611daa37c61bd7abe7cd3fd8e5ceab26ed42b6aab242000005fd4141.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/b0510ba0e02df18d6fd76ea7bcbc8caf68020a8f0a7e38e073cdf81bc6112305.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/bf735e58d2d06d07a1fb9e69169199d2922433b7a59a11607ebd6615e090a5fc.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/d8be084113b7b7300699fcd05bbe041bf0190d0de47e6684213ae5a607076027.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/de14fd2b93326ae56038db511210c80ce116d1be663250812a802fd499624682.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/e3506421d5cc2551db2365558095221f5a5fa2b4e852217b3abf2a0bb3b5a496.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/e58f4f968f97904e313c7324d1e583ce4b469d01fd542623806f2e61775b729a.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/f52a0e077ff24b7a53cf2e16679b7f17f50ab1d7fc3cac2fc7973cbb1ed08a06.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/fa273e21310418c34dc6c5f1b3163fbe4dda35aab77229a7282950aa53342e46.json create mode 100644 graphify-out/cache/semantic/pd5fd89c46bb5/ff652b2cbcadf0dbd6d21f088fc0ebad1e675f799448de274eea33668230fbbe.json create mode 100644 graphify-out/cache/stat-index.json create mode 100644 graphify-out/cost.json create mode 100644 graphify-out/graph.html create mode 100644 graphify-out/graph.json create mode 100644 graphify-out/manifest.json create mode 100644 internal/config/config.go create mode 100644 internal/config/config_test.go create mode 100644 internal/db/admin_models.go create mode 100644 internal/db/crud.go create mode 100644 internal/db/crud_admin.go create mode 100644 internal/db/crud_counts.go create mode 100644 internal/db/crud_dkim.go create mode 100644 internal/db/crud_domains.go create mode 100644 internal/db/crud_ips.go create mode 100644 internal/db/crud_logs.go create mode 100644 internal/db/crud_senders.go create mode 100644 internal/db/logs.go create mode 100644 internal/db/models.go create mode 100644 internal/db/queries.go create mode 100644 internal/db/schema.go create mode 100644 internal/dkim/dkim.go create mode 100644 internal/dkim/dkim_test.go create mode 100644 internal/relay/log.go create mode 100644 internal/relay/relay.go create mode 100644 internal/smtpserver/attachments.go create mode 100644 internal/smtpserver/auth.go create mode 100644 internal/smtpserver/headers.go create mode 100644 internal/smtpserver/headers_test.go create mode 100644 internal/smtpserver/server.go create mode 100644 internal/smtpserver/server_test.go create mode 100644 internal/smtpserver/session.go create mode 100644 internal/tlsutil/tlsutil.go create mode 100644 internal/toolbox/toolbox.go create mode 100644 internal/webui/account.go create mode 100644 internal/webui/admins.go create mode 100644 internal/webui/auth.go create mode 100644 internal/webui/dashboard.go create mode 100644 internal/webui/dkim.go create mode 100644 internal/webui/domains.go create mode 100644 internal/webui/domains_test.go create mode 100644 internal/webui/embed.go create mode 100644 internal/webui/flash.go create mode 100644 internal/webui/ip_whitelist.go create mode 100644 internal/webui/login.go create mode 100644 internal/webui/login_test.go create mode 100644 internal/webui/logs.go create mode 100644 internal/webui/multitenant_test.go create mode 100644 internal/webui/render.go create mode 100644 internal/webui/senders.go create mode 100644 internal/webui/senders_test.go create mode 100644 internal/webui/settings.go create mode 100644 internal/webui/static/css/smtp-management.css create mode 100644 internal/webui/static/js/dkim-management.js create mode 100644 internal/webui/static/js/smtp-management.js create mode 100644 internal/webui/templates/account.html create mode 100644 internal/webui/templates/add_admin.html create mode 100644 internal/webui/templates/add_domain.html create mode 100644 internal/webui/templates/add_ip.html create mode 100644 internal/webui/templates/add_sender.html create mode 100644 internal/webui/templates/admins.html create mode 100644 internal/webui/templates/base.html create mode 100644 internal/webui/templates/dashboard.html create mode 100644 internal/webui/templates/dkim.html create mode 100644 internal/webui/templates/domains.html create mode 100644 internal/webui/templates/edit_admin.html create mode 100644 internal/webui/templates/edit_dkim.html create mode 100644 internal/webui/templates/edit_domain.html create mode 100644 internal/webui/templates/edit_ip.html create mode 100644 internal/webui/templates/edit_sender.html create mode 100644 internal/webui/templates/error.html create mode 100644 internal/webui/templates/first_login.html create mode 100644 internal/webui/templates/ips.html create mode 100644 internal/webui/templates/login.html create mode 100644 internal/webui/templates/login_mfa.html create mode 100644 internal/webui/templates/logs.html create mode 100644 internal/webui/templates/senders.html create mode 100644 internal/webui/templates/settings.html create mode 100644 internal/webui/templates/sidebar_email.html create mode 100644 internal/webui/templates/totp_setup.html create mode 100644 internal/webui/templates/view_message_content.html create mode 100644 internal/webui/utils.go create mode 100644 internal/webui/view_message.go create mode 100644 internal/webui/webauthn.go create mode 100644 internal/webui/webui.go create mode 100644 internal/webui/webui_test.go create mode 100644 main.go create mode 100755 script_install_service.sh create mode 100644 script_nginx_setup.sh create mode 100644 server_data/.gitkeep create mode 100644 ssl_certs/.gitkeep diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..05cf2e3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +/mailgoserver +settings.ini +*.db +*.crt +*.key +tests/ + +.claude/ + +go.sum \ No newline at end of file diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..22cb008 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,73 @@ +# Deploying mailgoserver + +## Build + +```bash +cd mailgoserver +go build -o mailgoserver . +``` + +One static binary — no venv, no `pip install`, no gunicorn. + +## Bind ports 25/587 without root + +```bash +sudo setcap 'cap_net_bind_service=+ep' ./mailgoserver +``` + +Same purpose as `script_setup_py_environment.sh`'s `setcap` step on the Python venv, applied to the compiled binary instead. + +## systemd (unified process) + +The Go binary runs the SMTP listeners and the web UI in one process (no GIL, so no +need to split them into separate services the way `script_install_service.sh` split +`pymta-smtp.service` / `pymta-web.service` for the Python version). One unit is enough: + +```ini +[Unit] +Description=mailgoserver (SMTP + web admin) +After=network.target + +[Service] +Type=simple +WorkingDirectory=/opt/mailgoserver +ExecStart=/opt/mailgoserver/mailgoserver --host 127.0.0.1 --port 5000 +Restart=always +RestartSec=5 +AmbientCapabilities=CAP_NET_BIND_SERVICE +CapabilityBoundingSet=CAP_NET_BIND_SERVICE +PrivateTmp=true +ProtectSystem=strict +ReadWritePaths=/opt/mailgoserver +ProtectHome=true + +[Install] +WantedBy=multi-user.target +``` + +If you do want the SMTP and web parts as separate services (matching the Python +split exactly), run two units with `--smtp-only` and `--web-only` respectively — +both flags exist for this. + +## nginx + +No changes needed. `script_nginx_setup.sh` reverse-proxies to `http://127.0.0.1:5000` +and terminates its own TLS for the web UI — mailgoserver listens on the same host:port +by default, so the existing nginx config works unmodified. The SMTP TLS listener still +consumes `ssl_certs/server.crt`/`server.key`, same as before. + +## Admin dashboard login + +First run seeds one account: username `admin`, password `Password123!`. Logging in +with it immediately forces a username + password change before anything else in the +dashboard is reachable — the default credentials can never be left in place. + +Optional second factors, enabled per-account from **Account** in the sidebar: +- **Authenticator app (TOTP)** — works anywhere, no extra config. +- **Passkeys / security keys (WebAuthn)** — bound to the exact origin the dashboard + is served at. Set `[Auth] rp_id` / `rp_origin` in `settings.ini` to your real public + domain before registering passkeys in production (e.g. `rp_id = mail.example.com`, + `rp_origin = https://mail.example.com`). The defaults (`localhost` / + `http://localhost:5000`) only work for local testing — WebAuthn requires either + HTTPS or the literal host `localhost`, so passkeys need the nginx+TLS setup above + to work behind a real domain. diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..3eaee1a --- /dev/null +++ b/go.mod @@ -0,0 +1,35 @@ +module mailgoserver + +go 1.26.4 + +require ( + github.com/emersion/go-msgauth v0.7.0 + github.com/emersion/go-sasl v0.0.0-20241020182733-b788ff22d5a6 + github.com/emersion/go-smtp v0.24.0 + golang.org/x/crypto v0.55.0 + gopkg.in/ini.v1 v1.67.3 + modernc.org/sqlite v1.56.0 +) + +require ( + github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/fxamacker/cbor/v2 v2.9.2 // indirect + github.com/go-viper/mapstructure/v2 v2.5.0 // indirect + github.com/go-webauthn/webauthn v0.17.4 // indirect + github.com/go-webauthn/x v0.2.6 // indirect + github.com/golang-jwt/jwt/v5 v5.3.1 // indirect + github.com/google/go-tpm v0.9.8 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/mattn/go-isatty v0.0.24 // indirect + github.com/ncruces/go-strftime v1.0.0 // indirect + github.com/philhofer/fwd v1.2.0 // indirect + github.com/pquerna/otp v1.5.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/tinylib/msgp v1.6.4 // indirect + github.com/x448/float16 v0.8.4 // indirect + golang.org/x/sys v0.47.0 // indirect + modernc.org/libc v1.74.4 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.11.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..9df05c8 --- /dev/null +++ b/go.sum @@ -0,0 +1,106 @@ +github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI= +github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/emersion/go-message v0.18.1/go.mod h1:XpJyL70LwRvq2a8rVbHXikPgKj8+aI0kGdHlg16ibYA= +github.com/emersion/go-milter v0.4.1/go.mod h1:erCQVl0mH4SX9jEvwe+wyndit0rQtmvMLH86V6NGtkI= +github.com/emersion/go-msgauth v0.7.0 h1:vj2hMn6KhFtW41kshIBTXvp6KgYSqpA/ZN9Pv4g1INc= +github.com/emersion/go-msgauth v0.7.0/go.mod h1:mmS9I6HkSovrNgq0HNXTeu8l3sRAAuQ9RMvbM4KU7Ck= +github.com/emersion/go-sasl v0.0.0-20241020182733-b788ff22d5a6 h1:oP4q0fw+fOSWn3DfFi4EXdT+B+gTtzx8GC9xsc26Znk= +github.com/emersion/go-sasl v0.0.0-20241020182733-b788ff22d5a6/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= +github.com/emersion/go-smtp v0.24.0 h1:g6AfoF140mvW0vLNPD/LuCBLEAdlxOjIXqbIkJIS6Wk= +github.com/emersion/go-smtp v0.24.0/go.mod h1:ZtRRkbTyp2XTHCA+BmyTFTrj8xY4I+b4McvHxCU2gsQ= +github.com/fxamacker/cbor/v2 v2.9.2 h1:X4Ksno9+x3cz0TZv69ec1hxP/+tymuR8PXQJyDwfh78= +github.com/fxamacker/cbor/v2 v2.9.2/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= +github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= +github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-webauthn/webauthn v0.17.4 h1:KFTSz3R2RYDiUn/0cDi3XTJgFenSG74eKTTHlqWhlxk= +github.com/go-webauthn/webauthn v0.17.4/go.mod h1:pZk63EE/BdztlmyS4Yc+9H5g4a8blNlbtGmdHQHbZX8= +github.com/go-webauthn/x v0.2.6 h1:TEyDuQAIiEgYpx60nKiBJIX/5nSUC8LxNbH+uf5U9uk= +github.com/go-webauthn/x v0.2.6/go.mod h1:45bA7YEqyQhRcQJ/TiBb46Ww8yqHBGvgEhQ3WWF0aDo= +github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY= +github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/google/go-tpm v0.9.8 h1:slArAR9Ft+1ybZu0lBwpSmpwhRXaa85hWtMinMyRAWo= +github.com/google/go-tpm v0.9.8/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= +github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3 h1:LMLX+LgTNWpfvCBdFebv6EsYotImrt/Ppc5cXIriCSo= +github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3/go.mod h1:jl5iWTm0/hd5PjEYEOuwAJ57L/CibdZfrqZ5XA5GrCk= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/mattn/go-isatty v0.0.24 h1:tGZZoVgT/KiqK1c8ocVLeDS8BSWMRd47J3Lbz7vsReI= +github.com/mattn/go-isatty v0.0.24/go.mod h1:nMCL3Zebbrt45jsMDgnfIwz6ydEQApk5oEI3HqDio6A= +github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= +github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM= +github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pquerna/otp v1.5.0 h1:NMMR+WrmaqXU4EzdGJEE1aUUI0AMRzsp96fFFWNPwxs= +github.com/pquerna/otp v1.5.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/tinylib/msgp v1.6.4 h1:mOwYbyYDLPj35mkA2BjjYejgJk9BuHxDdvRnb6v2ZcQ= +github.com/tinylib/msgp v1.6.4/go.mod h1:RSp0LW9oSxFut3KzESt5Voq4GVWyS+PSulT77roAqEA= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +golang.org/x/crypto v0.55.0 h1:+KWHjbgOaAQ66dh/YlkZKHlz9ZUlq61AFirAR9ntP8M= +golang.org/x/crypto v0.55.0/go.mod h1:uq0V9dE/fzQuJtbnL+2EhWOE63vo164FY8xqEnV9xis= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= +golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.45.0/go.mod h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w= +golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= +golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= +golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/ini.v1 v1.67.3 h1:iM9Lhz5MRSGhHVGGwCuzG9KO8PoirCXj/m/qTmOJJQw= +gopkg.in/ini.v1 v1.67.3/go.mod h1:x/cyOwCgZqOkJoDIJ3c1KNHMo10+nLGAhh+kn3Zizss= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +modernc.org/cc/v4 v4.29.1 h1:MKgdCV3WykTSPqpVrnxdEDS0HEd2FHpKZDzxzU5LyeI= +modernc.org/cc/v4 v4.29.1/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI= +modernc.org/ccgo/v4 v4.34.6 h1:sBgfIwyN0TQ9C5hwIeuqyeAKyMWnbvj2fvpF4L11uzU= +modernc.org/ccgo/v4 v4.34.6/go.mod h1:SZ8YcN9NG7XVsQYdm6jYBvi8PQP1qi+kqB6OhjqI3Fk= +modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM= +modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU= +modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= +modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/gc/v3 v3.1.4 h1:2g65LGVSmFQrXeITAw97x7hCRvZFcyE1uDP+7Vng7JI= +modernc.org/gc/v3 v3.1.4/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= +modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= +modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= +modernc.org/libc v1.74.4 h1:fX1Omw4o2/1C2iRkkIsrQTasJQldLhRmuPreXLoWs9k= +modernc.org/libc v1.74.4/go.mod h1:eeQAS9W3sZeKYMFubydxJpII9ybHWshk+7or7bLG9co= +modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= +modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= +modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= +modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/opt v0.2.0 h1:tGyef5ApycA7FSEOMraay9SaTk5zmbx7Tu+cJs4QKZg= +modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= +modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= +modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= +modernc.org/sqlite v1.56.0 h1:/D8e2RfFqoy/Zc6PuC76U28zFwmI/sYx1Kjm4yEn9e0= +modernc.org/sqlite v1.56.0/go.mod h1:yCJ2cmAaIkHQ25oXWrF8H4O1lIfPYPR26yCEDj2P3pQ= +modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= +modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json new file mode 100644 index 0000000..138bb0e --- /dev/null +++ b/graphify-out/.graphify_labels.json @@ -0,0 +1 @@ +{"0": "DKIM/SPF DNS Management UI", "1": "Web UI Database & Settings Utils", "2": "Admin Template Pages", "3": "App Bootstrap & Domain Models", "4": "DKIM Key Manager", "5": "SMTP Custom Protocol & Controllers", "6": "Sender/IP Authentication Logic", "7": "Models Core & Logging Utils", "8": "Email Relay Delivery", "9": "Unified App Entry Point", "10": "Dashboard & Auth Log Web UI", "11": "IP Whitelist Web UI", "12": "SMTP Handler Message Processing", "13": "Sender Management Web UI", "14": "Domain Management Web UI", "15": "README Unified: Structure & Deployment", "16": "README Unified & Requirements: SMTP/DB Deps", "17": "Manual Testing Docs (swaks/CLI)", "18": "Settings Loader & TLS Utils", "19": "DKIM/Custom Header Models", "20": "Combined Authenticators", "21": "CLI Usage & IP Whitelisting Docs", "22": "Message Viewer Web UI", "23": "DKIM/DNS Dependencies", "24": "README: License & Auth Features", "25": "systemd Install Script", "26": "Auth Order Fix Notes", "27": "Sender Model", "28": "send_email.py Test Script", "29": "SMTP Management JS (Frontend)", "30": "SMTP Handler Module & Message ID Util", "31": "Template Datetime Filter", "32": "Dashboard Route", "33": "nginx Setup Script", "34": "email_server Package Init", "35": "DKIM Management JS (Frontend)", "36": "Python Env Setup Script", "37": "bash_send_email Test Script", "38": "Hello.jpg Test Fixture (Doge Meme)"} \ No newline at end of file diff --git a/graphify-out/.graphify_python b/graphify-out/.graphify_python new file mode 100644 index 0000000..22b67e8 --- /dev/null +++ b/graphify-out/.graphify_python @@ -0,0 +1 @@ +/home/haku/.local/share/uv/tools/graphifyy/bin/python \ No newline at end of file diff --git a/graphify-out/.graphify_root b/graphify-out/.graphify_root new file mode 100644 index 0000000..38c6012 --- /dev/null +++ b/graphify-out/.graphify_root @@ -0,0 +1 @@ +/home/haku/projects/PyMTA-server diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md new file mode 100644 index 0000000..b6ce463 --- /dev/null +++ b/graphify-out/GRAPH_REPORT.md @@ -0,0 +1,248 @@ +# Graph Report - . (2026-08-12) + +## Corpus Check +- Corpus is ~39,032 words - fits in a single context window. You may not need a graph. + +## Summary +- 426 nodes · 861 edges · 39 communities (33 shown, 6 thin omitted) +- Extraction: 92% EXTRACTED · 8% INFERRED · 0% AMBIGUOUS · INFERRED: 71 edges (avg confidence: 0.62) +- Token cost: 243,577 input · 0 output + +## Community Hubs (Navigation) +- DKIM/SPF DNS Management UI +- Web UI Database & Settings Utils +- Admin Template Pages +- App Bootstrap & Domain Models +- DKIM Key Manager +- SMTP Custom Protocol & Controllers +- Sender/IP Authentication Logic +- Models Core & Logging Utils +- Email Relay Delivery +- Unified App Entry Point +- Dashboard & Auth Log Web UI +- IP Whitelist Web UI +- SMTP Handler Message Processing +- Sender Management Web UI +- Domain Management Web UI +- README Unified: Structure & Deployment +- README Unified & Requirements: SMTP/DB Deps +- Manual Testing Docs (swaks/CLI) +- Settings Loader & TLS Utils +- DKIM/Custom Header Models +- Combined Authenticators +- CLI Usage & IP Whitelisting Docs +- Message Viewer Web UI +- DKIM/DNS Dependencies +- README: License & Auth Features +- systemd Install Script +- Auth Order Fix Notes +- Sender Model +- send_email.py Test Script +- SMTP Management JS (Frontend) +- SMTP Handler Module & Message ID Util +- Template Datetime Filter +- Dashboard Route +- nginx Setup Script +- email_server Package Init +- DKIM Management JS (Frontend) +- Python Env Setup Script +- bash_send_email Test Script +- Hello.jpg Test Fixture (Doge Meme) + +## God Nodes (most connected - your core abstractions) +1. `DKIMManager` - 34 edges +2. `load_settings()` - 22 edges +3. `get_logger()` - 21 edges +4. `Domain` - 20 edges +5. `EmailLog` - 20 edges +6. `SMTPServerApp` - 19 edges +7. `EmailRelay` - 17 edges +8. `Sender` - 17 edges +9. `EnhancedCustomSMTPHandler` - 17 edges +10. `Base Layout Template` - 17 edges + +## Surprising Connections (you probably didn't know these) +- `PyMTA-server README` --semantically_similar_to--> `SMTP Server with Web Management Frontend README (legacy layout)` [INFERRED] [semantically similar] + README.md → README_unified.md +- `DKIM Support (auto key gen + signing)` --conceptually_related_to--> `DKIM Key Generation (manual test setup)` [INFERRED] + README_unified.md → tests/run_tests_manually.md +- `Lorem Ipsum Test Email Body` --semantically_similar_to--> `PDF Test Document (French Lipsum)` [INFERRED] [semantically similar] + tests/email_body.txt → tests/pdf_test_1.pdf +- `SMTPServerApp` --uses--> `DKIMManager` [INFERRED] + app.py → email_server/dkim_manager.py +- `SMTPServerApp` --uses--> `AuthLog` [INFERRED] + app.py → email_server/models.py + +## Import Cycles +- None detected. + +## Hyperedges (group relationships) +- **Domain CRUD Flow** — email_server_server_web_ui_templates_add_domain_page, email_server_server_web_ui_templates_domains_page, email_server_server_web_ui_templates_edit_domain_page, email_server_server_web_ui_templates_domains_domain_model [INFERRED 0.80] +- **DKIM/SPF DNS Verification Flow** — email_server_server_web_ui_templates_dkim_page, email_server_server_web_ui_templates_edit_dkim_page, email_server_server_web_ui_templates_dkim_dkim_key_model, email_server_server_web_ui_templates_domains_domain_model [INFERRED 0.80] +- **Email Log Message Viewer Flow** — email_server_server_web_ui_templates_logs_page, email_server_server_web_ui_templates_view_message_content_page, email_server_server_web_ui_templates_logs_email_log_model, email_server_server_web_ui_templates_view_message_content_attachment_model [INFERRED 0.80] +- **SMTP Authentication & IP Whitelist Flow** — tests_note_authentication_order_fix_authentication_order_fix, tests_note_authentication_order_fix_ip_whitelisting_fallback, readme_unified_user_authentication, readme_unified_ip_whitelisting [INFERRED 0.85] +- **Manual SMTP Testing Workflow** — tests_general_cli_usage_swaks, tests_run_tests_manually_swaks, tests_email_body_lorem_ipsum, tests_general_cli_usage_send_email_script [INFERRED 0.80] +- **DKIM Key Generation & DNS Verification Flow** — readme_unified_dkim_support, readme_unified_dns_configuration, tests_general_cli_usage_dkim_key_management, tests_run_tests_manually_dkim_key_generation [INFERRED 0.85] + +## Communities (39 total, 6 thin omitted) + +### Community 0 - "DKIM/SPF DNS Management UI" +Cohesion: 0.11 +Nodes (30): check_dkim_dns(), check_spf_dns(), create_dkim(), dkim_list(), edit_dkim(), route, DKIM blueprint for the SMTP server web UI. This module provides DKIM key…, Regenerate DKIM key for domain. (+22 more) + +### Community 1 - "Web UI Database & Settings Utils" +Cohesion: 0.10 +Nodes (28): import_or_install_driver(), install_package(), Database utilities for the SMTP server., Install a Python package using pip. Args: package_name: Name of the package to…, Import database driver, installing it if necessary. Args: db_type: Type of…, Test if a database connection can be established. Args: url: Database…, test_database_connection(), allowed_file() (+20 more) + +### Community 2 - "Admin Template Pages" +Cohesion: 0.23 +Nodes (27): Add Domain Page, Add IP Whitelist Page, Add Sender Page, check_health() Service Status Pattern, Base Layout Template, Dashboard Page, DKIM Key Data Model, DKIM Key Management Page (+19 more) + +### Community 3 - "App Bootstrap & Domain Models" +Cohesion: 0.15 +Nodes (15): Initialize the database with sample data for testing, create_tables(), Domain, Check if this IP can send emails for the given domain. Args: domain_name: The…, Create all database tables using ESRV schema., Domain model with enhanced security features., IP whitelist model with domain-specific authentication. Security feature: - IPs…, WhitelistedIP (+7 more) + +### Community 4 - "DKIM Key Manager" +Cohesion: 0.12 +Nodes (11): DKIMManager, Get the active DKIM key for a domain (only one active per selector)., Get DKIM private key for a domain., Get DKIM public key DNS record for a domain (active key only)., Sign email content with DKIM. Only add one DKIM header, after all modifications., Manages DKIM keys and email signing., Initialize DKIM keys for existing domains that don't have them., Initialize DKIMManager with a selector. If not provided, use random. (+3 more) + +### Community 5 - "SMTP Custom Protocol & Controllers" +Cohesion: 0.13 +Nodes (11): AIOSMTP, Controller, EmailAttachment, Attachment metadata and file path, linked to EmailLog., CustomSMTP, PlainController, Custom SMTP class with configurable banner and secure AUTH handling., Override AUTH command to close connection after failed authentication. (+3 more) + +### Community 6 - "Sender/IP Authentication Logic" +Cohesion: 0.14 +Nodes (15): get_authenticated_domain_id(), Enhanced authentication modules for the SMTP server using ESRV schema. Security…, Check if IP can authenticate for a specific domain. Args: ip_address: Client IP…, Validate if the authenticated entity can send as the specified from address.…, Get the domain ID for the authenticated entity. Args: session: SMTP session…, validate_sender_authorization(), check_password(), get_domain_by_name() (+7 more) + +### Community 7 - "Models Core & Logging Utils" +Cohesion: 0.16 +Nodes (13): Email relay functionality for the SMTP server., EmailRecipientLog, log_email(), Database models for the SMTP server using ESRV schema. Enhanced security…, Log for each recipient of an email, including status and error details., Log an email send attempt. Args: from_address: Sender email to_address:…, ensure_folder_exists(), get_logger() (+5 more) + +### Community 8 - "Email Relay Delivery" +Cohesion: 0.15 +Nodes (9): EmailRelay, Relay email to recipients' mail servers asynchronously with encryption.…, Handles relaying emails to recipient mail servers., Synchronous wrapper for relay_email_async for compatibility., Modify email headers to set To and Cc fields, preserving original structure for…, Log email activity to database, including per-recipient results., Prepare a copy of the email for a specific recipient without modifying original…, EmailLog (+1 more) + +### Community 9 - "Unified App Entry Point" +Cohesion: 0.18 +Nodes (8): main(), Start the SMTP server in async context, Run the unified application, Check the health of all services, Unified SMTP Server and Web Frontend Application, Convert relative database URL to absolute path for Flask-SQLAlchemy, Create and configure the Flask application, SMTPServerApp + +### Community 10 - "Dashboard & Auth Log Web UI" +Cohesion: 0.19 +Nodes (9): AuthLog, Authentication log model for security auditing., Dashboard routes for the SMTP server web UI. This module provides the main…, SMTP Server Web UI Package This package provides a web interface for managing…, logs(), route, Logs blueprint for the SMTP server web UI. This module provides email and…, Display email and authentication logs. (+1 more) + +### Community 11 - "IP Whitelist Web UI" +Cohesion: 0.20 +Nodes (13): add_ip(), disable_ip(), edit_ip(), enable_ip(), ips_list(), route, IP Whitelist blueprint for the SMTP server web UI. This module provides IP…, Enable whitelisted IP. (+5 more) + +### Community 12 - "SMTP Handler Message Processing" +Cohesion: 0.18 +Nodes (8): EnhancedCustomSMTPHandler, Ensure all required email headers are present and properly formatted., Handle incoming email data with improved header management and logging., Handle RCPT TO command - validate recipients., Handle MAIL FROM command with enhanced sender validation. Security Features: -…, Generate the storage path for attachments based on sender domain,…, Get the correct content type for a file, trying multiple methods., Enhanced custom SMTP handler with security controls. + +### Community 13 - "Sender Management Web UI" +Cohesion: 0.24 +Nodes (12): hash_password(), Hash a password using bcrypt., add_sender(), delete_sender(), edit_sender(), enable_sender(), route, Senders blueprint for the SMTP server web UI. This module provides sender… (+4 more) + +### Community 14 - "Domain Management Web UI" +Cohesion: 0.24 +Nodes (11): add_domain(), delete_domain(), domains_list(), edit_domain(), route, Domains blueprint for the SMTP server web UI. This module provides domain…, Toggle domain active status (Enable/Disable)., Permanently remove domain and all associated data. (+3 more) + +### Community 15 - "README Unified: Structure & Deployment" +Cohesion: 0.17 +Nodes (12): REST API Endpoints (/health, /api/server/status, /api/server/restart), SMTP Server with Web Management Frontend README (legacy layout), Domain Management, Email Relay (forward to external servers), Project Structure (app.py, main.py, email_server/, email_frontend/), Nginx Reverse Proxy, settings.ini Configuration File, Systemd Service (production deployment) (+4 more) + +### Community 16 - "README Unified & Requirements: SMTP/DB Deps" +Cohesion: 0.20 +Nodes (12): SQLite Database Schema (domains, users, whitelisted_ips, dkim_keys, email_logs, auth_logs, custom_headers), Full SMTP Server (send/receive with auth), aiosmtpd (dependency), aiosmtplib (dependency), Unified Requirements File, Flask-SQLAlchemy (dependency), Jinja2 (dependency), python-dotenv (dependency) (+4 more) + +### Community 17 - "Manual Testing Docs (swaks/CLI)" +Cohesion: 0.18 +Nodes (11): Lorem Ipsum Test Email Body, tests/send_email.py script, swaks (SMTP test CLI tool), PDF Test Document (French Lipsum), Beach Pebbles Photo (embedded image), Check DB Logs (sqlite3 email_logs query), DKIM Key Generation (manual test setup), Manual Test Setup Instructions (+3 more) + +### Community 18 - "Settings Loader & TLS Utils" +Cohesion: 0.31 +Nodes (8): ConfigParser, generate_settings_ini(), load_settings(), Settings loader for the SMTP server. Automatically generates settings.ini with…, Generate settings.ini with default values and comments if it does not exist., Load settings from settings.ini, generating it if needed., TLS utilities for the SMTP server., Path + +### Community 19 - "DKIM/Custom Header Models" +Cohesion: 0.25 +Nodes (6): Base, DKIM key management and email signing functionality., CustomHeader, DKIMKey, DKIM key model for email signing., Custom header model for domain-specific email headers. + +### Community 20 - "Combined Authenticators" +Cohesion: 0.33 +Nodes (6): EnhancedAuthenticator, EnhancedIPAuthenticator, Enhanced username/password authenticator with sender validation. Features: -…, Enhanced IP-based authenticator with domain-specific authorization. Features: -…, EnhancedCombinedAuthenticator, Enhanced combined authenticator with sender validation support. Features: -… + +### Community 21 - "CLI Usage & IP Whitelisting Docs" +Cohesion: 0.22 +Nodes (9): Sender IP Whitelisting, IP Whitelisting (auth-free sending), Direct sqlite3 DB Access/Queries, CLI/Web Usage Guide (tests), Domain Management (web UI: /email/domains), IP Whitelist Management (web UI: /email/ips), User Management (web UI: /email/users), Web Interface Setup Workflow (dev/prod) (+1 more) + +### Community 22 - "Message Viewer Web UI" +Cohesion: 0.38 +Nodes (6): delete_attachment(), download_attachment(), route, Route to view full email message content if stored., View the full message content for an email log if stored., view_message_content() + +### Community 23 - "DKIM/DNS Dependencies" +Cohesion: 0.29 +Nodes (7): DKIM (planned feature), DKIM Support (auto key gen + signing), DNS Configuration (DKIM/SPF/MX records), cryptography (dependency), dkimpy (dependency), dnspython (dependency), DKIM Key Management (web UI: /email/dkim) + +### Community 24 - "README: License & Auth Features" +Cohesion: 0.29 +Nodes (7): PyMTA-server README, AGPL-3.0 License, SPF DNS Records (delivery success), Optional Storing of Sent Emails, MIT License, Username/Password Authentication, gunicorn (dependency) + +### Community 25 - "systemd Install Script" +Cohesion: 0.52 +Nodes (6): remove_system_services(), remove_user_services(), script_install_service.sh script, usage(), write_system_services(), write_user_services() + +### Community 26 - "Auth Order Fix Notes" +Cohesion: 0.33 +Nodes (6): Per-user/per-domain User Authentication, bcrypt (dependency), AuthResult / email_server/auth.py __call__ (code snippet), AUTH Advertised on Both Plain SMTP and TLS Ports, SMTP Authentication Order Fix (June 2025), STARTTLS Not Advertised (direct TLS only) + +### Community 27 - "Sender Model" +Cohesion: 0.40 +Nodes (3): Sender model with enhanced authentication controls. Security features: -…, Check if this sender can send emails as the given from_address. Args:…, Sender + +### Community 28 - "send_email.py Test Script" +Cohesion: 0.40 +Nodes (4): Send a test email using plain SMTP., Send a test email using STARTTLS., send_test_email(), send_test_email_tls() + +### Community 29 - "SMTP Management JS (Frontend)" +Cohesion: 0.50 +Nodes (3): DNSVerification, FormValidation, SMTPManagement + +### Community 30 - "SMTP Handler Module & Message ID Util" +Cohesion: 0.50 +Nodes (3): Enhanced SMTP handler for processing incoming emails with security controls.…, generate_message_id(), Generate a consistent Message-ID for both email headers and database storage.… + +### Community 31 - "Template Datetime Filter" +Cohesion: 0.67 +Nodes (3): app_template_filter, format_datetime(), Format datetime with the correct timezone from settings or argument. + +### Community 32 - "Dashboard Route" +Cohesion: 0.67 +Nodes (3): dashboard(), route, Main dashboard showing overview of the email server. + +## Ambiguous Edges - Review These +- `Edit Domain Page` → `Sidebar Navigation Partial` [AMBIGUOUS] + email_server/server_web_ui/templates/edit_domain.html · relation: references +- `AGPL-3.0 License` → `MIT License` [AMBIGUOUS] + README.md · relation: conceptually_related_to + +## Knowledge Gaps +- **36 isolated node(s):** `DKIMManagement`, `SMTPManagement`, `DNSVerification`, `FormValidation`, `script_nginx_setup.sh script` (+31 more) + These have ≤1 connection - possible missing edges or undocumented components. +- **6 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. + +## Suggested Questions +_Questions this graph is uniquely positioned to answer:_ + +- **What is the exact relationship between `Edit Domain Page` and `Sidebar Navigation Partial`?** + _Edge tagged AMBIGUOUS (relation: references) - confidence is low._ +- **What is the exact relationship between `AGPL-3.0 License` and `MIT License`?** + _Edge tagged AMBIGUOUS (relation: conceptually_related_to) - confidence is low._ +- **Why does `DKIMManager` connect `DKIM Key Manager` to `DKIM/SPF DNS Management UI`, `App Bootstrap & Domain Models`, `SMTP Custom Protocol & Controllers`, `Unified App Entry Point`, `SMTP Handler Message Processing`, `Domain Management Web UI`, `DKIM/Custom Header Models`, `Combined Authenticators`, `SMTP Handler Module & Message ID Util`?** + _High betweenness centrality (0.098) - this node is a cross-community bridge._ +- **Why does `load_settings()` connect `Settings Loader & TLS Utils` to `DKIM/SPF DNS Management UI`, `Web UI Database & Settings Utils`, `App Bootstrap & Domain Models`, `Models Core & Logging Utils`, `Unified App Entry Point`, `Dashboard & Auth Log Web UI`, `DKIM/Custom Header Models`, `SMTP Handler Module & Message ID Util`, `Template Datetime Filter`?** + _High betweenness centrality (0.041) - this node is a cross-community bridge._ +- **Why does `EmailRelay` connect `Email Relay Delivery` to `SMTP Custom Protocol & Controllers`, `Models Core & Logging Utils`, `SMTP Handler Message Processing`, `Combined Authenticators`, `SMTP Handler Module & Message ID Util`?** + _High betweenness centrality (0.036) - this node is a cross-community bridge._ +- **Are the 9 inferred relationships involving `DKIMManager` (e.g. with `SMTPServerApp` and `CustomHeader`) actually correct?** + _`DKIMManager` has 9 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 4 inferred relationships involving `Domain` (e.g. with `SMTPServerApp` and `EnhancedAuthenticator`) actually correct?** + _`Domain` has 4 INFERRED edges - model-reasoned connections that need verification._ \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/05251c18c30787c8d604a53604a58d4047972c3840a19a3615bc59b75aee09f9.json b/graphify-out/cache/ast/v0.9.37/05251c18c30787c8d604a53604a58d4047972c3840a19a3615bc59b75aee09f9.json new file mode 100644 index 0000000..5fcc0f2 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/05251c18c30787c8d604a53604a58d4047972c3840a19a3615bc59b75aee09f9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_senders_py", "label": "senders.py", "file_type": "code", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L1"}, {"id": "route", "label": "route", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/server_web_ui/senders.py"}, {"id": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "label": "senders_list()", "file_type": "code", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L22", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "label": "add_sender()", "file_type": "code", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L32", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "label": "delete_sender()", "file_type": "code", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L85", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "label": "enable_sender()", "file_type": "code", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L110", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "label": "remove_sender()", "file_type": "code", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L135", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "label": "edit_sender()", "file_type": "code", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L160", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_senders_rationale_1", "label": "Senders blueprint for the SMTP server web UI. This module provides sender\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_senders_rationale_86", "label": "Disable sender (soft delete).", "file_type": "rationale", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L86"}, {"id": "$graphify-root$_email_server_server_web_ui_senders_rationale_136", "label": "Permanently remove sender.", "file_type": "rationale", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L136"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "flask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "bcrypt", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "$graphify-root$_email_server_server_web_ui_routes_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L16", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/routes.py"}, {"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L21", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L31", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L32", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L84", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L85", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L109", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L110", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L134", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L135", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L159", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_senders_py", "target": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L160", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_senders_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_rationale_86", "target": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L86", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_senders_rationale_136", "target": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L136", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L24", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L26", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L26", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L26"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L26", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L26"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L26"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L27", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_senders_list", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L29", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L34", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L36", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L36", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L36", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L36"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "lower", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L39", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L39", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L39", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L40", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L40", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L41", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "int", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L41"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L42", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L43", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L46", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L47", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L47", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L51", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L52", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L52", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "first", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L55", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L55", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L55", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L55"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L57", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L58", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L58", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "Sender", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L61", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "hash_password", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L63", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "add", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L68", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L69", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L71", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L72", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L72", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L74", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L77", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L78", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L79", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L79"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L80", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L80", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_add_sender", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L82", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L87", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L89", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L89", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L89"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L91", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L92", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L92", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L96", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L98", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L99", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L99", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L102", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L103", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L104", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L104"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L105", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L105", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_delete_sender", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L107", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L112", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L114", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L114", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L114"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L116", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L117", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L117", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L121", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L123", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L124", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L124", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L127", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L128", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L129", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L129"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L130", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L130", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_enable_sender", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L132", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L137", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L139", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L139", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L139"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L141", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L142", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L142", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "delete", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L145", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L146", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L148", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L149", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L149", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L152", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L153", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L154", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L154"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L155", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L155", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_remove_sender", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L157", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L162", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L164", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L164", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L164"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L166", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L167", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L167", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L169", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L169", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L169", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L169"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "lower", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L172", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L172", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L172", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L173", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L173", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L174", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "int", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L174"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L175", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L176", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L179", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L180", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L180", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "split", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L183", "receiver": "email"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L184", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L185", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L185", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "first", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L188", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L188", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L188"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L193", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L194", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L194", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "hash_password", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L204", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L206", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L208", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L209", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L209", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L211", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L214", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L215", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L216", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/senders.py", "source_location": "L216"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L217", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L217", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_senders_edit_sender", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/senders.py", "source_location": "L219", "receiver": "session"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/0cc1b8940b22ee0b0015d25c7819912defc72c760460cc7cf04b3278e00f29bc.json b/graphify-out/cache/ast/v0.9.37/0cc1b8940b22ee0b0015d25c7819912defc72c760460cc7cf04b3278e00f29bc.json new file mode 100644 index 0000000..0c7aceb --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/0cc1b8940b22ee0b0015d25c7819912defc72c760460cc7cf04b3278e00f29bc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_app_py", "label": "app.py", "file_type": "code", "source_file": "app.py", "source_location": "L1"}, {"id": "$graphify-root$_app_smtpserverapp", "label": "SMTPServerApp", "file_type": "code", "source_file": "app.py", "source_location": "L44", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_app_smtpserverapp_init", "label": ".__init__()", "file_type": "code", "source_file": "app.py", "source_location": "L47", "_callable": true}, {"id": "$graphify-root$_app_smtpserverapp_get_absolute_database_url", "label": "._get_absolute_database_url()", "file_type": "code", "source_file": "app.py", "source_location": "L56", "_callable": true}, {"id": "$graphify-root$_app_smtpserverapp_create_flask_app", "label": ".create_flask_app()", "file_type": "code", "source_file": "app.py", "source_location": "L74", "_callable": true}, {"id": "$graphify-root$_app_smtpserverapp_init_sample_data", "label": ".init_sample_data()", "file_type": "code", "source_file": "app.py", "source_location": "L153", "_callable": true}, {"id": "$graphify-root$_app_smtpserverapp_start_smtp_server", "label": ".start_smtp_server()", "file_type": "code", "source_file": "app.py", "source_location": "L228", "_callable": true}, {"id": "$graphify-root$_app_smtpserverapp_run_smtp_server", "label": ".run_smtp_server()", "file_type": "code", "source_file": "app.py", "source_location": "L238", "_callable": true}, {"id": "$graphify-root$_app_smtpserverapp_run", "label": ".run()", "file_type": "code", "source_file": "app.py", "source_location": "L267", "_callable": true}, {"id": "$graphify-root$_app_smtpserverapp_check_health", "label": ".check_health()", "file_type": "code", "source_file": "app.py", "source_location": "L319", "_callable": true}, {"id": "$graphify-root$_app_main", "label": "main()", "file_type": "code", "source_file": "app.py", "source_location": "L356", "_callable": true}, {"id": "$graphify-root$_app_rationale_45", "label": "Unified SMTP Server and Web Frontend Application", "file_type": "rationale", "source_file": "app.py", "source_location": "L45"}, {"id": "$graphify-root$_app_rationale_57", "label": "Convert relative database URL to absolute path for Flask-SQLAlchemy", "file_type": "rationale", "source_file": "app.py", "source_location": "L57"}, {"id": "$graphify-root$_app_rationale_75", "label": "Create and configure the Flask application", "file_type": "rationale", "source_file": "app.py", "source_location": "L75"}, {"id": "$graphify-root$_app_rationale_154", "label": "Initialize the database with sample data for testing", "file_type": "rationale", "source_file": "app.py", "source_location": "L154"}, {"id": "$graphify-root$_app_rationale_229", "label": "Start the SMTP server in async context", "file_type": "rationale", "source_file": "app.py", "source_location": "L229"}, {"id": "$graphify-root$_app_rationale_268", "label": "Run the unified application", "file_type": "rationale", "source_file": "app.py", "source_location": "L268"}, {"id": "$graphify-root$_app_rationale_320", "label": "Check the health of all services", "file_type": "rationale", "source_file": "app.py", "source_location": "L320"}], "edges": [{"source": "$graphify-root$_app_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "threading", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "signal", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "argparse", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "zoneinfo", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L23", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "flask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L24", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "flask_sqlalchemy", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "flask_migrate", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L26", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L27", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "email_server_server_runner", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L34", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "email_server_settings_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L35", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L36", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "email_server_dkim_manager", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L37", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "email_server_server_web_ui_routes", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L40", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "$graphify-root$_app_smtpserverapp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L44", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp", "target": "$graphify-root$_app_smtpserverapp_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L47", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp", "target": "$graphify-root$_app_smtpserverapp_get_absolute_database_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L56", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp", "target": "$graphify-root$_app_smtpserverapp_create_flask_app", "relation": "method", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L74", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp", "target": "$graphify-root$_app_smtpserverapp_init_sample_data", "relation": "method", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L153", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp", "target": "$graphify-root$_app_smtpserverapp_start_smtp_server", "relation": "method", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L228", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp", "target": "$graphify-root$_app_smtpserverapp_run_smtp_server", "relation": "method", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L238", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp", "target": "$graphify-root$_app_smtpserverapp_run", "relation": "method", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L267", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp", "target": "$graphify-root$_app_smtpserverapp_check_health", "relation": "method", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L319", "weight": 1.0}, {"source": "$graphify-root$_app_py", "target": "$graphify-root$_app_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L356", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp_create_flask_app", "target": "$graphify-root$_app_smtpserverapp_get_absolute_database_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L84", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp_run_smtp_server", "target": "$graphify-root$_app_smtpserverapp_start_smtp_server", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L252", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp_run", "target": "$graphify-root$_app_smtpserverapp_create_flask_app", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L272", "weight": 1.0}, {"source": "$graphify-root$_app_smtpserverapp_run", "target": "$graphify-root$_app_smtpserverapp_start_smtp_server", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L290", "weight": 1.0}, {"source": "$graphify-root$_app_main", "target": "$graphify-root$_app_smtpserverapp", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L371", "weight": 1.0}, {"source": "$graphify-root$_app_main", "target": "$graphify-root$_app_smtpserverapp_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L412", "weight": 1.0}, {"source": "$graphify-root$_app_rationale_45", "target": "$graphify-root$_app_smtpserverapp", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L45", "weight": 1.0}, {"source": "$graphify-root$_app_rationale_57", "target": "$graphify-root$_app_smtpserverapp_get_absolute_database_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L57", "weight": 1.0}, {"source": "$graphify-root$_app_rationale_75", "target": "$graphify-root$_app_smtpserverapp_create_flask_app", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L75", "weight": 1.0}, {"source": "$graphify-root$_app_rationale_154", "target": "$graphify-root$_app_smtpserverapp_init_sample_data", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L154", "weight": 1.0}, {"source": "$graphify-root$_app_rationale_229", "target": "$graphify-root$_app_smtpserverapp_start_smtp_server", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L229", "weight": 1.0}, {"source": "$graphify-root$_app_rationale_268", "target": "$graphify-root$_app_smtpserverapp_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L268", "weight": 1.0}, {"source": "$graphify-root$_app_rationale_320", "target": "$graphify-root$_app_smtpserverapp_check_health", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app.py", "source_location": "L320", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_app_smtpserverapp_init", "callee": "load_settings", "is_member_call": false, "source_file": "app.py", "source_location": "L49", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_get_absolute_database_url", "callee": "startswith", "is_member_call": true, "source_file": "app.py", "source_location": "L61", "receiver": "db_url"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_get_absolute_database_url", "callee": "startswith", "is_member_call": true, "source_file": "app.py", "source_location": "L61", "receiver": "db_url"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_get_absolute_database_url", "callee": "dirname", "is_member_call": true, "source_file": "app.py", "source_location": "L69", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_get_absolute_database_url", "callee": "abspath", "is_member_call": true, "source_file": "app.py", "source_location": "L69", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_get_absolute_database_url", "callee": "__file__", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app.py", "source_location": "L69"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_get_absolute_database_url", "callee": "join", "is_member_call": true, "source_file": "app.py", "source_location": "L70", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "Flask", "is_member_call": false, "source_file": "app.py", "source_location": "L76", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "__name__", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app.py", "source_location": "L76"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "update", "is_member_call": true, "source_file": "app.py", "source_location": "L81", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "get", "is_member_call": true, "source_file": "app.py", "source_location": "L82", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "SQLAlchemy", "is_member_call": false, "source_file": "app.py", "source_location": "L91", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "Migrate", "is_member_call": false, "source_file": "app.py", "source_location": "L98", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "app_context", "is_member_call": true, "source_file": "app.py", "source_location": "L101", "receiver": "app"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "create_tables", "is_member_call": false, "source_file": "app.py", "source_location": "L102", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "register_blueprint", "is_member_call": true, "source_file": "app.py", "source_location": "L105", "receiver": "app"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "email_bp", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app.py", "source_location": "L105"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "route", "is_member_call": true, "source_file": "app.py", "source_location": "L108", "receiver": "app"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "errorhandler", "is_member_call": true, "source_file": "app.py", "source_location": "L114", "receiver": "app"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "errorhandler", "is_member_call": true, "source_file": "app.py", "source_location": "L122", "receiver": "app"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_create_flask_app", "callee": "route", "is_member_call": true, "source_file": "app.py", "source_location": "L131", "receiver": "app"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "create_tables", "is_member_call": false, "source_file": "app.py", "source_location": "L157", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "Session", "is_member_call": false, "source_file": "app.py", "source_location": "L158", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "first", "is_member_call": true, "source_file": "app.py", "source_location": "L167", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "filter_by", "is_member_call": true, "source_file": "app.py", "source_location": "L167", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "query", "is_member_call": true, "source_file": "app.py", "source_location": "L167", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app.py", "source_location": "L167"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "Domain", "is_member_call": false, "source_file": "app.py", "source_location": "L169", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "add", "is_member_call": true, "source_file": "app.py", "source_location": "L170", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L171", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "commit", "is_member_call": true, "source_file": "app.py", "source_location": "L173", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "DKIMManager", "is_member_call": false, "source_file": "app.py", "source_location": "L176", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "generate_dkim_keypair", "is_member_call": true, "source_file": "app.py", "source_location": "L178", "receiver": "dkim_manager"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "first", "is_member_call": true, "source_file": "app.py", "source_location": "L186", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "filter_by", "is_member_call": true, "source_file": "app.py", "source_location": "L186", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "query", "is_member_call": true, "source_file": "app.py", "source_location": "L186", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app.py", "source_location": "L186"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "first", "is_member_call": true, "source_file": "app.py", "source_location": "L188", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "filter_by", "is_member_call": true, "source_file": "app.py", "source_location": "L188", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "query", "is_member_call": true, "source_file": "app.py", "source_location": "L188", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app.py", "source_location": "L188"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "Sender", "is_member_call": false, "source_file": "app.py", "source_location": "L190", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "hash_password", "is_member_call": false, "source_file": "app.py", "source_location": "L192", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "add", "is_member_call": true, "source_file": "app.py", "source_location": "L196", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L197", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "first", "is_member_call": true, "source_file": "app.py", "source_location": "L205", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "filter_by", "is_member_call": true, "source_file": "app.py", "source_location": "L205", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "query", "is_member_call": true, "source_file": "app.py", "source_location": "L205", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app.py", "source_location": "L205"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "first", "is_member_call": true, "source_file": "app.py", "source_location": "L207", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "filter_by", "is_member_call": true, "source_file": "app.py", "source_location": "L207", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "query", "is_member_call": true, "source_file": "app.py", "source_location": "L207", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "WhitelistedIP", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app.py", "source_location": "L207"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "WhitelistedIP", "is_member_call": false, "source_file": "app.py", "source_location": "L211", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "add", "is_member_call": true, "source_file": "app.py", "source_location": "L215", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L216", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "commit", "is_member_call": true, "source_file": "app.py", "source_location": "L218", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L219", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "close", "is_member_call": true, "source_file": "app.py", "source_location": "L222", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_init_sample_data", "callee": "error", "is_member_call": true, "source_file": "app.py", "source_location": "L225", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_start_smtp_server", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L231", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_start_smtp_server", "callee": "start_server", "is_member_call": false, "source_file": "app.py", "source_location": "L232", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_start_smtp_server", "callee": "error", "is_member_call": true, "source_file": "app.py", "source_location": "L234", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "new_event_loop", "is_member_call": true, "source_file": "app.py", "source_location": "L240", "receiver": "asyncio"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "set_event_loop", "is_member_call": true, "source_file": "app.py", "source_location": "L241", "receiver": "asyncio"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "Event", "is_member_call": true, "source_file": "app.py", "source_location": "L242", "receiver": "asyncio"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "current_thread", "is_member_call": true, "source_file": "app.py", "source_location": "L245", "receiver": "threading"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "main_thread", "is_member_call": true, "source_file": "app.py", "source_location": "L245", "receiver": "threading"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "add_signal_handler", "is_member_call": true, "source_file": "app.py", "source_location": "L248", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "create_task", "is_member_call": true, "source_file": "app.py", "source_location": "L252", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "run_until_complete", "is_member_call": true, "source_file": "app.py", "source_location": "L253", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "KeyboardInterrupt", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "app.py", "source_location": "L254"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L255", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "error", "is_member_call": true, "source_file": "app.py", "source_location": "L258", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "is_running", "is_member_call": true, "source_file": "app.py", "source_location": "L260", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "stop", "is_member_call": true, "source_file": "app.py", "source_location": "L261", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "close", "is_member_call": true, "source_file": "app.py", "source_location": "L263", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run_smtp_server", "callee": "_exit", "is_member_call": true, "source_file": "app.py", "source_location": "L265", "receiver": "os"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "lower", "is_member_call": true, "source_file": "app.py", "source_location": "L270", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "get", "is_member_call": true, "source_file": "app.py", "source_location": "L270", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L271", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L277", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L280", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L283", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L288", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L292", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L296", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "Thread", "is_member_call": true, "source_file": "app.py", "source_location": "L299", "receiver": "threading"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "start", "is_member_call": true, "source_file": "app.py", "source_location": "L300", "receiver": "smtp_thread"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "sleep", "is_member_call": true, "source_file": "app.py", "source_location": "L304", "receiver": "time"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L309", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L310", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_run", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L315", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "isoformat", "is_member_call": true, "source_file": "app.py", "source_location": "L323", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "now", "is_member_call": true, "source_file": "app.py", "source_location": "L323", "receiver": "datetime"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "ZoneInfo", "is_member_call": false, "source_file": "app.py", "source_location": "L323", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "done", "is_member_call": true, "source_file": "app.py", "source_location": "L325", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "Session", "is_member_call": false, "source_file": "app.py", "source_location": "L334", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "first", "is_member_call": true, "source_file": "app.py", "source_location": "L336", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "query", "is_member_call": true, "source_file": "app.py", "source_location": "L336", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app.py", "source_location": "L336"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "close", "is_member_call": true, "source_file": "app.py", "source_location": "L337", "receiver": "session"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "error", "is_member_call": true, "source_file": "app.py", "source_location": "L341", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "create_tables", "is_member_call": false, "source_file": "app.py", "source_location": "L344", "receiver": null}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L345", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_smtpserverapp_check_health", "callee": "error", "is_member_call": true, "source_file": "app.py", "source_location": "L347", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_main", "callee": "ArgumentParser", "is_member_call": true, "source_file": "app.py", "source_location": "L358", "receiver": "argparse"}, {"caller_nid": "$graphify-root$_app_main", "callee": "add_argument", "is_member_call": true, "source_file": "app.py", "source_location": "L359", "receiver": "parser"}, {"caller_nid": "$graphify-root$_app_main", "callee": "add_argument", "is_member_call": true, "source_file": "app.py", "source_location": "L360", "receiver": "parser"}, {"caller_nid": "$graphify-root$_app_main", "callee": "add_argument", "is_member_call": true, "source_file": "app.py", "source_location": "L361", "receiver": "parser"}, {"caller_nid": "$graphify-root$_app_main", "callee": "add_argument", "is_member_call": true, "source_file": "app.py", "source_location": "L362", "receiver": "parser"}, {"caller_nid": "$graphify-root$_app_main", "callee": "int", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app.py", "source_location": "L362"}, {"caller_nid": "$graphify-root$_app_main", "callee": "add_argument", "is_member_call": true, "source_file": "app.py", "source_location": "L363", "receiver": "parser"}, {"caller_nid": "$graphify-root$_app_main", "callee": "add_argument", "is_member_call": true, "source_file": "app.py", "source_location": "L364", "receiver": "parser"}, {"caller_nid": "$graphify-root$_app_main", "callee": "add_argument", "is_member_call": true, "source_file": "app.py", "source_location": "L365", "receiver": "parser"}, {"caller_nid": "$graphify-root$_app_main", "callee": "parse_args", "is_member_call": true, "source_file": "app.py", "source_location": "L367", "receiver": "parser"}, {"caller_nid": "$graphify-root$_app_main", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L375", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_main", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L377", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_main", "callee": "load_settings", "is_member_call": false, "source_file": "app.py", "source_location": "L381", "receiver": null}, {"caller_nid": "$graphify-root$_app_main", "callee": "get", "is_member_call": true, "source_file": "app.py", "source_location": "L382", "receiver": "settings"}, {"caller_nid": "$graphify-root$_app_main", "callee": "get", "is_member_call": true, "source_file": "app.py", "source_location": "L383", "receiver": "settings"}, {"caller_nid": "$graphify-root$_app_main", "callee": "info", "is_member_call": true, "source_file": "app.py", "source_location": "L421", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_main", "callee": "error", "is_member_call": true, "source_file": "app.py", "source_location": "L423", "receiver": "logger"}, {"caller_nid": "$graphify-root$_app_main", "callee": "exit", "is_member_call": true, "source_file": "app.py", "source_location": "L424", "receiver": "sys"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/2cbfa3c216771845653d30fee2e9003c4fed127d81dfd24e183a37567faaea28.json b/graphify-out/cache/ast/v0.9.37/2cbfa3c216771845653d30fee2e9003c4fed127d81dfd24e183a37567faaea28.json new file mode 100644 index 0000000..f9deac8 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/2cbfa3c216771845653d30fee2e9003c4fed127d81dfd24e183a37567faaea28.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_utils_py", "label": "utils.py", "file_type": "code", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "label": "get_public_ip()", "file_type": "code", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L16", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "label": "check_dns_record()", "file_type": "code", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L48", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_utils_generate_spf_record", "label": "generate_spf_record()", "file_type": "code", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L138", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_utils_rationale_1", "label": "Common utilities for the SMTP server web UI. This module provides shared\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_utils_rationale_17", "label": "Get the public IP address of the server.", "file_type": "rationale", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L17"}, {"id": "$graphify-root$_email_server_server_web_ui_utils_rationale_49", "label": "Check DNS record for a domain.", "file_type": "rationale", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L49"}, {"id": "$graphify-root$_email_server_server_web_ui_utils_rationale_139", "label": "Generate recommended SPF record, preserving existing mechanisms if present.", "file_type": "rationale", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L139"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_utils_py", "target": "socket", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_py", "target": "requests", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_py", "target": "dns_resolver", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_py", "target": "email_server_settings_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_py", "target": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_py", "target": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L48", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_py", "target": "$graphify-root$_email_server_server_web_ui_utils_generate_spf_record", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L138", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_utils_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_rationale_17", "target": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_rationale_49", "target": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L49", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_utils_rationale_139", "target": "$graphify-root$_email_server_server_web_ui_utils_generate_spf_record", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L139", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L19", "receiver": "requests"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L21", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L27", "receiver": "requests"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L28", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "split", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L28", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "json", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L28", "receiver": "response"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "load_settings", "is_member_call": false, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L36", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L37", "receiver": "settings"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L38", "receiver": "fallback_ip"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "split", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L40", "receiver": "fallback_ip"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "isdigit", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L41", "receiver": "part"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_get_public_ip", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L42", "receiver": "fallback_ip"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "Resolver", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L51", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "resolve", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L59", "receiver": "resolver"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L75"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "bytes", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L87"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "decode", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L88", "receiver": "string"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L91", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "split", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L91", "receiver": "full_txt"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "append", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L92", "receiver": "records"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "startswith", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L100", "receiver": "expected_value"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L101", "receiver": "expected_value"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L103", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "split", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L103", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L103", "receiver": "expected_value"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L106", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L107", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L108", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_check_dns_record", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/utils.py", "source_location": "L134"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_generate_spf_record", "callee": "split", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L142", "receiver": "existing_spf"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_generate_spf_record", "callee": "startswith", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L150", "receiver": "m"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_generate_spf_record", "callee": "startswith", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L150", "receiver": "m"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_generate_spf_record", "callee": "index", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L154", "receiver": "mechanisms"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_generate_spf_record", "callee": "insert", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L155", "receiver": "mechanisms"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_generate_spf_record", "callee": "append", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L158", "receiver": "mechanisms"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_generate_spf_record", "callee": "append", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L159", "receiver": "mechanisms"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_utils_generate_spf_record", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/utils.py", "source_location": "L161", "receiver": null}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/2eb9f60a797877a5036bfc46a427240a9effa5da641c768ec5ec73bbe649ec3f.json b/graphify-out/cache/ast/v0.9.37/2eb9f60a797877a5036bfc46a427240a9effa5da641c768ec5ec73bbe649ec3f.json new file mode 100644 index 0000000..2766c00 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/2eb9f60a797877a5036bfc46a427240a9effa5da641c768ec5ec73bbe649ec3f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tests_send_email_py", "label": "send_email.py", "file_type": "code", "source_file": "tests/send_email.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_send_email_send_test_email", "label": "send_test_email()", "file_type": "code", "source_file": "tests/send_email.py", "source_location": "L16", "_callable": true}, {"id": "$graphify-root$_tests_send_email_send_test_email_tls", "label": "send_test_email_tls()", "file_type": "code", "source_file": "tests/send_email.py", "source_location": "L34", "_callable": true}, {"id": "$graphify-root$_tests_send_email_rationale_19", "label": "Send a test email using plain SMTP.", "file_type": "rationale", "source_file": "tests/send_email.py", "source_location": "L19"}, {"id": "$graphify-root$_tests_send_email_rationale_37", "label": "Send a test email using STARTTLS.", "file_type": "rationale", "source_file": "tests/send_email.py", "source_location": "L37"}], "edges": [{"source": "$graphify-root$_tests_send_email_py", "target": "smtplib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/send_email.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_tests_send_email_py", "target": "email_mime_text", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/send_email.py", "source_location": "L2", "weight": 1.0}, {"source": "$graphify-root$_tests_send_email_py", "target": "ssl", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/send_email.py", "source_location": "L3", "weight": 1.0}, {"source": "$graphify-root$_tests_send_email_py", "target": "argparse", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/send_email.py", "source_location": "L4", "weight": 1.0}, {"source": "$graphify-root$_tests_send_email_py", "target": "$graphify-root$_tests_send_email_send_test_email", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/send_email.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_tests_send_email_py", "target": "$graphify-root$_tests_send_email_send_test_email_tls", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/send_email.py", "source_location": "L34", "weight": 1.0}, {"source": "$graphify-root$_tests_send_email_rationale_19", "target": "$graphify-root$_tests_send_email_send_test_email", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/send_email.py", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_tests_send_email_rationale_37", "target": "$graphify-root$_tests_send_email_send_test_email_tls", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/send_email.py", "source_location": "L37", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_tests_send_email_send_test_email", "callee": "MIMEText", "is_member_call": false, "source_file": "tests/send_email.py", "source_location": "L20", "receiver": null}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email", "callee": "SMTP", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L26", "receiver": "smtplib"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email", "callee": "login", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L28", "receiver": "server"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email", "callee": "send_message", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L29", "receiver": "server"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email_tls", "callee": "MIMEText", "is_member_call": false, "source_file": "tests/send_email.py", "source_location": "L38", "receiver": null}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email_tls", "callee": "_create_unverified_context", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L42", "receiver": "ssl"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email_tls", "callee": "SMTP", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L46", "receiver": "smtplib"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email_tls", "callee": "ehlo", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L48", "receiver": "server"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email_tls", "callee": "has_extn", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L49", "receiver": "server"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email_tls", "callee": "starttls", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L50", "receiver": "server"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email_tls", "callee": "ehlo", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L51", "receiver": "server"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email_tls", "callee": "login", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L56", "receiver": "server"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email_tls", "callee": "send_message", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L57", "receiver": "server"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email_tls", "callee": "send_message", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L60", "receiver": "server"}, {"caller_nid": "$graphify-root$_tests_send_email_send_test_email_tls", "callee": "quit", "is_member_call": true, "source_file": "tests/send_email.py", "source_location": "L67", "receiver": "server"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/343c952ee4114c9166787cd08cff7e8e01560bc79f30b207e2cbf6fc6bf32c3b.json b/graphify-out/cache/ast/v0.9.37/343c952ee4114c9166787cd08cff7e8e01560bc79f30b207e2cbf6fc6bf32c3b.json new file mode 100644 index 0000000..055a769 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/343c952ee4114c9166787cd08cff7e8e01560bc79f30b207e2cbf6fc6bf32c3b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_settings_loader_py", "label": "settings_loader.py", "file_type": "code", "source_file": "email_server/settings_loader.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "label": "generate_settings_ini()", "file_type": "code", "source_file": "email_server/settings_loader.py", "source_location": "L59", "_callable": true}, {"id": "path", "label": "Path", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/settings_loader.py"}, {"id": "$graphify-root$_email_server_settings_loader_load_settings", "label": "load_settings()", "file_type": "code", "source_file": "email_server/settings_loader.py", "source_location": "L76", "_callable": true}, {"id": "configparser", "label": "ConfigParser", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/settings_loader.py"}, {"id": "$graphify-root$_email_server_settings_loader_rationale_1", "label": "Settings loader for the SMTP server. Automatically generates settings.ini with\u2026", "file_type": "rationale", "source_file": "email_server/settings_loader.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_settings_loader_rationale_60", "label": "Generate settings.ini with default values and comments if it does not exist.", "file_type": "rationale", "source_file": "email_server/settings_loader.py", "source_location": "L60"}, {"id": "$graphify-root$_email_server_settings_loader_rationale_77", "label": "Load settings from settings.ini, generating it if needed.", "file_type": "rationale", "source_file": "email_server/settings_loader.py", "source_location": "L77"}], "edges": [{"source": "$graphify-root$_email_server_settings_loader_py", "target": "configparser", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_py", "target": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L59", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L59", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_py", "target": "$graphify-root$_email_server_settings_loader_load_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L76", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_load_settings", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L76", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_load_settings", "target": "configparser", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L76", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "target": "configparser", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L63", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_load_settings", "target": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_load_settings", "target": "configparser", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L79", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_rationale_1", "target": "$graphify-root$_email_server_settings_loader_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_rationale_60", "target": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L60", "weight": 1.0}, {"source": "$graphify-root$_email_server_settings_loader_rationale_77", "target": "$graphify-root$_email_server_settings_loader_load_settings", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/settings_loader.py", "source_location": "L77", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "callee": "exists", "is_member_call": true, "source_file": "email_server/settings_loader.py", "source_location": "L61", "receiver": "settings_path"}, {"caller_nid": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "callee": "items", "is_member_call": true, "source_file": "email_server/settings_loader.py", "source_location": "L64", "receiver": "DEFAULTS"}, {"caller_nid": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "callee": "add_section", "is_member_call": true, "source_file": "email_server/settings_loader.py", "source_location": "L65", "receiver": "config_parser"}, {"caller_nid": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "callee": "items", "is_member_call": true, "source_file": "email_server/settings_loader.py", "source_location": "L66", "receiver": "values"}, {"caller_nid": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "callee": "startswith", "is_member_call": true, "source_file": "email_server/settings_loader.py", "source_location": "L67", "receiver": "key"}, {"caller_nid": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "callee": "write", "is_member_call": true, "source_file": "email_server/settings_loader.py", "source_location": "L74", "receiver": "config_parser"}, {"caller_nid": "$graphify-root$_email_server_settings_loader_generate_settings_ini", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/settings_loader.py", "source_location": "L74"}, {"caller_nid": "$graphify-root$_email_server_settings_loader_load_settings", "callee": "read", "is_member_call": true, "source_file": "email_server/settings_loader.py", "source_location": "L80", "receiver": "config_parser"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/4c8ecc79aca4fd9640c5b9a840125973c41bc325456748db03e2f0e7fb4cf6aa.json b/graphify-out/cache/ast/v0.9.37/4c8ecc79aca4fd9640c5b9a840125973c41bc325456748db03e2f0e7fb4cf6aa.json new file mode 100644 index 0000000..5f158e9 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/4c8ecc79aca4fd9640c5b9a840125973c41bc325456748db03e2f0e7fb4cf6aa.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_dkim_manager_py", "label": "dkim_manager.py", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_dkim_manager_dkimmanager", "label": "DKIMManager", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L20", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_dkim_manager_dkimmanager_init", "label": ".__init__()", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L23", "_callable": true}, {"id": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_random_selector", "label": "._generate_random_selector()", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L31", "_callable": true}, {"id": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "label": ".generate_dkim_keypair()", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L35", "_callable": true}, {"id": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "label": ".get_active_dkim_key()", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L133", "_callable": true}, {"id": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_dkim_private_key", "label": ".get_dkim_private_key()", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L148", "_callable": true}, {"id": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_dkim_public_key_record", "label": ".get_dkim_public_key_record()", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L155", "_callable": true}, {"id": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "label": ".sign_email()", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L168", "_callable": true}, {"id": "$graphify-root$_email_server_dkim_manager_dkimmanager_list_dkim_keys", "label": ".list_dkim_keys()", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L208", "_callable": true}, {"id": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "label": ".initialize_default_keys()", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L231", "_callable": true}, {"id": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "label": ".get_active_custom_headers()", "file_type": "code", "source_file": "email_server/dkim_manager.py", "source_location": "L251", "_callable": true}, {"id": "$graphify-root$_email_server_dkim_manager_rationale_1", "label": "DKIM key management and email signing functionality.", "file_type": "rationale", "source_file": "email_server/dkim_manager.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_dkim_manager_rationale_21", "label": "Manages DKIM keys and email signing.", "file_type": "rationale", "source_file": "email_server/dkim_manager.py", "source_location": "L21"}, {"id": "$graphify-root$_email_server_dkim_manager_rationale_24", "label": "Initialize DKIMManager with a selector. If not provided, use random.", "file_type": "rationale", "source_file": "email_server/dkim_manager.py", "source_location": "L24"}, {"id": "$graphify-root$_email_server_dkim_manager_rationale_32", "label": "Generate a random DKIM selector name (8-12 chars).", "file_type": "rationale", "source_file": "email_server/dkim_manager.py", "source_location": "L32"}, {"id": "$graphify-root$_email_server_dkim_manager_rationale_36", "label": "Generate DKIM key pair for a domain, optionally with a custom selector. Args:\u2026", "file_type": "rationale", "source_file": "email_server/dkim_manager.py", "source_location": "L36"}, {"id": "$graphify-root$_email_server_dkim_manager_rationale_134", "label": "Get the active DKIM key for a domain (only one active per selector).", "file_type": "rationale", "source_file": "email_server/dkim_manager.py", "source_location": "L134"}, {"id": "$graphify-root$_email_server_dkim_manager_rationale_149", "label": "Get DKIM private key for a domain.", "file_type": "rationale", "source_file": "email_server/dkim_manager.py", "source_location": "L149"}, {"id": "$graphify-root$_email_server_dkim_manager_rationale_156", "label": "Get DKIM public key DNS record for a domain (active key only).", "file_type": "rationale", "source_file": "email_server/dkim_manager.py", "source_location": "L156"}, {"id": "$graphify-root$_email_server_dkim_manager_rationale_169", "label": "Sign email content with DKIM. Only add one DKIM header, after all modifications.", "file_type": "rationale", "source_file": "email_server/dkim_manager.py", "source_location": "L169"}, {"id": "$graphify-root$_email_server_dkim_manager_rationale_232", "label": "Initialize DKIM keys for existing domains that don't have them.", "file_type": "rationale", "source_file": "email_server/dkim_manager.py", "source_location": "L232"}, {"id": "$graphify-root$_email_server_dkim_manager_rationale_252", "label": "Get all active custom headers for a domain. Args: domain_name (str): The domain\u2026", "file_type": "rationale", "source_file": "email_server/dkim_manager.py", "source_location": "L252"}], "edges": [{"source": "$graphify-root$_email_server_dkim_manager_py", "target": "dkim", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_py", "target": "cryptography_hazmat_primitives", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_py", "target": "cryptography_hazmat_primitives_asymmetric", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_py", "target": "email_server_settings_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_py", "target": "random", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_py", "target": "string", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_py", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L23", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_random_selector", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L35", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L133", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_dkim_private_key", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L148", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_dkim_public_key_record", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L155", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L168", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_list_dkim_keys", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L208", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L231", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L251", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager_init", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_random_selector", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L28", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_dkim_private_key", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L150", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_dkim_public_key_record", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L157", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L171", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L244", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_rationale_1", "target": "$graphify-root$_email_server_dkim_manager_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_rationale_21", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_rationale_24", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_init", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L24", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_rationale_32", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_random_selector", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L32", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_rationale_36", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L36", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_rationale_134", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L134", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_rationale_149", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_dkim_private_key", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L149", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_rationale_156", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_dkim_public_key_record", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L156", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_rationale_169", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L169", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_rationale_232", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L232", "weight": 1.0}, {"source": "$graphify-root$_email_server_dkim_manager_rationale_252", "target": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/dkim_manager.py", "source_location": "L252", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_random_selector", "callee": "join", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L33", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_random_selector", "callee": "choices", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L33", "receiver": "random"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "Session", "is_member_call": false, "source_file": "email_server/dkim_manager.py", "source_location": "L43", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "first", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L46", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L46", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "query", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L46", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L46"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "error", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L48", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L55", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "query", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L55", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L55"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "get_current_time", "is_member_call": false, "source_file": "email_server/dkim_manager.py", "source_location": "L58", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "debug", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L59", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "first", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L64", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L64", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "query", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L64", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L64"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "query", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L71", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L71"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "get_current_time", "is_member_call": false, "source_file": "email_server/dkim_manager.py", "source_location": "L78", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "debug", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L79", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "commit", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L83", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "debug", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L84", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "debug", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L88", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "generate_private_key", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L92", "receiver": "rsa"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "DKIM_KEY_SIZE", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L94"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "decode", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L98", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "private_bytes", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L98", "receiver": "private_key"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "NoEncryption", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L101", "receiver": "serialization"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "public_key", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L105", "receiver": "private_key"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "decode", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L106", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "public_bytes", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L106", "receiver": "public_key"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "DKIMKey", "is_member_call": false, "source_file": "email_server/dkim_manager.py", "source_location": "L112", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "get_current_time", "is_member_call": false, "source_file": "email_server/dkim_manager.py", "source_location": "L117", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "add", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L120", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "commit", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L121", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "debug", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L123", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "rollback", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L127", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "error", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L128", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_generate_dkim_keypair", "callee": "close", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L131", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "callee": "Session", "is_member_call": false, "source_file": "email_server/dkim_manager.py", "source_location": "L135", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "callee": "first", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L137", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L137", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "callee": "query", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L137", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L137"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "callee": "first", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L140", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L140", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "callee": "query", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L140", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L140"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "callee": "error", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L143", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_dkim_key", "callee": "close", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L146", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_dkim_public_key_record", "callee": "split", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L159", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_dkim_public_key_record", "callee": "strip", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L159", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_dkim_public_key_record", "callee": "join", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L160", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "warning", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L173", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L178"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "encode", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L179", "receiver": "email_content"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "sub", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L184", "receiver": "re"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "sign", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L190", "receiver": "dkim"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "encode", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L192", "receiver": "selector"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "encode", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L193", "receiver": "domain_name"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "encode", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L194", "receiver": "private_key"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "debug", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L199", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L200"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "decode", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L201", "receiver": "signed_content"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_sign_email", "callee": "error", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L205", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_list_dkim_keys", "callee": "Session", "is_member_call": false, "source_file": "email_server/dkim_manager.py", "source_location": "L210", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_list_dkim_keys", "callee": "join", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L212", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_list_dkim_keys", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L212"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_list_dkim_keys", "callee": "query", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L212", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_list_dkim_keys", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L212"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_list_dkim_keys", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L212"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_list_dkim_keys", "callee": "append", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L216", "receiver": "result"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_list_dkim_keys", "callee": "error", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L226", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_list_dkim_keys", "callee": "close", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L229", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "callee": "Session", "is_member_call": false, "source_file": "email_server/dkim_manager.py", "source_location": "L233", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "callee": "query", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L235", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L235"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "callee": "first", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L237", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L237", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "callee": "query", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L237", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L237"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "callee": "debug", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L243", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "callee": "error", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L247", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_initialize_default_keys", "callee": "close", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L249", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "callee": "Session", "is_member_call": false, "source_file": "email_server/dkim_manager.py", "source_location": "L260", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "callee": "first", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L262", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L262", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "callee": "query", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L262", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L262"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L265", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "callee": "query", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L265", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "callee": "CustomHeader", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/dkim_manager.py", "source_location": "L265"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "callee": "error", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L268", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_dkim_manager_dkimmanager_get_active_custom_headers", "callee": "close", "is_member_call": true, "source_file": "email_server/dkim_manager.py", "source_location": "L271", "receiver": "session"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/4cb75c2dac0d659c2e794ce2f75e9162d8aacbea7ddabdf63d91b859166d78d4.json b/graphify-out/cache/ast/v0.9.37/4cb75c2dac0d659c2e794ce2f75e9162d8aacbea7ddabdf63d91b859166d78d4.json new file mode 100644 index 0000000..64ef005 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/4cb75c2dac0d659c2e794ce2f75e9162d8aacbea7ddabdf63d91b859166d78d4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_logs_py", "label": "logs.py", "file_type": "code", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L1"}, {"id": "route", "label": "route", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/server_web_ui/logs.py"}, {"id": "$graphify-root$_email_server_server_web_ui_logs_logs", "label": "logs()", "file_type": "code", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L17", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_logs_rationale_1", "label": "Logs blueprint for the SMTP server web UI. This module provides email and\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_logs_rationale_18", "label": "Display email and authentication logs.", "file_type": "rationale", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L18"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_logs_py", "target": "flask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_logs_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_logs_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_logs_py", "target": "$graphify-root$_email_server_server_web_ui_routes_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L10", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/routes.py"}, {"source": "$graphify-root$_email_server_server_web_ui_logs_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_logs_logs", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L16", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_logs_py", "target": "$graphify-root$_email_server_server_web_ui_logs_logs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_logs_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_logs_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_logs_rationale_18", "target": "$graphify-root$_email_server_server_web_ui_logs_logs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L18", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L19", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L22", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L23", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "int", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L23"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L28", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "EmailLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L28"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L29", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L29", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "EmailLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L29"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "desc", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L29", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L32", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "AuthLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L32"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L33", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L33", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "AuthLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L33"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "desc", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L33", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "limit", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L36", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L36", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L36", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "EmailLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L36"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "desc", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L36", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "limit", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L37", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L37", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L37", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "AuthLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L37"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "desc", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L37", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L43", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L43", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "EmailRecipientLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L43"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L44", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L44", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "EmailAttachment", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L44"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "append", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L45", "receiver": "combined_logs"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "append", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L53", "receiver": "combined_logs"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "sort", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L60", "receiver": "combined_logs"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L62", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "count", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L71", "receiver": "total_query"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "limit", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L72", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "offset", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L72", "receiver": "logs_query"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L81", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L81", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "EmailRecipientLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L81"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L82", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L82", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "EmailAttachment", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/logs.py", "source_location": "L82"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L83", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_logs_logs", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/logs.py", "source_location": "L92", "receiver": "session"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/4d43f0ffdbc1bfaff9e8878442c253981ea30a743cc355aa4f05167bfab5723e.json b/graphify-out/cache/ast/v0.9.37/4d43f0ffdbc1bfaff9e8878442c253981ea30a743cc355aa4f05167bfab5723e.json new file mode 100644 index 0000000..6be9a3c --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/4d43f0ffdbc1bfaff9e8878442c253981ea30a743cc355aa4f05167bfab5723e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_database_py", "label": "database.py", "file_type": "code", "source_file": "email_server/server_web_ui/database.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_database_install_package", "label": "install_package()", "file_type": "code", "source_file": "email_server/server_web_ui/database.py", "source_location": "L31", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_database_import_or_install_driver", "label": "import_or_install_driver()", "file_type": "code", "source_file": "email_server/server_web_ui/database.py", "source_location": "L49", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "label": "test_database_connection()", "file_type": "code", "source_file": "email_server/server_web_ui/database.py", "source_location": "L78", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_database_rationale_1", "label": "Database utilities for the SMTP server.", "file_type": "rationale", "source_file": "email_server/server_web_ui/database.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_database_rationale_32", "label": "Install a Python package using pip. Args: package_name: Name of the package to\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/database.py", "source_location": "L32"}, {"id": "$graphify-root$_email_server_server_web_ui_database_rationale_50", "label": "Import database driver, installing it if necessary. Args: db_type: Type of\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/database.py", "source_location": "L50"}, {"id": "$graphify-root$_email_server_server_web_ui_database_rationale_79", "label": "Test if a database connection can be established. Args: url: Database\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/database.py", "source_location": "L79"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_database_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_py", "target": "urllib_parse", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_py", "target": "$graphify-root$_email_server_server_web_ui_database_install_package", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_py", "target": "$graphify-root$_email_server_server_web_ui_database_import_or_install_driver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L49", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_py", "target": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_import_or_install_driver", "target": "$graphify-root$_email_server_server_web_ui_database_install_package", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L68", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "target": "$graphify-root$_email_server_server_web_ui_database_import_or_install_driver", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L112", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_database_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_rationale_32", "target": "$graphify-root$_email_server_server_web_ui_database_install_package", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L32", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_rationale_50", "target": "$graphify-root$_email_server_server_web_ui_database_import_or_install_driver", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L50", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_database_rationale_79", "target": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/database.py", "source_location": "L79", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_web_ui_database_install_package", "callee": "info", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L42", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_install_package", "callee": "check_call", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L43", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_install_package", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L46", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_import_or_install_driver", "callee": "__import__", "is_member_call": false, "source_file": "email_server/server_web_ui/database.py", "source_location": "L64", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_import_or_install_driver", "callee": "warning", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L67", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_import_or_install_driver", "callee": "__import__", "is_member_call": false, "source_file": "email_server/server_web_ui/database.py", "source_location": "L70", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_import_or_install_driver", "callee": "info", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L71", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_import_or_install_driver", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L74", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "urlparse", "is_member_call": false, "source_file": "email_server/server_web_ui/database.py", "source_location": "L96", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "lower", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L97", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "connect", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L102", "receiver": "sqlite3"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "replace", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L102", "receiver": "url"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L103", "receiver": "conn"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "split", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L107", "receiver": "scheme"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "lstrip", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L123", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "connect", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L125", "receiver": "pymysql"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L126", "receiver": "conn"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "connect", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L132", "receiver": "psycopg2"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L133", "receiver": "conn"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "connect", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L139", "receiver": "pyodbc"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "replace", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L139", "receiver": "url"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L140", "receiver": "conn"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/database.py", "source_location": "L144"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_database_test_database_connection", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/database.py", "source_location": "L145", "receiver": "logger"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/5418f4925af9f157470f18a7bc90d4aeb97e4b0b1eebd4127fc4e3a6be5d4182.json b/graphify-out/cache/ast/v0.9.37/5418f4925af9f157470f18a7bc90d4aeb97e4b0b1eebd4127fc4e3a6be5d4182.json new file mode 100644 index 0000000..f01db23 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/5418f4925af9f157470f18a7bc90d4aeb97e4b0b1eebd4127fc4e3a6be5d4182.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_runner_py", "label": "server_runner.py", "file_type": "code", "source_file": "email_server/server_runner.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_runner_start_server", "label": "start_server()", "file_type": "code", "source_file": "email_server/server_runner.py", "source_location": "L35", "_callable": true}, {"id": "$graphify-root$_email_server_server_runner_rationale_1", "label": "Modular SMTP Server with DKIM support. Main server file that ties all modules\u2026", "file_type": "rationale", "source_file": "email_server/server_runner.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_runner_rationale_36", "label": "Main server function.", "file_type": "rationale", "source_file": "email_server/server_runner.py", "source_location": "L36"}], "edges": [{"source": "$graphify-root$_email_server_server_runner_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_runner_py", "target": "email_server_settings_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_runner_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_runner_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_runner_py", "target": "email_server_smtp_handler", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_runner_py", "target": "email_server_tls_utils", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_runner_py", "target": "email_server_dkim_manager", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_runner_py", "target": "aiosmtpd_controller", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_runner_py", "target": "aiosmtpd_smtp", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_runner_py", "target": "$graphify-root$_email_server_server_runner_start_server", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L35", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_runner_rationale_1", "target": "$graphify-root$_email_server_server_runner_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_runner_rationale_36", "target": "$graphify-root$_email_server_server_runner_start_server", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_runner.py", "source_location": "L36", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L37", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L40", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "create_tables", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L41", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L44", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "DKIMManager", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L45", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L50", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "first", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L53", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L53", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "query", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L53", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_runner.py", "source_location": "L53"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "Domain", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L55", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "add", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L56", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L57", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L58", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "first", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L61", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L61", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "query", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L61", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_runner.py", "source_location": "L61"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "Sender", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L63", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "hash_password", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L65", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "add", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L68", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L69", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L70", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "first", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L73", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L73", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "query", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L73", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "WhitelistedIP", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_runner.py", "source_location": "L73"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "WhitelistedIP", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L75", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "add", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L76", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L77", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L78", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L80", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "error", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L81", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "close", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L83", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L86", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "generate_self_signed_cert", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L87", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "error", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L88", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "create_ssl_context", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L92", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "error", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L94", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L97", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L98", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "EnhancedCustomSMTPHandler", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L101", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "PlainController", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L102", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "HOSTNAME", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_runner.py", "source_location": "L104"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "SMTP_PORT", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_runner.py", "source_location": "L105"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "start", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L107", "receiver": "controller_plain"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L108", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "EnhancedCustomSMTPHandler", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L111", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "TLSController", "is_member_call": false, "source_file": "email_server/server_runner.py", "source_location": "L112", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "HOSTNAME", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_runner.py", "source_location": "L115"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "SMTP_TLS_PORT", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_runner.py", "source_location": "L116"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "start", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L118", "receiver": "controller_tls"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L119", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L120", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L121", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "wait", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L125", "receiver": "shutdown_event"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "wait", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L127", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "Event", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L127", "receiver": "asyncio"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L129", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "stop", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L131", "receiver": "controller_plain"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "stop", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L132", "receiver": "controller_tls"}, {"caller_nid": "$graphify-root$_email_server_server_runner_start_server", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_runner.py", "source_location": "L133", "receiver": "logger"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/57f7b0fa0147dcad0c34ea666da0574d80fef057854ca253e281c31224311b63.json b/graphify-out/cache/ast/v0.9.37/57f7b0fa0147dcad0c34ea666da0574d80fef057854ca253e281c31224311b63.json new file mode 100644 index 0000000..2723fd5 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/57f7b0fa0147dcad0c34ea666da0574d80fef057854ca253e281c31224311b63.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_script_setup_py_environment_sh", "label": "script_setup_py_environment.sh", "file_type": "code", "source_file": "script_setup_py_environment.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "file"}}, {"id": "$graphify-root$_script_setup_py_environment_sh__entry", "label": "script_setup_py_environment.sh script", "file_type": "code", "source_file": "script_setup_py_environment.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "bash_entrypoint"}}], "edges": [{"source": "$graphify-root$_script_setup_py_environment_sh", "target": "$graphify-root$_script_setup_py_environment_sh__entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "script_setup_py_environment.sh", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"language": "bash", "callee": "python3", "caller_nid": "$graphify-root$_script_setup_py_environment_sh__entry", "source_file": "script_setup_py_environment.sh", "source_location": "L4"}, {"language": "bash", "callee": "echo", "caller_nid": "$graphify-root$_script_setup_py_environment_sh__entry", "source_file": "script_setup_py_environment.sh", "source_location": "L9"}, {"language": "bash", "callee": "sudo", "caller_nid": "$graphify-root$_script_setup_py_environment_sh__entry", "source_file": "script_setup_py_environment.sh", "source_location": "L11"}], "bash_sources": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/73552cd042316daf4925b63d54e9017dba06c64cdc3eb13c09027fee46932a51.json b/graphify-out/cache/ast/v0.9.37/73552cd042316daf4925b63d54e9017dba06c64cdc3eb13c09027fee46932a51.json new file mode 100644 index 0000000..47c5d7b --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/73552cd042316daf4925b63d54e9017dba06c64cdc3eb13c09027fee46932a51.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_tls_utils_py", "label": "tls_utils.py", "file_type": "code", "source_file": "email_server/tls_utils.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "label": "generate_self_signed_cert()", "file_type": "code", "source_file": "email_server/tls_utils.py", "source_location": "L20", "_callable": true}, {"id": "$graphify-root$_email_server_tls_utils_create_ssl_context", "label": "create_ssl_context()", "file_type": "code", "source_file": "email_server/tls_utils.py", "source_location": "L60", "_callable": true}, {"id": "$graphify-root$_email_server_tls_utils_rationale_1", "label": "TLS utilities for the SMTP server.", "file_type": "rationale", "source_file": "email_server/tls_utils.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_tls_utils_rationale_21", "label": "Generate self-signed SSL certificate if it doesn't exist.", "file_type": "rationale", "source_file": "email_server/tls_utils.py", "source_location": "L21"}, {"id": "$graphify-root$_email_server_tls_utils_rationale_61", "label": "Create SSL context for TLS support.", "file_type": "rationale", "source_file": "email_server/tls_utils.py", "source_location": "L61"}], "edges": [{"source": "$graphify-root$_email_server_tls_utils_py", "target": "ssl", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tls_utils.py", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_email_server_tls_utils_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tls_utils.py", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_email_server_tls_utils_py", "target": "openssl", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tls_utils.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_email_server_tls_utils_py", "target": "email_server_settings_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tls_utils.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_email_server_tls_utils_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tls_utils.py", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_email_server_tls_utils_py", "target": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/tls_utils.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_email_server_tls_utils_py", "target": "$graphify-root$_email_server_tls_utils_create_ssl_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/tls_utils.py", "source_location": "L60", "weight": 1.0}, {"source": "$graphify-root$_email_server_tls_utils_rationale_1", "target": "$graphify-root$_email_server_tls_utils_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/tls_utils.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_tls_utils_rationale_21", "target": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/tls_utils.py", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_email_server_tls_utils_rationale_61", "target": "$graphify-root$_email_server_tls_utils_create_ssl_context", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/tls_utils.py", "source_location": "L61", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "exists", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L22", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "TLS_CERT_FILE", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/tls_utils.py", "source_location": "L22"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "exists", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L22", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "TLS_KEY_FILE", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/tls_utils.py", "source_location": "L22"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "debug", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L23", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "debug", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L27", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "PKey", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L30", "receiver": "crypto"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "generate_key", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L31", "receiver": "k"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "X509", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L34", "receiver": "crypto"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "get_subject", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L35", "receiver": "cert"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "get_subject", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L36", "receiver": "cert"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "get_subject", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L37", "receiver": "cert"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "set_serial_number", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L38", "receiver": "cert"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "gmtime_adj_notBefore", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L39", "receiver": "cert"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "gmtime_adj_notAfter", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L40", "receiver": "cert"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "set_issuer", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L41", "receiver": "cert"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "get_subject", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L41", "receiver": "cert"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "set_pubkey", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L42", "receiver": "cert"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "sign", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L43", "receiver": "cert"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "TLS_CERT_FILE", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/tls_utils.py", "source_location": "L46"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "write", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L47", "receiver": "f"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "dump_certificate", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L47", "receiver": "crypto"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "TLS_KEY_FILE", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/tls_utils.py", "source_location": "L50"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "write", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L51", "receiver": "f"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "dump_privatekey", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L51", "receiver": "crypto"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "debug", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L53", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_generate_self_signed_cert", "callee": "error", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L57", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_create_ssl_context", "callee": "create_default_context", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L63", "receiver": "ssl"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_create_ssl_context", "callee": "load_cert_chain", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L64", "receiver": "ssl_context"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_create_ssl_context", "callee": "TLS_CERT_FILE", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/tls_utils.py", "source_location": "L64"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_create_ssl_context", "callee": "TLS_KEY_FILE", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/tls_utils.py", "source_location": "L64"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_create_ssl_context", "callee": "set_ciphers", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L65", "receiver": "ssl_context"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_create_ssl_context", "callee": "debug", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L66", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_tls_utils_create_ssl_context", "callee": "error", "is_member_call": true, "source_file": "email_server/tls_utils.py", "source_location": "L69", "receiver": "logger"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/7bbfa1b55787fd0c9bc29b45cca75e11d7146bda4514e0c4d365f94b2e2a42db.json b/graphify-out/cache/ast/v0.9.37/7bbfa1b55787fd0c9bc29b45cca75e11d7146bda4514e0c4d365f94b2e2a42db.json new file mode 100644 index 0000000..cc129aa --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/7bbfa1b55787fd0c9bc29b45cca75e11d7146bda4514e0c4d365f94b2e2a42db.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_init_py", "label": "__init__.py", "file_type": "code", "source_file": "email_server/__init__.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_init_rationale_1", "label": "PyMTA Server email package", "file_type": "rationale", "source_file": "email_server/__init__.py", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_email_server_init_rationale_1", "target": "$graphify-root$_email_server_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/8c531e17c84573bd83a67ef3b456f9d7dbbbe33d626f48a4115bc01438ea1174.json b/graphify-out/cache/ast/v0.9.37/8c531e17c84573bd83a67ef3b456f9d7dbbbe33d626f48a4115bc01438ea1174.json new file mode 100644 index 0000000..39b8b2c --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/8c531e17c84573bd83a67ef3b456f9d7dbbbe33d626f48a4115bc01438ea1174.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_models_py", "label": "models.py", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_models_domain", "label": "Domain", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L31", "_callable": true, "_callable_class": true}, {"id": "base", "label": "Base", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/models.py"}, {"id": "$graphify-root$_email_server_models_domain_repr", "label": ".__repr__()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L46", "_callable": true}, {"id": "$graphify-root$_email_server_models_sender", "label": "Sender", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L49", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_models_sender_can_send_as", "label": ".can_send_as()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L68", "_callable": true}, {"id": "$graphify-root$_email_server_models_sender_repr", "label": ".__repr__()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L87", "_callable": true}, {"id": "$graphify-root$_email_server_models_whitelistedip", "label": "WhitelistedIP", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L90", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_models_whitelistedip_can_send_for_domain", "label": ".can_send_for_domain()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L106", "_callable": true}, {"id": "$graphify-root$_email_server_models_whitelistedip_repr", "label": ".__repr__()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L130", "_callable": true}, {"id": "$graphify-root$_email_server_models_emaillog", "label": "EmailLog", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L133", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_models_emaillog_repr", "label": ".__repr__()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L156", "_callable": true}, {"id": "$graphify-root$_email_server_models_emailrecipientlog", "label": "EmailRecipientLog", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L159", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_models_emailrecipientlog_repr", "label": ".__repr__()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L174", "_callable": true}, {"id": "$graphify-root$_email_server_models_authlog", "label": "AuthLog", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L177", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_models_authlog_repr", "label": ".__repr__()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L189", "_callable": true}, {"id": "$graphify-root$_email_server_models_dkimkey", "label": "DKIMKey", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L192", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_models_dkimkey_repr", "label": ".__repr__()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L205", "_callable": true}, {"id": "$graphify-root$_email_server_models_customheader", "label": "CustomHeader", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L208", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_models_customheader_repr", "label": ".__repr__()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L219", "_callable": true}, {"id": "$graphify-root$_email_server_models_emailattachment", "label": "EmailAttachment", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L222", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_models_emailattachment_repr", "label": ".__repr__()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L236", "_callable": true}, {"id": "$graphify-root$_email_server_models_create_tables", "label": "create_tables()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L240", "_callable": true}, {"id": "$graphify-root$_email_server_models_hash_password", "label": "hash_password()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L245", "_callable": true}, {"id": "$graphify-root$_email_server_models_check_password", "label": "check_password()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L249", "_callable": true}, {"id": "$graphify-root$_email_server_models_log_auth_attempt", "label": "log_auth_attempt()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L253", "_callable": true}, {"id": "$graphify-root$_email_server_models_log_email", "label": "log_email()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L283", "_callable": true}, {"id": "$graphify-root$_email_server_models_get_sender_by_email", "label": "get_sender_by_email()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L313", "_callable": true}, {"id": "$graphify-root$_email_server_models_get_domain_by_name", "label": "get_domain_by_name()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L321", "_callable": true}, {"id": "$graphify-root$_email_server_models_get_whitelisted_ip", "label": "get_whitelisted_ip()", "file_type": "code", "source_file": "email_server/models.py", "source_location": "L329", "_callable": true}, {"id": "$graphify-root$_email_server_models_rationale_1", "label": "Database models for the SMTP server using ESRV schema. Enhanced security\u2026", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_models_rationale_32", "label": "Domain model with enhanced security features.", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L32"}, {"id": "$graphify-root$_email_server_models_rationale_50", "label": "Sender model with enhanced authentication controls. Security features: -\u2026", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L50"}, {"id": "$graphify-root$_email_server_models_rationale_69", "label": "Check if this sender can send emails as the given from_address. Args:\u2026", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L69"}, {"id": "$graphify-root$_email_server_models_rationale_91", "label": "IP whitelist model with domain-specific authentication. Security feature: - IPs\u2026", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L91"}, {"id": "$graphify-root$_email_server_models_rationale_107", "label": "Check if this IP can send emails for the given domain. Args: domain_name: The\u2026", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L107"}, {"id": "$graphify-root$_email_server_models_rationale_134", "label": "Email log model for tracking sent emails.", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L134"}, {"id": "$graphify-root$_email_server_models_rationale_160", "label": "Log for each recipient of an email, including status and error details.", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L160"}, {"id": "$graphify-root$_email_server_models_rationale_178", "label": "Authentication log model for security auditing.", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L178"}, {"id": "$graphify-root$_email_server_models_rationale_193", "label": "DKIM key model for email signing.", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L193"}, {"id": "$graphify-root$_email_server_models_rationale_209", "label": "Custom header model for domain-specific email headers.", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L209"}, {"id": "$graphify-root$_email_server_models_rationale_223", "label": "Attachment metadata and file path, linked to EmailLog.", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L223"}, {"id": "$graphify-root$_email_server_models_rationale_241", "label": "Create all database tables using ESRV schema.", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L241"}, {"id": "$graphify-root$_email_server_models_rationale_246", "label": "Hash a password using bcrypt.", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L246"}, {"id": "$graphify-root$_email_server_models_rationale_250", "label": "Check a password against its hash.", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L250"}, {"id": "$graphify-root$_email_server_models_rationale_255", "label": "Log an authentication attempt for security auditing. Args: auth_type: Type of\u2026", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L255"}, {"id": "$graphify-root$_email_server_models_rationale_285", "label": "Log an email send attempt. Args: from_address: Sender email to_address:\u2026", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L285"}, {"id": "$graphify-root$_email_server_models_rationale_314", "label": "Get sender by email address.", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L314"}, {"id": "$graphify-root$_email_server_models_rationale_330", "label": "Get whitelisted IP, optionally filtered by domain. Args: ip_address: IP address\u2026", "file_type": "rationale", "source_file": "email_server/models.py", "source_location": "L330"}], "edges": [{"source": "$graphify-root$_email_server_models_py", "target": "sqlalchemy", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "sqlalchemy_orm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "sqlalchemy_sql", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "bcrypt", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "email_server_settings_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_domain", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_domain", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_domain", "target": "$graphify-root$_email_server_models_domain_repr", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L46", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_sender", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L49", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_sender", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L49", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_sender", "target": "$graphify-root$_email_server_models_sender_can_send_as", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L68", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_sender", "target": "$graphify-root$_email_server_models_sender_repr", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L87", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_whitelistedip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L90", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_whitelistedip", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L90", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_whitelistedip", "target": "$graphify-root$_email_server_models_whitelistedip_can_send_for_domain", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L106", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_whitelistedip", "target": "$graphify-root$_email_server_models_whitelistedip_repr", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L130", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_emaillog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L133", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_emaillog", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L133", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_emaillog", "target": "$graphify-root$_email_server_models_emaillog_repr", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L156", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_emailrecipientlog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L159", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_emailrecipientlog", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L159", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_emailrecipientlog", "target": "$graphify-root$_email_server_models_emailrecipientlog_repr", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L174", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_authlog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L177", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_authlog", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L177", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_authlog", "target": "$graphify-root$_email_server_models_authlog_repr", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L189", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_dkimkey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L192", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_dkimkey", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L192", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_dkimkey", "target": "$graphify-root$_email_server_models_dkimkey_repr", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L205", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_customheader", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L208", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_customheader", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L208", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_customheader", "target": "$graphify-root$_email_server_models_customheader_repr", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L219", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_emailattachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L222", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_emailattachment", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L222", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_emailattachment", "target": "$graphify-root$_email_server_models_emailattachment_repr", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L236", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_create_tables", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L240", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_hash_password", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L245", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_check_password", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L249", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_log_auth_attempt", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L253", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_log_email", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L283", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_get_sender_by_email", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L313", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_get_domain_by_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L321", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_py", "target": "$graphify-root$_email_server_models_get_whitelisted_ip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L329", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_log_auth_attempt", "target": "$graphify-root$_email_server_models_authlog", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L267", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_log_email", "target": "$graphify-root$_email_server_models_emaillog", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L297", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_1", "target": "$graphify-root$_email_server_models_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_32", "target": "$graphify-root$_email_server_models_domain", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L32", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_50", "target": "$graphify-root$_email_server_models_sender", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L50", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_69", "target": "$graphify-root$_email_server_models_sender_can_send_as", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L69", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_91", "target": "$graphify-root$_email_server_models_whitelistedip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L91", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_107", "target": "$graphify-root$_email_server_models_whitelistedip_can_send_for_domain", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L107", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_134", "target": "$graphify-root$_email_server_models_emaillog", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L134", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_160", "target": "$graphify-root$_email_server_models_emailrecipientlog", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L160", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_178", "target": "$graphify-root$_email_server_models_authlog", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L178", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_193", "target": "$graphify-root$_email_server_models_dkimkey", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L193", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_209", "target": "$graphify-root$_email_server_models_customheader", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L209", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_223", "target": "$graphify-root$_email_server_models_emailattachment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L223", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_241", "target": "$graphify-root$_email_server_models_create_tables", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L241", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_246", "target": "$graphify-root$_email_server_models_hash_password", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L246", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_250", "target": "$graphify-root$_email_server_models_check_password", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L250", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_255", "target": "$graphify-root$_email_server_models_log_auth_attempt", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L255", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_285", "target": "$graphify-root$_email_server_models_log_email", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L285", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_314", "target": "$graphify-root$_email_server_models_get_sender_by_email", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L314", "weight": 1.0}, {"source": "$graphify-root$_email_server_models_rationale_330", "target": "$graphify-root$_email_server_models_get_whitelisted_ip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/models.py", "source_location": "L330", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_models_sender_can_send_as", "callee": "lower", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L78", "receiver": "from_address"}, {"caller_nid": "$graphify-root$_email_server_models_sender_can_send_as", "callee": "lower", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L78", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_sender_can_send_as", "callee": "lower", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L82", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_sender_can_send_as", "callee": "split", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L82", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_sender_can_send_as", "callee": "lower", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L83", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_sender_can_send_as", "callee": "split", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L83", "receiver": "from_address"}, {"caller_nid": "$graphify-root$_email_server_models_whitelistedip_can_send_for_domain", "callee": "Session", "is_member_call": false, "source_file": "email_server/models.py", "source_location": "L120", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_whitelistedip_can_send_for_domain", "callee": "first", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L122", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_whitelistedip_can_send_for_domain", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L122", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_whitelistedip_can_send_for_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L122", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_whitelistedip_can_send_for_domain", "callee": "lower", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L123", "receiver": "domain_name"}, {"caller_nid": "$graphify-root$_email_server_models_whitelistedip_can_send_for_domain", "callee": "close", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L128", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_create_tables", "callee": "create_all", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L242", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_create_tables", "callee": "engine", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/models.py", "source_location": "L242"}, {"caller_nid": "$graphify-root$_email_server_models_create_tables", "callee": "info", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L243", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_models_hash_password", "callee": "decode", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L247", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_hash_password", "callee": "hashpw", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L247", "receiver": "bcrypt"}, {"caller_nid": "$graphify-root$_email_server_models_hash_password", "callee": "encode", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L247", "receiver": "password"}, {"caller_nid": "$graphify-root$_email_server_models_hash_password", "callee": "gensalt", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L247", "receiver": "bcrypt"}, {"caller_nid": "$graphify-root$_email_server_models_check_password", "callee": "checkpw", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L251", "receiver": "bcrypt"}, {"caller_nid": "$graphify-root$_email_server_models_check_password", "callee": "encode", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L251", "receiver": "password"}, {"caller_nid": "$graphify-root$_email_server_models_check_password", "callee": "encode", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L251", "receiver": "hashed"}, {"caller_nid": "$graphify-root$_email_server_models_log_auth_attempt", "callee": "Session", "is_member_call": false, "source_file": "email_server/models.py", "source_location": "L265", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_log_auth_attempt", "callee": "add", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L274", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_log_auth_attempt", "callee": "commit", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L275", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_log_auth_attempt", "callee": "info", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L276", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_models_log_auth_attempt", "callee": "rollback", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L278", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_log_auth_attempt", "callee": "error", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L279", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_models_log_auth_attempt", "callee": "close", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L281", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_log_email", "callee": "Session", "is_member_call": false, "source_file": "email_server/models.py", "source_location": "L295", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_log_email", "callee": "add", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L304", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_log_email", "callee": "commit", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L305", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_log_email", "callee": "info", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L306", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_models_log_email", "callee": "rollback", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L308", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_log_email", "callee": "error", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L309", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_models_log_email", "callee": "close", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L311", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_get_sender_by_email", "callee": "Session", "is_member_call": false, "source_file": "email_server/models.py", "source_location": "L315", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_get_sender_by_email", "callee": "first", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L317", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_get_sender_by_email", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L317", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_get_sender_by_email", "callee": "query", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L317", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_get_sender_by_email", "callee": "lower", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L317", "receiver": "email"}, {"caller_nid": "$graphify-root$_email_server_models_get_sender_by_email", "callee": "close", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L319", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_get_domain_by_name", "callee": "Session", "is_member_call": false, "source_file": "email_server/models.py", "source_location": "L323", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_get_domain_by_name", "callee": "first", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L325", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_get_domain_by_name", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L325", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_get_domain_by_name", "callee": "query", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L325", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_get_domain_by_name", "callee": "lower", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L325", "receiver": "domain_name"}, {"caller_nid": "$graphify-root$_email_server_models_get_domain_by_name", "callee": "close", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L327", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_get_whitelisted_ip", "callee": "Session", "is_member_call": false, "source_file": "email_server/models.py", "source_location": "L340", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_get_whitelisted_ip", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L342", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_get_whitelisted_ip", "callee": "query", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L342", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_get_whitelisted_ip", "callee": "first", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L349", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_get_whitelisted_ip", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L349", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_models_get_whitelisted_ip", "callee": "query", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L349", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_models_get_whitelisted_ip", "callee": "lower", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L350", "receiver": "domain_name"}, {"caller_nid": "$graphify-root$_email_server_models_get_whitelisted_ip", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L355", "receiver": "query"}, {"caller_nid": "$graphify-root$_email_server_models_get_whitelisted_ip", "callee": "first", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L357", "receiver": "query"}, {"caller_nid": "$graphify-root$_email_server_models_get_whitelisted_ip", "callee": "close", "is_member_call": true, "source_file": "email_server/models.py", "source_location": "L359", "receiver": "session"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/8d39786cf5b3da3b2a98aa3dc3ba656e9661208c833f48a7758ef6f587be9571.json b/graphify-out/cache/ast/v0.9.37/8d39786cf5b3da3b2a98aa3dc3ba656e9661208c833f48a7758ef6f587be9571.json new file mode 100644 index 0000000..3fb9797 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/8d39786cf5b3da3b2a98aa3dc3ba656e9661208c833f48a7758ef6f587be9571.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_smtp_handler_py", "label": "smtp_handler.py", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_smtp_handler_customsmtp", "label": "CustomSMTP", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L30", "_callable": true, "_callable_class": true}, {"id": "aiosmtp", "label": "AIOSMTP", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/smtp_handler.py"}, {"id": "$graphify-root$_email_server_smtp_handler_customsmtp_init", "label": ".__init__()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L33", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_customsmtp_get_auth_methods", "label": "._get_auth_methods()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L47", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_customsmtp_smtp_auth", "label": ".smtp_AUTH()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L53", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator", "label": "EnhancedCombinedAuthenticator", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L64", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator_init", "label": ".__init__()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L74", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator_call", "label": ".__call__()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L78", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler", "label": "EnhancedCustomSMTPHandler", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L93", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_init", "label": ".__init__()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L96", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "label": "._ensure_required_headers()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L105", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "label": ".handle_DATA()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L250", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_rcpt", "label": ".handle_RCPT()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L583", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_mail", "label": ".handle_MAIL()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L589", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "label": ".get_attachment_storage_path()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L611", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", "label": ".get_content_type()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L648", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_tlscontroller", "label": "TLSController", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L679", "_callable": true, "_callable_class": true}, {"id": "controller", "label": "Controller", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/smtp_handler.py"}, {"id": "$graphify-root$_email_server_smtp_handler_tlscontroller_init", "label": ".__init__()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L684", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_tlscontroller_factory", "label": ".factory()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L690", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_plaincontroller", "label": "PlainController", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L707", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_smtp_handler_plaincontroller_init", "label": ".__init__()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L710", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_plaincontroller_factory", "label": ".factory()", "file_type": "code", "source_file": "email_server/smtp_handler.py", "source_location": "L714", "_callable": true}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_1", "label": "Enhanced SMTP handler for processing incoming emails with security controls.\u2026", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_31", "label": "Custom SMTP class with configurable banner and secure AUTH handling.", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L31"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_54", "label": "Override AUTH command to close connection after failed authentication.", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L54"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_65", "label": "Enhanced combined authenticator with sender validation support. Features: -\u2026", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L65"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_94", "label": "Enhanced custom SMTP handler with security controls.", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L94"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_106", "label": "Ensure all required email headers are present and properly formatted.", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L106"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_251", "label": "Handle incoming email data with improved header management and logging.", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L251"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_584", "label": "Handle RCPT TO command - validate recipients.", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L584"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_590", "label": "Handle MAIL FROM command with enhanced sender validation. Security Features: -\u2026", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L590"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_612", "label": "Generate the storage path for attachments based on sender domain,\u2026", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L612"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_649", "label": "Get the correct content type for a file, trying multiple methods.", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L649"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_680", "label": "Custom controller for direct TLS (SMTPS, port 465) support.", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L680"}, {"id": "$graphify-root$_email_server_smtp_handler_rationale_708", "label": "Controller for plain SMTP with authentication and IP whitelist fallback.", "file_type": "rationale", "source_file": "email_server/smtp_handler.py", "source_location": "L708"}], "edges": [{"source": "$graphify-root$_email_server_smtp_handler_py", "target": "email_utils", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "mimetypes", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "aiosmtpd_smtp", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "aiosmtpd_controller", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "email_server_auth", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "email_server_email_relay", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "email_server_dkim_manager", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "email_server_settings_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "email", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "email_parser", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L23", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "$graphify-root$_email_server_smtp_handler_customsmtp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L30", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_customsmtp", "target": "aiosmtp", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L30", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_customsmtp", "target": "$graphify-root$_email_server_smtp_handler_customsmtp_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_customsmtp", "target": "$graphify-root$_email_server_smtp_handler_customsmtp_get_auth_methods", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L47", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_customsmtp", "target": "$graphify-root$_email_server_smtp_handler_customsmtp_smtp_auth", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L53", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L64", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator", "target": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L74", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator", "target": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator_call", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L93", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L96", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L105", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L250", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_rcpt", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L583", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_mail", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L589", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L611", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L648", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "$graphify-root$_email_server_smtp_handler_tlscontroller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L679", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_tlscontroller", "target": "controller", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L679", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_tlscontroller", "target": "$graphify-root$_email_server_smtp_handler_tlscontroller_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L684", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_tlscontroller", "target": "$graphify-root$_email_server_smtp_handler_tlscontroller_factory", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L690", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_py", "target": "$graphify-root$_email_server_smtp_handler_plaincontroller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L707", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_plaincontroller", "target": "controller", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L707", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_plaincontroller", "target": "$graphify-root$_email_server_smtp_handler_plaincontroller_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L710", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_plaincontroller", "target": "$graphify-root$_email_server_smtp_handler_plaincontroller_factory", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L714", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_customsmtp_init", "target": "$graphify-root$_email_server_smtp_handler_plaincontroller_init", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L43", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_init", "target": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L99", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L314", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L391", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L412", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_tlscontroller_init", "target": "$graphify-root$_email_server_smtp_handler_plaincontroller_init", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L688", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_tlscontroller_factory", "target": "$graphify-root$_email_server_smtp_handler_customsmtp", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L695", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_plaincontroller_factory", "target": "$graphify-root$_email_server_smtp_handler_customsmtp", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L716", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_1", "target": "$graphify-root$_email_server_smtp_handler_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_31", "target": "$graphify-root$_email_server_smtp_handler_customsmtp", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_54", "target": "$graphify-root$_email_server_smtp_handler_customsmtp_smtp_auth", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L54", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_65", "target": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L65", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_94", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L94", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_106", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L106", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_251", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L251", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_584", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_rcpt", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L584", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_590", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_mail", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L590", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_612", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L612", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_649", "target": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L649", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_680", "target": "$graphify-root$_email_server_smtp_handler_tlscontroller", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L680", "weight": 1.0}, {"source": "$graphify-root$_email_server_smtp_handler_rationale_708", "target": "$graphify-root$_email_server_smtp_handler_plaincontroller", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/smtp_handler.py", "source_location": "L708", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_smtp_handler_customsmtp_init", "callee": "get", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L35", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_customsmtp_init", "callee": "get", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L41", "receiver": "kwargs"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_customsmtp_init", "callee": "get", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L42", "receiver": "kwargs"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_customsmtp_smtp_auth", "callee": "AuthResult", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L59"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_customsmtp_smtp_auth", "callee": "close", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L61", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator_init", "callee": "EnhancedAuthenticator", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L75", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator_init", "callee": "EnhancedIPAuthenticator", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L76", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator_call", "callee": "LoginPassword", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L82"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator_call", "callee": "user_auth", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L83", "receiver": "self"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcombinedauthenticator_call", "callee": "AuthResult", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L91", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_init", "callee": "EnhancedAuthenticator", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L97", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_init", "callee": "EnhancedIPAuthenticator", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L98", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_init", "callee": "EmailRelay", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L100", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_init", "callee": "DKIMManager", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L101", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "splitlines", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L108", "receiver": "content"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L110"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L111", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L112", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L119", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L122"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L123", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "startswith", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L125", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "split", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L127", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L129", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L131"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L131"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L132", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "lower", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L134", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L134", "receiver": "header_name"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L135", "receiver": "header_value"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "startswith", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L138", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L139", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L142", "receiver": "original_header_order"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L142", "receiver": "header_name"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L143", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L147", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "pop", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L148", "receiver": "body_lines"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "join", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L149", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L157", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "rsplit", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L159", "receiver": "existing_msg_id"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "rstrip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L160", "receiver": "hostname"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "lower", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L161", "receiver": "hostname"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "lower", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L161", "receiver": "helo_hostname"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "generate_message_id", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L169", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "generate_message_id", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L172", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L175", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L179", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "formatdate", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L181", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L182", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L186", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L188", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L192", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L194", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "join", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L194", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L198", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L202", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L204", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L208", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L210", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L214", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L216", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L220", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L222", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "lower", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L227", "receiver": "header_name"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L230", "receiver": "required_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L231", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "join", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L234", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L235", "receiver": "body"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L244", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L245", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "format_exc", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L245", "receiver": "traceback"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L246", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", "callee": "locals", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L246", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "bytes", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L254"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "decode", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L255", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "splitlines", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L260", "receiver": "content"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "startswith", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L261", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "lower", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L261", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L262", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L262", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "rsplit", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L264", "receiver": "message_id_extracted"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "rstrip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L265", "receiver": "hostname"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "lower", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L266", "receiver": "hostname"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "lower", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L266", "receiver": "helo_hostname"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L274", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "username", "is_member_call": false, "indirect": true, "context": "getattr", "source_file": "email_server/smtp_handler.py", "source_location": "L277"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "split", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L280", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "peer", "is_member_call": false, "indirect": true, "context": "getattr", "source_file": "email_server/smtp_handler.py", "source_location": "L280"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "split", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L283", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_whitelisted_ip", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L284", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L288", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "bytes", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L291"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "decode", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L292", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "encode", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L296", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "split", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L299", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_active_custom_headers", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L304", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "peer", "is_member_call": false, "indirect": true, "context": "getattr", "source_file": "email_server/smtp_handler.py", "source_location": "L307"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L309", "receiver": "custom_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L310", "receiver": "custom_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L311", "receiver": "custom_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "sign_email", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L320", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "str", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "email_server/smtp_handler.py", "source_location": "L321"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "bytes", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "email_server/smtp_handler.py", "source_location": "L321"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L322", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L326", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "splitlines", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L333", "receiver": "content"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L335"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L336", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L337", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L342", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L344"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L345", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "lower", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L348", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L350", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L352", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "format_exc", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L352", "receiver": "traceback"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L353", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "startswith", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L355", "receiver": "lower_line"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L356", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "startswith", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L357", "receiver": "lower_line"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L358", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "startswith", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L359", "receiver": "lower_line"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L360", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L362", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L364", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "format_exc", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L364", "receiver": "traceback"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L365", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_sender_by_email", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L370", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "store_message_content", "is_member_call": false, "indirect": true, "context": "getattr", "source_file": "email_server/smtp_handler.py", "source_location": "L371"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_whitelisted_ip", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L375", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "store_message_content", "is_member_call": false, "indirect": true, "context": "getattr", "source_file": "email_server/smtp_handler.py", "source_location": "L376"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L381", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L383", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "parsebytes", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L388", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "BytesParser", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L388", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "is_multipart", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L389", "receiver": "msg"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "ensure_folder_exists", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L397", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "walk", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L399", "receiver": "msg"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_content_disposition", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L400", "receiver": "part"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_filename", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L402", "receiver": "part"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_payload", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L407", "receiver": "part"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "split", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L416", "receiver": "message_id"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "join", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L420", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "ensure_folder_exists", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L424", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "write", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L428", "receiver": "f"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L429", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L431", "receiver": "attachments_to_save"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L438", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L438"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "parse_addresses", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L449", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "parse_addresses", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L450", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L455"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "warning", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L456", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "lower", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L458", "receiver": "rcpt"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L471", "receiver": "recipient_results"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L472", "receiver": "recipient_types"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "relay_email_async", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L475", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L488", "receiver": "result"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "update", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L489", "receiver": "r"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "parsebytes", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L496", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "BytesParser", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L496", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "items", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L500", "receiver": "msg"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L501", "receiver": "email_headers"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "join", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L502", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "is_multipart", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L506", "receiver": "msg"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "walk", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L507", "receiver": "msg"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_content_maintype", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L508", "receiver": "part"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_content_disposition", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L508", "receiver": "part"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_content_charset", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L510", "receiver": "part"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "decode", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L512", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_payload", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L512", "receiver": "part"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "warning", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L515", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_content_maintype", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L518", "receiver": "msg"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_content_charset", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L519", "receiver": "msg"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "decode", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L521", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "get_payload", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L521", "receiver": "msg"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "warning", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L523", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "strip", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L526", "receiver": "message_body"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "split", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L529", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "peer", "is_member_call": false, "indirect": true, "context": "getattr", "source_file": "email_server/smtp_handler.py", "source_location": "L529"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "log_email", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L532", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "join", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L538", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "Session", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L550", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "first", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L552", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L552", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "query", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L552", "receiver": "db_session"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "EmailLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/smtp_handler.py", "source_location": "L552"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "EmailAttachment", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L555", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "add", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L562", "receiver": "db_session"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "commit", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L563", "receiver": "db_session"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L565", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "rollback", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L566", "receiver": "db_session"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "close", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L568", "receiver": "db_session"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L571", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L574", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L578", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L579", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "format_exc", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L579", "receiver": "traceback"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "error", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L580", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", "callee": "locals", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L580", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_rcpt", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L585", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_rcpt", "callee": "append", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L586", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_mail", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L598", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_mail", "callee": "validate_sender_authorization", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L601", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_mail", "callee": "warning", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L604", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_handle_mail", "callee": "info", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L608", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "callee": "strftime", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L626", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "callee": "get_current_time", "is_member_call": false, "source_file": "email_server/smtp_handler.py", "source_location": "L626", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "callee": "replace", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L629", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "callee": "replace", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L629", "receiver": "sender_domain"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "callee": "join", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L630", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "callee": "replace", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L635", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "callee": "replace", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L635", "receiver": "username"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "callee": "join", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L636", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "callee": "replace", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L639", "receiver": "client_ip"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "callee": "join", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L640", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", "callee": "join", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L646", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", "callee": "guess_type", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L656", "receiver": "mimetypes"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", "callee": "split", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L661", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", "callee": "lower", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L661", "receiver": "filename"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", "callee": "get", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L675", "receiver": "type_map"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_tlscontroller_init", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L685", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_tlscontroller_factory", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L691", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_tlscontroller_factory", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L692", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_tlscontroller_factory", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L693", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_smtp_handler_tlscontroller_factory", "callee": "debug", "is_member_call": true, "source_file": "email_server/smtp_handler.py", "source_location": "L704", "receiver": "logger"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/942a2ceeef2447853d96b06f31af1bd5f903f2bb5a1aa1b2a8af45e5a80d98cc.json b/graphify-out/cache/ast/v0.9.37/942a2ceeef2447853d96b06f31af1bd5f903f2bb5a1aa1b2a8af45e5a80d98cc.json new file mode 100644 index 0000000..35c4e9e --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/942a2ceeef2447853d96b06f31af1bd5f903f2bb5a1aa1b2a8af45e5a80d98cc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_routes_py", "label": "routes.py", "file_type": "code", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L1"}, {"id": "app_template_filter", "label": "app_template_filter", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/server_web_ui/routes.py"}, {"id": "$graphify-root$_email_server_server_web_ui_routes_format_datetime", "label": "format_datetime()", "file_type": "code", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L26", "_callable": true}, {"id": "errorhandler", "label": "errorhandler", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/server_web_ui/routes.py"}, {"id": "$graphify-root$_email_server_server_web_ui_routes_not_found", "label": "not_found()", "file_type": "code", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L44", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_routes_internal_error", "label": "internal_error()", "file_type": "code", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L52", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_routes_rationale_1", "label": "Main routes and blueprint definition for the SMTP server web UI.", "file_type": "rationale", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_routes_rationale_27", "label": "Format datetime with the correct timezone from settings or argument.", "file_type": "rationale", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L27"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_routes_py", "target": "flask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L4", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_routes_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_routes_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_routes_py", "target": "email_server_settings_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_routes_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_routes_py", "target": "pytz", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_routes_format_datetime", "target": "app_template_filter", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L25", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_routes_py", "target": "$graphify-root$_email_server_server_web_ui_routes_format_datetime", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L26", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_routes_py", "target": "$graphify-root$_email_server_server_web_ui_view_message_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L40", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/view_message.py"}, {"source": "$graphify-root$_email_server_server_web_ui_routes_not_found", "target": "errorhandler", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L43", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_routes_py", "target": "$graphify-root$_email_server_server_web_ui_routes_not_found", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L44", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_routes_internal_error", "target": "errorhandler", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L51", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_routes_py", "target": "$graphify-root$_email_server_server_web_ui_routes_internal_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L52", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_routes_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_routes_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_routes_rationale_27", "target": "$graphify-root$_email_server_server_web_ui_routes_format_datetime", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/routes.py", "source_location": "L27", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_web_ui_routes_format_datetime", "callee": "load_settings", "is_member_call": false, "source_file": "email_server/server_web_ui/routes.py", "source_location": "L32", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_routes_format_datetime", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/routes.py", "source_location": "L33", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_routes_format_datetime", "callee": "timezone", "is_member_call": true, "source_file": "email_server/server_web_ui/routes.py", "source_location": "L34", "receiver": "pytz"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_routes_format_datetime", "callee": "localize", "is_member_call": true, "source_file": "email_server/server_web_ui/routes.py", "source_location": "L36", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_routes_format_datetime", "callee": "astimezone", "is_member_call": true, "source_file": "email_server/server_web_ui/routes.py", "source_location": "L37", "receiver": "value"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_routes_format_datetime", "callee": "strftime", "is_member_call": true, "source_file": "email_server/server_web_ui/routes.py", "source_location": "L38", "receiver": "local_dt"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_routes_not_found", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/routes.py", "source_location": "L46", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_routes_not_found", "callee": "get_current_time", "is_member_call": false, "source_file": "email_server/server_web_ui/routes.py", "source_location": "L49", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_routes_internal_error", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/routes.py", "source_location": "L54", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_routes_internal_error", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/routes.py", "source_location": "L55", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_routes_internal_error", "callee": "get_current_time", "is_member_call": false, "source_file": "email_server/server_web_ui/routes.py", "source_location": "L58", "receiver": null}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/a5649989118c33ca032b514efc2c85753464c6302189270afb000a7013b59981.json b/graphify-out/cache/ast/v0.9.37/a5649989118c33ca032b514efc2c85753464c6302189270afb000a7013b59981.json new file mode 100644 index 0000000..b24be87 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/a5649989118c33ca032b514efc2c85753464c6302189270afb000a7013b59981.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_email_relay_py", "label": "email_relay.py", "file_type": "code", "source_file": "email_server/email_relay.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_email_relay_emailrelay", "label": "EmailRelay", "file_type": "code", "source_file": "email_server/email_relay.py", "source_location": "L19", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_email_relay_emailrelay_init", "label": ".__init__()", "file_type": "code", "source_file": "email_server/email_relay.py", "source_location": "L22", "_callable": true}, {"id": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "label": "._modify_headers_for_recipients()", "file_type": "code", "source_file": "email_server/email_relay.py", "source_location": "L29", "_callable": true}, {"id": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "label": "._prepare_email_for_recipient()", "file_type": "code", "source_file": "email_server/email_relay.py", "source_location": "L68", "_callable": true}, {"id": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "label": ".relay_email_async()", "file_type": "code", "source_file": "email_server/email_relay.py", "source_location": "L101", "_callable": true}, {"id": "$graphify-root$_email_server_email_relay_emailrelay_relay_email", "label": ".relay_email()", "file_type": "code", "source_file": "email_server/email_relay.py", "source_location": "L296", "_callable": true}, {"id": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "label": ".log_email()", "file_type": "code", "source_file": "email_server/email_relay.py", "source_location": "L300", "_callable": true}, {"id": "$graphify-root$_email_server_email_relay_rationale_1", "label": "Email relay functionality for the SMTP server.", "file_type": "rationale", "source_file": "email_server/email_relay.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_email_relay_rationale_20", "label": "Handles relaying emails to recipient mail servers.", "file_type": "rationale", "source_file": "email_server/email_relay.py", "source_location": "L20"}, {"id": "$graphify-root$_email_server_email_relay_rationale_30", "label": "Modify email headers to set To and Cc fields, preserving original structure for\u2026", "file_type": "rationale", "source_file": "email_server/email_relay.py", "source_location": "L30"}, {"id": "$graphify-root$_email_server_email_relay_rationale_69", "label": "Prepare a copy of the email for a specific recipient without modifying original\u2026", "file_type": "rationale", "source_file": "email_server/email_relay.py", "source_location": "L69"}, {"id": "$graphify-root$_email_server_email_relay_rationale_111", "label": "Relay email to recipients' mail servers asynchronously with encryption.\u2026", "file_type": "rationale", "source_file": "email_server/email_relay.py", "source_location": "L111"}, {"id": "$graphify-root$_email_server_email_relay_rationale_297", "label": "Synchronous wrapper for relay_email_async for compatibility.", "file_type": "rationale", "source_file": "email_server/email_relay.py", "source_location": "L297"}, {"id": "$graphify-root$_email_server_email_relay_rationale_301", "label": "Log email activity to database, including per-recipient results.", "file_type": "rationale", "source_file": "email_server/email_relay.py", "source_location": "L301"}], "edges": [{"source": "$graphify-root$_email_server_email_relay_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_py", "target": "dns_resolver", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_py", "target": "email_server_settings_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_py", "target": "aiosmtplib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_py", "target": "$graphify-root$_email_server_email_relay_emailrelay", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_emailrelay", "target": "$graphify-root$_email_server_email_relay_emailrelay_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_emailrelay", "target": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L29", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_emailrelay", "target": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L68", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_emailrelay", "target": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L101", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_emailrelay", "target": "$graphify-root$_email_server_email_relay_emailrelay_relay_email", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L296", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_emailrelay", "target": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L300", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "target": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L149", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_emailrelay_relay_email", "target": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L298", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_rationale_1", "target": "$graphify-root$_email_server_email_relay_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_rationale_20", "target": "$graphify-root$_email_server_email_relay_emailrelay", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_rationale_30", "target": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L30", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_rationale_69", "target": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L69", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_rationale_111", "target": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L111", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_rationale_297", "target": "$graphify-root$_email_server_email_relay_emailrelay_relay_email", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L297", "weight": 1.0}, {"source": "$graphify-root$_email_server_email_relay_rationale_301", "target": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/email_relay.py", "source_location": "L301", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_init", "callee": "_relay_tls_timeout", "is_member_call": false, "indirect": true, "context": "assignment", "source_file": "email_server/email_relay.py", "source_location": "L24"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_init", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L26", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_init", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L26", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_init", "callee": "debug", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L27", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "splitlines", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L37", "receiver": "content"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "strip", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L45", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "startswith", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L49", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "lower", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L49", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "startswith", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L52", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "lower", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L52", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "startswith", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L54", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "lower", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L54", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L56", "receiver": "new_headers"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L60", "receiver": "new_headers"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "join", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L60", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L62", "receiver": "new_headers"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "join", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L62", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "join", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L65", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_modify_headers_for_recipients", "callee": "join", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L66", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "callee": "splitlines", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L78", "receiver": "content"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "callee": "strip", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L85", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L88", "receiver": "new_lines"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "callee": "startswith", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L90", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "callee": "lower", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L90", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L91", "receiver": "new_lines"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L93", "receiver": "new_lines"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L97", "receiver": "new_lines"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_prepare_email_for_recipient", "callee": "join", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L99", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L127", "receiver": "recipient_type_map"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L128", "receiver": "visible_recipients"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L129", "receiver": "recipient_type_map"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L130", "receiver": "bcc_list"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "lower", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L135", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "split", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L135", "receiver": "rcpt"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L136", "receiver": "recipient_type_map"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L139", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "items", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L142", "receiver": "domain_groups"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "resolve", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L152", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "rstrip", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L154", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "to_text", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L154", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "debug", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L155", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "error", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L157", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L159", "receiver": "results"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/email_relay.py", "source_location": "L163"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L165", "receiver": "recipient_type_map"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "SMTP", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L173", "receiver": "aiosmtplib"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "port", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/email_relay.py", "source_location": "L173"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "connect", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L174", "receiver": "smtp"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "extensions", "is_member_call": false, "indirect": true, "context": "getattr", "source_file": "email_server/email_relay.py", "source_location": "L175"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "esmtp_extensions", "is_member_call": false, "indirect": true, "context": "getattr", "source_file": "email_server/email_relay.py", "source_location": "L177"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "error", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L179", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "debug", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L182", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "starttls", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L183", "receiver": "smtp"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "warning", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L185", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "sendmail", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L186", "receiver": "smtp"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "debug", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L187", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L189", "receiver": "results"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L195", "receiver": "recipient_type_map"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "quit", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L197", "receiver": "smtp"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "error", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L201", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/email_relay.py", "source_location": "L205"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L212", "receiver": "results"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L218", "receiver": "recipient_type_map"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "lower", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L223", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "split", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L223", "receiver": "bcc"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "resolve", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L228", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "rstrip", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L230", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "to_text", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L230", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "debug", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L231", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "error", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L233", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L234", "receiver": "results"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/email_relay.py", "source_location": "L238"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "SMTP", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L248", "receiver": "aiosmtplib"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "port", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/email_relay.py", "source_location": "L248"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "connect", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L249", "receiver": "smtp"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "extensions", "is_member_call": false, "indirect": true, "context": "getattr", "source_file": "email_server/email_relay.py", "source_location": "L250"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "esmtp_extensions", "is_member_call": false, "indirect": true, "context": "getattr", "source_file": "email_server/email_relay.py", "source_location": "L252"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "error", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L254", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "debug", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L257", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "starttls", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L258", "receiver": "smtp"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "warning", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L260", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "sendmail", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L261", "receiver": "smtp"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "debug", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L262", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L263", "receiver": "results"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "quit", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L271", "receiver": "smtp"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "error", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L275", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/email_relay.py", "source_location": "L279"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email_async", "callee": "append", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L285", "receiver": "results"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_relay_email", "callee": "run", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L298", "receiver": "asyncio"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "Session", "is_member_call": false, "source_file": "email_server/email_relay.py", "source_location": "L302", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "EmailLog", "is_member_call": false, "source_file": "email_server/email_relay.py", "source_location": "L314", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "get_current_time", "is_member_call": false, "source_file": "email_server/email_relay.py", "source_location": "L316", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "add", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L329", "receiver": "session_db"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "flush", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L330", "receiver": "session_db"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "EmailRecipientLog", "is_member_call": false, "source_file": "email_server/email_relay.py", "source_location": "L335", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L338", "receiver": "r"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L340", "receiver": "r"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L341", "receiver": "r"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "get", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L342", "receiver": "r"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "add", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L344", "receiver": "session_db"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "commit", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L345", "receiver": "session_db"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "debug", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L346", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "rollback", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L348", "receiver": "session_db"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "error", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L349", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_email_relay_emailrelay_log_email", "callee": "close", "is_member_call": true, "source_file": "email_server/email_relay.py", "source_location": "L351", "receiver": "session_db"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/ad38a35c39e2aa05007ebe74529fee8583c558b70b4fdeb33e8f6818d4c0cbd3.json b/graphify-out/cache/ast/v0.9.37/ad38a35c39e2aa05007ebe74529fee8583c558b70b4fdeb33e8f6818d4c0cbd3.json new file mode 100644 index 0000000..0365e74 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/ad38a35c39e2aa05007ebe74529fee8583c558b70b4fdeb33e8f6818d4c0cbd3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tests_bash_send_email_sh", "label": "bash_send_email.sh", "file_type": "code", "source_file": "tests/bash_send_email.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "file"}}, {"id": "$graphify-root$_tests_bash_send_email_sh__entry", "label": "bash_send_email.sh script", "file_type": "code", "source_file": "tests/bash_send_email.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "bash_entrypoint"}}], "edges": [{"source": "$graphify-root$_tests_bash_send_email_sh", "target": "$graphify-root$_tests_bash_send_email_sh__entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/bash_send_email.sh", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"language": "bash", "callee": "--cc", "caller_nid": "$graphify-root$_tests_bash_send_email_sh__entry", "source_file": "tests/bash_send_email.sh", "source_location": "L20"}, {"language": "bash", "callee": "swaks", "caller_nid": "$graphify-root$_tests_bash_send_email_sh__entry", "source_file": "tests/bash_send_email.sh", "source_location": "L25"}, {"language": "bash", "callee": "com", "caller_nid": "$graphify-root$_tests_bash_send_email_sh__entry", "source_file": "tests/bash_send_email.sh", "source_location": "L40"}], "bash_sources": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/b013764224b9ff43f3703b70a1d988acbbaf215305f2ea02898430d9d9ce746e.json b/graphify-out/cache/ast/v0.9.37/b013764224b9ff43f3703b70a1d988acbbaf215305f2ea02898430d9d9ce746e.json new file mode 100644 index 0000000..ea6a775 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/b013764224b9ff43f3703b70a1d988acbbaf215305f2ea02898430d9d9ce746e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_init_py", "label": "__init__.py", "file_type": "code", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_init_rationale_1", "label": "SMTP Server Web UI Package This package provides a web interface for managing\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_init_py", "target": "$graphify-root$_email_server_server_web_ui_routes_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L8", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/routes.py"}, {"source": "$graphify-root$_email_server_server_web_ui_init_py", "target": "$graphify-root$_email_server_server_web_ui_dashboard_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L11", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/dashboard.py"}, {"source": "$graphify-root$_email_server_server_web_ui_init_py", "target": "$graphify-root$_email_server_server_web_ui_domains_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L12", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/domains.py"}, {"source": "$graphify-root$_email_server_server_web_ui_init_py", "target": "$graphify-root$_email_server_server_web_ui_senders_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L13", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/senders.py"}, {"source": "$graphify-root$_email_server_server_web_ui_init_py", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L14", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/ip_whitelist.py"}, {"source": "$graphify-root$_email_server_server_web_ui_init_py", "target": "$graphify-root$_email_server_server_web_ui_dkim_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L15", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/dkim.py"}, {"source": "$graphify-root$_email_server_server_web_ui_init_py", "target": "$graphify-root$_email_server_server_web_ui_settings_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L16", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/settings.py"}, {"source": "$graphify-root$_email_server_server_web_ui_init_py", "target": "$graphify-root$_email_server_server_web_ui_logs_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L17", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/logs.py"}, {"source": "$graphify-root$_email_server_server_web_ui_init_py", "target": "$graphify-root$_email_server_server_web_ui_view_message_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L18", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/view_message.py"}, {"source": "$graphify-root$_email_server_server_web_ui_init_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/bcda078e5fce29334bb7fd3ebfa5e41ff6c3d05409b9e05ab1e9b028f710e0bd.json b/graphify-out/cache/ast/v0.9.37/bcda078e5fce29334bb7fd3ebfa5e41ff6c3d05409b9e05ab1e9b028f710e0bd.json new file mode 100644 index 0000000..25ff63c --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/bcda078e5fce29334bb7fd3ebfa5e41ff6c3d05409b9e05ab1e9b028f710e0bd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_script_install_service_sh", "label": "script_install_service.sh", "file_type": "code", "source_file": "script_install_service.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "file"}}, {"id": "$graphify-root$_script_install_service_sh__entry", "label": "script_install_service.sh script", "file_type": "code", "source_file": "script_install_service.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "bash_entrypoint"}}, {"id": "$graphify-root$_script_install_service_usage", "label": "usage()", "file_type": "code", "source_file": "script_install_service.sh", "source_location": "L17", "metadata": {"language": "bash", "kind": "bash_function"}}, {"id": "$graphify-root$_script_install_service_write_user_services", "label": "write_user_services()", "file_type": "code", "source_file": "script_install_service.sh", "source_location": "L59", "metadata": {"language": "bash", "kind": "bash_function"}}, {"id": "$graphify-root$_script_install_service_remove_user_services", "label": "remove_user_services()", "file_type": "code", "source_file": "script_install_service.sh", "source_location": "L129", "metadata": {"language": "bash", "kind": "bash_function"}}, {"id": "$graphify-root$_script_install_service_write_system_services", "label": "write_system_services()", "file_type": "code", "source_file": "script_install_service.sh", "source_location": "L140", "metadata": {"language": "bash", "kind": "bash_function"}}, {"id": "$graphify-root$_script_install_service_remove_system_services", "label": "remove_system_services()", "file_type": "code", "source_file": "script_install_service.sh", "source_location": "L210", "metadata": {"language": "bash", "kind": "bash_function"}}], "edges": [{"source": "$graphify-root$_script_install_service_sh", "target": "$graphify-root$_script_install_service_sh__entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "script_install_service.sh", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_script_install_service_sh", "target": "$graphify-root$_script_install_service_usage", "relation": "defines", "confidence": "EXTRACTED", "source_file": "script_install_service.sh", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_script_install_service_sh", "target": "$graphify-root$_script_install_service_write_user_services", "relation": "defines", "confidence": "EXTRACTED", "source_file": "script_install_service.sh", "source_location": "L59", "weight": 1.0}, {"source": "$graphify-root$_script_install_service_sh", "target": "$graphify-root$_script_install_service_remove_user_services", "relation": "defines", "confidence": "EXTRACTED", "source_file": "script_install_service.sh", "source_location": "L129", "weight": 1.0}, {"source": "$graphify-root$_script_install_service_sh", "target": "$graphify-root$_script_install_service_write_system_services", "relation": "defines", "confidence": "EXTRACTED", "source_file": "script_install_service.sh", "source_location": "L140", "weight": 1.0}, {"source": "$graphify-root$_script_install_service_sh", "target": "$graphify-root$_script_install_service_remove_system_services", "relation": "defines", "confidence": "EXTRACTED", "source_file": "script_install_service.sh", "source_location": "L210", "weight": 1.0}, {"source": "$graphify-root$_script_install_service_sh__entry", "target": "$graphify-root$_script_install_service_usage", "relation": "calls", "confidence": "EXTRACTED", "source_file": "script_install_service.sh", "source_location": "L54", "weight": 1.0, "context": "call"}, {"source": "$graphify-root$_script_install_service_sh__entry", "target": "$graphify-root$_script_install_service_remove_system_services", "relation": "calls", "confidence": "EXTRACTED", "source_file": "script_install_service.sh", "source_location": "L224", "weight": 1.0, "context": "call"}, {"source": "$graphify-root$_script_install_service_sh__entry", "target": "$graphify-root$_script_install_service_remove_user_services", "relation": "calls", "confidence": "EXTRACTED", "source_file": "script_install_service.sh", "source_location": "L226", "weight": 1.0, "context": "call"}, {"source": "$graphify-root$_script_install_service_sh__entry", "target": "$graphify-root$_script_install_service_write_system_services", "relation": "calls", "confidence": "EXTRACTED", "source_file": "script_install_service.sh", "source_location": "L230", "weight": 1.0, "context": "call"}, {"source": "$graphify-root$_script_install_service_sh__entry", "target": "$graphify-root$_script_install_service_write_user_services", "relation": "calls", "confidence": "EXTRACTED", "source_file": "script_install_service.sh", "source_location": "L232", "weight": 1.0, "context": "call"}], "raw_calls": [{"language": "bash", "callee": "shift", "caller_nid": "$graphify-root$_script_install_service_sh__entry", "source_file": "script_install_service.sh", "source_location": "L33"}, {"language": "bash", "callee": "echo", "caller_nid": "$graphify-root$_script_install_service_usage", "source_file": "script_install_service.sh", "source_location": "L18"}, {"language": "bash", "callee": "exit", "caller_nid": "$graphify-root$_script_install_service_usage", "source_file": "script_install_service.sh", "source_location": "L24"}, {"language": "bash", "callee": "mkdir", "caller_nid": "$graphify-root$_script_install_service_write_user_services", "source_file": "script_install_service.sh", "source_location": "L60"}, {"language": "bash", "callee": "cat", "caller_nid": "$graphify-root$_script_install_service_write_user_services", "source_file": "script_install_service.sh", "source_location": "L62"}, {"language": "bash", "callee": "systemctl", "caller_nid": "$graphify-root$_script_install_service_write_user_services", "source_file": "script_install_service.sh", "source_location": "L115"}, {"language": "bash", "callee": "echo", "caller_nid": "$graphify-root$_script_install_service_write_user_services", "source_file": "script_install_service.sh", "source_location": "L120"}, {"language": "bash", "callee": "systemctl", "caller_nid": "$graphify-root$_script_install_service_remove_user_services", "source_file": "script_install_service.sh", "source_location": "L130"}, {"language": "bash", "callee": "true", "caller_nid": "$graphify-root$_script_install_service_remove_user_services", "source_file": "script_install_service.sh", "source_location": "L130"}, {"language": "bash", "callee": "rm", "caller_nid": "$graphify-root$_script_install_service_remove_user_services", "source_file": "script_install_service.sh", "source_location": "L134"}, {"language": "bash", "callee": "echo", "caller_nid": "$graphify-root$_script_install_service_remove_user_services", "source_file": "script_install_service.sh", "source_location": "L137"}, {"language": "bash", "callee": "sudo", "caller_nid": "$graphify-root$_script_install_service_write_system_services", "source_file": "script_install_service.sh", "source_location": "L143"}, {"language": "bash", "callee": "echo", "caller_nid": "$graphify-root$_script_install_service_write_system_services", "source_file": "script_install_service.sh", "source_location": "L201"}, {"language": "bash", "callee": "sudo", "caller_nid": "$graphify-root$_script_install_service_remove_system_services", "source_file": "script_install_service.sh", "source_location": "L211"}, {"language": "bash", "callee": "true", "caller_nid": "$graphify-root$_script_install_service_remove_system_services", "source_file": "script_install_service.sh", "source_location": "L211"}, {"language": "bash", "callee": "echo", "caller_nid": "$graphify-root$_script_install_service_remove_system_services", "source_file": "script_install_service.sh", "source_location": "L218"}], "bash_sources": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/bcf615dd96ae8d600e5bb49d966729ddef6479f806a57df02d5f1001c4a5c790.json b/graphify-out/cache/ast/v0.9.37/bcf615dd96ae8d600e5bb49d966729ddef6479f806a57df02d5f1001c4a5c790.json new file mode 100644 index 0000000..992d2fa --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/bcf615dd96ae8d600e5bb49d966729ddef6479f806a57df02d5f1001c4a5c790.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_dashboard_py", "label": "dashboard.py", "file_type": "code", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L1"}, {"id": "route", "label": "route", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/server_web_ui/dashboard.py"}, {"id": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "label": "dashboard()", "file_type": "code", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L16", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_dashboard_rationale_1", "label": "Dashboard routes for the SMTP server web UI. This module provides the main\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_dashboard_rationale_17", "label": "Main dashboard showing overview of the email server.", "file_type": "rationale", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L17"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_dashboard_py", "target": "flask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dashboard_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dashboard_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dashboard_py", "target": "$graphify-root$_email_server_server_web_ui_routes_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L10", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/routes.py"}, {"source": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L15", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_dashboard_py", "target": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dashboard_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_dashboard_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dashboard_rationale_17", "target": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L17", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L18", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "count", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L21", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L21", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L21", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L21"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "count", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L22", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L22", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L22", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L22"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "count", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L23", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L23", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L23", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L23"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "limit", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L26", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L26", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L26", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "EmailLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L26"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "desc", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L26", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L28", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L28", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "EmailRecipientLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L28"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "limit", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L31", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L31", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L31", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "AuthLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L31"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "desc", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L31", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L33", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dashboard_dashboard", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/dashboard.py", "source_location": "L41", "receiver": "session"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/cb66b7b4567fe8005046435eeb57111626591f9f0473d1b7cd63c70c34cce33e.json b/graphify-out/cache/ast/v0.9.37/cb66b7b4567fe8005046435eeb57111626591f9f0473d1b7cd63c70c34cce33e.json new file mode 100644 index 0000000..3849584 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/cb66b7b4567fe8005046435eeb57111626591f9f0473d1b7cd63c70c34cce33e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_dkim_py", "label": "dkim.py", "file_type": "code", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L1"}, {"id": "route", "label": "route", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/server_web_ui/dkim.py"}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "label": "dkim_list()", "file_type": "code", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L25", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "label": "create_dkim()", "file_type": "code", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L93", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "label": "regenerate_dkim()", "file_type": "code", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L128", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "label": "edit_dkim()", "file_type": "code", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L259", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "label": "toggle_dkim()", "file_type": "code", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L311", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "label": "remove_dkim()", "file_type": "code", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L363", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "label": "check_dkim_dns()", "file_type": "code", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L391", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_check_spf_dns", "label": "check_spf_dns()", "file_type": "code", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L418", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_rationale_1", "label": "DKIM blueprint for the SMTP server web UI. This module provides DKIM key\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_rationale_26", "label": "List all DKIM keys and DNS records.", "file_type": "rationale", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L26"}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_rationale_94", "label": "Create a new DKIM key for a domain, optionally with a custom selector.", "file_type": "rationale", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L94"}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_rationale_129", "label": "Regenerate DKIM key for domain.", "file_type": "rationale", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L129"}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_rationale_260", "label": "Edit DKIM key selector.", "file_type": "rationale", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L260"}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_rationale_312", "label": "Toggle DKIM key active status (Enable/Disable).", "file_type": "rationale", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L312"}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_rationale_364", "label": "Permanently remove DKIM key.", "file_type": "rationale", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L364"}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_rationale_392", "label": "Check DKIM DNS record via AJAX.", "file_type": "rationale", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L392"}, {"id": "$graphify-root$_email_server_server_web_ui_dkim_rationale_419", "label": "Check SPF DNS record via AJAX.", "file_type": "rationale", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L419"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "flask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "email_server_dkim_manager", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "$graphify-root$_email_server_server_web_ui_utils_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L18", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/utils.py"}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "$graphify-root$_email_server_server_web_ui_routes_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L19", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/routes.py"}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L24", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L92", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L93", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L127", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L128", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L258", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L259", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L310", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L311", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L362", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L363", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L390", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L391", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_check_spf_dns", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L417", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_py", "target": "$graphify-root$_email_server_server_web_ui_dkim_check_spf_dns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L418", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_dkim_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_rationale_26", "target": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L26", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_rationale_94", "target": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L94", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_rationale_129", "target": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L129", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_rationale_260", "target": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L260", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_rationale_312", "target": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L312", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_rationale_364", "target": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L364", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_rationale_392", "target": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L392", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_dkim_rationale_419", "target": "$graphify-root$_email_server_server_web_ui_dkim_check_spf_dns", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L419", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L27", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L30", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L30", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L31"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L30", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L30"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L30"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L35", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L35", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L36"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L35", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L35"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L35"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "nullslast", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L39", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "desc", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L39", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "desc", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L40", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "get_public_ip", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L44", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "DKIMManager", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L50", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "get_dkim_public_key_record", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L51", "receiver": "dkim_manager"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "check_dns_record", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L54", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "generate_spf_record", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L63", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "append", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L65", "receiver": "active_dkim_data"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "append", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L77", "receiver": "old_dkim_data"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L85", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_dkim_list", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L89", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "get_json", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L96", "receiver": "request"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L97", "receiver": "data"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L98", "receiver": "data"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L99", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L102", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "first", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L103", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L103", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L103", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L103"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L105", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L107", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L107", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L107"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "get_current_time", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L110", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "DKIMManager", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L112", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "generate_dkim_keypair", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L113", "receiver": "dkim_manager"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L115", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L116", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L118", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L119", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L121", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L122", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L123", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L123"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_create_dkim", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L125", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L130", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L132", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L132", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L132"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L134", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L135", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L136", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L137", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L137", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L140", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L140", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L140"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get_current_time", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L149", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "DKIMManager", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L152", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "generate_dkim_keypair", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L153", "receiver": "dkim_manager"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L154", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "first", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L157", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L157", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L157", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L157", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L157"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "desc", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L159", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L162", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L163", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L163", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L164", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L165", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L166", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L166", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L168", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L168", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get_dkim_public_key_record", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L170", "receiver": "dkim_manager"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get_public_ip", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L171", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "check_dns_record", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L174", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "generate_spf_record", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L182", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L185", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L185", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L186"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L185", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L185"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L185"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "desc", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L190", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "append", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L195", "receiver": "old_dkim_data"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "strftime", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L199", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "strftime", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L200", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L213", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L214", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L216", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "strftime", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L222", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L239", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L241", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L242", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L242", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L243", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L244", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L246", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L246", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L249", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L250", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L251", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L251", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L252", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L252"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L253", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L253"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L254", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L254", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_regenerate_dkim", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L256", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L261", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L263", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L263", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L263"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L265", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L266", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L266", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L268", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L268", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L268"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L271", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L271", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L274", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L275", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "match", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L278", "receiver": "re"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L279", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L280", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "first", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L283", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L283", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L283", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L283"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L290", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L291", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L295", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L297", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L298", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L298", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L300", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L303", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L304", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L305", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L305"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L306", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L306", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_edit_dkim", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L308", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L313", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L315", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L315", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L315"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L317", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L318", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L319", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L320", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L320", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L322", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L322", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L322"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L327", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L327"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "get_current_time", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L334", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L340", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L343", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L344", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L350", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L351", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L351", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L353", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L354", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L355", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L356", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L356"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L357", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L357"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L358", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L358", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_toggle_dkim", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L360", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L365", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L367", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L367", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L367"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L369", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L370", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L370", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L372", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L372", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L372"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "delete", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L375", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L376", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L378", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L379", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L379", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L382", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L383", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L384", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L384"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L385", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L385", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_remove_dkim", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L387", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L393", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L394", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L397", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "DKIMManager", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L401", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "get_dkim_public_key_record", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L402", "receiver": "dkim_manager"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L404", "receiver": "dns_record"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L405", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "check_dns_record", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L410", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L412", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L414", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L415", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_dkim_dns", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L415"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_spf_dns", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L420", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_spf_dns", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L423", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_spf_dns", "callee": "check_dns_record", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L425", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_spf_dns", "callee": "get_public_ip", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L437", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_dkim_check_spf_dns", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/dkim.py", "source_location": "L453", "receiver": null}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/d02e9085659d7c0ee4ca204b92a49a288f46488423e4c0c762f8f6608ed302c9.json b/graphify-out/cache/ast/v0.9.37/d02e9085659d7c0ee4ca204b92a49a288f46488423e4c0c762f8f6608ed302c9.json new file mode 100644 index 0000000..d9f6566 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/d02e9085659d7c0ee4ca204b92a49a288f46488423e4c0c762f8f6608ed302c9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "label": "ip_whitelist.py", "file_type": "code", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L1"}, {"id": "route", "label": "route", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/server_web_ui/ip_whitelist.py"}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "label": "ips_list()", "file_type": "code", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L21", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "label": "add_ip()", "file_type": "code", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L31", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "label": "disable_ip()", "file_type": "code", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L82", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "label": "enable_ip()", "file_type": "code", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L107", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "label": "remove_ip()", "file_type": "code", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L132", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "label": "edit_ip()", "file_type": "code", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L157", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_1", "label": "IP Whitelist blueprint for the SMTP server web UI. This module provides IP\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_22", "label": "List all whitelisted IPs.", "file_type": "rationale", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L22"}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_32", "label": "Add new whitelisted IP.", "file_type": "rationale", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L32"}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_83", "label": "Disable whitelisted IP (soft delete).", "file_type": "rationale", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L83"}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_108", "label": "Enable whitelisted IP.", "file_type": "rationale", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L108"}, {"id": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_133", "label": "Permanently remove whitelisted IP.", "file_type": "rationale", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L133"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "target": "flask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "target": "$graphify-root$_email_server_server_web_ui_routes_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L14", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/routes.py"}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "target": "socket", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L20", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L30", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L81", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L82", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L106", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L107", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L131", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L132", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L156", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L157", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_22", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_32", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L32", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_83", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L83", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_108", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L108", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_ip_whitelist_rationale_133", "target": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L133", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L23", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L25", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L25", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L25"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L25", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "callee": "WhitelistedIP", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L25"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L25"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L26", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_ips_list", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L28", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L33", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L35", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L35", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L35", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L35"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L38", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L38", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L39", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "int", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L39"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L40", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L43", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L44", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L44", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "inet_aton", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L48", "receiver": "socket"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L50", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L51", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L51", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "first", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L54", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L54", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L54", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "WhitelistedIP", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L54"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L56", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L57", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L57", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "WhitelistedIP", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L60", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "add", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L65", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L66", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L68", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L69", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L69", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L71", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L74", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L75", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L76", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L76"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L77", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L77", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_add_ip", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L79", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L84", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L86", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L86", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "WhitelistedIP", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L86"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L88", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L89", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L89", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L93", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L95", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L96", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L96", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L99", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L100", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L101", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L101"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L102", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L102", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_disable_ip", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L104", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L109", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L111", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L111", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "WhitelistedIP", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L111"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L113", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L114", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L114", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L118", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L120", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L121", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L121", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L124", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L125", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L126", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L126"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L127", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L127", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_enable_ip", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L129", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L134", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L136", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L136", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "WhitelistedIP", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L136"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L138", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L139", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L139", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "delete", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L142", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L143", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L145", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L146", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L146", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L149", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L150", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L151", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L151"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L152", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L152", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_remove_ip", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L154", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L159", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L161", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L161", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "WhitelistedIP", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L161"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L163", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L164", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L164", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L166", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L166", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L166", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L166"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L169", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L169", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L170", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "int", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L170"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L171", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L174", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L175", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L175", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "inet_aton", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L179", "receiver": "socket"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L181", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L182", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L182", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "first", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L185", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L185", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "WhitelistedIP", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L185"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L191", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L192", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L192", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L198", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L200", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L201", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L201", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L203", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L206", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L207", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L208", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L208"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L209", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L209", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_ip_whitelist_edit_ip", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/ip_whitelist.py", "source_location": "L211", "receiver": "session"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/d90980483980ea4ae23d9292908946220f23d36f547a8c9ef1640e6d373ee842.json b/graphify-out/cache/ast/v0.9.37/d90980483980ea4ae23d9292908946220f23d36f547a8c9ef1640e6d373ee842.json new file mode 100644 index 0000000..a637bcd --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/d90980483980ea4ae23d9292908946220f23d36f547a8c9ef1640e6d373ee842.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_view_message_py", "label": "view_message.py", "file_type": "code", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L1"}, {"id": "route", "label": "route", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/server_web_ui/view_message.py"}, {"id": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "label": "view_message_content()", "file_type": "code", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L13", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "label": "download_attachment()", "file_type": "code", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L30", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "label": "delete_attachment()", "file_type": "code", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L115", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_view_message_rationale_1", "label": "Route to view full email message content if stored.", "file_type": "rationale", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_view_message_rationale_14", "label": "View the full message content for an email log if stored.", "file_type": "rationale", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L14"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_view_message_py", "target": "flask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L4", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_py", "target": "$graphify-root$_email_server_server_web_ui_routes_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L7", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/routes.py"}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L12", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_py", "target": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L29", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_py", "target": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L30", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L114", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_py", "target": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L115", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_view_message_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_view_message_rationale_14", "target": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L14", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L15", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "callee": "first", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L18", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L18", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L18", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "callee": "EmailLog", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L18"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "callee": "abort", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L20", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L23", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L23", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "callee": "EmailAttachment", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L23"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L26", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_view_message_content", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L28", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L31", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L33", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L33", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "EmailAttachment", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L33"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "isfile", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L34", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L35", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L36", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L36", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "lower", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L39", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "splitext", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L40", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "lower", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L40", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "lower", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L43", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L43", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "read", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L70", "receiver": "f"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "split", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L80", "receiver": "csv_content"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L81", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L85", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "split", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L85", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L87", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "split", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L87", "receiver": "line"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "warning", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L93", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "send_file", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L99", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "send_file", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L106", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_download_attachment", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L111", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L116", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L118", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L118", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "EmailAttachment", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L118"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L120", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L121", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L121", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "isfile", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L123", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "remove", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L124", "receiver": "os"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "delete", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L126", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L127", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L128", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L129", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L129", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_view_message_delete_attachment", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/view_message.py", "source_location": "L131", "receiver": "session"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/e428638c29836f809dc52800b8097257019f60de16815b82b8eee236072594d2.json b/graphify-out/cache/ast/v0.9.37/e428638c29836f809dc52800b8097257019f60de16815b82b8eee236072594d2.json new file mode 100644 index 0000000..1120940 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/e428638c29836f809dc52800b8097257019f60de16815b82b8eee236072594d2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_script_nginx_setup_sh", "label": "script_nginx_setup.sh", "file_type": "code", "source_file": "script_nginx_setup.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "file"}}, {"id": "$graphify-root$_script_nginx_setup_sh__entry", "label": "script_nginx_setup.sh script", "file_type": "code", "source_file": "script_nginx_setup.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "bash_entrypoint"}}, {"id": "$graphify-root$_script_nginx_setup_error_messages", "label": "ERROR_MESSAGES", "file_type": "code", "source_file": "script_nginx_setup.sh", "source_location": "L26", "metadata": {"language": "bash", "kind": "code"}}], "edges": [{"source": "$graphify-root$_script_nginx_setup_sh", "target": "$graphify-root$_script_nginx_setup_sh__entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "script_nginx_setup.sh", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_script_nginx_setup_sh", "target": "$graphify-root$_script_nginx_setup_error_messages", "relation": "defines", "confidence": "EXTRACTED", "source_file": "script_nginx_setup.sh", "source_location": "L26", "weight": 1.0}], "raw_calls": [{"language": "bash", "callee": "set", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L22"}, {"language": "bash", "callee": "echo", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L39"}, {"language": "bash", "callee": "exit", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L40"}, {"language": "bash", "callee": "apt", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L45"}, {"language": "bash", "callee": "mkdir", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L50"}, {"language": "bash", "callee": "python3", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L51"}, {"language": "bash", "callee": "pip3", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L56"}, {"language": "bash", "callee": "deactivate", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L62"}, {"language": "bash", "callee": "cat", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L76"}, {"language": "bash", "callee": "chown", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L101"}, {"language": "bash", "callee": "chmod", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L102"}, {"language": "bash", "callee": "ln", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L136"}, {"language": "bash", "callee": "rm", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L138"}, {"language": "bash", "callee": "nginx", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L142"}, {"language": "bash", "callee": "systemctl", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L146"}, {"language": "bash", "callee": "certbot", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L152"}, {"language": "bash", "callee": "cp", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L168"}, {"language": "bash", "callee": "crontab", "caller_nid": "$graphify-root$_script_nginx_setup_sh__entry", "source_file": "script_nginx_setup.sh", "source_location": "L287"}], "bash_sources": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/e435f54e2eb7b2b07ba12b6671ce4ca682cea39731566f3b95e60aaa99f03969.json b/graphify-out/cache/ast/v0.9.37/e435f54e2eb7b2b07ba12b6671ce4ca682cea39731566f3b95e60aaa99f03969.json new file mode 100644 index 0000000..78c7894 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/e435f54e2eb7b2b07ba12b6671ce4ca682cea39731566f3b95e60aaa99f03969.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_tool_box_py", "label": "tool_box.py", "file_type": "code", "source_file": "email_server/tool_box.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_tool_box_ensure_folder_exists", "label": "ensure_folder_exists()", "file_type": "code", "source_file": "email_server/tool_box.py", "source_location": "L16", "_callable": true}, {"id": "$graphify-root$_email_server_tool_box_setup_logging", "label": "setup_logging()", "file_type": "code", "source_file": "email_server/tool_box.py", "source_location": "L26", "_callable": true}, {"id": "$graphify-root$_email_server_tool_box_get_logger", "label": "get_logger()", "file_type": "code", "source_file": "email_server/tool_box.py", "source_location": "L45", "_callable": true}, {"id": "$graphify-root$_email_server_tool_box_get_current_time", "label": "get_current_time()", "file_type": "code", "source_file": "email_server/tool_box.py", "source_location": "L66", "_callable": true}, {"id": "$graphify-root$_email_server_tool_box_generate_message_id", "label": "generate_message_id()", "file_type": "code", "source_file": "email_server/tool_box.py", "source_location": "L71", "_callable": true}, {"id": "$graphify-root$_email_server_tool_box_rationale_1", "label": "Utility functions for the email server.", "file_type": "rationale", "source_file": "email_server/tool_box.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_tool_box_rationale_17", "label": "Ensure that the folder for the given filepath exists.", "file_type": "rationale", "source_file": "email_server/tool_box.py", "source_location": "L17"}, {"id": "$graphify-root$_email_server_tool_box_rationale_27", "label": "Set up global logging configuration using settings.ini. Should be called once\u2026", "file_type": "rationale", "source_file": "email_server/tool_box.py", "source_location": "L27"}, {"id": "$graphify-root$_email_server_tool_box_rationale_46", "label": "Get a logger with the given name (default: module name). Ensures logging is set\u2026", "file_type": "rationale", "source_file": "email_server/tool_box.py", "source_location": "L46"}, {"id": "$graphify-root$_email_server_tool_box_rationale_67", "label": "Get current time with timezone from settings.", "file_type": "rationale", "source_file": "email_server/tool_box.py", "source_location": "L67"}, {"id": "$graphify-root$_email_server_tool_box_rationale_72", "label": "Generate a consistent Message-ID for both email headers and database storage.\u2026", "file_type": "rationale", "source_file": "email_server/tool_box.py", "source_location": "L72"}], "edges": [{"source": "$graphify-root$_email_server_tool_box_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_py", "target": "email_server_settings_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_py", "target": "pytz", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_py", "target": "random", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_py", "target": "$graphify-root$_email_server_tool_box_ensure_folder_exists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_py", "target": "$graphify-root$_email_server_tool_box_setup_logging", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L26", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_py", "target": "$graphify-root$_email_server_tool_box_get_logger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L45", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_py", "target": "$graphify-root$_email_server_tool_box_get_current_time", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L66", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_py", "target": "$graphify-root$_email_server_tool_box_generate_message_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L71", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_get_logger", "target": "$graphify-root$_email_server_tool_box_setup_logging", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L50", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_rationale_1", "target": "$graphify-root$_email_server_tool_box_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_rationale_17", "target": "$graphify-root$_email_server_tool_box_ensure_folder_exists", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_rationale_27", "target": "$graphify-root$_email_server_tool_box_setup_logging", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L27", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_rationale_46", "target": "$graphify-root$_email_server_tool_box_get_logger", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L46", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_rationale_67", "target": "$graphify-root$_email_server_tool_box_get_current_time", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L67", "weight": 1.0}, {"source": "$graphify-root$_email_server_tool_box_rationale_72", "target": "$graphify-root$_email_server_tool_box_generate_message_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/tool_box.py", "source_location": "L72", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_tool_box_ensure_folder_exists", "callee": "startswith", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L20", "receiver": "filepath"}, {"caller_nid": "$graphify-root$_email_server_tool_box_ensure_folder_exists", "callee": "replace", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L21", "receiver": "filepath"}, {"caller_nid": "$graphify-root$_email_server_tool_box_ensure_folder_exists", "callee": "makedirs", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L22", "receiver": "os"}, {"caller_nid": "$graphify-root$_email_server_tool_box_ensure_folder_exists", "callee": "dirname", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L22", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tool_box_setup_logging", "callee": "logging", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/tool_box.py", "source_location": "L32"}, {"caller_nid": "$graphify-root$_email_server_tool_box_setup_logging", "callee": "hasHandlers", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L34", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tool_box_setup_logging", "callee": "getLogger", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L34", "receiver": "logging"}, {"caller_nid": "$graphify-root$_email_server_tool_box_setup_logging", "callee": "basicConfig", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L35", "receiver": "logging"}, {"caller_nid": "$graphify-root$_email_server_tool_box_setup_logging", "callee": "setLevel", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L37", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tool_box_setup_logging", "callee": "getLogger", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L37", "receiver": "logging"}, {"caller_nid": "$graphify-root$_email_server_tool_box_setup_logging", "callee": "lower", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L40", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tool_box_setup_logging", "callee": "get", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L40", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tool_box_setup_logging", "callee": "setLevel", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L43", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tool_box_setup_logging", "callee": "getLogger", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L43", "receiver": "logging"}, {"caller_nid": "$graphify-root$_email_server_tool_box_get_logger", "callee": "currentframe", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L54", "receiver": "inspect"}, {"caller_nid": "$graphify-root$_email_server_tool_box_get_logger", "callee": "get", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L57", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tool_box_get_logger", "callee": "basename", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L59", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tool_box_get_logger", "callee": "splitext", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L60", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tool_box_get_logger", "callee": "getLogger", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L64", "receiver": "logging"}, {"caller_nid": "$graphify-root$_email_server_tool_box_get_current_time", "callee": "timezone", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L68", "receiver": "pytz"}, {"caller_nid": "$graphify-root$_email_server_tool_box_get_current_time", "callee": "get", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L68", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tool_box_get_current_time", "callee": "now", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L69", "receiver": "datetime"}, {"caller_nid": "$graphify-root$_email_server_tool_box_generate_message_id", "callee": "strftime", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L77", "receiver": "time"}, {"caller_nid": "$graphify-root$_email_server_tool_box_generate_message_id", "callee": "join", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L78", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_tool_box_generate_message_id", "callee": "randint", "is_member_call": true, "source_file": "email_server/tool_box.py", "source_location": "L78", "receiver": "random"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/e8ad59f7a3fcb4cca8357809ae0e1647107f549753fd0473126cd000ae147e86.json b/graphify-out/cache/ast/v0.9.37/e8ad59f7a3fcb4cca8357809ae0e1647107f549753fd0473126cd000ae147e86.json new file mode 100644 index 0000000..3ce0bbc --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/e8ad59f7a3fcb4cca8357809ae0e1647107f549753fd0473126cd000ae147e86.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_settings_py", "label": "settings.py", "file_type": "code", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_settings_allowed_file", "label": "allowed_file()", "file_type": "code", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L30", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_settings_get_template_context", "label": "get_template_context()", "file_type": "code", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L33", "_callable": true}, {"id": "route", "label": "route", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/server_web_ui/settings.py"}, {"id": "$graphify-root$_email_server_server_web_ui_settings_settings", "label": "settings()", "file_type": "code", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L45", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "label": "settings_update()", "file_type": "code", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L50", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "label": "test_database_connection_endpoint()", "file_type": "code", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L127", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "label": "upload_cert()", "file_type": "code", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L144", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "label": "upload_key()", "file_type": "code", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L171", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_settings_get_server_ip", "label": "get_server_ip()", "file_type": "code", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L198", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "label": "test_attachments_path()", "file_type": "code", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L211", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_settings_get_available_timezones", "label": "get_available_timezones()", "file_type": "code", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L243", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_settings_rationale_1", "label": "Settings blueprint for the SMTP server web UI. This module provides server\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_settings_rationale_34", "label": "Get template context with CSRF token and common data.", "file_type": "rationale", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L34"}, {"id": "$graphify-root$_email_server_server_web_ui_settings_rationale_46", "label": "Display and edit server settings.", "file_type": "rationale", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L46"}, {"id": "$graphify-root$_email_server_server_web_ui_settings_rationale_51", "label": "Update server settings.", "file_type": "rationale", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L51"}, {"id": "$graphify-root$_email_server_server_web_ui_settings_rationale_128", "label": "Test database connection endpoint.", "file_type": "rationale", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L128"}, {"id": "$graphify-root$_email_server_server_web_ui_settings_rationale_145", "label": "Handle certificate file upload.", "file_type": "rationale", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L145"}, {"id": "$graphify-root$_email_server_server_web_ui_settings_rationale_172", "label": "Handle key file upload.", "file_type": "rationale", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L172"}, {"id": "$graphify-root$_email_server_server_web_ui_settings_rationale_199", "label": "Get server's public IP address.", "file_type": "rationale", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L199"}, {"id": "$graphify-root$_email_server_server_web_ui_settings_rationale_212", "label": "Test if the attachments path is writable.", "file_type": "rationale", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L212"}, {"id": "$graphify-root$_email_server_server_web_ui_settings_rationale_244", "label": "Get a list of all available timezones sorted alphabetically.", "file_type": "rationale", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L244"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "zoneinfo", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "flask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "werkzeug_utils", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "email_server_settings_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_utils_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L20", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/utils.py"}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_database_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L21", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/database.py"}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_routes_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L22", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/routes.py"}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_settings_allowed_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L30", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_settings_get_template_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_settings", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L44", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_settings_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L45", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L49", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L50", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L126", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L127", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L143", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L144", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L170", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L171", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_get_server_ip", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L197", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_settings_get_server_ip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L198", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L210", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L211", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_py", "target": "$graphify-root$_email_server_server_web_ui_settings_get_available_timezones", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L243", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_get_template_context", "target": "$graphify-root$_email_server_server_web_ui_settings_get_available_timezones", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L37", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_settings", "target": "$graphify-root$_email_server_server_web_ui_settings_get_template_context", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L47", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "target": "$graphify-root$_email_server_server_web_ui_settings_allowed_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L154", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "target": "$graphify-root$_email_server_server_web_ui_settings_allowed_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L181", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_settings_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_rationale_34", "target": "$graphify-root$_email_server_server_web_ui_settings_get_template_context", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L34", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_rationale_46", "target": "$graphify-root$_email_server_server_web_ui_settings_settings", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L46", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_rationale_51", "target": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L51", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_rationale_128", "target": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L128", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_rationale_145", "target": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L145", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_rationale_172", "target": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L172", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_rationale_199", "target": "$graphify-root$_email_server_server_web_ui_settings_get_server_ip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L199", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_rationale_212", "target": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L212", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_settings_rationale_244", "target": "$graphify-root$_email_server_server_web_ui_settings_get_available_timezones", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L244", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_allowed_file", "callee": "lower", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L31", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_allowed_file", "callee": "rsplit", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L31", "receiver": "filename"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_get_template_context", "callee": "load_settings", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L36", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_get_template_context", "callee": "request", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L40"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L47", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "exists", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L54", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "SETTINGS_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L54"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L55", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L56", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L57", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L57", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "access", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L59", "receiver": "os"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "SETTINGS_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L59"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L60", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L61", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L62", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L62", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "load_settings", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L65", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "info", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L66", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "items", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L70", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "lower", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L71", "receiver": "key"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "info", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L72", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "sections", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L76", "receiver": "config"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L77", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "startswith", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L79", "receiver": "key"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "lower", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L83", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L85", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L88", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L88", "receiver": "config"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L89", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "debug", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L96", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "info", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L99", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "warning", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L104", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L105", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L106", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L106", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "info", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L109", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "SETTINGS_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L111"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "write", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L112", "receiver": "config"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L112"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "info", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L113", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L114", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L116", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L117", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L117"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L119", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L119", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L122", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L123", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L123"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L124", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_settings_update", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L124", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "callee": "get_json", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L130", "receiver": "request"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L132", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "callee": "test_database_connection", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L134", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L136", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L137", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L140", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L141", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_database_connection_endpoint", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L141"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L148", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L152", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "callee": "time", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L155", "receiver": "time"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "callee": "save", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L158", "receiver": "file"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L159", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L164", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L167", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L168", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_cert", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L168"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L175", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L179", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "callee": "time", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L182", "receiver": "time"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "callee": "save", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L185", "receiver": "file"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L186", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L191", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L194", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L195", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_upload_key", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L195"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_get_server_ip", "callee": "get_public_ip", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L201", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_get_server_ip", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L203", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_get_server_ip", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L204", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_get_server_ip", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L207", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_get_server_ip", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L208", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_get_server_ip", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L208"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L213", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L215", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "isabs", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L218", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "abspath", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L219", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L219", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "dirname", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L219", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "SETTINGS_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L219"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "makedirs", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L223", "receiver": "os"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "join", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L226", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "write", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L228", "receiver": "f"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "remove", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L229", "receiver": "os"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L230", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L236", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "jsonify", "is_member_call": false, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L237", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_test_attachments_path", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/settings.py", "source_location": "L239"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_settings_get_available_timezones", "callee": "available_timezones", "is_member_call": true, "source_file": "email_server/server_web_ui/settings.py", "source_location": "L245", "receiver": "zoneinfo"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/eb1f5a98cf68dfd5b4fb5d0b6ac1c5ce70867aec6ce9dcff1906a71f09458baf.json b/graphify-out/cache/ast/v0.9.37/eb1f5a98cf68dfd5b4fb5d0b6ac1c5ce70867aec6ce9dcff1906a71f09458baf.json new file mode 100644 index 0000000..dcde085 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/eb1f5a98cf68dfd5b4fb5d0b6ac1c5ce70867aec6ce9dcff1906a71f09458baf.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_server_web_ui_domains_py", "label": "domains.py", "file_type": "code", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L1"}, {"id": "route", "label": "route", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/email_server/server_web_ui/domains.py"}, {"id": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "label": "domains_list()", "file_type": "code", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L23", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "label": "add_domain()", "file_type": "code", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L38", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "label": "delete_domain()", "file_type": "code", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L78", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "label": "edit_domain()", "file_type": "code", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L103", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "label": "toggle_domain()", "file_type": "code", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L153", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "label": "remove_domain()", "file_type": "code", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L179", "_callable": true}, {"id": "$graphify-root$_email_server_server_web_ui_domains_rationale_1", "label": "Domains blueprint for the SMTP server web UI. This module provides domain\u2026", "file_type": "rationale", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_server_web_ui_domains_rationale_79", "label": "Delete domain (soft delete).", "file_type": "rationale", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L79"}, {"id": "$graphify-root$_email_server_server_web_ui_domains_rationale_154", "label": "Toggle domain active status (Enable/Disable).", "file_type": "rationale", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L154"}, {"id": "$graphify-root$_email_server_server_web_ui_domains_rationale_180", "label": "Permanently remove domain and all associated data.", "file_type": "rationale", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L180"}], "edges": [{"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "flask", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "email_server_dkim_manager", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "sqlalchemy_orm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "$graphify-root$_email_server_server_web_ui_routes_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L17", "weight": 1.0, "target_file": "$graphify-root$/email_server/server_web_ui/routes.py"}, {"source": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L22", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L23", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L37", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L38", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L77", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L102", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L103", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L152", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L153", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "target": "route", "relation": "references", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L178", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_email_server_server_web_ui_domains_py", "target": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L179", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_rationale_1", "target": "$graphify-root$_email_server_server_web_ui_domains_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_rationale_79", "target": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L79", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_rationale_154", "target": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L154", "weight": 1.0}, {"source": "$graphify-root$_email_server_server_web_ui_domains_rationale_180", "target": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L180", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L25", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "callee": "order_by", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L28", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L28", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L28"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L29", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L31", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L32", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L33", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L33", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_domains_list", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L35", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "lower", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L41", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L41", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L41", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L44", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L45", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L45", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L47", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "first", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L50", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L50", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L50", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L50"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L52", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L53", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L53", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "Domain", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L56", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "add", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L57", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L58", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "DKIMManager", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L61", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "generate_dkim_keypair", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L62", "receiver": "dkim_manager"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L64", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L65", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L65", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L68", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L69", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L70", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L70"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L71", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L71", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L73", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_add_domain", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L75", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L80", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L82", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L82", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L82"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L84", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L85", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L85", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L89", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L91", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L92", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L92", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L95", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L96", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L97", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L97"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L98", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L98", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_delete_domain", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L100", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L105", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L107", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L107", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L107"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L109", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L110", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L110", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "lower", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L113", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "strip", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L113", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L113", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L114", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L117", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L118", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L118", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "split", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L121", "receiver": "domain_name"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L122", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L123", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L123", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "first", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L126", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L126", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L126"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L131", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L132", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L132", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L137", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L139", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L140", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L140", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "render_template", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L142", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L145", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L146", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L147", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L147"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L148", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L148", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_edit_domain", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L150", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L155", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L157", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L157", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L157"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L159", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L160", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L160", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L164", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L167", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L168", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L168", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L171", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L172", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L173", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L173"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L174", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L174", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_toggle_domain", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L176", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "Session", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L181", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "get", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L183", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L183", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "Domain", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L183"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L185", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L186", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L186", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "count", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L191", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L191", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L191", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L191"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "count", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L192", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L192", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L192", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "WhitelistedIP", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L192"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "count", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L193", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L193", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L193", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L193"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "delete", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L196", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L196", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L196", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "Sender", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L196"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "delete", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L197", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L197", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L197", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "WhitelistedIP", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L197"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "delete", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L198", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L198", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L198", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "DKIMKey", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L198"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "delete", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L199", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "filter_by", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L199", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "query", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L199", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "CustomHeader", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L199"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "delete", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L202", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "commit", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L203", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L205", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L206", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L206", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "rollback", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L209", "receiver": "session"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "error", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L210", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "flash", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L211", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/server_web_ui/domains.py", "source_location": "L211"}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "redirect", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L212", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "url_for", "is_member_call": false, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L212", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_server_web_ui_domains_remove_domain", "callee": "close", "is_member_call": true, "source_file": "email_server/server_web_ui/domains.py", "source_location": "L214", "receiver": "session"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.37/f7563fcd503cf1ec30243d80866d3ef33e9caab8c665b3cb3efa0d8302793f3d.json b/graphify-out/cache/ast/v0.9.37/f7563fcd503cf1ec30243d80866d3ef33e9caab8c665b3cb3efa0d8302793f3d.json new file mode 100644 index 0000000..c0285ce --- /dev/null +++ b/graphify-out/cache/ast/v0.9.37/f7563fcd503cf1ec30243d80866d3ef33e9caab8c665b3cb3efa0d8302793f3d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_email_server_auth_py", "label": "auth.py", "file_type": "code", "source_file": "email_server/auth.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_auth_enhancedauthenticator", "label": "EnhancedAuthenticator", "file_type": "code", "source_file": "email_server/auth.py", "source_location": "L22", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "label": ".__call__()", "file_type": "code", "source_file": "email_server/auth.py", "source_location": "L32", "_callable": true}, {"id": "$graphify-root$_email_server_auth_enhancedipauthenticator", "label": "EnhancedIPAuthenticator", "file_type": "code", "source_file": "email_server/auth.py", "source_location": "L90", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", "label": ".can_authenticate_for_domain()", "file_type": "code", "source_file": "email_server/auth.py", "source_location": "L100", "_callable": true}, {"id": "$graphify-root$_email_server_auth_validate_sender_authorization", "label": "validate_sender_authorization()", "file_type": "code", "source_file": "email_server/auth.py", "source_location": "L121", "_callable": true}, {"id": "$graphify-root$_email_server_auth_get_authenticated_domain_id", "label": "get_authenticated_domain_id()", "file_type": "code", "source_file": "email_server/auth.py", "source_location": "L195", "_callable": true}, {"id": "$graphify-root$_email_server_auth_rationale_1", "label": "Enhanced authentication modules for the SMTP server using ESRV schema. Security\u2026", "file_type": "rationale", "source_file": "email_server/auth.py", "source_location": "L1"}, {"id": "$graphify-root$_email_server_auth_rationale_23", "label": "Enhanced username/password authenticator with sender validation. Features: -\u2026", "file_type": "rationale", "source_file": "email_server/auth.py", "source_location": "L23"}, {"id": "$graphify-root$_email_server_auth_rationale_91", "label": "Enhanced IP-based authenticator with domain-specific authorization. Features: -\u2026", "file_type": "rationale", "source_file": "email_server/auth.py", "source_location": "L91"}, {"id": "$graphify-root$_email_server_auth_rationale_101", "label": "Check if IP can authenticate for a specific domain. Args: ip_address: Client IP\u2026", "file_type": "rationale", "source_file": "email_server/auth.py", "source_location": "L101"}, {"id": "$graphify-root$_email_server_auth_rationale_122", "label": "Validate if the authenticated entity can send as the specified from address.\u2026", "file_type": "rationale", "source_file": "email_server/auth.py", "source_location": "L122"}, {"id": "$graphify-root$_email_server_auth_rationale_196", "label": "Get the domain ID for the authenticated entity. Args: session: SMTP session\u2026", "file_type": "rationale", "source_file": "email_server/auth.py", "source_location": "L196"}], "edges": [{"source": "$graphify-root$_email_server_auth_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_py", "target": "aiosmtpd_smtp", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_py", "target": "email_server_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_py", "target": "email_server_tool_box", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_py", "target": "$graphify-root$_email_server_auth_enhancedauthenticator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_enhancedauthenticator", "target": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L32", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_py", "target": "$graphify-root$_email_server_auth_enhancedipauthenticator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L90", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_enhancedipauthenticator", "target": "$graphify-root$_email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", "relation": "method", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L100", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_py", "target": "$graphify-root$_email_server_auth_validate_sender_authorization", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L121", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_py", "target": "$graphify-root$_email_server_auth_get_authenticated_domain_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L195", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_validate_sender_authorization", "target": "$graphify-root$_email_server_auth_enhancedipauthenticator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L164", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_validate_sender_authorization", "target": "$graphify-root$_email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L165", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_rationale_1", "target": "$graphify-root$_email_server_auth_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_rationale_23", "target": "$graphify-root$_email_server_auth_enhancedauthenticator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L23", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_rationale_91", "target": "$graphify-root$_email_server_auth_enhancedipauthenticator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L91", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_rationale_101", "target": "$graphify-root$_email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L101", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_rationale_122", "target": "$graphify-root$_email_server_auth_validate_sender_authorization", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L122", "weight": 1.0}, {"source": "$graphify-root$_email_server_auth_rationale_196", "target": "$graphify-root$_email_server_auth_get_authenticated_domain_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "email_server/auth.py", "source_location": "L196", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "LoginPassword", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/auth.py", "source_location": "L33"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "warning", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L34", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "AuthResult", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L35", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "bytes", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/auth.py", "source_location": "L41"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "decode", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L42", "receiver": "username"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "bytes", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/auth.py", "source_location": "L43"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "decode", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L44", "receiver": "password"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "debug", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L47", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "get_sender_by_email", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L51", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "check_password", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L52", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "log_auth_attempt", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L58", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "info", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L65", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "AuthResult", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L66", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "log_auth_attempt", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L69", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "warning", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L76", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "AuthResult", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L77", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "error", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L80", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "log_auth_attempt", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L81", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/auth.py", "source_location": "L86"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedauthenticator_call", "callee": "AuthResult", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L88", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", "callee": "get_whitelisted_ip", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L112", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", "callee": "error", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L118", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "email_server/auth.py", "source_location": "L119"}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "lower", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L137", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "split", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L137", "receiver": "mail_from"}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "IndexError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "email_server/auth.py", "source_location": "L140"}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "AttributeError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "email_server/auth.py", "source_location": "L140"}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "can_send_as", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L148", "receiver": "sender"}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "info", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L149", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "warning", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L153", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "log_auth_attempt", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L154", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "log_auth_attempt", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L173", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "info", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L181", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "log_auth_attempt", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L184", "receiver": null}, {"caller_nid": "$graphify-root$_email_server_auth_validate_sender_authorization", "callee": "warning", "is_member_call": true, "source_file": "email_server/auth.py", "source_location": "L192", "receiver": "logger"}, {"caller_nid": "$graphify-root$_email_server_auth_get_authenticated_domain_id", "callee": "get_domain_by_name", "is_member_call": false, "source_file": "email_server/auth.py", "source_location": "L209", "receiver": null}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/12f04d6d3301ed5a7cd9cb20b42502b05eb8125fa023e7d34803476616f41613.json b/graphify-out/cache/semantic/pd5fd89c46bb5/12f04d6d3301ed5a7cd9cb20b42502b05eb8125fa023e7d34803476616f41613.json new file mode 100644 index 0000000..a7632e1 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/12f04d6d3301ed5a7cd9cb20b42502b05eb8125fa023e7d34803476616f41613.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_senders_page", "label": "Senders List Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/senders.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "email_server_server_web_ui_templates_senders_sender_model", "label": "Sender/User Data Model", "file_type": "concept", "source_file": "email_server/server_web_ui/templates/senders.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_senders_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/senders.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_senders_page", "target": "email_server_server_web_ui_templates_add_sender_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/senders.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_senders_page", "target": "email_server_server_web_ui_templates_edit_sender_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/senders.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_senders_page", "target": "email_server_server_web_ui_templates_senders_sender_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/senders.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_senders_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/senders.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/1d7f8154cc86a460d6cc8e0055f414b44850b85732695008f5dd421f5b8bce85.json b/graphify-out/cache/semantic/pd5fd89c46bb5/1d7f8154cc86a460d6cc8e0055f414b44850b85732695008f5dd421f5b8bce85.json new file mode 100644 index 0000000..36a1746 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/1d7f8154cc86a460d6cc8e0055f414b44850b85732695008f5dd421f5b8bce85.json @@ -0,0 +1 @@ +{"nodes": [{"id": "tests_pdf_test_1_document", "label": "PDF Test Document (French Lipsum)", "file_type": "document", "source_file": "tests/pdf_test_1.pdf", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_pdf_test_1_pebbles_image", "label": "Beach Pebbles Photo (embedded image)", "file_type": "image", "source_file": "tests/pdf_test_1.pdf", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "tests_pdf_test_1_document", "target": "tests_pdf_test_1_pebbles_image", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/pdf_test_1.pdf", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/2b6adab1eecfb66bce3a0f8c01be56c15387111cfa964629eed0242e9784c142.json b/graphify-out/cache/semantic/pd5fd89c46bb5/2b6adab1eecfb66bce3a0f8c01be56c15387111cfa964629eed0242e9784c142.json new file mode 100644 index 0000000..2d67e74 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/2b6adab1eecfb66bce3a0f8c01be56c15387111cfa964629eed0242e9784c142.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_settings_page", "label": "Server Settings Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/settings.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "email_server_server_web_ui_templates_settings_server_settings_model", "label": "Server Settings (INI) Data Model", "file_type": "concept", "source_file": "email_server/server_web_ui/templates/settings.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_settings_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/settings.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_settings_page", "target": "email_server_server_web_ui_templates_settings_server_settings_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/settings.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/3ebe56d0428ddfb32df5ca9e090ccb6f82e2ecbb6d6753850d02351d7623ddeb.json b/graphify-out/cache/semantic/pd5fd89c46bb5/3ebe56d0428ddfb32df5ca9e090ccb6f82e2ecbb6d6753850d02351d7623ddeb.json new file mode 100644 index 0000000..c9cc8c7 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/3ebe56d0428ddfb32df5ca9e090ccb6f82e2ecbb6d6753850d02351d7623ddeb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_add_domain_page", "label": "Add Domain Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/add_domain.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_add_domain_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/add_domain.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_add_domain_page", "target": "email_server_server_web_ui_templates_domains_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/add_domain.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_add_domain_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/add_domain.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/4bc821701f9ac50d2bb005557fc851120ad30450fdf2d77773069c4a19d74f69.json b/graphify-out/cache/semantic/pd5fd89c46bb5/4bc821701f9ac50d2bb005557fc851120ad30450fdf2d77773069c4a19d74f69.json new file mode 100644 index 0000000..911def2 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/4bc821701f9ac50d2bb005557fc851120ad30450fdf2d77773069c4a19d74f69.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_add_sender_page", "label": "Add Sender Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/add_sender.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_add_sender_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/add_sender.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_add_sender_page", "target": "email_server_server_web_ui_templates_senders_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/add_sender.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_add_sender_page", "target": "email_server_server_web_ui_templates_senders_sender_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/add_sender.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_add_sender_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/add_sender.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/4c0739b37e5f8ed0a36bf32af034be38dd39f8c6b7dd54e2538deb12fe87e5d9.json b/graphify-out/cache/semantic/pd5fd89c46bb5/4c0739b37e5f8ed0a36bf32af034be38dd39f8c6b7dd54e2538deb12fe87e5d9.json new file mode 100644 index 0000000..a366700 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/4c0739b37e5f8ed0a36bf32af034be38dd39f8c6b7dd54e2538deb12fe87e5d9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_domains_page", "label": "Domains List Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/domains.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "email_server_server_web_ui_templates_domains_domain_model", "label": "Domain Data Model", "file_type": "concept", "source_file": "email_server/server_web_ui/templates/domains.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_domains_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/domains.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_domains_page", "target": "email_server_server_web_ui_templates_add_domain_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/domains.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_domains_page", "target": "email_server_server_web_ui_templates_edit_domain_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/domains.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_domains_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/domains.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_domains_page", "target": "email_server_server_web_ui_templates_dkim_dkim_key_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/domains.html", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "domain_crud_flow", "label": "Domain CRUD Flow", "nodes": ["email_server_server_web_ui_templates_add_domain_page", "email_server_server_web_ui_templates_domains_page", "email_server_server_web_ui_templates_edit_domain_page", "email_server_server_web_ui_templates_domains_domain_model"], "relation": "participate_in", "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "email_server/server_web_ui/templates/domains.html"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/5f322a40caf344ac65d921290cda2c583fff39eb5d581bd83ae8fc8c99280f42.json b/graphify-out/cache/semantic/pd5fd89c46bb5/5f322a40caf344ac65d921290cda2c583fff39eb5d581bd83ae8fc8c99280f42.json new file mode 100644 index 0000000..9b5f56e --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/5f322a40caf344ac65d921290cda2c583fff39eb5d581bd83ae8fc8c99280f42.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_sidebar_email_partial", "label": "Sidebar Navigation Partial", "file_type": "code", "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_dashboard_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_domains_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_senders_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_ips_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_dkim_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_logs_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_settings_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_senders_sender_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_ips_ip_whitelist_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_dkim_dkim_key_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_sidebar_email_partial", "target": "email_server_server_web_ui_templates_base_health_check_concept", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/sidebar_email.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/62fa91c3279485b5a18726c164710a328eccfa636815f5708ac10cb08ec2fe7c.json b/graphify-out/cache/semantic/pd5fd89c46bb5/62fa91c3279485b5a18726c164710a328eccfa636815f5708ac10cb08ec2fe7c.json new file mode 100644 index 0000000..a8c8558 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/62fa91c3279485b5a18726c164710a328eccfa636815f5708ac10cb08ec2fe7c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_logs_page", "label": "Emails/Auth Logs Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/logs.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "email_server_server_web_ui_templates_logs_email_log_model", "label": "Email Log Data Model", "file_type": "concept", "source_file": "email_server/server_web_ui/templates/logs.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "email_server_server_web_ui_templates_logs_auth_log_model", "label": "Auth Log Data Model", "file_type": "concept", "source_file": "email_server/server_web_ui/templates/logs.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_logs_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/logs.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_logs_page", "target": "email_server_server_web_ui_templates_view_message_content_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/logs.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_logs_page", "target": "email_server_server_web_ui_templates_logs_email_log_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/logs.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_logs_page", "target": "email_server_server_web_ui_templates_logs_auth_log_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/logs.html", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "email_log_message_viewer_flow", "label": "Email Log Message Viewer Flow", "nodes": ["email_server_server_web_ui_templates_logs_page", "email_server_server_web_ui_templates_view_message_content_page", "email_server_server_web_ui_templates_logs_email_log_model", "email_server_server_web_ui_templates_view_message_content_attachment_model"], "relation": "participate_in", "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "email_server/server_web_ui/templates/logs.html"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/77814578c9915effecea5e4a8001693ccaa6f73f4b8f52f7e0fbe92125cb5b6f.json b/graphify-out/cache/semantic/pd5fd89c46bb5/77814578c9915effecea5e4a8001693ccaa6f73f4b8f52f7e0fbe92125cb5b6f.json new file mode 100644 index 0000000..d9d4786 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/77814578c9915effecea5e4a8001693ccaa6f73f4b8f52f7e0fbe92125cb5b6f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_edit_ip_page", "label": "Edit IP Whitelist Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/edit_ip.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_edit_ip_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_ip.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_ip_page", "target": "email_server_server_web_ui_templates_ips_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_ip.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_ip_page", "target": "email_server_server_web_ui_templates_ips_ip_whitelist_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_ip.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_ip_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_ip.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/78e29ce4bc0f115da08230351ff9456f4d82c2cdd299a1a8d597df3cfdf54112.json b/graphify-out/cache/semantic/pd5fd89c46bb5/78e29ce4bc0f115da08230351ff9456f4d82c2cdd299a1a8d597df3cfdf54112.json new file mode 100644 index 0000000..8861d20 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/78e29ce4bc0f115da08230351ff9456f4d82c2cdd299a1a8d597df3cfdf54112.json @@ -0,0 +1 @@ +{"nodes": [{"id": "readme_doc", "label": "PyMTA-server README", "file_type": "document", "source_file": "README.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_dkim", "label": "DKIM (planned feature)", "file_type": "concept", "source_file": "README.md", "source_location": "Plan section", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_spf", "label": "SPF DNS Records (delivery success)", "file_type": "concept", "source_file": "README.md", "source_location": "Plan section", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_ip_whitelisting", "label": "Sender IP Whitelisting", "file_type": "concept", "source_file": "README.md", "source_location": "Plan section", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_username_password_auth", "label": "Username/Password Authentication", "file_type": "concept", "source_file": "README.md", "source_location": "Plan section", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_store_sent_emails", "label": "Optional Storing of Sent Emails", "file_type": "concept", "source_file": "README.md", "source_location": "Plan section", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_license", "label": "AGPL-3.0 License", "file_type": "concept", "source_file": "README.md", "source_location": "License section", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "readme_doc", "target": "readme_dkim", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "Plan", "weight": 1.0}, {"source": "readme_doc", "target": "readme_spf", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "Plan", "weight": 1.0}, {"source": "readme_doc", "target": "readme_ip_whitelisting", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "Plan", "weight": 1.0}, {"source": "readme_doc", "target": "readme_username_password_auth", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "Plan", "weight": 1.0}, {"source": "readme_doc", "target": "readme_store_sent_emails", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "Plan", "weight": 1.0}, {"source": "readme_doc", "target": "readme_license", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "License", "weight": 1.0}, {"source": "readme_doc", "target": "tests_general_cli_usage_doc", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "Tests - examples: [CLI commands and usage example]", "weight": 1.0}, {"source": "readme_doc", "target": "tests_run_tests_manually_doc", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "Tests - examples: [Send Test Emails examples]", "weight": 1.0}, {"source": "requirements_gunicorn", "target": "readme_doc", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", "source_location": "Production: gunicorn -w 4 -b 0.0.0.0:5000 app:flask_app", "weight": 1.0}, {"source": "readme_doc", "target": "readme_unified_doc", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "README.md", "source_location": null, "weight": 1.0}, {"source": "readme_dkim", "target": "readme_unified_dkim_support", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "README.md", "source_location": null, "weight": 1.0}, {"source": "readme_ip_whitelisting", "target": "readme_unified_ip_whitelisting", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "README.md", "source_location": null, "weight": 1.0}, {"source": "readme_license", "target": "readme_unified_mit_license", "relation": "conceptually_related_to", "confidence": "AMBIGUOUS", "confidence_score": 0.2, "source_file": "README.md", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/79df8711fb8b03d77a33cb9dfbec21f4eb06a714315cd691795f2df8dd8a77ed.json b/graphify-out/cache/semantic/pd5fd89c46bb5/79df8711fb8b03d77a33cb9dfbec21f4eb06a714315cd691795f2df8dd8a77ed.json new file mode 100644 index 0000000..c8cfd77 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/79df8711fb8b03d77a33cb9dfbec21f4eb06a714315cd691795f2df8dd8a77ed.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_base_page", "label": "Base Layout Template", "file_type": "code", "source_file": "email_server/server_web_ui/templates/base.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "email_server_server_web_ui_templates_base_health_check_concept", "label": "check_health() Service Status Pattern", "file_type": "concept", "source_file": "email_server/server_web_ui/templates/base.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_base_page", "target": "email_server_server_web_ui_templates_sidebar_email_partial", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/base.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/80207426a564652a2a2e7803663bf787b639fc7d172b62a6f24346e52fafa845.json b/graphify-out/cache/semantic/pd5fd89c46bb5/80207426a564652a2a2e7803663bf787b639fc7d172b62a6f24346e52fafa845.json new file mode 100644 index 0000000..79af2be --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/80207426a564652a2a2e7803663bf787b639fc7d172b62a6f24346e52fafa845.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_add_ip_page", "label": "Add IP Whitelist Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/add_ip.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_add_ip_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/add_ip.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_add_ip_page", "target": "email_server_server_web_ui_templates_ips_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/add_ip.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_add_ip_page", "target": "email_server_server_web_ui_templates_ips_ip_whitelist_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/add_ip.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_add_ip_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/add_ip.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_add_ip_page", "target": "email_server_server_web_ui_templates_ips_page", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "email_server/server_web_ui/templates/add_ip.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/8846098c083875993fe8f15817c0d867a96225ee14a58e7af6c73057365730cb.json b/graphify-out/cache/semantic/pd5fd89c46bb5/8846098c083875993fe8f15817c0d867a96225ee14a58e7af6c73057365730cb.json new file mode 100644 index 0000000..cf587bc --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/8846098c083875993fe8f15817c0d867a96225ee14a58e7af6c73057365730cb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_dashboard_page", "label": "Dashboard Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_domains_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_senders_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_dkim_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_logs_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_add_domain_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_add_sender_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_add_ip_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_settings_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_logs_email_log_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_logs_auth_log_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_senders_sender_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_dkim_dkim_key_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dashboard_page", "target": "email_server_server_web_ui_templates_base_health_check_concept", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dashboard.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/8d499361c1003fae2ac64da14c57fa5b3c554539d7c701f297f5a543ed352bfd.json b/graphify-out/cache/semantic/pd5fd89c46bb5/8d499361c1003fae2ac64da14c57fa5b3c554539d7c701f297f5a543ed352bfd.json new file mode 100644 index 0000000..90016cb --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/8d499361c1003fae2ac64da14c57fa5b3c554539d7c701f297f5a543ed352bfd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "tests_email_body_lorem_ipsum", "label": "Lorem Ipsum Test Email Body", "file_type": "document", "source_file": "tests/email_body.txt", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "tests_email_body_lorem_ipsum", "target": "tests_pdf_test_1_document", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "tests/email_body.txt", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/8ddb7adedab85944270a86583b270bec3ccea33a448e16946757109bc08310e8.json b/graphify-out/cache/semantic/pd5fd89c46bb5/8ddb7adedab85944270a86583b270bec3ccea33a448e16946757109bc08310e8.json new file mode 100644 index 0000000..26744c2 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/8ddb7adedab85944270a86583b270bec3ccea33a448e16946757109bc08310e8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_ips_page", "label": "Whitelisted IPs List Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/ips.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "email_server_server_web_ui_templates_ips_ip_whitelist_model", "label": "IP Whitelist Data Model", "file_type": "concept", "source_file": "email_server/server_web_ui/templates/ips.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_ips_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/ips.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_ips_page", "target": "email_server_server_web_ui_templates_add_ip_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/ips.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_ips_page", "target": "email_server_server_web_ui_templates_edit_ip_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/ips.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_ips_page", "target": "email_server_server_web_ui_templates_ips_ip_whitelist_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/ips.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_ips_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/ips.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/9af8dd27ccf9b6a86c3bf955b48285c50092e9bba7e5c330daf12e95ff364e6e.json b/graphify-out/cache/semantic/pd5fd89c46bb5/9af8dd27ccf9b6a86c3bf955b48285c50092e9bba7e5c330daf12e95ff364e6e.json new file mode 100644 index 0000000..55b894f --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/9af8dd27ccf9b6a86c3bf955b48285c50092e9bba7e5c330daf12e95ff364e6e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "readme_unified_doc", "label": "SMTP Server with Web Management Frontend README (legacy layout)", "file_type": "document", "source_file": "README_unified.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_smtp_server", "label": "Full SMTP Server (send/receive with auth)", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Features", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_web_management_interface", "label": "Flask Web Management Interface", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Features", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_dkim_support", "label": "DKIM Support (auto key gen + signing)", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Features", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_tls_ssl", "label": "TLS/SSL Encryption", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Features / TLS Settings", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_domain_management", "label": "Domain Management", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Features", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_user_authentication", "label": "Per-user/per-domain User Authentication", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Features / Security", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_ip_whitelisting", "label": "IP Whitelisting (auth-free sending)", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Features", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_email_relay", "label": "Email Relay (forward to external servers)", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Features", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_settings_ini", "label": "settings.ini Configuration File", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Configuration", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_database_schema", "label": "SQLite Database Schema (domains, users, whitelisted_ips, dkim_keys, email_logs, auth_logs, custom_headers)", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Database Schema", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_api_endpoints", "label": "REST API Endpoints (/health, /api/server/status, /api/server/restart)", "file_type": "concept", "source_file": "README_unified.md", "source_location": "API Endpoints", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_dns_configuration", "label": "DNS Configuration (DKIM/SPF/MX records)", "file_type": "concept", "source_file": "README_unified.md", "source_location": "DNS Configuration", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_systemd_service", "label": "Systemd Service (production deployment)", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Production Deployment", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_reverse_proxy", "label": "Nginx Reverse Proxy", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Production Deployment", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_project_structure", "label": "Project Structure (app.py, main.py, email_server/, email_frontend/)", "file_type": "concept", "source_file": "README_unified.md", "source_location": "Development / Project Structure", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "readme_unified_mit_license", "label": "MIT License", "file_type": "concept", "source_file": "README_unified.md", "source_location": "License section", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "readme_unified_doc", "target": "readme_unified_smtp_server", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Features / SMTP Server", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_web_management_interface", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Features / Web Management Interface", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_dkim_support", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Features", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_tls_ssl", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Features / TLS Settings", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_domain_management", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Features", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_user_authentication", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Features / Security", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_ip_whitelisting", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Features", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_email_relay", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Features", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_settings_ini", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Configuration", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_database_schema", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Database Schema", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_api_endpoints", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "API Endpoints", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_dns_configuration", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "DNS Configuration", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_systemd_service", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Production Deployment", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_reverse_proxy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Production Deployment", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_project_structure", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "Development", "weight": 1.0}, {"source": "readme_unified_doc", "target": "readme_unified_mit_license", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "License", "weight": 1.0}, {"source": "readme_unified_dns_configuration", "target": "readme_unified_dkim_support", "relation": "conceptually_related_to", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README_unified.md", "source_location": "DKIM Record / DKIM Management", "weight": 1.0}, {"source": "readme_unified_ip_whitelisting", "target": "tests_note_authentication_order_fix_ip_whitelisting_fallback", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "README_unified.md", "source_location": null, "weight": 1.0}, {"source": "readme_unified_ip_whitelisting", "target": "tests_general_cli_usage_ip_whitelist_management", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "README_unified.md", "source_location": null, "weight": 1.0}, {"source": "readme_unified_dkim_support", "target": "tests_general_cli_usage_dkim_key_management", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "README_unified.md", "source_location": null, "weight": 1.0}, {"source": "readme_unified_dkim_support", "target": "tests_run_tests_manually_dkim_key_generation", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "README_unified.md", "source_location": null, "weight": 1.0}, {"source": "readme_unified_user_authentication", "target": "tests_note_authentication_order_fix_authentication_order_fix", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "README_unified.md", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "dkim_keygen_dns_verification_flow", "label": "DKIM Key Generation & DNS Verification Flow", "nodes": ["readme_unified_dkim_support", "readme_unified_dns_configuration", "tests_general_cli_usage_dkim_key_management", "tests_run_tests_manually_dkim_key_generation"], "relation": "participate_in", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "README_unified.md"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/a35fe477b23ea7ec07f723c1964d77bf4d8e715c67a53ca7b2dea87fbb1d98b6.json b/graphify-out/cache/semantic/pd5fd89c46bb5/a35fe477b23ea7ec07f723c1964d77bf4d8e715c67a53ca7b2dea87fbb1d98b6.json new file mode 100644 index 0000000..1d45689 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/a35fe477b23ea7ec07f723c1964d77bf4d8e715c67a53ca7b2dea87fbb1d98b6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_edit_dkim_page", "label": "Edit DKIM Selector Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/edit_dkim.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_edit_dkim_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_dkim.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_dkim_page", "target": "email_server_server_web_ui_templates_dkim_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_dkim.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_dkim_page", "target": "email_server_server_web_ui_templates_dkim_dkim_key_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_dkim.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_dkim_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_dkim.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/a8a6e7a1611daa37c61bd7abe7cd3fd8e5ceab26ed42b6aab242000005fd4141.json b/graphify-out/cache/semantic/pd5fd89c46bb5/a8a6e7a1611daa37c61bd7abe7cd3fd8e5ceab26ed42b6aab242000005fd4141.json new file mode 100644 index 0000000..6a1c64b --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/a8a6e7a1611daa37c61bd7abe7cd3fd8e5ceab26ed42b6aab242000005fd4141.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_error_page", "label": "Error Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/error.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_error_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/error.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_error_page", "target": "email_server_server_web_ui_templates_dashboard_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/error.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/b0510ba0e02df18d6fd76ea7bcbc8caf68020a8f0a7e38e073cdf81bc6112305.json b/graphify-out/cache/semantic/pd5fd89c46bb5/b0510ba0e02df18d6fd76ea7bcbc8caf68020a8f0a7e38e073cdf81bc6112305.json new file mode 100644 index 0000000..0a43669 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/b0510ba0e02df18d6fd76ea7bcbc8caf68020a8f0a7e38e073cdf81bc6112305.json @@ -0,0 +1 @@ +{"nodes": [{"id": "tests_run_tests_manually_doc", "label": "Manual Test Setup Instructions", "file_type": "document", "source_file": "tests/run_tests_manually.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_run_tests_manually_web_interface_setup", "label": "Web Interface Setup for Manual Testing", "file_type": "concept", "source_file": "tests/run_tests_manually.md", "source_location": "Setup via Web Interface", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_run_tests_manually_dkim_key_generation", "label": "DKIM Key Generation (manual test setup)", "file_type": "concept", "source_file": "tests/run_tests_manually.md", "source_location": "Setup via Web Interface", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_run_tests_manually_send_email_script", "label": "tests/send_email.py script (manual test usage)", "file_type": "concept", "source_file": "tests/run_tests_manually.md", "source_location": "Send emails using python script", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_run_tests_manually_swaks", "label": "swaks (SMTP test CLI tool, manual test usage)", "file_type": "concept", "source_file": "tests/run_tests_manually.md", "source_location": "Linux send emails using swaks", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_run_tests_manually_db_log_check", "label": "Check DB Logs (sqlite3 email_logs query)", "file_type": "concept", "source_file": "tests/run_tests_manually.md", "source_location": "Check db logs", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "tests_run_tests_manually_doc", "target": "tests_run_tests_manually_web_interface_setup", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/run_tests_manually.md", "source_location": "Setup via Web Interface", "weight": 1.0}, {"source": "tests_run_tests_manually_doc", "target": "tests_run_tests_manually_dkim_key_generation", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/run_tests_manually.md", "source_location": "Setup via Web Interface", "weight": 1.0}, {"source": "tests_run_tests_manually_doc", "target": "tests_run_tests_manually_send_email_script", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/run_tests_manually.md", "source_location": "Send emails using python script", "weight": 1.0}, {"source": "tests_run_tests_manually_doc", "target": "tests_run_tests_manually_swaks", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/run_tests_manually.md", "source_location": "Linux send emails using swaks", "weight": 1.0}, {"source": "tests_run_tests_manually_doc", "target": "tests_run_tests_manually_db_log_check", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/run_tests_manually.md", "source_location": "Check db logs", "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/bf735e58d2d06d07a1fb9e69169199d2922433b7a59a11607ebd6615e090a5fc.json b/graphify-out/cache/semantic/pd5fd89c46bb5/bf735e58d2d06d07a1fb9e69169199d2922433b7a59a11607ebd6615e090a5fc.json new file mode 100644 index 0000000..f56f955 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/bf735e58d2d06d07a1fb9e69169199d2922433b7a59a11607ebd6615e090a5fc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_view_message_content_page", "label": "View Full Message Content Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/view_message_content.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "email_server_server_web_ui_templates_view_message_content_attachment_model", "label": "Email Attachment Data Model", "file_type": "concept", "source_file": "email_server/server_web_ui/templates/view_message_content.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_view_message_content_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/view_message_content.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_view_message_content_page", "target": "email_server_server_web_ui_templates_logs_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/view_message_content.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_view_message_content_page", "target": "email_server_server_web_ui_templates_logs_email_log_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/view_message_content.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_view_message_content_page", "target": "email_server_server_web_ui_templates_view_message_content_attachment_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/view_message_content.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/d8be084113b7b7300699fcd05bbe041bf0190d0de47e6684213ae5a607076027.json b/graphify-out/cache/semantic/pd5fd89c46bb5/d8be084113b7b7300699fcd05bbe041bf0190d0de47e6684213ae5a607076027.json new file mode 100644 index 0000000..91a8bbf --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/d8be084113b7b7300699fcd05bbe041bf0190d0de47e6684213ae5a607076027.json @@ -0,0 +1 @@ +{"nodes": [{"id": "tests_hello_dogecoin_meme_image", "label": "Hello.jpg (Dogecoin Doge Meme Image)", "file_type": "image", "source_file": "tests/Hello.jpg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_hello_email_attachment_test_fixture", "label": "Test Email Attachment Fixture", "file_type": "concept", "source_file": "tests/Hello.jpg", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "tests_hello_dogecoin_meme_image", "target": "tests_hello_email_attachment_test_fixture", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "tests/Hello.jpg", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/de14fd2b93326ae56038db511210c80ce116d1be663250812a802fd499624682.json b/graphify-out/cache/semantic/pd5fd89c46bb5/de14fd2b93326ae56038db511210c80ce116d1be663250812a802fd499624682.json new file mode 100644 index 0000000..10763dd --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/de14fd2b93326ae56038db511210c80ce116d1be663250812a802fd499624682.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_edit_sender_page", "label": "Edit Sender Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/edit_sender.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_edit_sender_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_sender.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_sender_page", "target": "email_server_server_web_ui_templates_senders_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_sender.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_sender_page", "target": "email_server_server_web_ui_templates_senders_sender_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_sender.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_sender_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_sender.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/e3506421d5cc2551db2365558095221f5a5fa2b4e852217b3abf2a0bb3b5a496.json b/graphify-out/cache/semantic/pd5fd89c46bb5/e3506421d5cc2551db2365558095221f5a5fa2b4e852217b3abf2a0bb3b5a496.json new file mode 100644 index 0000000..d9eba3a --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/e3506421d5cc2551db2365558095221f5a5fa2b4e852217b3abf2a0bb3b5a496.json @@ -0,0 +1 @@ +{"nodes": [{"id": "tests_note_authentication_order_fix_authentication_order_fix", "label": "SMTP Authentication Order Fix (June 2025)", "file_type": "rationale", "source_file": "tests/note_authentication_order_fix.md", "source_location": "Summary of Fixes", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "Server previously hung the SMTP session on bad credentials. Fixed by having the authenticator return AuthResult(success=False, handled=False, message='535 Authentication failed') so aiosmtpd immediately relays the error to the client instead of the connection hanging; the server also no longer force-closes the connection after failed auth (lets the client retry/quit per SMTP protocol), and AUTH LOGIN/PLAIN plus IP-whitelist fallback are advertised on both the plain SMTP port and the TLS port. STARTTLS is deliberately not advertised since only direct TLS is desired. Rationale: correctness/UX (no hanging clients) and defense-in-depth (auth first, IP whitelist as fallback, full audit logging of every attempt)."}, {"id": "tests_note_authentication_order_fix_auth_call", "label": "AuthResult / email_server/auth.py __call__ (code snippet)", "file_type": "code", "source_file": "tests/note_authentication_order_fix.md", "source_location": "Code Snippet for Immediate Authentication Failure Response", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_note_authentication_order_fix_ip_whitelisting_fallback", "label": "IP Whitelisting as Secondary/Fallback Authentication", "file_type": "concept", "source_file": "tests/note_authentication_order_fix.md", "source_location": "Authentication Order and Logic", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_note_authentication_order_fix_auth_ports", "label": "AUTH Advertised on Both Plain SMTP and TLS Ports", "file_type": "concept", "source_file": "tests/note_authentication_order_fix.md", "source_location": "What Was Fixed", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_note_authentication_order_fix_no_starttls", "label": "STARTTLS Not Advertised (direct TLS only)", "file_type": "rationale", "source_file": "tests/note_authentication_order_fix.md", "source_location": "Best Practices for Future Development", "source_url": null, "captured_at": null, "author": null, "contributor": null, "rationale": "STARTTLS is deliberately not used/advertised on any port because the design intent is direct TLS only (a fixed TLS port) rather than opportunistic upgrade, simplifying the security model and avoiding STARTTLS downgrade-style ambiguity."}], "edges": [{"source": "tests_note_authentication_order_fix_authentication_order_fix", "target": "tests_note_authentication_order_fix_auth_call", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/note_authentication_order_fix.md", "source_location": "Code Snippet for Immediate Authentication Failure Response", "weight": 1.0}, {"source": "tests_note_authentication_order_fix_authentication_order_fix", "target": "tests_note_authentication_order_fix_ip_whitelisting_fallback", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/note_authentication_order_fix.md", "source_location": "Authentication Order and Logic", "weight": 1.0}, {"source": "tests_note_authentication_order_fix_authentication_order_fix", "target": "tests_note_authentication_order_fix_auth_ports", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/note_authentication_order_fix.md", "source_location": "What Was Fixed / AUTH on Both Ports", "weight": 1.0}, {"source": "tests_note_authentication_order_fix_authentication_order_fix", "target": "tests_note_authentication_order_fix_no_starttls", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/note_authentication_order_fix.md", "source_location": "Best Practices for Future Development", "weight": 1.0}], "hyperedges": [{"id": "smtp_auth_ip_whitelist_flow", "label": "SMTP Authentication & IP Whitelist Flow", "nodes": ["tests_note_authentication_order_fix_authentication_order_fix", "tests_note_authentication_order_fix_ip_whitelisting_fallback", "readme_unified_user_authentication", "readme_unified_ip_whitelisting"], "relation": "participate_in", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "tests/note_authentication_order_fix.md"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/e58f4f968f97904e313c7324d1e583ce4b469d01fd542623806f2e61775b729a.json b/graphify-out/cache/semantic/pd5fd89c46bb5/e58f4f968f97904e313c7324d1e583ce4b469d01fd542623806f2e61775b729a.json new file mode 100644 index 0000000..76f3bad --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/e58f4f968f97904e313c7324d1e583ce4b469d01fd542623806f2e61775b729a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "requirements_doc", "label": "Unified Requirements File", "file_type": "document", "source_file": "requirements.txt", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_aiosmtpd", "label": "aiosmtpd (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_sqlalchemy", "label": "sqlalchemy (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_pyopenssl", "label": "pyOpenSSL (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_bcrypt", "label": "bcrypt (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_dnspython", "label": "dnspython (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_dkimpy", "label": "dkimpy (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_cryptography", "label": "cryptography (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_aiosmtplib", "label": "aiosmtplib (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_flask", "label": "Flask (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_flask_sqlalchemy", "label": "Flask-SQLAlchemy (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_jinja2", "label": "Jinja2 (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_werkzeug", "label": "Werkzeug (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_requests", "label": "requests (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_pytz", "label": "pytz (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_gunicorn", "label": "gunicorn (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "requirements_python_dotenv", "label": "python-dotenv (dependency)", "file_type": "concept", "source_file": "requirements.txt", "source_location": "Additional utilities", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "requirements_doc", "target": "requirements_aiosmtpd", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_sqlalchemy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_pyopenssl", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_bcrypt", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_dnspython", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_dkimpy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_cryptography", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_aiosmtplib", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Core SMTP Server Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_flask", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_flask_sqlalchemy", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_jinja2", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_werkzeug", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_requests", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_pytz", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_gunicorn", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Web Frontend Dependencies", "weight": 1.0}, {"source": "requirements_doc", "target": "requirements_python_dotenv", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "requirements.txt", "source_location": "Additional utilities", "weight": 1.0}, {"source": "requirements_aiosmtpd", "target": "readme_unified_smtp_server", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "requirements.txt", "source_location": null, "weight": 1.0}, {"source": "requirements_aiosmtplib", "target": "readme_unified_smtp_server", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "requirements.txt", "source_location": null, "weight": 1.0}, {"source": "requirements_dkimpy", "target": "readme_unified_dkim_support", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "requirements.txt", "source_location": null, "weight": 1.0}, {"source": "requirements_cryptography", "target": "readme_unified_dkim_support", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "requirements.txt", "source_location": null, "weight": 1.0}, {"source": "requirements_pyopenssl", "target": "readme_unified_tls_ssl", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "requirements.txt", "source_location": null, "weight": 1.0}, {"source": "requirements_flask", "target": "readme_unified_web_management_interface", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "requirements.txt", "source_location": null, "weight": 1.0}, {"source": "requirements_flask_sqlalchemy", "target": "readme_unified_database_schema", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "requirements.txt", "source_location": null, "weight": 1.0}, {"source": "requirements_sqlalchemy", "target": "readme_unified_database_schema", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "requirements.txt", "source_location": null, "weight": 1.0}, {"source": "requirements_bcrypt", "target": "readme_unified_user_authentication", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "requirements.txt", "source_location": null, "weight": 1.0}, {"source": "requirements_dnspython", "target": "readme_unified_dns_configuration", "relation": "implements", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "requirements.txt", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/f52a0e077ff24b7a53cf2e16679b7f17f50ab1d7fc3cac2fc7973cbb1ed08a06.json b/graphify-out/cache/semantic/pd5fd89c46bb5/f52a0e077ff24b7a53cf2e16679b7f17f50ab1d7fc3cac2fc7973cbb1ed08a06.json new file mode 100644 index 0000000..2891198 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/f52a0e077ff24b7a53cf2e16679b7f17f50ab1d7fc3cac2fc7973cbb1ed08a06.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_edit_domain_page", "label": "Edit Domain Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/edit_domain.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_edit_domain_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_domain.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_domain_page", "target": "email_server_server_web_ui_templates_sidebar_email_partial", "relation": "references", "confidence": "AMBIGUOUS", "confidence_score": 0.2, "source_file": "email_server/server_web_ui/templates/edit_domain.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_domain_page", "target": "email_server_server_web_ui_templates_domains_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_domain.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_edit_domain_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/edit_domain.html", "source_location": null, "weight": 1.0}], "hyperedges": []} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/fa273e21310418c34dc6c5f1b3163fbe4dda35aab77229a7282950aa53342e46.json b/graphify-out/cache/semantic/pd5fd89c46bb5/fa273e21310418c34dc6c5f1b3163fbe4dda35aab77229a7282950aa53342e46.json new file mode 100644 index 0000000..205ee2b --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/fa273e21310418c34dc6c5f1b3163fbe4dda35aab77229a7282950aa53342e46.json @@ -0,0 +1 @@ +{"nodes": [{"id": "email_server_server_web_ui_templates_dkim_page", "label": "DKIM Key Management Page", "file_type": "code", "source_file": "email_server/server_web_ui/templates/dkim.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "email_server_server_web_ui_templates_dkim_dkim_key_model", "label": "DKIM Key Data Model", "file_type": "concept", "source_file": "email_server/server_web_ui/templates/dkim.html", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "email_server_server_web_ui_templates_dkim_page", "target": "email_server_server_web_ui_templates_base_page", "relation": "implements", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dkim.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dkim_page", "target": "email_server_server_web_ui_templates_edit_dkim_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dkim.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dkim_page", "target": "email_server_server_web_ui_templates_add_domain_page", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dkim.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dkim_page", "target": "email_server_server_web_ui_templates_dkim_dkim_key_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dkim.html", "source_location": null, "weight": 1.0}, {"source": "email_server_server_web_ui_templates_dkim_page", "target": "email_server_server_web_ui_templates_domains_domain_model", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "email_server/server_web_ui/templates/dkim.html", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "dkim_dns_verification_flow", "label": "DKIM/SPF DNS Verification Flow", "nodes": ["email_server_server_web_ui_templates_dkim_page", "email_server_server_web_ui_templates_edit_dkim_page", "email_server_server_web_ui_templates_dkim_dkim_key_model", "email_server_server_web_ui_templates_domains_domain_model"], "relation": "participate_in", "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "email_server/server_web_ui/templates/dkim.html"}]} \ No newline at end of file diff --git a/graphify-out/cache/semantic/pd5fd89c46bb5/ff652b2cbcadf0dbd6d21f088fc0ebad1e675f799448de274eea33668230fbbe.json b/graphify-out/cache/semantic/pd5fd89c46bb5/ff652b2cbcadf0dbd6d21f088fc0ebad1e675f799448de274eea33668230fbbe.json new file mode 100644 index 0000000..c6a34a7 --- /dev/null +++ b/graphify-out/cache/semantic/pd5fd89c46bb5/ff652b2cbcadf0dbd6d21f088fc0ebad1e675f799448de274eea33668230fbbe.json @@ -0,0 +1 @@ +{"nodes": [{"id": "tests_general_cli_usage_doc", "label": "CLI/Web Usage Guide (tests)", "file_type": "document", "source_file": "tests/general_cli_usage.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_general_cli_usage_web_interface_setup", "label": "Web Interface Setup Workflow (dev/prod)", "file_type": "concept", "source_file": "tests/general_cli_usage.md", "source_location": "Example Setup Workflow", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_general_cli_usage_domain_management", "label": "Domain Management (web UI: /email/domains)", "file_type": "concept", "source_file": "tests/general_cli_usage.md", "source_location": "Domain Management", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_general_cli_usage_user_management", "label": "User Management (web UI: /email/users)", "file_type": "concept", "source_file": "tests/general_cli_usage.md", "source_location": "User Management", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_general_cli_usage_ip_whitelist_management", "label": "IP Whitelist Management (web UI: /email/ips)", "file_type": "concept", "source_file": "tests/general_cli_usage.md", "source_location": "IP Whitelist Management", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_general_cli_usage_dkim_key_management", "label": "DKIM Key Management (web UI: /email/dkim)", "file_type": "concept", "source_file": "tests/general_cli_usage.md", "source_location": "DKIM Key Management", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_general_cli_usage_send_email_script", "label": "tests/send_email.py script", "file_type": "concept", "source_file": "tests/general_cli_usage.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_general_cli_usage_swaks", "label": "swaks (SMTP test CLI tool)", "file_type": "concept", "source_file": "tests/general_cli_usage.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "tests_general_cli_usage_db_direct_access", "label": "Direct sqlite3 DB Access/Queries", "file_type": "concept", "source_file": "tests/general_cli_usage.md", "source_location": "Database Direct Access", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "tests_general_cli_usage_doc", "target": "tests_general_cli_usage_web_interface_setup", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/general_cli_usage.md", "source_location": "Example Setup Workflow", "weight": 1.0}, {"source": "tests_general_cli_usage_doc", "target": "tests_general_cli_usage_domain_management", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/general_cli_usage.md", "source_location": "Domain Management", "weight": 1.0}, {"source": "tests_general_cli_usage_doc", "target": "tests_general_cli_usage_user_management", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/general_cli_usage.md", "source_location": "User Management", "weight": 1.0}, {"source": "tests_general_cli_usage_doc", "target": "tests_general_cli_usage_ip_whitelist_management", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/general_cli_usage.md", "source_location": "IP Whitelist Management", "weight": 1.0}, {"source": "tests_general_cli_usage_doc", "target": "tests_general_cli_usage_dkim_key_management", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/general_cli_usage.md", "source_location": "DKIM Key Management", "weight": 1.0}, {"source": "tests_general_cli_usage_doc", "target": "tests_general_cli_usage_send_email_script", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/general_cli_usage.md", "source_location": "Send emails using python script", "weight": 1.0}, {"source": "tests_general_cli_usage_doc", "target": "tests_general_cli_usage_swaks", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/general_cli_usage.md", "source_location": "Linux send emails using swaks", "weight": 1.0}, {"source": "tests_general_cli_usage_doc", "target": "tests_general_cli_usage_db_direct_access", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/general_cli_usage.md", "source_location": "Database Direct Access", "weight": 1.0}, {"source": "tests_general_cli_usage_swaks", "target": "tests_email_body_lorem_ipsum", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/general_cli_usage.md", "source_location": "swaks --body @tests/email_body.txt", "weight": 1.0}, {"source": "tests_general_cli_usage_swaks", "target": "tests_run_tests_manually_swaks", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/general_cli_usage.md", "source_location": null, "weight": 1.0}, {"source": "tests_general_cli_usage_send_email_script", "target": "tests_run_tests_manually_send_email_script", "relation": "conceptually_related_to", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/general_cli_usage.md", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "manual_smtp_testing_workflow", "label": "Manual SMTP Testing Workflow", "nodes": ["tests_general_cli_usage_swaks", "tests_run_tests_manually_swaks", "tests_email_body_lorem_ipsum", "tests_general_cli_usage_send_email_script"], "relation": "form", "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "tests/general_cli_usage.md"}]} \ No newline at end of file diff --git a/graphify-out/cache/stat-index.json b/graphify-out/cache/stat-index.json new file mode 100644 index 0000000..e39bf0b --- /dev/null +++ b/graphify-out/cache/stat-index.json @@ -0,0 +1 @@ +{"README.md":{"size":1391,"mtime_ns":1786507445419490517,"word_count":129,"hashes":{"readme.md":"78e29ce4bc0f115da08230351ff9456f4d82c2cdd299a1a8d597df3cfdf54112"}},"README_unified.md":{"size":10596,"mtime_ns":1786507445419652933,"word_count":1377,"hashes":{"readme_unified.md":"9af8dd27ccf9b6a86c3bf955b48285c50092e9bba7e5c330daf12e95ff364e6e"}},"app.py":{"size":17244,"mtime_ns":1786507445420007860,"word_count":1259,"hashes":{"app.py":"0cc1b8940b22ee0b0015d25c7819912defc72c760460cc7cf04b3278e00f29bc"}},"email_server/__init__.py":{"size":34,"mtime_ns":1786507445420007860,"word_count":6,"hashes":{"email_server/__init__.py":"7bbfa1b55787fd0c9bc29b45cca75e11d7146bda4514e0c4d365f94b2e2a42db"}},"email_server/auth.py":{"size":8034,"mtime_ns":1786507445420218065,"word_count":653,"hashes":{"email_server/auth.py":"f7563fcd503cf1ec30243d80866d3ef33e9caab8c665b3cb3efa0d8302793f3d"}},"email_server/dkim_manager.py":{"size":11688,"mtime_ns":1786507445420523913,"word_count":882,"hashes":{"email_server/dkim_manager.py":"4c8ecc79aca4fd9640c5b9a840125973c41bc325456748db03e2f0e7fb4cf6aa"}},"email_server/email_relay.py":{"size":15478,"mtime_ns":1786507445420805695,"word_count":1158,"hashes":{"email_server/email_relay.py":"a5649989118c33ca032b514efc2c85753464c6302189270afb000a7013b59981"}},"email_server/models.py":{"size":13827,"mtime_ns":1786507445421145960,"word_count":1194,"hashes":{"email_server/models.py":"8c531e17c84573bd83a67ef3b456f9d7dbbbe33d626f48a4115bc01438ea1174"}},"email_server/server_runner.py":{"size":4892,"mtime_ns":1786507445421353387,"word_count":402,"hashes":{"email_server/server_runner.py":"5418f4925af9f157470f18a7bc90d4aeb97e4b0b1eebd4127fc4e3a6be5d4182"}},"email_server/server_web_ui/__init__.py":{"size":400,"mtime_ns":1786507445421353387,"word_count":66,"hashes":{"email_server/server_web_ui/__init__.py":"b013764224b9ff43f3703b70a1d988acbbaf215305f2ea02898430d9d9ce746e"}},"email_server/server_web_ui/dashboard.py":{"size":1693,"mtime_ns":1786507445421556476,"word_count":119,"hashes":{"email_server/server_web_ui/dashboard.py":"bcf615dd96ae8d600e5bb49d966729ddef6479f806a57df02d5f1001c4a5c790"}},"email_server/server_web_ui/database.py":{"size":4844,"mtime_ns":1786507445421556476,"word_count":412,"hashes":{"email_server/server_web_ui/database.py":"4d43f0ffdbc1bfaff9e8878442c253981ea30a743cc355aa4f05167bfab5723e"}},"email_server/server_web_ui/dkim.py":{"size":19663,"mtime_ns":1786507445421945617,"word_count":1474,"hashes":{"email_server/server_web_ui/dkim.py":"cb66b7b4567fe8005046435eeb57111626591f9f0473d1b7cd63c70c34cce33e"}},"email_server/server_web_ui/domains.py":{"size":8226,"mtime_ns":1786507445422280060,"word_count":566,"hashes":{"email_server/server_web_ui/domains.py":"eb1f5a98cf68dfd5b4fb5d0b6ac1c5ce70867aec6ce9dcff1906a71f09458baf"}},"email_server/server_web_ui/ip_whitelist.py":{"size":7767,"mtime_ns":1786507445422437786,"word_count":532,"hashes":{"email_server/server_web_ui/ip_whitelist.py":"d02e9085659d7c0ee4ca204b92a49a288f46488423e4c0c762f8f6608ed302c9"}},"email_server/server_web_ui/logs.py":{"size":3872,"mtime_ns":1786507445422889171,"word_count":262,"hashes":{"email_server/server_web_ui/logs.py":"4cb75c2dac0d659c2e794ce2f75e9162d8aacbea7ddabdf63d91b859166d78d4"}},"email_server/server_web_ui/routes.py":{"size":1960,"mtime_ns":1786507445422889171,"word_count":159,"hashes":{"email_server/server_web_ui/routes.py":"942a2ceeef2447853d96b06f31af1bd5f903f2bb5a1aa1b2a8af45e5a80d98cc"}},"email_server/server_web_ui/senders.py":{"size":8175,"mtime_ns":1786507445423102119,"word_count":551,"hashes":{"email_server/server_web_ui/senders.py":"05251c18c30787c8d604a53604a58d4047972c3840a19a3615bc59b75aee09f9"}},"email_server/server_web_ui/settings.py":{"size":9396,"mtime_ns":1786507445423299734,"word_count":786,"hashes":{"email_server/server_web_ui/settings.py":"e8ad59f7a3fcb4cca8357809ae0e1647107f549753fd0473126cd000ae147e86"}},"email_server/server_web_ui/static/js/dkim-management.js":{"size":12673,"mtime_ns":1786507445423438717,"word_count":817},"email_server/server_web_ui/static/js/smtp-management.js":{"size":10220,"mtime_ns":1786507445423806486,"word_count":734},"email_server/server_web_ui/templates/add_domain.html":{"size":4676,"mtime_ns":1786507445423830802,"word_count":266,"hashes":{"email_server/server_web_ui/templates/add_domain.html":"3ebe56d0428ddfb32df5ca9e090ccb6f82e2ecbb6d6753850d02351d7623ddeb"}},"email_server/server_web_ui/templates/add_ip.html":{"size":7326,"mtime_ns":1786507445424627682,"word_count":466,"hashes":{"email_server/server_web_ui/templates/add_ip.html":"80207426a564652a2a2e7803663bf787b639fc7d172b62a6f24346e52fafa845"}},"email_server/server_web_ui/templates/add_sender.html":{"size":7565,"mtime_ns":1786507445424706018,"word_count":446,"hashes":{"email_server/server_web_ui/templates/add_sender.html":"4bc821701f9ac50d2bb005557fc851120ad30450fdf2d77773069c4a19d74f69"}},"email_server/server_web_ui/templates/base.html":{"size":13715,"mtime_ns":1786507445424888573,"word_count":909,"hashes":{"email_server/server_web_ui/templates/base.html":"79df8711fb8b03d77a33cb9dfbec21f4eb06a714315cd691795f2df8dd8a77ed"}},"email_server/server_web_ui/templates/dashboard.html":{"size":18979,"mtime_ns":1786507445425326460,"word_count":1056,"hashes":{"email_server/server_web_ui/templates/dashboard.html":"8846098c083875993fe8f15817c0d867a96225ee14a58e7af6c73057365730cb"}},"email_server/server_web_ui/templates/dkim.html":{"size":38174,"mtime_ns":1786507445425445677,"word_count":2394,"hashes":{"email_server/server_web_ui/templates/dkim.html":"fa273e21310418c34dc6c5f1b3163fbe4dda35aab77229a7282950aa53342e46"}},"email_server/server_web_ui/templates/domains.html":{"size":12304,"mtime_ns":1786507445425599907,"word_count":793,"hashes":{"email_server/server_web_ui/templates/domains.html":"4c0739b37e5f8ed0a36bf32af034be38dd39f8c6b7dd54e2538deb12fe87e5d9"}},"email_server/server_web_ui/templates/edit_dkim.html":{"size":7139,"mtime_ns":1786507445425740430,"word_count":421,"hashes":{"email_server/server_web_ui/templates/edit_dkim.html":"a35fe477b23ea7ec07f723c1964d77bf4d8e715c67a53ca7b2dea87fbb1d98b6"}},"email_server/server_web_ui/templates/edit_domain.html":{"size":7643,"mtime_ns":1786507445425740430,"word_count":407,"hashes":{"email_server/server_web_ui/templates/edit_domain.html":"f52a0e077ff24b7a53cf2e16679b7f17f50ab1d7fc3cac2fc7973cbb1ed08a06"}},"email_server/server_web_ui/templates/edit_ip.html":{"size":7966,"mtime_ns":1786507445425956398,"word_count":482,"hashes":{"email_server/server_web_ui/templates/edit_ip.html":"77814578c9915effecea5e4a8001693ccaa6f73f4b8f52f7e0fbe92125cb5b6f"}},"email_server/server_web_ui/templates/edit_sender.html":{"size":9481,"mtime_ns":1786507445426043390,"word_count":556,"hashes":{"email_server/server_web_ui/templates/edit_sender.html":"de14fd2b93326ae56038db511210c80ce116d1be663250812a802fd499624682"}},"email_server/server_web_ui/templates/error.html":{"size":6849,"mtime_ns":1786507445426149334,"word_count":429,"hashes":{"email_server/server_web_ui/templates/error.html":"a8a6e7a1611daa37c61bd7abe7cd3fd8e5ceab26ed42b6aab242000005fd4141"}},"email_server/server_web_ui/templates/ips.html":{"size":12902,"mtime_ns":1786507445426290359,"word_count":657,"hashes":{"email_server/server_web_ui/templates/ips.html":"8ddb7adedab85944270a86583b270bec3ccea33a448e16946757109bc08310e8"}},"email_server/server_web_ui/templates/logs.html":{"size":24163,"mtime_ns":1786507445426524126,"word_count":1360,"hashes":{"email_server/server_web_ui/templates/logs.html":"62fa91c3279485b5a18726c164710a328eccfa636815f5708ac10cb08ec2fe7c"}},"email_server/server_web_ui/templates/senders.html":{"size":10150,"mtime_ns":1786507445426524126,"word_count":551,"hashes":{"email_server/server_web_ui/templates/senders.html":"12f04d6d3301ed5a7cd9cb20b42502b05eb8125fa023e7d34803476616f41613"}},"email_server/server_web_ui/templates/settings.html":{"size":35599,"mtime_ns":1786507445426726188,"word_count":2043,"hashes":{"email_server/server_web_ui/templates/settings.html":"2b6adab1eecfb66bce3a0f8c01be56c15387111cfa964629eed0242e9784c142"}},"email_server/server_web_ui/templates/sidebar_email.html":{"size":8502,"mtime_ns":1786507445426852793,"word_count":624,"hashes":{"email_server/server_web_ui/templates/sidebar_email.html":"5f322a40caf344ac65d921290cda2c583fff39eb5d581bd83ae8fc8c99280f42"}},"email_server/server_web_ui/templates/view_message_content.html":{"size":4984,"mtime_ns":1786507445426852793,"word_count":366,"hashes":{"email_server/server_web_ui/templates/view_message_content.html":"bf735e58d2d06d07a1fb9e69169199d2922433b7a59a11607ebd6615e090a5fc"}},"email_server/server_web_ui/utils.py":{"size":6072,"mtime_ns":1786507445427010527,"word_count":577,"hashes":{"email_server/server_web_ui/utils.py":"2cbfa3c216771845653d30fee2e9003c4fed127d81dfd24e183a37567faaea28"}},"email_server/server_web_ui/view_message.py":{"size":5336,"mtime_ns":1786507445427105042,"word_count":425,"hashes":{"email_server/server_web_ui/view_message.py":"d90980483980ea4ae23d9292908946220f23d36f547a8c9ef1640e6d373ee842"}},"email_server/settings_loader.py":{"size":3147,"mtime_ns":1786507445427188839,"word_count":321,"hashes":{"email_server/settings_loader.py":"343c952ee4114c9166787cd08cff7e8e01560bc79f30b207e2cbf6fc6bf32c3b"}},"email_server/smtp_handler.py":{"size":34618,"mtime_ns":1786507445427512147,"word_count":2591,"hashes":{"email_server/smtp_handler.py":"8d39786cf5b3da3b2a98aa3dc3ba656e9661208c833f48a7758ef6f587be9571"}},"email_server/tls_utils.py":{"size":2361,"mtime_ns":1786507445427631021,"word_count":185,"hashes":{"email_server/tls_utils.py":"73552cd042316daf4925b63d54e9017dba06c64cdc3eb13c09027fee46932a51"}},"email_server/tool_box.py":{"size":2817,"mtime_ns":1786507445427723950,"word_count":274,"hashes":{"email_server/tool_box.py":"e435f54e2eb7b2b07ba12b6671ce4ca682cea39731566f3b95e60aaa99f03969"}},"migrations/add_email_attachments_table.sql":{"size":439,"mtime_ns":1786507445427723950,"word_count":51,"hashes":{"migrations/add_email_attachments_table.sql":"e222801660a3b82c7a4a2adc875f0be4fa271ea50925449da821f389ebabc38a"}},"requirements.txt":{"size":564,"mtime_ns":1786507445427886125,"word_count":80,"hashes":{"requirements.txt":"e58f4f968f97904e313c7324d1e583ce4b469d01fd542623806f2e61775b729a"}},"script_install_service.sh":{"size":6409,"mtime_ns":1786507445427966609,"word_count":557,"hashes":{"script_install_service.sh":"bcda078e5fce29334bb7fd3ebfa5e41ff6c3d05409b9e05ab1e9b028f710e0bd"}},"script_nginx_setup.sh":{"size":9462,"mtime_ns":1786507445428081066,"word_count":946,"hashes":{"script_nginx_setup.sh":"e428638c29836f809dc52800b8097257019f60de16815b82b8eee236072594d2"}},"script_setup_py_environment.sh":{"size":1274,"mtime_ns":1786507445428145957,"word_count":156,"hashes":{"script_setup_py_environment.sh":"57f7b0fa0147dcad0c34ea666da0574d80fef057854ca253e281c31224311b63"}},"tests/Hello.jpg":{"size":78330,"mtime_ns":1786507445428696152,"word_count":2842,"hashes":{"tests/hello.jpg":"d8be084113b7b7300699fcd05bbe041bf0190d0de47e6684213ae5a607076027"}},"tests/bash_send_email.sh":{"size":3449,"mtime_ns":1786507445428802798,"word_count":394,"hashes":{"tests/bash_send_email.sh":"ad38a35c39e2aa05007ebe74529fee8583c558b70b4fdeb33e8f6818d4c0cbd3"}},"tests/email_body.txt":{"size":2296,"mtime_ns":1786507445428869284,"word_count":381,"hashes":{"tests/email_body.txt":"8d499361c1003fae2ac64da14c57fa5b3c554539d7c701f297f5a543ed352bfd"}},"tests/general_cli_usage.md":{"size":2854,"mtime_ns":1786507445428931250,"word_count":369,"hashes":{"tests/general_cli_usage.md":"ff652b2cbcadf0dbd6d21f088fc0ebad1e675f799448de274eea33668230fbbe"}},"tests/note_authentication_order_fix.md":{"size":4321,"mtime_ns":1786507445429003748,"word_count":595,"hashes":{"tests/note_authentication_order_fix.md":"e3506421d5cc2551db2365558095221f5a5fa2b4e852217b3abf2a0bb3b5a496"}},"tests/pdf_test_1.pdf":{"size":318182,"mtime_ns":1786507445430813355,"word_count":0,"hashes":{"tests/pdf_test_1.pdf":"1d7f8154cc86a460d6cc8e0055f414b44850b85732695008f5dd421f5b8bce85"}},"tests/run_tests_manually.md":{"size":2129,"mtime_ns":1786507445430813355,"word_count":270,"hashes":{"tests/run_tests_manually.md":"b0510ba0e02df18d6fd76ea7bcbc8caf68020a8f0a7e38e073cdf81bc6112305"}},"tests/send_email.py":{"size":3359,"mtime_ns":1786507445431037231,"word_count":254,"hashes":{"tests/send_email.py":"2eb9f60a797877a5036bfc46a427240a9effa5da641c768ec5ec73bbe649ec3f"}}} \ No newline at end of file diff --git a/graphify-out/cost.json b/graphify-out/cost.json new file mode 100644 index 0000000..a06bfbc --- /dev/null +++ b/graphify-out/cost.json @@ -0,0 +1,12 @@ +{ + "runs": [ + { + "date": "2026-08-12T04:16:18.090227+00:00", + "input_tokens": 243577, + "output_tokens": 0, + "files": 58 + } + ], + "total_input_tokens": 243577, + "total_output_tokens": 0 +} \ No newline at end of file diff --git a/graphify-out/graph.html b/graphify-out/graph.html new file mode 100644 index 0000000..801feea --- /dev/null +++ b/graphify-out/graph.html @@ -0,0 +1,320 @@ + + + + +graphify - graphify-out/graph.html + + + + +
+ + + + + \ No newline at end of file diff --git a/graphify-out/graph.json b/graphify-out/graph.json new file mode 100644 index 0000000..3e3f53b --- /dev/null +++ b/graphify-out/graph.json @@ -0,0 +1,15027 @@ +{ + "directed": false, + "multigraph": false, + "graph": { + "hyperedges": [ + { + "id": "domain_crud_flow", + "label": "Domain CRUD Flow", + "nodes": [ + "email_server_server_web_ui_templates_add_domain_page", + "email_server_server_web_ui_templates_domains_page", + "email_server_server_web_ui_templates_edit_domain_page", + "email_server_server_web_ui_templates_domains_domain_model" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "email_server/server_web_ui/templates/domains.html" + }, + { + "id": "dkim_dns_verification_flow", + "label": "DKIM/SPF DNS Verification Flow", + "nodes": [ + "email_server_server_web_ui_templates_dkim_page", + "email_server_server_web_ui_templates_edit_dkim_page", + "email_server_server_web_ui_templates_dkim_dkim_key_model", + "email_server_server_web_ui_templates_domains_domain_model" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "email_server/server_web_ui/templates/dkim.html" + }, + { + "id": "email_log_message_viewer_flow", + "label": "Email Log Message Viewer Flow", + "nodes": [ + "email_server_server_web_ui_templates_logs_page", + "email_server_server_web_ui_templates_view_message_content_page", + "email_server_server_web_ui_templates_logs_email_log_model", + "email_server_server_web_ui_templates_view_message_content_attachment_model" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "email_server/server_web_ui/templates/logs.html" + }, + { + "id": "smtp_auth_ip_whitelist_flow", + "label": "SMTP Authentication & IP Whitelist Flow", + "nodes": [ + "tests_note_authentication_order_fix_authentication_order_fix", + "tests_note_authentication_order_fix_ip_whitelisting_fallback", + "readme_unified_user_authentication", + "readme_unified_ip_whitelisting" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "tests/note_authentication_order_fix.md" + }, + { + "id": "manual_smtp_testing_workflow", + "label": "Manual SMTP Testing Workflow", + "nodes": [ + "tests_general_cli_usage_swaks", + "tests_run_tests_manually_swaks", + "tests_email_body_lorem_ipsum", + "tests_general_cli_usage_send_email_script" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/general_cli_usage.md" + }, + { + "id": "dkim_keygen_dns_verification_flow", + "label": "DKIM Key Generation & DNS Verification Flow", + "nodes": [ + "readme_unified_dkim_support", + "readme_unified_dns_configuration", + "tests_general_cli_usage_dkim_key_management", + "tests_run_tests_manually_dkim_key_generation" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "README_unified.md" + } + ] + }, + "nodes": [ + { + "label": "app.py", + "file_type": "code", + "source_file": "app.py", + "source_location": "L1", + "_origin": "ast", + "id": "app", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "app.py" + }, + { + "label": "SMTPServerApp", + "file_type": "code", + "source_file": "app.py", + "source_location": "L44", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "app_smtpserverapp", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": "smtpserverapp" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "app.py", + "source_location": "L47", + "_callable": true, + "_origin": "ast", + "id": "app_smtpserverapp_init", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": ".__init__()" + }, + { + "label": "._get_absolute_database_url()", + "file_type": "code", + "source_file": "app.py", + "source_location": "L56", + "_callable": true, + "_origin": "ast", + "id": "app_smtpserverapp_get_absolute_database_url", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": "._get_absolute_database_url()" + }, + { + "label": ".create_flask_app()", + "file_type": "code", + "source_file": "app.py", + "source_location": "L74", + "_callable": true, + "_origin": "ast", + "id": "app_smtpserverapp_create_flask_app", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": ".create_flask_app()" + }, + { + "label": ".init_sample_data()", + "file_type": "code", + "source_file": "app.py", + "source_location": "L153", + "_callable": true, + "_origin": "ast", + "id": "app_smtpserverapp_init_sample_data", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": ".init_sample_data()" + }, + { + "label": ".start_smtp_server()", + "file_type": "code", + "source_file": "app.py", + "source_location": "L228", + "_callable": true, + "_origin": "ast", + "id": "app_smtpserverapp_start_smtp_server", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": ".start_smtp_server()" + }, + { + "label": ".run_smtp_server()", + "file_type": "code", + "source_file": "app.py", + "source_location": "L238", + "_callable": true, + "_origin": "ast", + "id": "app_smtpserverapp_run_smtp_server", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": ".run_smtp_server()" + }, + { + "label": ".run()", + "file_type": "code", + "source_file": "app.py", + "source_location": "L267", + "_callable": true, + "_origin": "ast", + "id": "app_smtpserverapp_run", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": ".run()" + }, + { + "label": ".check_health()", + "file_type": "code", + "source_file": "app.py", + "source_location": "L319", + "_callable": true, + "_origin": "ast", + "id": "app_smtpserverapp_check_health", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": ".check_health()" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "app.py", + "source_location": "L356", + "_callable": true, + "_origin": "ast", + "id": "app_main", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": "main()" + }, + { + "label": "Unified SMTP Server and Web Frontend Application", + "file_type": "rationale", + "source_file": "app.py", + "source_location": "L45", + "_origin": "ast", + "id": "app_rationale_45", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": "unified smtp server and web frontend application" + }, + { + "label": "Convert relative database URL to absolute path for Flask-SQLAlchemy", + "file_type": "rationale", + "source_file": "app.py", + "source_location": "L57", + "_origin": "ast", + "id": "app_rationale_57", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": "convert relative database url to absolute path for flask-sqlalchemy" + }, + { + "label": "Create and configure the Flask application", + "file_type": "rationale", + "source_file": "app.py", + "source_location": "L75", + "_origin": "ast", + "id": "app_rationale_75", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": "create and configure the flask application" + }, + { + "label": "Initialize the database with sample data for testing", + "file_type": "rationale", + "source_file": "app.py", + "source_location": "L154", + "_origin": "ast", + "id": "app_rationale_154", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "initialize the database with sample data for testing" + }, + { + "label": "Start the SMTP server in async context", + "file_type": "rationale", + "source_file": "app.py", + "source_location": "L229", + "_origin": "ast", + "id": "app_rationale_229", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": "start the smtp server in async context" + }, + { + "label": "Run the unified application", + "file_type": "rationale", + "source_file": "app.py", + "source_location": "L268", + "_origin": "ast", + "id": "app_rationale_268", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": "run the unified application" + }, + { + "label": "Check the health of all services", + "file_type": "rationale", + "source_file": "app.py", + "source_location": "L320", + "_origin": "ast", + "id": "app_rationale_320", + "community": 9, + "community_name": "Unified App Entry Point", + "norm_label": "check the health of all services" + }, + { + "label": "email_server/__init__.py", + "file_type": "code", + "source_file": "email_server/__init__.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_init", + "community": 34, + "community_name": "email_server Package Init", + "norm_label": "email_server/__init__.py" + }, + { + "label": "PyMTA Server email package", + "file_type": "rationale", + "source_file": "email_server/__init__.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_init_rationale_1", + "community": 34, + "community_name": "email_server Package Init", + "norm_label": "pymta server email package" + }, + { + "label": "auth.py", + "file_type": "code", + "source_file": "email_server/auth.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_auth", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "auth.py" + }, + { + "label": "EnhancedAuthenticator", + "file_type": "code", + "source_file": "email_server/auth.py", + "source_location": "L22", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_auth_enhancedauthenticator", + "community": 20, + "community_name": "Combined Authenticators", + "norm_label": "enhancedauthenticator" + }, + { + "label": ".__call__()", + "file_type": "code", + "source_file": "email_server/auth.py", + "source_location": "L32", + "_callable": true, + "_origin": "ast", + "id": "email_server_auth_enhancedauthenticator_call", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": ".__call__()" + }, + { + "label": "EnhancedIPAuthenticator", + "file_type": "code", + "source_file": "email_server/auth.py", + "source_location": "L90", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_auth_enhancedipauthenticator", + "community": 20, + "community_name": "Combined Authenticators", + "norm_label": "enhancedipauthenticator" + }, + { + "label": ".can_authenticate_for_domain()", + "file_type": "code", + "source_file": "email_server/auth.py", + "source_location": "L100", + "_callable": true, + "_origin": "ast", + "id": "email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": ".can_authenticate_for_domain()" + }, + { + "label": "validate_sender_authorization()", + "file_type": "code", + "source_file": "email_server/auth.py", + "source_location": "L121", + "_callable": true, + "_origin": "ast", + "id": "email_server_auth_validate_sender_authorization", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "validate_sender_authorization()" + }, + { + "label": "get_authenticated_domain_id()", + "file_type": "code", + "source_file": "email_server/auth.py", + "source_location": "L195", + "_callable": true, + "_origin": "ast", + "id": "email_server_auth_get_authenticated_domain_id", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "get_authenticated_domain_id()" + }, + { + "label": "Enhanced authentication modules for the SMTP server using ESRV schema. Security\u2026", + "file_type": "rationale", + "source_file": "email_server/auth.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_auth_rationale_1", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "enhanced authentication modules for the smtp server using esrv schema. security..." + }, + { + "label": "Enhanced username/password authenticator with sender validation. Features: -\u2026", + "file_type": "rationale", + "source_file": "email_server/auth.py", + "source_location": "L23", + "_origin": "ast", + "id": "email_server_auth_rationale_23", + "community": 20, + "community_name": "Combined Authenticators", + "norm_label": "enhanced username/password authenticator with sender validation. features: -..." + }, + { + "label": "Enhanced IP-based authenticator with domain-specific authorization. Features: -\u2026", + "file_type": "rationale", + "source_file": "email_server/auth.py", + "source_location": "L91", + "_origin": "ast", + "id": "email_server_auth_rationale_91", + "community": 20, + "community_name": "Combined Authenticators", + "norm_label": "enhanced ip-based authenticator with domain-specific authorization. features: -..." + }, + { + "label": "Check if IP can authenticate for a specific domain. Args: ip_address: Client IP\u2026", + "file_type": "rationale", + "source_file": "email_server/auth.py", + "source_location": "L101", + "_origin": "ast", + "id": "email_server_auth_rationale_101", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "check if ip can authenticate for a specific domain. args: ip_address: client ip..." + }, + { + "label": "Validate if the authenticated entity can send as the specified from address.\u2026", + "file_type": "rationale", + "source_file": "email_server/auth.py", + "source_location": "L122", + "_origin": "ast", + "id": "email_server_auth_rationale_122", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "validate if the authenticated entity can send as the specified from address...." + }, + { + "label": "Get the domain ID for the authenticated entity. Args: session: SMTP session\u2026", + "file_type": "rationale", + "source_file": "email_server/auth.py", + "source_location": "L196", + "_origin": "ast", + "id": "email_server_auth_rationale_196", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "get the domain id for the authenticated entity. args: session: smtp session..." + }, + { + "label": "dkim_manager.py", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_dkim_manager", + "community": 19, + "community_name": "DKIM/Custom Header Models", + "norm_label": "dkim_manager.py" + }, + { + "label": "DKIMManager", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L20", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_dkim_manager_dkimmanager", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "dkimmanager" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L23", + "_callable": true, + "_origin": "ast", + "id": "email_server_dkim_manager_dkimmanager_init", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": ".__init__()" + }, + { + "label": "._generate_random_selector()", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L31", + "_callable": true, + "_origin": "ast", + "id": "email_server_dkim_manager_dkimmanager_generate_random_selector", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "._generate_random_selector()" + }, + { + "label": ".generate_dkim_keypair()", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L35", + "_callable": true, + "_origin": "ast", + "id": "email_server_dkim_manager_dkimmanager_generate_dkim_keypair", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": ".generate_dkim_keypair()" + }, + { + "label": ".get_active_dkim_key()", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L133", + "_callable": true, + "_origin": "ast", + "id": "email_server_dkim_manager_dkimmanager_get_active_dkim_key", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": ".get_active_dkim_key()" + }, + { + "label": ".get_dkim_private_key()", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L148", + "_callable": true, + "_origin": "ast", + "id": "email_server_dkim_manager_dkimmanager_get_dkim_private_key", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": ".get_dkim_private_key()" + }, + { + "label": ".get_dkim_public_key_record()", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L155", + "_callable": true, + "_origin": "ast", + "id": "email_server_dkim_manager_dkimmanager_get_dkim_public_key_record", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": ".get_dkim_public_key_record()" + }, + { + "label": ".sign_email()", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L168", + "_callable": true, + "_origin": "ast", + "id": "email_server_dkim_manager_dkimmanager_sign_email", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": ".sign_email()" + }, + { + "label": ".list_dkim_keys()", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L208", + "_callable": true, + "_origin": "ast", + "id": "email_server_dkim_manager_dkimmanager_list_dkim_keys", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": ".list_dkim_keys()" + }, + { + "label": ".initialize_default_keys()", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L231", + "_callable": true, + "_origin": "ast", + "id": "email_server_dkim_manager_dkimmanager_initialize_default_keys", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": ".initialize_default_keys()" + }, + { + "label": ".get_active_custom_headers()", + "file_type": "code", + "source_file": "email_server/dkim_manager.py", + "source_location": "L251", + "_callable": true, + "_origin": "ast", + "id": "email_server_dkim_manager_dkimmanager_get_active_custom_headers", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": ".get_active_custom_headers()" + }, + { + "label": "DKIM key management and email signing functionality.", + "file_type": "rationale", + "source_file": "email_server/dkim_manager.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_dkim_manager_rationale_1", + "community": 19, + "community_name": "DKIM/Custom Header Models", + "norm_label": "dkim key management and email signing functionality." + }, + { + "label": "Manages DKIM keys and email signing.", + "file_type": "rationale", + "source_file": "email_server/dkim_manager.py", + "source_location": "L21", + "_origin": "ast", + "id": "email_server_dkim_manager_rationale_21", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "manages dkim keys and email signing." + }, + { + "label": "Initialize DKIMManager with a selector. If not provided, use random.", + "file_type": "rationale", + "source_file": "email_server/dkim_manager.py", + "source_location": "L24", + "_origin": "ast", + "id": "email_server_dkim_manager_rationale_24", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "initialize dkimmanager with a selector. if not provided, use random." + }, + { + "label": "Generate a random DKIM selector name (8-12 chars).", + "file_type": "rationale", + "source_file": "email_server/dkim_manager.py", + "source_location": "L32", + "_origin": "ast", + "id": "email_server_dkim_manager_rationale_32", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "generate a random dkim selector name (8-12 chars)." + }, + { + "label": "Generate DKIM key pair for a domain, optionally with a custom selector. Args:\u2026", + "file_type": "rationale", + "source_file": "email_server/dkim_manager.py", + "source_location": "L36", + "_origin": "ast", + "id": "email_server_dkim_manager_rationale_36", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "generate dkim key pair for a domain, optionally with a custom selector. args:..." + }, + { + "label": "Get the active DKIM key for a domain (only one active per selector).", + "file_type": "rationale", + "source_file": "email_server/dkim_manager.py", + "source_location": "L134", + "_origin": "ast", + "id": "email_server_dkim_manager_rationale_134", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "get the active dkim key for a domain (only one active per selector)." + }, + { + "label": "Get DKIM private key for a domain.", + "file_type": "rationale", + "source_file": "email_server/dkim_manager.py", + "source_location": "L149", + "_origin": "ast", + "id": "email_server_dkim_manager_rationale_149", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "get dkim private key for a domain." + }, + { + "label": "Get DKIM public key DNS record for a domain (active key only).", + "file_type": "rationale", + "source_file": "email_server/dkim_manager.py", + "source_location": "L156", + "_origin": "ast", + "id": "email_server_dkim_manager_rationale_156", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "get dkim public key dns record for a domain (active key only)." + }, + { + "label": "Sign email content with DKIM. Only add one DKIM header, after all modifications.", + "file_type": "rationale", + "source_file": "email_server/dkim_manager.py", + "source_location": "L169", + "_origin": "ast", + "id": "email_server_dkim_manager_rationale_169", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "sign email content with dkim. only add one dkim header, after all modifications." + }, + { + "label": "Initialize DKIM keys for existing domains that don't have them.", + "file_type": "rationale", + "source_file": "email_server/dkim_manager.py", + "source_location": "L232", + "_origin": "ast", + "id": "email_server_dkim_manager_rationale_232", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "initialize dkim keys for existing domains that don't have them." + }, + { + "label": "Get all active custom headers for a domain. Args: domain_name (str): The domain\u2026", + "file_type": "rationale", + "source_file": "email_server/dkim_manager.py", + "source_location": "L252", + "_origin": "ast", + "id": "email_server_dkim_manager_rationale_252", + "community": 4, + "community_name": "DKIM Key Manager", + "norm_label": "get all active custom headers for a domain. args: domain_name (str): the domain..." + }, + { + "label": "email_relay.py", + "file_type": "code", + "source_file": "email_server/email_relay.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_email_relay", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "email_relay.py" + }, + { + "label": "EmailRelay", + "file_type": "code", + "source_file": "email_server/email_relay.py", + "source_location": "L19", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_email_relay_emailrelay", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": "emailrelay" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "email_server/email_relay.py", + "source_location": "L22", + "_callable": true, + "_origin": "ast", + "id": "email_server_email_relay_emailrelay_init", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": ".__init__()" + }, + { + "label": "._modify_headers_for_recipients()", + "file_type": "code", + "source_file": "email_server/email_relay.py", + "source_location": "L29", + "_callable": true, + "_origin": "ast", + "id": "email_server_email_relay_emailrelay_modify_headers_for_recipients", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": "._modify_headers_for_recipients()" + }, + { + "label": "._prepare_email_for_recipient()", + "file_type": "code", + "source_file": "email_server/email_relay.py", + "source_location": "L68", + "_callable": true, + "_origin": "ast", + "id": "email_server_email_relay_emailrelay_prepare_email_for_recipient", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": "._prepare_email_for_recipient()" + }, + { + "label": ".relay_email_async()", + "file_type": "code", + "source_file": "email_server/email_relay.py", + "source_location": "L101", + "_callable": true, + "_origin": "ast", + "id": "email_server_email_relay_emailrelay_relay_email_async", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": ".relay_email_async()" + }, + { + "label": ".relay_email()", + "file_type": "code", + "source_file": "email_server/email_relay.py", + "source_location": "L296", + "_callable": true, + "_origin": "ast", + "id": "email_server_email_relay_emailrelay_relay_email", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": ".relay_email()" + }, + { + "label": ".log_email()", + "file_type": "code", + "source_file": "email_server/email_relay.py", + "source_location": "L300", + "_callable": true, + "_origin": "ast", + "id": "email_server_email_relay_emailrelay_log_email", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": ".log_email()" + }, + { + "label": "Email relay functionality for the SMTP server.", + "file_type": "rationale", + "source_file": "email_server/email_relay.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_email_relay_rationale_1", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "email relay functionality for the smtp server." + }, + { + "label": "Handles relaying emails to recipient mail servers.", + "file_type": "rationale", + "source_file": "email_server/email_relay.py", + "source_location": "L20", + "_origin": "ast", + "id": "email_server_email_relay_rationale_20", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": "handles relaying emails to recipient mail servers." + }, + { + "label": "Modify email headers to set To and Cc fields, preserving original structure for\u2026", + "file_type": "rationale", + "source_file": "email_server/email_relay.py", + "source_location": "L30", + "_origin": "ast", + "id": "email_server_email_relay_rationale_30", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": "modify email headers to set to and cc fields, preserving original structure for..." + }, + { + "label": "Prepare a copy of the email for a specific recipient without modifying original\u2026", + "file_type": "rationale", + "source_file": "email_server/email_relay.py", + "source_location": "L69", + "_origin": "ast", + "id": "email_server_email_relay_rationale_69", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": "prepare a copy of the email for a specific recipient without modifying original..." + }, + { + "label": "Relay email to recipients' mail servers asynchronously with encryption.\u2026", + "file_type": "rationale", + "source_file": "email_server/email_relay.py", + "source_location": "L111", + "_origin": "ast", + "id": "email_server_email_relay_rationale_111", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": "relay email to recipients' mail servers asynchronously with encryption...." + }, + { + "label": "Synchronous wrapper for relay_email_async for compatibility.", + "file_type": "rationale", + "source_file": "email_server/email_relay.py", + "source_location": "L297", + "_origin": "ast", + "id": "email_server_email_relay_rationale_297", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": "synchronous wrapper for relay_email_async for compatibility." + }, + { + "label": "Log email activity to database, including per-recipient results.", + "file_type": "rationale", + "source_file": "email_server/email_relay.py", + "source_location": "L301", + "_origin": "ast", + "id": "email_server_email_relay_rationale_301", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": "log email activity to database, including per-recipient results." + }, + { + "label": "models.py", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_models", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "models.py" + }, + { + "label": "Domain", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L31", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_models_domain", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "domain" + }, + { + "label": "Base", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "base", + "community": 19, + "community_name": "DKIM/Custom Header Models", + "norm_label": "base" + }, + { + "label": ".__repr__()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L46", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_domain_repr", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": ".__repr__()" + }, + { + "label": "Sender", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L49", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_models_sender", + "community": 27, + "community_name": "Sender Model", + "norm_label": "sender" + }, + { + "label": ".can_send_as()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L68", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_sender_can_send_as", + "community": 27, + "community_name": "Sender Model", + "norm_label": ".can_send_as()" + }, + { + "label": ".__repr__()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L87", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_sender_repr", + "community": 27, + "community_name": "Sender Model", + "norm_label": ".__repr__()" + }, + { + "label": "WhitelistedIP", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L90", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_models_whitelistedip", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "whitelistedip" + }, + { + "label": ".can_send_for_domain()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L106", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_whitelistedip_can_send_for_domain", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": ".can_send_for_domain()" + }, + { + "label": ".__repr__()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L130", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_whitelistedip_repr", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": ".__repr__()" + }, + { + "label": "EmailLog", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L133", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_models_emaillog", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": "emaillog" + }, + { + "label": ".__repr__()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L156", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_emaillog_repr", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": ".__repr__()" + }, + { + "label": "EmailRecipientLog", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L159", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_models_emailrecipientlog", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "emailrecipientlog" + }, + { + "label": ".__repr__()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L174", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_emailrecipientlog_repr", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": ".__repr__()" + }, + { + "label": "AuthLog", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L177", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_models_authlog", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "authlog" + }, + { + "label": ".__repr__()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L189", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_authlog_repr", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": ".__repr__()" + }, + { + "label": "DKIMKey", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L192", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_models_dkimkey", + "community": 19, + "community_name": "DKIM/Custom Header Models", + "norm_label": "dkimkey" + }, + { + "label": ".__repr__()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L205", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_dkimkey_repr", + "community": 19, + "community_name": "DKIM/Custom Header Models", + "norm_label": ".__repr__()" + }, + { + "label": "CustomHeader", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L208", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_models_customheader", + "community": 19, + "community_name": "DKIM/Custom Header Models", + "norm_label": "customheader" + }, + { + "label": ".__repr__()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L219", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_customheader_repr", + "community": 19, + "community_name": "DKIM/Custom Header Models", + "norm_label": ".__repr__()" + }, + { + "label": "EmailAttachment", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L222", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_models_emailattachment", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "emailattachment" + }, + { + "label": ".__repr__()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L236", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_emailattachment_repr", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": ".__repr__()" + }, + { + "label": "create_tables()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L240", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_create_tables", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "create_tables()" + }, + { + "label": "hash_password()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L245", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_hash_password", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "hash_password()" + }, + { + "label": "check_password()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L249", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_check_password", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "check_password()" + }, + { + "label": "log_auth_attempt()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L253", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_log_auth_attempt", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "log_auth_attempt()" + }, + { + "label": "log_email()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L283", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_log_email", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "log_email()" + }, + { + "label": "get_sender_by_email()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L313", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_get_sender_by_email", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "get_sender_by_email()" + }, + { + "label": "get_domain_by_name()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L321", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_get_domain_by_name", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "get_domain_by_name()" + }, + { + "label": "get_whitelisted_ip()", + "file_type": "code", + "source_file": "email_server/models.py", + "source_location": "L329", + "_callable": true, + "_origin": "ast", + "id": "email_server_models_get_whitelisted_ip", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "get_whitelisted_ip()" + }, + { + "label": "Database models for the SMTP server using ESRV schema. Enhanced security\u2026", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_models_rationale_1", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "database models for the smtp server using esrv schema. enhanced security..." + }, + { + "label": "Domain model with enhanced security features.", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L32", + "_origin": "ast", + "id": "email_server_models_rationale_32", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "domain model with enhanced security features." + }, + { + "label": "Sender model with enhanced authentication controls. Security features: -\u2026", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L50", + "_origin": "ast", + "id": "email_server_models_rationale_50", + "community": 27, + "community_name": "Sender Model", + "norm_label": "sender model with enhanced authentication controls. security features: -..." + }, + { + "label": "Check if this sender can send emails as the given from_address. Args:\u2026", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L69", + "_origin": "ast", + "id": "email_server_models_rationale_69", + "community": 27, + "community_name": "Sender Model", + "norm_label": "check if this sender can send emails as the given from_address. args:..." + }, + { + "label": "IP whitelist model with domain-specific authentication. Security feature: - IPs\u2026", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L91", + "_origin": "ast", + "id": "email_server_models_rationale_91", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "ip whitelist model with domain-specific authentication. security feature: - ips..." + }, + { + "label": "Check if this IP can send emails for the given domain. Args: domain_name: The\u2026", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L107", + "_origin": "ast", + "id": "email_server_models_rationale_107", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "check if this ip can send emails for the given domain. args: domain_name: the..." + }, + { + "label": "Email log model for tracking sent emails.", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L134", + "_origin": "ast", + "id": "email_server_models_rationale_134", + "community": 8, + "community_name": "Email Relay Delivery", + "norm_label": "email log model for tracking sent emails." + }, + { + "label": "Log for each recipient of an email, including status and error details.", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L160", + "_origin": "ast", + "id": "email_server_models_rationale_160", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "log for each recipient of an email, including status and error details." + }, + { + "label": "Authentication log model for security auditing.", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L178", + "_origin": "ast", + "id": "email_server_models_rationale_178", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "authentication log model for security auditing." + }, + { + "label": "DKIM key model for email signing.", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L193", + "_origin": "ast", + "id": "email_server_models_rationale_193", + "community": 19, + "community_name": "DKIM/Custom Header Models", + "norm_label": "dkim key model for email signing." + }, + { + "label": "Custom header model for domain-specific email headers.", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L209", + "_origin": "ast", + "id": "email_server_models_rationale_209", + "community": 19, + "community_name": "DKIM/Custom Header Models", + "norm_label": "custom header model for domain-specific email headers." + }, + { + "label": "Attachment metadata and file path, linked to EmailLog.", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L223", + "_origin": "ast", + "id": "email_server_models_rationale_223", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "attachment metadata and file path, linked to emaillog." + }, + { + "label": "Create all database tables using ESRV schema.", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L241", + "_origin": "ast", + "id": "email_server_models_rationale_241", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "create all database tables using esrv schema." + }, + { + "label": "Hash a password using bcrypt.", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L246", + "_origin": "ast", + "id": "email_server_models_rationale_246", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "hash a password using bcrypt." + }, + { + "label": "Check a password against its hash.", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L250", + "_origin": "ast", + "id": "email_server_models_rationale_250", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "check a password against its hash." + }, + { + "label": "Log an authentication attempt for security auditing. Args: auth_type: Type of\u2026", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L255", + "_origin": "ast", + "id": "email_server_models_rationale_255", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "log an authentication attempt for security auditing. args: auth_type: type of..." + }, + { + "label": "Log an email send attempt. Args: from_address: Sender email to_address:\u2026", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L285", + "_origin": "ast", + "id": "email_server_models_rationale_285", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "log an email send attempt. args: from_address: sender email to_address:..." + }, + { + "label": "Get sender by email address.", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L314", + "_origin": "ast", + "id": "email_server_models_rationale_314", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "get sender by email address." + }, + { + "label": "Get whitelisted IP, optionally filtered by domain. Args: ip_address: IP address\u2026", + "file_type": "rationale", + "source_file": "email_server/models.py", + "source_location": "L330", + "_origin": "ast", + "id": "email_server_models_rationale_330", + "community": 6, + "community_name": "Sender/IP Authentication Logic", + "norm_label": "get whitelisted ip, optionally filtered by domain. args: ip_address: ip address..." + }, + { + "label": "server_runner.py", + "file_type": "code", + "source_file": "email_server/server_runner.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_runner", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "server_runner.py" + }, + { + "label": "start_server()", + "file_type": "code", + "source_file": "email_server/server_runner.py", + "source_location": "L35", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_runner_start_server", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "start_server()" + }, + { + "label": "Modular SMTP Server with DKIM support. Main server file that ties all modules\u2026", + "file_type": "rationale", + "source_file": "email_server/server_runner.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_runner_rationale_1", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "modular smtp server with dkim support. main server file that ties all modules..." + }, + { + "label": "Main server function.", + "file_type": "rationale", + "source_file": "email_server/server_runner.py", + "source_location": "L36", + "_origin": "ast", + "id": "email_server_server_runner_rationale_36", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "main server function." + }, + { + "label": "server_web_ui/__init__.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_init", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "server_web_ui/__init__.py" + }, + { + "label": "SMTP Server Web UI Package This package provides a web interface for managing\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_init_rationale_1", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "smtp server web ui package this package provides a web interface for managing..." + }, + { + "label": "dashboard.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_dashboard", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "dashboard.py" + }, + { + "label": "route", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "email_server_server_web_ui_dashboard_py_route", + "community": 32, + "community_name": "Dashboard Route", + "norm_label": "route" + }, + { + "label": "dashboard()", + "file_type": "code", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L16", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_dashboard_dashboard", + "community": 32, + "community_name": "Dashboard Route", + "norm_label": "dashboard()" + }, + { + "label": "Dashboard routes for the SMTP server web UI. This module provides the main\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_dashboard_rationale_1", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "dashboard routes for the smtp server web ui. this module provides the main..." + }, + { + "label": "Main dashboard showing overview of the email server.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L17", + "_origin": "ast", + "id": "email_server_server_web_ui_dashboard_rationale_17", + "community": 32, + "community_name": "Dashboard Route", + "norm_label": "main dashboard showing overview of the email server." + }, + { + "label": "database.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_database", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "database.py" + }, + { + "label": "install_package()", + "file_type": "code", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L31", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_database_install_package", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "install_package()" + }, + { + "label": "import_or_install_driver()", + "file_type": "code", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L49", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_database_import_or_install_driver", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "import_or_install_driver()" + }, + { + "label": "test_database_connection()", + "file_type": "code", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L78", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_database_test_database_connection", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "test_database_connection()" + }, + { + "label": "Database utilities for the SMTP server.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_database_rationale_1", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "database utilities for the smtp server." + }, + { + "label": "Install a Python package using pip. Args: package_name: Name of the package to\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L32", + "_origin": "ast", + "id": "email_server_server_web_ui_database_rationale_32", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "install a python package using pip. args: package_name: name of the package to..." + }, + { + "label": "Import database driver, installing it if necessary. Args: db_type: Type of\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L50", + "_origin": "ast", + "id": "email_server_server_web_ui_database_rationale_50", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "import database driver, installing it if necessary. args: db_type: type of..." + }, + { + "label": "Test if a database connection can be established. Args: url: Database\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L79", + "_origin": "ast", + "id": "email_server_server_web_ui_database_rationale_79", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "test if a database connection can be established. args: url: database..." + }, + { + "label": "dkim.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_dkim", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "dkim.py" + }, + { + "label": "route", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_py_route", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "route" + }, + { + "label": "dkim_list()", + "file_type": "code", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L25", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_dkim_list", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "dkim_list()" + }, + { + "label": "create_dkim()", + "file_type": "code", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L93", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_create_dkim", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "create_dkim()" + }, + { + "label": "regenerate_dkim()", + "file_type": "code", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L128", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_regenerate_dkim", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "regenerate_dkim()" + }, + { + "label": "edit_dkim()", + "file_type": "code", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L259", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_edit_dkim", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "edit_dkim()" + }, + { + "label": "toggle_dkim()", + "file_type": "code", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L311", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_toggle_dkim", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "toggle_dkim()" + }, + { + "label": "remove_dkim()", + "file_type": "code", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L363", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_remove_dkim", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "remove_dkim()" + }, + { + "label": "check_dkim_dns()", + "file_type": "code", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L391", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_check_dkim_dns", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "check_dkim_dns()" + }, + { + "label": "check_spf_dns()", + "file_type": "code", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L418", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_check_spf_dns", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "check_spf_dns()" + }, + { + "label": "DKIM blueprint for the SMTP server web UI. This module provides DKIM key\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_rationale_1", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "dkim blueprint for the smtp server web ui. this module provides dkim key..." + }, + { + "label": "List all DKIM keys and DNS records.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L26", + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_rationale_26", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "list all dkim keys and dns records." + }, + { + "label": "Create a new DKIM key for a domain, optionally with a custom selector.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L94", + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_rationale_94", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "create a new dkim key for a domain, optionally with a custom selector." + }, + { + "label": "Regenerate DKIM key for domain.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L129", + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_rationale_129", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "regenerate dkim key for domain." + }, + { + "label": "Edit DKIM key selector.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L260", + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_rationale_260", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "edit dkim key selector." + }, + { + "label": "Toggle DKIM key active status (Enable/Disable).", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L312", + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_rationale_312", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "toggle dkim key active status (enable/disable)." + }, + { + "label": "Permanently remove DKIM key.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L364", + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_rationale_364", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "permanently remove dkim key." + }, + { + "label": "Check DKIM DNS record via AJAX.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L392", + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_rationale_392", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "check dkim dns record via ajax." + }, + { + "label": "Check SPF DNS record via AJAX.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L419", + "_origin": "ast", + "id": "email_server_server_web_ui_dkim_rationale_419", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "check spf dns record via ajax." + }, + { + "label": "domains.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_domains", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "domains.py" + }, + { + "label": "route", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "email_server_server_web_ui_domains_py_route", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "route" + }, + { + "label": "domains_list()", + "file_type": "code", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L23", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_domains_domains_list", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "domains_list()" + }, + { + "label": "add_domain()", + "file_type": "code", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L38", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_domains_add_domain", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "add_domain()" + }, + { + "label": "delete_domain()", + "file_type": "code", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L78", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_domains_delete_domain", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "delete_domain()" + }, + { + "label": "edit_domain()", + "file_type": "code", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L103", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_domains_edit_domain", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "edit_domain()" + }, + { + "label": "toggle_domain()", + "file_type": "code", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L153", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_domains_toggle_domain", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "toggle_domain()" + }, + { + "label": "remove_domain()", + "file_type": "code", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L179", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_domains_remove_domain", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "remove_domain()" + }, + { + "label": "Domains blueprint for the SMTP server web UI. This module provides domain\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_domains_rationale_1", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "domains blueprint for the smtp server web ui. this module provides domain..." + }, + { + "label": "Delete domain (soft delete).", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L79", + "_origin": "ast", + "id": "email_server_server_web_ui_domains_rationale_79", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "delete domain (soft delete)." + }, + { + "label": "Toggle domain active status (Enable/Disable).", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L154", + "_origin": "ast", + "id": "email_server_server_web_ui_domains_rationale_154", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "toggle domain active status (enable/disable)." + }, + { + "label": "Permanently remove domain and all associated data.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L180", + "_origin": "ast", + "id": "email_server_server_web_ui_domains_rationale_180", + "community": 14, + "community_name": "Domain Management Web UI", + "norm_label": "permanently remove domain and all associated data." + }, + { + "label": "ip_whitelist.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "ip_whitelist.py" + }, + { + "label": "route", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_py_route", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "route" + }, + { + "label": "ips_list()", + "file_type": "code", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L21", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_ips_list", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "ips_list()" + }, + { + "label": "add_ip()", + "file_type": "code", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L31", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_add_ip", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "add_ip()" + }, + { + "label": "disable_ip()", + "file_type": "code", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L82", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_disable_ip", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "disable_ip()" + }, + { + "label": "enable_ip()", + "file_type": "code", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L107", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_enable_ip", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "enable_ip()" + }, + { + "label": "remove_ip()", + "file_type": "code", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L132", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_remove_ip", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "remove_ip()" + }, + { + "label": "edit_ip()", + "file_type": "code", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L157", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_edit_ip", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "edit_ip()" + }, + { + "label": "IP Whitelist blueprint for the SMTP server web UI. This module provides IP\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_rationale_1", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "ip whitelist blueprint for the smtp server web ui. this module provides ip..." + }, + { + "label": "List all whitelisted IPs.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L22", + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_rationale_22", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "list all whitelisted ips." + }, + { + "label": "Add new whitelisted IP.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L32", + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_rationale_32", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "add new whitelisted ip." + }, + { + "label": "Disable whitelisted IP (soft delete).", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L83", + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_rationale_83", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "disable whitelisted ip (soft delete)." + }, + { + "label": "Enable whitelisted IP.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L108", + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_rationale_108", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "enable whitelisted ip." + }, + { + "label": "Permanently remove whitelisted IP.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L133", + "_origin": "ast", + "id": "email_server_server_web_ui_ip_whitelist_rationale_133", + "community": 11, + "community_name": "IP Whitelist Web UI", + "norm_label": "permanently remove whitelisted ip." + }, + { + "label": "logs.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_logs", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "logs.py" + }, + { + "label": "route", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "email_server_server_web_ui_logs_py_route", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "route" + }, + { + "label": "logs()", + "file_type": "code", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L17", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_logs_logs", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "logs()" + }, + { + "label": "Logs blueprint for the SMTP server web UI. This module provides email and\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_logs_rationale_1", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "logs blueprint for the smtp server web ui. this module provides email and..." + }, + { + "label": "Display email and authentication logs.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L18", + "_origin": "ast", + "id": "email_server_server_web_ui_logs_rationale_18", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "display email and authentication logs." + }, + { + "label": "routes.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_routes", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "routes.py" + }, + { + "label": "app_template_filter", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "app_template_filter", + "community": 31, + "community_name": "Template Datetime Filter", + "norm_label": "app_template_filter" + }, + { + "label": "format_datetime()", + "file_type": "code", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L26", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_routes_format_datetime", + "community": 31, + "community_name": "Template Datetime Filter", + "norm_label": "format_datetime()" + }, + { + "label": "errorhandler", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "errorhandler", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "errorhandler" + }, + { + "label": "not_found()", + "file_type": "code", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L44", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_routes_not_found", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "not_found()" + }, + { + "label": "internal_error()", + "file_type": "code", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L52", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_routes_internal_error", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "internal_error()" + }, + { + "label": "Main routes and blueprint definition for the SMTP server web UI.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_routes_rationale_1", + "community": 10, + "community_name": "Dashboard & Auth Log Web UI", + "norm_label": "main routes and blueprint definition for the smtp server web ui." + }, + { + "label": "Format datetime with the correct timezone from settings or argument.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L27", + "_origin": "ast", + "id": "email_server_server_web_ui_routes_rationale_27", + "community": 31, + "community_name": "Template Datetime Filter", + "norm_label": "format datetime with the correct timezone from settings or argument." + }, + { + "label": "senders.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_senders", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "senders.py" + }, + { + "label": "route", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "email_server_server_web_ui_senders_py_route", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "route" + }, + { + "label": "senders_list()", + "file_type": "code", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L22", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_senders_senders_list", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "senders_list()" + }, + { + "label": "add_sender()", + "file_type": "code", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L32", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_senders_add_sender", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "add_sender()" + }, + { + "label": "delete_sender()", + "file_type": "code", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L85", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_senders_delete_sender", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "delete_sender()" + }, + { + "label": "enable_sender()", + "file_type": "code", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L110", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_senders_enable_sender", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "enable_sender()" + }, + { + "label": "remove_sender()", + "file_type": "code", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L135", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_senders_remove_sender", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "remove_sender()" + }, + { + "label": "edit_sender()", + "file_type": "code", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L160", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_senders_edit_sender", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "edit_sender()" + }, + { + "label": "Senders blueprint for the SMTP server web UI. This module provides sender\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_senders_rationale_1", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "senders blueprint for the smtp server web ui. this module provides sender..." + }, + { + "label": "Disable sender (soft delete).", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L86", + "_origin": "ast", + "id": "email_server_server_web_ui_senders_rationale_86", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "disable sender (soft delete)." + }, + { + "label": "Permanently remove sender.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L136", + "_origin": "ast", + "id": "email_server_server_web_ui_senders_rationale_136", + "community": 13, + "community_name": "Sender Management Web UI", + "norm_label": "permanently remove sender." + }, + { + "label": "settings.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_settings", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "settings.py" + }, + { + "label": "allowed_file()", + "file_type": "code", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L30", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_settings_allowed_file", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "allowed_file()" + }, + { + "label": "get_template_context()", + "file_type": "code", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L33", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_settings_get_template_context", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "get_template_context()" + }, + { + "label": "route", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "email_server_server_web_ui_settings_py_route", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "route" + }, + { + "label": "settings()", + "file_type": "code", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L45", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_settings_settings", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "settings()" + }, + { + "label": "settings_update()", + "file_type": "code", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L50", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_settings_settings_update", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "settings_update()" + }, + { + "label": "test_database_connection_endpoint()", + "file_type": "code", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L127", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_settings_test_database_connection_endpoint", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "test_database_connection_endpoint()" + }, + { + "label": "upload_cert()", + "file_type": "code", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L144", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_settings_upload_cert", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "upload_cert()" + }, + { + "label": "upload_key()", + "file_type": "code", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L171", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_settings_upload_key", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "upload_key()" + }, + { + "label": "get_server_ip()", + "file_type": "code", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L198", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_settings_get_server_ip", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "get_server_ip()" + }, + { + "label": "test_attachments_path()", + "file_type": "code", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L211", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_settings_test_attachments_path", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "test_attachments_path()" + }, + { + "label": "get_available_timezones()", + "file_type": "code", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L243", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_settings_get_available_timezones", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "get_available_timezones()" + }, + { + "label": "Settings blueprint for the SMTP server web UI. This module provides server\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_settings_rationale_1", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "settings blueprint for the smtp server web ui. this module provides server..." + }, + { + "label": "Get template context with CSRF token and common data.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L34", + "_origin": "ast", + "id": "email_server_server_web_ui_settings_rationale_34", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "get template context with csrf token and common data." + }, + { + "label": "Display and edit server settings.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L46", + "_origin": "ast", + "id": "email_server_server_web_ui_settings_rationale_46", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "display and edit server settings." + }, + { + "label": "Update server settings.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L51", + "_origin": "ast", + "id": "email_server_server_web_ui_settings_rationale_51", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "update server settings." + }, + { + "label": "Test database connection endpoint.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L128", + "_origin": "ast", + "id": "email_server_server_web_ui_settings_rationale_128", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "test database connection endpoint." + }, + { + "label": "Handle certificate file upload.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L145", + "_origin": "ast", + "id": "email_server_server_web_ui_settings_rationale_145", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "handle certificate file upload." + }, + { + "label": "Handle key file upload.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L172", + "_origin": "ast", + "id": "email_server_server_web_ui_settings_rationale_172", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "handle key file upload." + }, + { + "label": "Get server's public IP address.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L199", + "_origin": "ast", + "id": "email_server_server_web_ui_settings_rationale_199", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "get server's public ip address." + }, + { + "label": "Test if the attachments path is writable.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L212", + "_origin": "ast", + "id": "email_server_server_web_ui_settings_rationale_212", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "test if the attachments path is writable." + }, + { + "label": "Get a list of all available timezones sorted alphabetically.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L244", + "_origin": "ast", + "id": "email_server_server_web_ui_settings_rationale_244", + "community": 1, + "community_name": "Web UI Database & Settings Utils", + "norm_label": "get a list of all available timezones sorted alphabetically." + }, + { + "label": "dkim-management.js", + "file_type": "code", + "source_file": "email_server/server_web_ui/static/js/dkim-management.js", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_static_js_dkim_management", + "community": 35, + "community_name": "DKIM Management JS (Frontend)", + "norm_label": "dkim-management.js" + }, + { + "label": "DKIMManagement", + "file_type": "code", + "source_file": "email_server/server_web_ui/static/js/dkim-management.js", + "source_location": "L2", + "_origin": "ast", + "id": "email_server_server_web_ui_static_js_dkim_management_dkimmanagement", + "community": 35, + "community_name": "DKIM Management JS (Frontend)", + "norm_label": "dkimmanagement" + }, + { + "label": "smtp-management.js", + "file_type": "code", + "source_file": "email_server/server_web_ui/static/js/smtp-management.js", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_static_js_smtp_management", + "community": 29, + "community_name": "SMTP Management JS (Frontend)", + "norm_label": "smtp-management.js" + }, + { + "label": "SMTPManagement", + "file_type": "code", + "source_file": "email_server/server_web_ui/static/js/smtp-management.js", + "source_location": "L4", + "_origin": "ast", + "id": "email_server_server_web_ui_static_js_smtp_management_smtpmanagement", + "community": 29, + "community_name": "SMTP Management JS (Frontend)", + "norm_label": "smtpmanagement" + }, + { + "label": "DNSVerification", + "file_type": "code", + "source_file": "email_server/server_web_ui/static/js/smtp-management.js", + "source_location": "L149", + "_origin": "ast", + "id": "email_server_server_web_ui_static_js_smtp_management_dnsverification", + "community": 29, + "community_name": "SMTP Management JS (Frontend)", + "norm_label": "dnsverification" + }, + { + "label": "FormValidation", + "file_type": "code", + "source_file": "email_server/server_web_ui/static/js/smtp-management.js", + "source_location": "L180", + "_origin": "ast", + "id": "email_server_server_web_ui_static_js_smtp_management_formvalidation", + "community": 29, + "community_name": "SMTP Management JS (Frontend)", + "norm_label": "formvalidation" + }, + { + "label": "utils.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_utils", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "utils.py" + }, + { + "label": "get_public_ip()", + "file_type": "code", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L16", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_utils_get_public_ip", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "get_public_ip()" + }, + { + "label": "check_dns_record()", + "file_type": "code", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L48", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_utils_check_dns_record", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "check_dns_record()" + }, + { + "label": "generate_spf_record()", + "file_type": "code", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L138", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_utils_generate_spf_record", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "generate_spf_record()" + }, + { + "label": "Common utilities for the SMTP server web UI. This module provides shared\u2026", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_utils_rationale_1", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "common utilities for the smtp server web ui. this module provides shared..." + }, + { + "label": "Get the public IP address of the server.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L17", + "_origin": "ast", + "id": "email_server_server_web_ui_utils_rationale_17", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "get the public ip address of the server." + }, + { + "label": "Check DNS record for a domain.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L49", + "_origin": "ast", + "id": "email_server_server_web_ui_utils_rationale_49", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "check dns record for a domain." + }, + { + "label": "Generate recommended SPF record, preserving existing mechanisms if present.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L139", + "_origin": "ast", + "id": "email_server_server_web_ui_utils_rationale_139", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "generate recommended spf record, preserving existing mechanisms if present." + }, + { + "label": "view_message.py", + "file_type": "code", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_view_message", + "community": 22, + "community_name": "Message Viewer Web UI", + "norm_label": "view_message.py" + }, + { + "label": "route", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "email_server_server_web_ui_view_message_py_route", + "community": 22, + "community_name": "Message Viewer Web UI", + "norm_label": "route" + }, + { + "label": "view_message_content()", + "file_type": "code", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L13", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_view_message_view_message_content", + "community": 22, + "community_name": "Message Viewer Web UI", + "norm_label": "view_message_content()" + }, + { + "label": "download_attachment()", + "file_type": "code", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L30", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_view_message_download_attachment", + "community": 22, + "community_name": "Message Viewer Web UI", + "norm_label": "download_attachment()" + }, + { + "label": "delete_attachment()", + "file_type": "code", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L115", + "_callable": true, + "_origin": "ast", + "id": "email_server_server_web_ui_view_message_delete_attachment", + "community": 22, + "community_name": "Message Viewer Web UI", + "norm_label": "delete_attachment()" + }, + { + "label": "Route to view full email message content if stored.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_server_web_ui_view_message_rationale_1", + "community": 22, + "community_name": "Message Viewer Web UI", + "norm_label": "route to view full email message content if stored." + }, + { + "label": "View the full message content for an email log if stored.", + "file_type": "rationale", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L14", + "_origin": "ast", + "id": "email_server_server_web_ui_view_message_rationale_14", + "community": 22, + "community_name": "Message Viewer Web UI", + "norm_label": "view the full message content for an email log if stored." + }, + { + "label": "settings_loader.py", + "file_type": "code", + "source_file": "email_server/settings_loader.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_settings_loader", + "community": 18, + "community_name": "Settings Loader & TLS Utils", + "norm_label": "settings_loader.py" + }, + { + "label": "generate_settings_ini()", + "file_type": "code", + "source_file": "email_server/settings_loader.py", + "source_location": "L59", + "_callable": true, + "_origin": "ast", + "id": "email_server_settings_loader_generate_settings_ini", + "community": 18, + "community_name": "Settings Loader & TLS Utils", + "norm_label": "generate_settings_ini()" + }, + { + "label": "Path", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "path", + "community": 18, + "community_name": "Settings Loader & TLS Utils", + "norm_label": "path" + }, + { + "label": "load_settings()", + "file_type": "code", + "source_file": "email_server/settings_loader.py", + "source_location": "L76", + "_callable": true, + "_origin": "ast", + "id": "email_server_settings_loader_load_settings", + "community": 18, + "community_name": "Settings Loader & TLS Utils", + "norm_label": "load_settings()" + }, + { + "label": "ConfigParser", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "configparser", + "community": 18, + "community_name": "Settings Loader & TLS Utils", + "norm_label": "configparser" + }, + { + "label": "Settings loader for the SMTP server. Automatically generates settings.ini with\u2026", + "file_type": "rationale", + "source_file": "email_server/settings_loader.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_settings_loader_rationale_1", + "community": 18, + "community_name": "Settings Loader & TLS Utils", + "norm_label": "settings loader for the smtp server. automatically generates settings.ini with..." + }, + { + "label": "Generate settings.ini with default values and comments if it does not exist.", + "file_type": "rationale", + "source_file": "email_server/settings_loader.py", + "source_location": "L60", + "_origin": "ast", + "id": "email_server_settings_loader_rationale_60", + "community": 18, + "community_name": "Settings Loader & TLS Utils", + "norm_label": "generate settings.ini with default values and comments if it does not exist." + }, + { + "label": "Load settings from settings.ini, generating it if needed.", + "file_type": "rationale", + "source_file": "email_server/settings_loader.py", + "source_location": "L77", + "_origin": "ast", + "id": "email_server_settings_loader_rationale_77", + "community": 18, + "community_name": "Settings Loader & TLS Utils", + "norm_label": "load settings from settings.ini, generating it if needed." + }, + { + "label": "smtp_handler.py", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_smtp_handler", + "community": 30, + "community_name": "SMTP Handler Module & Message ID Util", + "norm_label": "smtp_handler.py" + }, + { + "label": "CustomSMTP", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L30", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_smtp_handler_customsmtp", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "customsmtp" + }, + { + "label": "AIOSMTP", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "aiosmtp", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "aiosmtp" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L33", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_customsmtp_init", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": ".__init__()" + }, + { + "label": "._get_auth_methods()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L47", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_customsmtp_get_auth_methods", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "._get_auth_methods()" + }, + { + "label": ".smtp_AUTH()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L53", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_customsmtp_smtp_auth", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": ".smtp_auth()" + }, + { + "label": "EnhancedCombinedAuthenticator", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L64", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_smtp_handler_enhancedcombinedauthenticator", + "community": 20, + "community_name": "Combined Authenticators", + "norm_label": "enhancedcombinedauthenticator" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L74", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_enhancedcombinedauthenticator_init", + "community": 20, + "community_name": "Combined Authenticators", + "norm_label": ".__init__()" + }, + { + "label": ".__call__()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L78", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_enhancedcombinedauthenticator_call", + "community": 20, + "community_name": "Combined Authenticators", + "norm_label": ".__call__()" + }, + { + "label": "EnhancedCustomSMTPHandler", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L93", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_smtp_handler_enhancedcustomsmtphandler", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": "enhancedcustomsmtphandler" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L96", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_enhancedcustomsmtphandler_init", + "community": 20, + "community_name": "Combined Authenticators", + "norm_label": ".__init__()" + }, + { + "label": "._ensure_required_headers()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L105", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": "._ensure_required_headers()" + }, + { + "label": ".handle_DATA()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L250", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": ".handle_data()" + }, + { + "label": ".handle_RCPT()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L583", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_rcpt", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": ".handle_rcpt()" + }, + { + "label": ".handle_MAIL()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L589", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_mail", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": ".handle_mail()" + }, + { + "label": ".get_attachment_storage_path()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L611", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": ".get_attachment_storage_path()" + }, + { + "label": ".get_content_type()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L648", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": ".get_content_type()" + }, + { + "label": "TLSController", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L679", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_smtp_handler_tlscontroller", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "tlscontroller" + }, + { + "label": "Controller", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "controller", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "controller" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L684", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_tlscontroller_init", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": ".__init__()" + }, + { + "label": ".factory()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L690", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_tlscontroller_factory", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": ".factory()" + }, + { + "label": "PlainController", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L707", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "id": "email_server_smtp_handler_plaincontroller", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "plaincontroller" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L710", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_plaincontroller_init", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": ".__init__()" + }, + { + "label": ".factory()", + "file_type": "code", + "source_file": "email_server/smtp_handler.py", + "source_location": "L714", + "_callable": true, + "_origin": "ast", + "id": "email_server_smtp_handler_plaincontroller_factory", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": ".factory()" + }, + { + "label": "Enhanced SMTP handler for processing incoming emails with security controls.\u2026", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_1", + "community": 30, + "community_name": "SMTP Handler Module & Message ID Util", + "norm_label": "enhanced smtp handler for processing incoming emails with security controls...." + }, + { + "label": "Custom SMTP class with configurable banner and secure AUTH handling.", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L31", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_31", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "custom smtp class with configurable banner and secure auth handling." + }, + { + "label": "Override AUTH command to close connection after failed authentication.", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L54", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_54", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "override auth command to close connection after failed authentication." + }, + { + "label": "Enhanced combined authenticator with sender validation support. Features: -\u2026", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L65", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_65", + "community": 20, + "community_name": "Combined Authenticators", + "norm_label": "enhanced combined authenticator with sender validation support. features: -..." + }, + { + "label": "Enhanced custom SMTP handler with security controls.", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L94", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_94", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": "enhanced custom smtp handler with security controls." + }, + { + "label": "Ensure all required email headers are present and properly formatted.", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L106", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_106", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": "ensure all required email headers are present and properly formatted." + }, + { + "label": "Handle incoming email data with improved header management and logging.", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L251", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_251", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": "handle incoming email data with improved header management and logging." + }, + { + "label": "Handle RCPT TO command - validate recipients.", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L584", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_584", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": "handle rcpt to command - validate recipients." + }, + { + "label": "Handle MAIL FROM command with enhanced sender validation. Security Features: -\u2026", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L590", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_590", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": "handle mail from command with enhanced sender validation. security features: -..." + }, + { + "label": "Generate the storage path for attachments based on sender domain,\u2026", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L612", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_612", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": "generate the storage path for attachments based on sender domain,..." + }, + { + "label": "Get the correct content type for a file, trying multiple methods.", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L649", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_649", + "community": 12, + "community_name": "SMTP Handler Message Processing", + "norm_label": "get the correct content type for a file, trying multiple methods." + }, + { + "label": "Custom controller for direct TLS (SMTPS, port 465) support.", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L680", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_680", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "custom controller for direct tls (smtps, port 465) support." + }, + { + "label": "Controller for plain SMTP with authentication and IP whitelist fallback.", + "file_type": "rationale", + "source_file": "email_server/smtp_handler.py", + "source_location": "L708", + "_origin": "ast", + "id": "email_server_smtp_handler_rationale_708", + "community": 5, + "community_name": "SMTP Custom Protocol & Controllers", + "norm_label": "controller for plain smtp with authentication and ip whitelist fallback." + }, + { + "label": "tls_utils.py", + "file_type": "code", + "source_file": "email_server/tls_utils.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_tls_utils", + "community": 18, + "community_name": "Settings Loader & TLS Utils", + "norm_label": "tls_utils.py" + }, + { + "label": "generate_self_signed_cert()", + "file_type": "code", + "source_file": "email_server/tls_utils.py", + "source_location": "L20", + "_callable": true, + "_origin": "ast", + "id": "email_server_tls_utils_generate_self_signed_cert", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "generate_self_signed_cert()" + }, + { + "label": "create_ssl_context()", + "file_type": "code", + "source_file": "email_server/tls_utils.py", + "source_location": "L60", + "_callable": true, + "_origin": "ast", + "id": "email_server_tls_utils_create_ssl_context", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "create_ssl_context()" + }, + { + "label": "TLS utilities for the SMTP server.", + "file_type": "rationale", + "source_file": "email_server/tls_utils.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_tls_utils_rationale_1", + "community": 18, + "community_name": "Settings Loader & TLS Utils", + "norm_label": "tls utilities for the smtp server." + }, + { + "label": "Generate self-signed SSL certificate if it doesn't exist.", + "file_type": "rationale", + "source_file": "email_server/tls_utils.py", + "source_location": "L21", + "_origin": "ast", + "id": "email_server_tls_utils_rationale_21", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "generate self-signed ssl certificate if it doesn't exist." + }, + { + "label": "Create SSL context for TLS support.", + "file_type": "rationale", + "source_file": "email_server/tls_utils.py", + "source_location": "L61", + "_origin": "ast", + "id": "email_server_tls_utils_rationale_61", + "community": 3, + "community_name": "App Bootstrap & Domain Models", + "norm_label": "create ssl context for tls support." + }, + { + "label": "tool_box.py", + "file_type": "code", + "source_file": "email_server/tool_box.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_tool_box", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "tool_box.py" + }, + { + "label": "ensure_folder_exists()", + "file_type": "code", + "source_file": "email_server/tool_box.py", + "source_location": "L16", + "_callable": true, + "_origin": "ast", + "id": "email_server_tool_box_ensure_folder_exists", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "ensure_folder_exists()" + }, + { + "label": "setup_logging()", + "file_type": "code", + "source_file": "email_server/tool_box.py", + "source_location": "L26", + "_callable": true, + "_origin": "ast", + "id": "email_server_tool_box_setup_logging", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "setup_logging()" + }, + { + "label": "get_logger()", + "file_type": "code", + "source_file": "email_server/tool_box.py", + "source_location": "L45", + "_callable": true, + "_origin": "ast", + "id": "email_server_tool_box_get_logger", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "get_logger()" + }, + { + "label": "get_current_time()", + "file_type": "code", + "source_file": "email_server/tool_box.py", + "source_location": "L66", + "_callable": true, + "_origin": "ast", + "id": "email_server_tool_box_get_current_time", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "get_current_time()" + }, + { + "label": "generate_message_id()", + "file_type": "code", + "source_file": "email_server/tool_box.py", + "source_location": "L71", + "_callable": true, + "_origin": "ast", + "id": "email_server_tool_box_generate_message_id", + "community": 30, + "community_name": "SMTP Handler Module & Message ID Util", + "norm_label": "generate_message_id()" + }, + { + "label": "Utility functions for the email server.", + "file_type": "rationale", + "source_file": "email_server/tool_box.py", + "source_location": "L1", + "_origin": "ast", + "id": "email_server_tool_box_rationale_1", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "utility functions for the email server." + }, + { + "label": "Ensure that the folder for the given filepath exists.", + "file_type": "rationale", + "source_file": "email_server/tool_box.py", + "source_location": "L17", + "_origin": "ast", + "id": "email_server_tool_box_rationale_17", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "ensure that the folder for the given filepath exists." + }, + { + "label": "Set up global logging configuration using settings.ini. Should be called once\u2026", + "file_type": "rationale", + "source_file": "email_server/tool_box.py", + "source_location": "L27", + "_origin": "ast", + "id": "email_server_tool_box_rationale_27", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "set up global logging configuration using settings.ini. should be called once..." + }, + { + "label": "Get a logger with the given name (default: module name). Ensures logging is set\u2026", + "file_type": "rationale", + "source_file": "email_server/tool_box.py", + "source_location": "L46", + "_origin": "ast", + "id": "email_server_tool_box_rationale_46", + "community": 7, + "community_name": "Models Core & Logging Utils", + "norm_label": "get a logger with the given name (default: module name). ensures logging is set..." + }, + { + "label": "Get current time with timezone from settings.", + "file_type": "rationale", + "source_file": "email_server/tool_box.py", + "source_location": "L67", + "_origin": "ast", + "id": "email_server_tool_box_rationale_67", + "community": 0, + "community_name": "DKIM/SPF DNS Management UI", + "norm_label": "get current time with timezone from settings." + }, + { + "label": "Generate a consistent Message-ID for both email headers and database storage.\u2026", + "file_type": "rationale", + "source_file": "email_server/tool_box.py", + "source_location": "L72", + "_origin": "ast", + "id": "email_server_tool_box_rationale_72", + "community": 30, + "community_name": "SMTP Handler Module & Message ID Util", + "norm_label": "generate a consistent message-id for both email headers and database storage...." + }, + { + "label": "script_install_service.sh", + "file_type": "code", + "source_file": "script_install_service.sh", + "source_location": "L1", + "metadata": { + "language": "bash", + "kind": "file" + }, + "_origin": "ast", + "id": "script_install_service", + "community": 25, + "community_name": "systemd Install Script", + "norm_label": "script_install_service.sh" + }, + { + "label": "script_install_service.sh script", + "file_type": "code", + "source_file": "script_install_service.sh", + "source_location": "L1", + "metadata": { + "language": "bash", + "kind": "bash_entrypoint" + }, + "_origin": "ast", + "id": "script_install_service_sh__entry", + "community": 25, + "community_name": "systemd Install Script", + "norm_label": "script_install_service.sh script" + }, + { + "label": "usage()", + "file_type": "code", + "source_file": "script_install_service.sh", + "source_location": "L17", + "metadata": { + "language": "bash", + "kind": "bash_function" + }, + "_origin": "ast", + "id": "script_install_service_usage", + "community": 25, + "community_name": "systemd Install Script", + "norm_label": "usage()" + }, + { + "label": "write_user_services()", + "file_type": "code", + "source_file": "script_install_service.sh", + "source_location": "L59", + "metadata": { + "language": "bash", + "kind": "bash_function" + }, + "_origin": "ast", + "id": "script_install_service_write_user_services", + "community": 25, + "community_name": "systemd Install Script", + "norm_label": "write_user_services()" + }, + { + "label": "remove_user_services()", + "file_type": "code", + "source_file": "script_install_service.sh", + "source_location": "L129", + "metadata": { + "language": "bash", + "kind": "bash_function" + }, + "_origin": "ast", + "id": "script_install_service_remove_user_services", + "community": 25, + "community_name": "systemd Install Script", + "norm_label": "remove_user_services()" + }, + { + "label": "write_system_services()", + "file_type": "code", + "source_file": "script_install_service.sh", + "source_location": "L140", + "metadata": { + "language": "bash", + "kind": "bash_function" + }, + "_origin": "ast", + "id": "script_install_service_write_system_services", + "community": 25, + "community_name": "systemd Install Script", + "norm_label": "write_system_services()" + }, + { + "label": "remove_system_services()", + "file_type": "code", + "source_file": "script_install_service.sh", + "source_location": "L210", + "metadata": { + "language": "bash", + "kind": "bash_function" + }, + "_origin": "ast", + "id": "script_install_service_remove_system_services", + "community": 25, + "community_name": "systemd Install Script", + "norm_label": "remove_system_services()" + }, + { + "label": "script_nginx_setup.sh", + "file_type": "code", + "source_file": "script_nginx_setup.sh", + "source_location": "L1", + "metadata": { + "language": "bash", + "kind": "file" + }, + "_origin": "ast", + "id": "script_nginx_setup", + "community": 33, + "community_name": "nginx Setup Script", + "norm_label": "script_nginx_setup.sh" + }, + { + "label": "script_nginx_setup.sh script", + "file_type": "code", + "source_file": "script_nginx_setup.sh", + "source_location": "L1", + "metadata": { + "language": "bash", + "kind": "bash_entrypoint" + }, + "_origin": "ast", + "id": "script_nginx_setup_sh__entry", + "community": 33, + "community_name": "nginx Setup Script", + "norm_label": "script_nginx_setup.sh script" + }, + { + "label": "ERROR_MESSAGES", + "file_type": "code", + "source_file": "script_nginx_setup.sh", + "source_location": "L26", + "metadata": { + "language": "bash", + "kind": "code" + }, + "_origin": "ast", + "id": "script_nginx_setup_error_messages", + "community": 33, + "community_name": "nginx Setup Script", + "norm_label": "error_messages" + }, + { + "label": "script_setup_py_environment.sh", + "file_type": "code", + "source_file": "script_setup_py_environment.sh", + "source_location": "L1", + "metadata": { + "language": "bash", + "kind": "file" + }, + "_origin": "ast", + "id": "script_setup_py_environment", + "community": 36, + "community_name": "Python Env Setup Script", + "norm_label": "script_setup_py_environment.sh" + }, + { + "label": "script_setup_py_environment.sh script", + "file_type": "code", + "source_file": "script_setup_py_environment.sh", + "source_location": "L1", + "metadata": { + "language": "bash", + "kind": "bash_entrypoint" + }, + "_origin": "ast", + "id": "script_setup_py_environment_sh__entry", + "community": 36, + "community_name": "Python Env Setup Script", + "norm_label": "script_setup_py_environment.sh script" + }, + { + "label": "bash_send_email.sh", + "file_type": "code", + "source_file": "tests/bash_send_email.sh", + "source_location": "L1", + "metadata": { + "language": "bash", + "kind": "file" + }, + "_origin": "ast", + "id": "tests_bash_send_email", + "community": 37, + "community_name": "bash_send_email Test Script", + "norm_label": "bash_send_email.sh" + }, + { + "label": "bash_send_email.sh script", + "file_type": "code", + "source_file": "tests/bash_send_email.sh", + "source_location": "L1", + "metadata": { + "language": "bash", + "kind": "bash_entrypoint" + }, + "_origin": "ast", + "id": "tests_bash_send_email_sh__entry", + "community": 37, + "community_name": "bash_send_email Test Script", + "norm_label": "bash_send_email.sh script" + }, + { + "label": "send_email.py", + "file_type": "code", + "source_file": "tests/send_email.py", + "source_location": "L1", + "_origin": "ast", + "id": "tests_send_email", + "community": 28, + "community_name": "send_email.py Test Script", + "norm_label": "send_email.py" + }, + { + "label": "send_test_email()", + "file_type": "code", + "source_file": "tests/send_email.py", + "source_location": "L16", + "_callable": true, + "_origin": "ast", + "id": "tests_send_email_send_test_email", + "community": 28, + "community_name": "send_email.py Test Script", + "norm_label": "send_test_email()" + }, + { + "label": "send_test_email_tls()", + "file_type": "code", + "source_file": "tests/send_email.py", + "source_location": "L34", + "_callable": true, + "_origin": "ast", + "id": "tests_send_email_send_test_email_tls", + "community": 28, + "community_name": "send_email.py Test Script", + "norm_label": "send_test_email_tls()" + }, + { + "label": "Send a test email using plain SMTP.", + "file_type": "rationale", + "source_file": "tests/send_email.py", + "source_location": "L19", + "_origin": "ast", + "id": "tests_send_email_rationale_19", + "community": 28, + "community_name": "send_email.py Test Script", + "norm_label": "send a test email using plain smtp." + }, + { + "label": "Send a test email using STARTTLS.", + "file_type": "rationale", + "source_file": "tests/send_email.py", + "source_location": "L37", + "_origin": "ast", + "id": "tests_send_email_rationale_37", + "community": 28, + "community_name": "send_email.py Test Script", + "norm_label": "send a test email using starttls." + }, + { + "label": "Add Domain Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/add_domain.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_add_domain_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "add domain page" + }, + { + "label": "Add IP Whitelist Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/add_ip.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_add_ip_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "add ip whitelist page" + }, + { + "label": "Add Sender Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/add_sender.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_add_sender_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "add sender page" + }, + { + "label": "Base Layout Template", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/base.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_base_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "base layout template" + }, + { + "label": "Dashboard Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_dashboard_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "dashboard page" + }, + { + "label": "DKIM Key Management Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/dkim.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_dkim_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "dkim key management page" + }, + { + "label": "Domains List Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/domains.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_domains_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "domains list page" + }, + { + "label": "Edit DKIM Selector Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/edit_dkim.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_edit_dkim_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "edit dkim selector page" + }, + { + "label": "Edit Domain Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/edit_domain.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_edit_domain_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "edit domain page" + }, + { + "label": "Edit IP Whitelist Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/edit_ip.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_edit_ip_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "edit ip whitelist page" + }, + { + "label": "Edit Sender Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/edit_sender.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_edit_sender_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "edit sender page" + }, + { + "label": "Error Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/error.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_error_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "error page" + }, + { + "label": "Whitelisted IPs List Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/ips.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_ips_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "whitelisted ips list page" + }, + { + "label": "Emails/Auth Logs Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/logs.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_logs_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "emails/auth logs page" + }, + { + "label": "Senders List Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/senders.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_senders_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "senders list page" + }, + { + "label": "Server Settings Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/settings.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_settings_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "server settings page" + }, + { + "label": "Sidebar Navigation Partial", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_sidebar_email_partial", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "sidebar navigation partial" + }, + { + "label": "View Full Message Content Page", + "file_type": "code", + "source_file": "email_server/server_web_ui/templates/view_message_content.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_view_message_content_page", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "view full message content page" + }, + { + "label": "Domain Data Model", + "file_type": "concept", + "source_file": "email_server/server_web_ui/templates/domains.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_domains_domain_model", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "domain data model" + }, + { + "label": "Sender/User Data Model", + "file_type": "concept", + "source_file": "email_server/server_web_ui/templates/senders.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_senders_sender_model", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "sender/user data model" + }, + { + "label": "DKIM Key Data Model", + "file_type": "concept", + "source_file": "email_server/server_web_ui/templates/dkim.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_dkim_dkim_key_model", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "dkim key data model" + }, + { + "label": "IP Whitelist Data Model", + "file_type": "concept", + "source_file": "email_server/server_web_ui/templates/ips.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_ips_ip_whitelist_model", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "ip whitelist data model" + }, + { + "label": "Email Log Data Model", + "file_type": "concept", + "source_file": "email_server/server_web_ui/templates/logs.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_logs_email_log_model", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "email log data model" + }, + { + "label": "Auth Log Data Model", + "file_type": "concept", + "source_file": "email_server/server_web_ui/templates/logs.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_logs_auth_log_model", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "auth log data model" + }, + { + "label": "Server Settings (INI) Data Model", + "file_type": "concept", + "source_file": "email_server/server_web_ui/templates/settings.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_settings_server_settings_model", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "server settings (ini) data model" + }, + { + "label": "Email Attachment Data Model", + "file_type": "concept", + "source_file": "email_server/server_web_ui/templates/view_message_content.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_view_message_content_attachment_model", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "email attachment data model" + }, + { + "label": "check_health() Service Status Pattern", + "file_type": "concept", + "source_file": "email_server/server_web_ui/templates/base.html", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "email_server_server_web_ui_templates_base_health_check_concept", + "community": 2, + "community_name": "Admin Template Pages", + "norm_label": "check_health() service status pattern" + }, + { + "label": "PyMTA-server README", + "file_type": "document", + "source_file": "README.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_doc", + "community": 24, + "community_name": "README: License & Auth Features", + "norm_label": "pymta-server readme" + }, + { + "label": "DKIM (planned feature)", + "file_type": "concept", + "source_file": "README.md", + "source_location": "Plan section", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_dkim", + "community": 23, + "community_name": "DKIM/DNS Dependencies", + "norm_label": "dkim (planned feature)" + }, + { + "label": "SPF DNS Records (delivery success)", + "file_type": "concept", + "source_file": "README.md", + "source_location": "Plan section", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_spf", + "community": 24, + "community_name": "README: License & Auth Features", + "norm_label": "spf dns records (delivery success)" + }, + { + "label": "Sender IP Whitelisting", + "file_type": "concept", + "source_file": "README.md", + "source_location": "Plan section", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_ip_whitelisting", + "community": 21, + "community_name": "CLI Usage & IP Whitelisting Docs", + "norm_label": "sender ip whitelisting" + }, + { + "label": "Username/Password Authentication", + "file_type": "concept", + "source_file": "README.md", + "source_location": "Plan section", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_username_password_auth", + "community": 24, + "community_name": "README: License & Auth Features", + "norm_label": "username/password authentication" + }, + { + "label": "Optional Storing of Sent Emails", + "file_type": "concept", + "source_file": "README.md", + "source_location": "Plan section", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_store_sent_emails", + "community": 24, + "community_name": "README: License & Auth Features", + "norm_label": "optional storing of sent emails" + }, + { + "label": "AGPL-3.0 License", + "file_type": "concept", + "source_file": "README.md", + "source_location": "License section", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_license", + "community": 24, + "community_name": "README: License & Auth Features", + "norm_label": "agpl-3.0 license" + }, + { + "label": "SMTP Server with Web Management Frontend README (legacy layout)", + "file_type": "document", + "source_file": "README_unified.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_doc", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "smtp server with web management frontend readme (legacy layout)" + }, + { + "label": "Full SMTP Server (send/receive with auth)", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Features", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_smtp_server", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "full smtp server (send/receive with auth)" + }, + { + "label": "Flask Web Management Interface", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Features", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_web_management_interface", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "flask web management interface" + }, + { + "label": "DKIM Support (auto key gen + signing)", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Features", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_dkim_support", + "community": 23, + "community_name": "DKIM/DNS Dependencies", + "norm_label": "dkim support (auto key gen + signing)" + }, + { + "label": "TLS/SSL Encryption", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Features / TLS Settings", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_tls_ssl", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "tls/ssl encryption" + }, + { + "label": "Domain Management", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Features", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_domain_management", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "domain management" + }, + { + "label": "Per-user/per-domain User Authentication", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Features / Security", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_user_authentication", + "community": 26, + "community_name": "Auth Order Fix Notes", + "norm_label": "per-user/per-domain user authentication" + }, + { + "label": "IP Whitelisting (auth-free sending)", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Features", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_ip_whitelisting", + "community": 21, + "community_name": "CLI Usage & IP Whitelisting Docs", + "norm_label": "ip whitelisting (auth-free sending)" + }, + { + "label": "Email Relay (forward to external servers)", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Features", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_email_relay", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "email relay (forward to external servers)" + }, + { + "label": "settings.ini Configuration File", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Configuration", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_settings_ini", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "settings.ini configuration file" + }, + { + "label": "SQLite Database Schema (domains, users, whitelisted_ips, dkim_keys, email_logs, auth_logs, custom_headers)", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Database Schema", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_database_schema", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "sqlite database schema (domains, users, whitelisted_ips, dkim_keys, email_logs, auth_logs, custom_headers)" + }, + { + "label": "REST API Endpoints (/health, /api/server/status, /api/server/restart)", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "API Endpoints", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_api_endpoints", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "rest api endpoints (/health, /api/server/status, /api/server/restart)" + }, + { + "label": "DNS Configuration (DKIM/SPF/MX records)", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "DNS Configuration", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_dns_configuration", + "community": 23, + "community_name": "DKIM/DNS Dependencies", + "norm_label": "dns configuration (dkim/spf/mx records)" + }, + { + "label": "Systemd Service (production deployment)", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Production Deployment", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_systemd_service", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "systemd service (production deployment)" + }, + { + "label": "Nginx Reverse Proxy", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Production Deployment", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_reverse_proxy", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "nginx reverse proxy" + }, + { + "label": "Project Structure (app.py, main.py, email_server/, email_frontend/)", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "Development / Project Structure", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_project_structure", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "project structure (app.py, main.py, email_server/, email_frontend/)" + }, + { + "label": "MIT License", + "file_type": "concept", + "source_file": "README_unified.md", + "source_location": "License section", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "readme_unified_mit_license", + "community": 24, + "community_name": "README: License & Auth Features", + "norm_label": "mit license" + }, + { + "label": "Unified Requirements File", + "file_type": "document", + "source_file": "requirements.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_doc", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "unified requirements file" + }, + { + "label": "aiosmtpd (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_aiosmtpd", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "aiosmtpd (dependency)" + }, + { + "label": "sqlalchemy (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_sqlalchemy", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "sqlalchemy (dependency)" + }, + { + "label": "pyOpenSSL (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_pyopenssl", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "pyopenssl (dependency)" + }, + { + "label": "bcrypt (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_bcrypt", + "community": 26, + "community_name": "Auth Order Fix Notes", + "norm_label": "bcrypt (dependency)" + }, + { + "label": "dnspython (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_dnspython", + "community": 23, + "community_name": "DKIM/DNS Dependencies", + "norm_label": "dnspython (dependency)" + }, + { + "label": "dkimpy (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_dkimpy", + "community": 23, + "community_name": "DKIM/DNS Dependencies", + "norm_label": "dkimpy (dependency)" + }, + { + "label": "cryptography (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_cryptography", + "community": 23, + "community_name": "DKIM/DNS Dependencies", + "norm_label": "cryptography (dependency)" + }, + { + "label": "aiosmtplib (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_aiosmtplib", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "aiosmtplib (dependency)" + }, + { + "label": "Flask (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_flask", + "community": 15, + "community_name": "README Unified: Structure & Deployment", + "norm_label": "flask (dependency)" + }, + { + "label": "Flask-SQLAlchemy (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_flask_sqlalchemy", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "flask-sqlalchemy (dependency)" + }, + { + "label": "Jinja2 (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_jinja2", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "jinja2 (dependency)" + }, + { + "label": "Werkzeug (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_werkzeug", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "werkzeug (dependency)" + }, + { + "label": "requests (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_requests", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "requests (dependency)" + }, + { + "label": "pytz (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_pytz", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "pytz (dependency)" + }, + { + "label": "gunicorn (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_gunicorn", + "community": 24, + "community_name": "README: License & Auth Features", + "norm_label": "gunicorn (dependency)" + }, + { + "label": "python-dotenv (dependency)", + "file_type": "concept", + "source_file": "requirements.txt", + "source_location": "Additional utilities", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "requirements_python_dotenv", + "community": 16, + "community_name": "README Unified & Requirements: SMTP/DB Deps", + "norm_label": "python-dotenv (dependency)" + }, + { + "label": "Lorem Ipsum Test Email Body", + "file_type": "document", + "source_file": "tests/email_body.txt", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_email_body_lorem_ipsum", + "community": 17, + "community_name": "Manual Testing Docs (swaks/CLI)", + "norm_label": "lorem ipsum test email body" + }, + { + "label": "CLI/Web Usage Guide (tests)", + "file_type": "document", + "source_file": "tests/general_cli_usage.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_general_cli_usage_doc", + "community": 21, + "community_name": "CLI Usage & IP Whitelisting Docs", + "norm_label": "cli/web usage guide (tests)" + }, + { + "label": "Web Interface Setup Workflow (dev/prod)", + "file_type": "concept", + "source_file": "tests/general_cli_usage.md", + "source_location": "Example Setup Workflow", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_general_cli_usage_web_interface_setup", + "community": 21, + "community_name": "CLI Usage & IP Whitelisting Docs", + "norm_label": "web interface setup workflow (dev/prod)" + }, + { + "label": "Domain Management (web UI: /email/domains)", + "file_type": "concept", + "source_file": "tests/general_cli_usage.md", + "source_location": "Domain Management", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_general_cli_usage_domain_management", + "community": 21, + "community_name": "CLI Usage & IP Whitelisting Docs", + "norm_label": "domain management (web ui: /email/domains)" + }, + { + "label": "User Management (web UI: /email/users)", + "file_type": "concept", + "source_file": "tests/general_cli_usage.md", + "source_location": "User Management", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_general_cli_usage_user_management", + "community": 21, + "community_name": "CLI Usage & IP Whitelisting Docs", + "norm_label": "user management (web ui: /email/users)" + }, + { + "label": "IP Whitelist Management (web UI: /email/ips)", + "file_type": "concept", + "source_file": "tests/general_cli_usage.md", + "source_location": "IP Whitelist Management", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_general_cli_usage_ip_whitelist_management", + "community": 21, + "community_name": "CLI Usage & IP Whitelisting Docs", + "norm_label": "ip whitelist management (web ui: /email/ips)" + }, + { + "label": "DKIM Key Management (web UI: /email/dkim)", + "file_type": "concept", + "source_file": "tests/general_cli_usage.md", + "source_location": "DKIM Key Management", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_general_cli_usage_dkim_key_management", + "community": 23, + "community_name": "DKIM/DNS Dependencies", + "norm_label": "dkim key management (web ui: /email/dkim)" + }, + { + "label": "tests/send_email.py script", + "file_type": "concept", + "source_file": "tests/general_cli_usage.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_general_cli_usage_send_email_script", + "community": 17, + "community_name": "Manual Testing Docs (swaks/CLI)", + "norm_label": "tests/send_email.py script" + }, + { + "label": "swaks (SMTP test CLI tool)", + "file_type": "concept", + "source_file": "tests/general_cli_usage.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_general_cli_usage_swaks", + "community": 17, + "community_name": "Manual Testing Docs (swaks/CLI)", + "norm_label": "swaks (smtp test cli tool)" + }, + { + "label": "Direct sqlite3 DB Access/Queries", + "file_type": "concept", + "source_file": "tests/general_cli_usage.md", + "source_location": "Database Direct Access", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_general_cli_usage_db_direct_access", + "community": 21, + "community_name": "CLI Usage & IP Whitelisting Docs", + "norm_label": "direct sqlite3 db access/queries" + }, + { + "label": "SMTP Authentication Order Fix (June 2025)", + "file_type": "rationale", + "source_file": "tests/note_authentication_order_fix.md", + "source_location": "Summary of Fixes", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "rationale": "Server previously hung the SMTP session on bad credentials. Fixed by having the authenticator return AuthResult(success=False, handled=False, message='535 Authentication failed') so aiosmtpd immediately relays the error to the client instead of the connection hanging; the server also no longer force-closes the connection after failed auth (lets the client retry/quit per SMTP protocol), and AUTH LOGIN/PLAIN plus IP-whitelist fallback are advertised on both the plain SMTP port and the TLS port. STARTTLS is deliberately not advertised since only direct TLS is desired. Rationale: correctness/UX (no hanging clients) and defense-in-depth (auth first, IP whitelist as fallback, full audit logging of every attempt).", + "id": "tests_note_authentication_order_fix_authentication_order_fix", + "community": 26, + "community_name": "Auth Order Fix Notes", + "norm_label": "smtp authentication order fix (june 2025)" + }, + { + "label": "AuthResult / email_server/auth.py __call__ (code snippet)", + "file_type": "code", + "source_file": "tests/note_authentication_order_fix.md", + "source_location": "Code Snippet for Immediate Authentication Failure Response", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_note_authentication_order_fix_auth_call", + "community": 26, + "community_name": "Auth Order Fix Notes", + "norm_label": "authresult / email_server/auth.py __call__ (code snippet)" + }, + { + "label": "IP Whitelisting as Secondary/Fallback Authentication", + "file_type": "concept", + "source_file": "tests/note_authentication_order_fix.md", + "source_location": "Authentication Order and Logic", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_note_authentication_order_fix_ip_whitelisting_fallback", + "community": 21, + "community_name": "CLI Usage & IP Whitelisting Docs", + "norm_label": "ip whitelisting as secondary/fallback authentication" + }, + { + "label": "AUTH Advertised on Both Plain SMTP and TLS Ports", + "file_type": "concept", + "source_file": "tests/note_authentication_order_fix.md", + "source_location": "What Was Fixed", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_note_authentication_order_fix_auth_ports", + "community": 26, + "community_name": "Auth Order Fix Notes", + "norm_label": "auth advertised on both plain smtp and tls ports" + }, + { + "label": "STARTTLS Not Advertised (direct TLS only)", + "file_type": "rationale", + "source_file": "tests/note_authentication_order_fix.md", + "source_location": "Best Practices for Future Development", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "rationale": "STARTTLS is deliberately not used/advertised on any port because the design intent is direct TLS only (a fixed TLS port) rather than opportunistic upgrade, simplifying the security model and avoiding STARTTLS downgrade-style ambiguity.", + "id": "tests_note_authentication_order_fix_no_starttls", + "community": 26, + "community_name": "Auth Order Fix Notes", + "norm_label": "starttls not advertised (direct tls only)" + }, + { + "label": "Manual Test Setup Instructions", + "file_type": "document", + "source_file": "tests/run_tests_manually.md", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_run_tests_manually_doc", + "community": 17, + "community_name": "Manual Testing Docs (swaks/CLI)", + "norm_label": "manual test setup instructions" + }, + { + "label": "Web Interface Setup for Manual Testing", + "file_type": "concept", + "source_file": "tests/run_tests_manually.md", + "source_location": "Setup via Web Interface", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_run_tests_manually_web_interface_setup", + "community": 17, + "community_name": "Manual Testing Docs (swaks/CLI)", + "norm_label": "web interface setup for manual testing" + }, + { + "label": "DKIM Key Generation (manual test setup)", + "file_type": "concept", + "source_file": "tests/run_tests_manually.md", + "source_location": "Setup via Web Interface", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_run_tests_manually_dkim_key_generation", + "community": 17, + "community_name": "Manual Testing Docs (swaks/CLI)", + "norm_label": "dkim key generation (manual test setup)" + }, + { + "label": "tests/send_email.py script (manual test usage)", + "file_type": "concept", + "source_file": "tests/run_tests_manually.md", + "source_location": "Send emails using python script", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_run_tests_manually_send_email_script", + "community": 17, + "community_name": "Manual Testing Docs (swaks/CLI)", + "norm_label": "tests/send_email.py script (manual test usage)" + }, + { + "label": "swaks (SMTP test CLI tool, manual test usage)", + "file_type": "concept", + "source_file": "tests/run_tests_manually.md", + "source_location": "Linux send emails using swaks", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_run_tests_manually_swaks", + "community": 17, + "community_name": "Manual Testing Docs (swaks/CLI)", + "norm_label": "swaks (smtp test cli tool, manual test usage)" + }, + { + "label": "Check DB Logs (sqlite3 email_logs query)", + "file_type": "concept", + "source_file": "tests/run_tests_manually.md", + "source_location": "Check db logs", + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_run_tests_manually_db_log_check", + "community": 17, + "community_name": "Manual Testing Docs (swaks/CLI)", + "norm_label": "check db logs (sqlite3 email_logs query)" + }, + { + "label": "PDF Test Document (French Lipsum)", + "file_type": "document", + "source_file": "tests/pdf_test_1.pdf", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_pdf_test_1_document", + "community": 17, + "community_name": "Manual Testing Docs (swaks/CLI)", + "norm_label": "pdf test document (french lipsum)" + }, + { + "label": "Beach Pebbles Photo (embedded image)", + "file_type": "image", + "source_file": "tests/pdf_test_1.pdf", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_pdf_test_1_pebbles_image", + "community": 17, + "community_name": "Manual Testing Docs (swaks/CLI)", + "norm_label": "beach pebbles photo (embedded image)" + }, + { + "label": "Hello.jpg (Dogecoin Doge Meme Image)", + "file_type": "image", + "source_file": "tests/Hello.jpg", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_hello_dogecoin_meme_image", + "community": 38, + "community_name": "Hello.jpg Test Fixture (Doge Meme)", + "norm_label": "hello.jpg (dogecoin doge meme image)" + }, + { + "label": "Test Email Attachment Fixture", + "file_type": "concept", + "source_file": "tests/Hello.jpg", + "source_location": null, + "source_url": null, + "captured_at": null, + "author": null, + "contributor": null, + "id": "tests_hello_email_attachment_test_fixture", + "community": 38, + "community_name": "Hello.jpg Test Fixture (Doge Meme)", + "norm_label": "test email attachment fixture" + } + ], + "links": [ + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L356", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "app_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L44", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "app_smtpserverapp", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_dkim_manager", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L94", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_models_authlog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_models_create_tables", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L94", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_models_customheader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_models_dkimkey", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L94", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_models_emaillog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_models_hash_password", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_models_sender", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_models_whitelistedip", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_server_runner", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_server_runner_start_server", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_server_web_ui_routes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "app", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L371", + "weight": 1.0, + "_origin": "ast", + "source": "app_main", + "target": "app_smtpserverapp", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "app_rationale_45", + "target": "app_smtpserverapp", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L319", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "app_smtpserverapp_check_health", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L74", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "app_smtpserverapp_create_flask_app", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "app_smtpserverapp_get_absolute_database_url", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "app_smtpserverapp_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L153", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "app_smtpserverapp_init_sample_data", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L267", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "app_smtpserverapp_run", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L238", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "app_smtpserverapp_run_smtp_server", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L228", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "app_smtpserverapp_start_smtp_server", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "app.py", + "source_location": "L37", + "weight": 0.8, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "app.py", + "source_location": "L94", + "weight": 0.8, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "email_server_models_authlog", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "app.py", + "source_location": "L94", + "weight": 0.8, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "email_server_models_customheader", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "app.py", + "source_location": "L94", + "weight": 0.8, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "email_server_models_dkimkey", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "app.py", + "source_location": "L94", + "weight": 0.8, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "email_server_models_domain", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "app.py", + "source_location": "L94", + "weight": 0.8, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "email_server_models_emaillog", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "app.py", + "source_location": "L94", + "weight": 0.8, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "email_server_models_sender", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "app.py", + "source_location": "L94", + "weight": 0.8, + "_origin": "ast", + "source": "app_smtpserverapp", + "target": "email_server_models_whitelistedip", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "app.py", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_init", + "target": "email_server_settings_loader_load_settings" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L57", + "weight": 1.0, + "_origin": "ast", + "source": "app_rationale_57", + "target": "app_smtpserverapp_get_absolute_database_url", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L84", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_create_flask_app", + "target": "app_smtpserverapp_get_absolute_database_url", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L75", + "weight": 1.0, + "_origin": "ast", + "source": "app_rationale_75", + "target": "app_smtpserverapp_create_flask_app", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "app.py", + "source_location": "L102", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_create_flask_app", + "target": "email_server_models_create_tables" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L272", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_run", + "target": "app_smtpserverapp_create_flask_app", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L154", + "weight": 1.0, + "_origin": "ast", + "source": "app_rationale_154", + "target": "app_smtpserverapp_init_sample_data", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "app.py", + "source_location": "L176", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_init_sample_data", + "target": "email_server_dkim_manager_dkimmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "app.py", + "source_location": "L157", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_init_sample_data", + "target": "email_server_models_create_tables" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "app.py", + "source_location": "L169", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_init_sample_data", + "target": "email_server_models_domain" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "app.py", + "source_location": "L192", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_init_sample_data", + "target": "email_server_models_hash_password" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "app.py", + "source_location": "L190", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_init_sample_data", + "target": "email_server_models_sender" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "app.py", + "source_location": "L211", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_init_sample_data", + "target": "email_server_models_whitelistedip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L229", + "weight": 1.0, + "_origin": "ast", + "source": "app_rationale_229", + "target": "app_smtpserverapp_start_smtp_server", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L290", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_run", + "target": "app_smtpserverapp_start_smtp_server", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L252", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_run_smtp_server", + "target": "app_smtpserverapp_start_smtp_server", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "app.py", + "source_location": "L232", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_start_smtp_server", + "target": "email_server_server_runner_start_server" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L412", + "weight": 1.0, + "_origin": "ast", + "source": "app_main", + "target": "app_smtpserverapp_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L268", + "weight": 1.0, + "_origin": "ast", + "source": "app_rationale_268", + "target": "app_smtpserverapp_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L320", + "weight": 1.0, + "_origin": "ast", + "source": "app_rationale_320", + "target": "app_smtpserverapp_check_health", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "app.py", + "source_location": "L344", + "weight": 1.0, + "_origin": "ast", + "source": "app_smtpserverapp_check_health", + "target": "email_server_models_create_tables" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app.py", + "source_location": "L381", + "weight": 1.0, + "_origin": "ast", + "source": "app_main", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/__init__.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_init_rationale_1", + "target": "email_server_init", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_auth_enhancedauthenticator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L90", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_auth_enhancedipauthenticator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L195", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_auth_get_authenticated_domain_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L121", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_auth_validate_sender_authorization", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_models_check_password", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_models_get_domain_by_name", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_models_get_sender_by_email", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_models_get_whitelisted_ip", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_models_log_auth_attempt", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_models_sender", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_models_whitelistedip", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_rationale_1", + "target": "email_server_auth", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_auth", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_enhancedauthenticator", + "target": "email_server_auth_enhancedauthenticator_call", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_auth_enhancedauthenticator", + "target": "email_server_models_domain", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_auth_enhancedauthenticator", + "target": "email_server_models_sender", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_auth_enhancedauthenticator", + "target": "email_server_models_whitelistedip", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_rationale_23", + "target": "email_server_auth_enhancedauthenticator", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_auth_enhancedauthenticator", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_customsmtp", + "target": "email_server_auth_enhancedauthenticator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcombinedauthenticator", + "target": "email_server_auth_enhancedauthenticator", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L75", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcombinedauthenticator_init", + "target": "email_server_auth_enhancedauthenticator" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_auth_enhancedauthenticator", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L97", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_init", + "target": "email_server_auth_enhancedauthenticator" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_plaincontroller", + "target": "email_server_auth_enhancedauthenticator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_tlscontroller", + "target": "email_server_auth_enhancedauthenticator", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/auth.py", + "source_location": "L52", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_enhancedauthenticator_call", + "target": "email_server_models_check_password" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/auth.py", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_enhancedauthenticator_call", + "target": "email_server_models_get_sender_by_email" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/auth.py", + "source_location": "L58", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_enhancedauthenticator_call", + "target": "email_server_models_log_auth_attempt" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L100", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_enhancedipauthenticator", + "target": "email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_auth_enhancedipauthenticator", + "target": "email_server_models_domain", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_auth_enhancedipauthenticator", + "target": "email_server_models_sender", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/auth.py", + "source_location": "L13", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_auth_enhancedipauthenticator", + "target": "email_server_models_whitelistedip", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L91", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_rationale_91", + "target": "email_server_auth_enhancedipauthenticator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L164", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_validate_sender_authorization", + "target": "email_server_auth_enhancedipauthenticator", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_auth_enhancedipauthenticator", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_customsmtp", + "target": "email_server_auth_enhancedipauthenticator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcombinedauthenticator", + "target": "email_server_auth_enhancedipauthenticator", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L76", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcombinedauthenticator_init", + "target": "email_server_auth_enhancedipauthenticator" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_auth_enhancedipauthenticator", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L98", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_init", + "target": "email_server_auth_enhancedipauthenticator" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_plaincontroller", + "target": "email_server_auth_enhancedipauthenticator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_tlscontroller", + "target": "email_server_auth_enhancedipauthenticator", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/auth.py", + "source_location": "L112", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", + "target": "email_server_models_get_whitelisted_ip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L101", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_rationale_101", + "target": "email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L165", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_validate_sender_authorization", + "target": "email_server_auth_enhancedipauthenticator_can_authenticate_for_domain", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L122", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_rationale_122", + "target": "email_server_auth_validate_sender_authorization", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L154", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_validate_sender_authorization", + "target": "email_server_models_log_auth_attempt", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_auth_validate_sender_authorization", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L601", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_mail", + "target": "email_server_auth_validate_sender_authorization" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L209", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_get_authenticated_domain_id", + "target": "email_server_models_get_domain_by_name", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/auth.py", + "source_location": "L196", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_auth_rationale_196", + "target": "email_server_auth_get_authenticated_domain_id", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_dkim_manager", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager", + "target": "email_server_models_customheader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager", + "target": "email_server_models_dkimkey", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager", + "target": "email_server_tool_box_get_current_time", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_rationale_1", + "target": "email_server_dkim_manager", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_dkim_manager", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_dkim_manager", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_dkim_manager", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_dkim_manager_dkimmanager_generate_dkim_keypair", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_dkim_manager_dkimmanager_generate_random_selector", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L251", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_dkim_manager_dkimmanager_get_active_custom_headers", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L133", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_dkim_manager_dkimmanager_get_active_dkim_key", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L148", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_dkim_manager_dkimmanager_get_dkim_private_key", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L155", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_dkim_manager_dkimmanager_get_dkim_public_key_record", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_dkim_manager_dkimmanager_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L231", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_dkim_manager_dkimmanager_initialize_default_keys", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L208", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_dkim_manager_dkimmanager_list_dkim_keys", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L168", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_dkim_manager_dkimmanager_sign_email", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L9", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_models_customheader", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L9", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_models_dkimkey", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L9", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager", + "target": "email_server_models_domain", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_rationale_21", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_start_server", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L401", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_check_dkim_dns", + "target": "email_server_dkim_manager_dkimmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L112", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_create_dkim", + "target": "email_server_dkim_manager_dkimmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_dkim_list", + "target": "email_server_dkim_manager_dkimmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L152", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_regenerate_dkim", + "target": "email_server_dkim_manager_dkimmanager" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains_add_domain", + "target": "email_server_dkim_manager_dkimmanager" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L18", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_customsmtp", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L18", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcombinedauthenticator", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L18", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L101", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_init", + "target": "email_server_dkim_manager_dkimmanager" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L18", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_plaincontroller", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L18", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_tlscontroller", + "target": "email_server_dkim_manager_dkimmanager", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager_init", + "target": "email_server_dkim_manager_dkimmanager_generate_random_selector", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_rationale_24", + "target": "email_server_dkim_manager_dkimmanager_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_rationale_32", + "target": "email_server_dkim_manager_dkimmanager_generate_random_selector", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/dkim_manager.py", + "source_location": "L112", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager_generate_dkim_keypair", + "target": "email_server_models_dkimkey" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/dkim_manager.py", + "source_location": "L58", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager_generate_dkim_keypair", + "target": "email_server_tool_box_get_current_time" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L244", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager_initialize_default_keys", + "target": "email_server_dkim_manager_dkimmanager_generate_dkim_keypair", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_rationale_36", + "target": "email_server_dkim_manager_dkimmanager_generate_dkim_keypair", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L150", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager_get_dkim_private_key", + "target": "email_server_dkim_manager_dkimmanager_get_active_dkim_key", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L157", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager_get_dkim_public_key_record", + "target": "email_server_dkim_manager_dkimmanager_get_active_dkim_key", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L171", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_dkimmanager_sign_email", + "target": "email_server_dkim_manager_dkimmanager_get_active_dkim_key", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L134", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_rationale_134", + "target": "email_server_dkim_manager_dkimmanager_get_active_dkim_key", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L149", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_rationale_149", + "target": "email_server_dkim_manager_dkimmanager_get_dkim_private_key", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L156", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_rationale_156", + "target": "email_server_dkim_manager_dkimmanager_get_dkim_public_key_record", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L169", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_rationale_169", + "target": "email_server_dkim_manager_dkimmanager_sign_email", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L232", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_rationale_232", + "target": "email_server_dkim_manager_dkimmanager_initialize_default_keys", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/dkim_manager.py", + "source_location": "L252", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_dkim_manager_rationale_252", + "target": "email_server_dkim_manager_dkimmanager_get_active_custom_headers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay", + "target": "email_server_email_relay_emailrelay", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay", + "target": "email_server_models_emaillog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay", + "target": "email_server_models_emailrecipientlog", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay", + "target": "email_server_tool_box_get_current_time", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_rationale_1", + "target": "email_server_email_relay", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_email_relay", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay", + "target": "email_server_email_relay_emailrelay_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L300", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay", + "target": "email_server_email_relay_emailrelay_log_email", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay", + "target": "email_server_email_relay_emailrelay_modify_headers_for_recipients", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L68", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay", + "target": "email_server_email_relay_emailrelay_prepare_email_for_recipient", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L296", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay", + "target": "email_server_email_relay_emailrelay_relay_email", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L101", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay", + "target": "email_server_email_relay_emailrelay_relay_email_async", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/email_relay.py", + "source_location": "L7", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay", + "target": "email_server_models_emaillog", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/email_relay.py", + "source_location": "L7", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay", + "target": "email_server_models_emailrecipientlog", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_rationale_20", + "target": "email_server_email_relay_emailrelay", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_email_relay_emailrelay", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L17", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_customsmtp", + "target": "email_server_email_relay_emailrelay", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L17", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcombinedauthenticator", + "target": "email_server_email_relay_emailrelay", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L17", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_email_relay_emailrelay", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L100", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_init", + "target": "email_server_email_relay_emailrelay" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L17", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_plaincontroller", + "target": "email_server_email_relay_emailrelay", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L17", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_tlscontroller", + "target": "email_server_email_relay_emailrelay", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_rationale_30", + "target": "email_server_email_relay_emailrelay_modify_headers_for_recipients", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L149", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay_relay_email_async", + "target": "email_server_email_relay_emailrelay_prepare_email_for_recipient", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L69", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_rationale_69", + "target": "email_server_email_relay_emailrelay_prepare_email_for_recipient", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L298", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay_relay_email", + "target": "email_server_email_relay_emailrelay_relay_email_async", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L111", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_rationale_111", + "target": "email_server_email_relay_emailrelay_relay_email_async", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L297", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_rationale_297", + "target": "email_server_email_relay_emailrelay_relay_email", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/email_relay.py", + "source_location": "L314", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay_log_email", + "target": "email_server_models_emaillog" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/email_relay.py", + "source_location": "L335", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay_log_email", + "target": "email_server_models_emailrecipientlog" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/email_relay.py", + "source_location": "L316", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_emailrelay_log_email", + "target": "email_server_tool_box_get_current_time" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/email_relay.py", + "source_location": "L301", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_email_relay_rationale_301", + "target": "email_server_email_relay_emailrelay_log_email", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L177", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_authlog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L249", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_check_password", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L240", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_create_tables", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L208", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_customheader", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L192", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_dkimkey", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L222", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_emailattachment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L133", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_emaillog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L159", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_emailrecipientlog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L321", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_get_domain_by_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L313", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_get_sender_by_email", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L329", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_get_whitelisted_ip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L245", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_hash_password", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L253", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_log_auth_attempt", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L283", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_log_email", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_sender", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L90", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_models_whitelistedip", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_tool_box_ensure_folder_exists", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_1", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_logs", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_view_message", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_models", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_domain", + "target": "base", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_domain", + "target": "email_server_models_domain_repr", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_32", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L55", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_start_server", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains_add_domain", + "target": "email_server_models_domain" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_models_domain", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L177", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_authlog", + "target": "base", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L208", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_customheader", + "target": "base", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L192", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_dkimkey", + "target": "base", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L222", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_emailattachment", + "target": "base", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L133", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_emaillog", + "target": "base", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L159", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_emailrecipientlog", + "target": "base", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_sender", + "target": "base", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L90", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_whitelistedip", + "target": "base", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_50", + "target": "email_server_models_sender", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L68", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_sender", + "target": "email_server_models_sender_can_send_as", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L87", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_sender", + "target": "email_server_models_sender_repr", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_models_sender", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L63", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_start_server", + "target": "email_server_models_sender", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard", + "target": "email_server_models_sender", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_models_sender", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_models_sender", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders_add_sender", + "target": "email_server_models_sender" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L69", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_69", + "target": "email_server_models_sender_can_send_as", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L91", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_91", + "target": "email_server_models_whitelistedip", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L106", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_whitelistedip", + "target": "email_server_models_whitelistedip_can_send_for_domain", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L130", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_whitelistedip", + "target": "email_server_models_whitelistedip_repr", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_models_whitelistedip", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L75", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_start_server", + "target": "email_server_models_whitelistedip", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_models_whitelistedip", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_models_whitelistedip", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L60", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_add_ip", + "target": "email_server_models_whitelistedip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L107", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_107", + "target": "email_server_models_whitelistedip_can_send_for_domain", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L156", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_emaillog", + "target": "email_server_models_emaillog_repr", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L297", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_log_email", + "target": "email_server_models_emaillog", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L134", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_134", + "target": "email_server_models_emaillog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard", + "target": "email_server_models_emaillog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_logs", + "target": "email_server_models_emaillog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_models_emaillog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_view_message", + "target": "email_server_models_emaillog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_models_emaillog", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_customsmtp", + "target": "email_server_models_emaillog", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcombinedauthenticator", + "target": "email_server_models_emaillog", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_models_emaillog", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_plaincontroller", + "target": "email_server_models_emaillog", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_tlscontroller", + "target": "email_server_models_emaillog", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L174", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_emailrecipientlog", + "target": "email_server_models_emailrecipientlog_repr", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L160", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_160", + "target": "email_server_models_emailrecipientlog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard", + "target": "email_server_models_emailrecipientlog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_logs", + "target": "email_server_models_emailrecipientlog", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L189", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_authlog", + "target": "email_server_models_authlog_repr", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L267", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_log_auth_attempt", + "target": "email_server_models_authlog", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L178", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_178", + "target": "email_server_models_authlog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard", + "target": "email_server_models_authlog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_logs", + "target": "email_server_models_authlog", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_models_authlog", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L205", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_dkimkey", + "target": "email_server_models_dkimkey_repr", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L193", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_193", + "target": "email_server_models_dkimkey", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard", + "target": "email_server_models_dkimkey", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_models_dkimkey", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_models_dkimkey", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L219", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_customheader", + "target": "email_server_models_customheader_repr", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L209", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_209", + "target": "email_server_models_customheader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_models_customheader", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L236", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_emailattachment", + "target": "email_server_models_emailattachment_repr", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L223", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_223", + "target": "email_server_models_emailattachment", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_logs", + "target": "email_server_models_emailattachment", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_view_message", + "target": "email_server_models_emailattachment", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_models_emailattachment", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_customsmtp", + "target": "email_server_models_emailattachment", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcombinedauthenticator", + "target": "email_server_models_emailattachment", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_models_emailattachment", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L555", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", + "target": "email_server_models_emailattachment" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_plaincontroller", + "target": "email_server_models_emailattachment", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L23", + "weight": 0.8, + "_origin": "ast", + "source": "email_server_smtp_handler_tlscontroller", + "target": "email_server_models_emailattachment", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L241", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_241", + "target": "email_server_models_create_tables", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_models_create_tables", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_start_server", + "target": "email_server_models_create_tables", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L246", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_246", + "target": "email_server_models_hash_password", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_models_hash_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L65", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_start_server", + "target": "email_server_models_hash_password", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_models_hash_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L63", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders_add_sender", + "target": "email_server_models_hash_password" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L204", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders_edit_sender", + "target": "email_server_models_hash_password" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L250", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_250", + "target": "email_server_models_check_password", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L255", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_255", + "target": "email_server_models_log_auth_attempt", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L285", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_285", + "target": "email_server_models_log_email", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L314", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_314", + "target": "email_server_models_get_sender_by_email", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L368", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_models_get_sender_by_email", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L370", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", + "target": "email_server_models_get_sender_by_email" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/models.py", + "source_location": "L330", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_models_rationale_330", + "target": "email_server_models_get_whitelisted_ip", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L282", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_models_get_whitelisted_ip", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L284", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", + "target": "email_server_models_get_whitelisted_ip" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_server_runner_start_server", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_smtp_handler", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_smtp_handler_plaincontroller", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_smtp_handler_tlscontroller", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_tls_utils", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_tls_utils_create_ssl_context", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_tls_utils_generate_self_signed_cert", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_rationale_1", + "target": "email_server_server_runner", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_rationale_36", + "target": "email_server_server_runner_start_server", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L101", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_start_server", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L102", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_start_server", + "target": "email_server_smtp_handler_plaincontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L112", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_start_server", + "target": "email_server_smtp_handler_tlscontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L92", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_start_server", + "target": "email_server_tls_utils_create_ssl_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_runner.py", + "source_location": "L87", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_runner_start_server", + "target": "email_server_tls_utils_generate_self_signed_cert", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_init", + "target": "email_server_server_web_ui_dashboard", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_init", + "target": "email_server_server_web_ui_dkim", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_init", + "target": "email_server_server_web_ui_domains", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_init", + "target": "email_server_server_web_ui_ip_whitelist", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_init", + "target": "email_server_server_web_ui_logs", + "confidence_score": 1.0 + }, + { + "relation": "re_exports", + "context": "export", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_init", + "target": "email_server_server_web_ui_routes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_init", + "target": "email_server_server_web_ui_senders", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_init", + "target": "email_server_server_web_ui_settings", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_init", + "target": "email_server_server_web_ui_view_message", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/__init__.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_init_rationale_1", + "target": "email_server_server_web_ui_init", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard", + "target": "email_server_server_web_ui_dashboard_dashboard", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard", + "target": "email_server_server_web_ui_routes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard_rationale_1", + "target": "email_server_server_web_ui_dashboard", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L15", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard_dashboard", + "target": "email_server_server_web_ui_dashboard_py_route", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dashboard.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dashboard_rationale_17", + "target": "email_server_server_web_ui_dashboard_dashboard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_database", + "target": "email_server_server_web_ui_database_import_or_install_driver", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_database", + "target": "email_server_server_web_ui_database_install_package", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L78", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_database", + "target": "email_server_server_web_ui_database_test_database_connection", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_database", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_database", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_database_rationale_1", + "target": "email_server_server_web_ui_database", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_database", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L68", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_database_import_or_install_driver", + "target": "email_server_server_web_ui_database_install_package", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_database_rationale_32", + "target": "email_server_server_web_ui_database_install_package", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_database_rationale_50", + "target": "email_server_server_web_ui_database_import_or_install_driver", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L112", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_database_test_database_connection", + "target": "email_server_server_web_ui_database_import_or_install_driver", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/database.py", + "source_location": "L79", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_database_rationale_79", + "target": "email_server_server_web_ui_database_test_database_connection", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_database_test_database_connection", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L134", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_test_database_connection_endpoint", + "target": "email_server_server_web_ui_database_test_database_connection" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L391", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_dkim_check_dkim_dns", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L418", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_dkim_check_spf_dns", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L93", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_dkim_create_dkim", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_dkim_dkim_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L259", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_dkim_edit_dkim", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L128", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_dkim_regenerate_dkim", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L363", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_dkim_remove_dkim", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L311", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_dkim_toggle_dkim", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_routes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_utils", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_utils_check_dns_record", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_utils_generate_spf_record", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_server_web_ui_utils_get_public_ip", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_tool_box_get_current_time", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_rationale_1", + "target": "email_server_server_web_ui_dkim", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L390", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_check_dkim_dns", + "target": "email_server_server_web_ui_dkim_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L417", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_check_spf_dns", + "target": "email_server_server_web_ui_dkim_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L92", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_create_dkim", + "target": "email_server_server_web_ui_dkim_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L24", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_dkim_list", + "target": "email_server_server_web_ui_dkim_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L258", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_edit_dkim", + "target": "email_server_server_web_ui_dkim_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L127", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_regenerate_dkim", + "target": "email_server_server_web_ui_dkim_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L362", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_remove_dkim", + "target": "email_server_server_web_ui_dkim_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L310", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_toggle_dkim", + "target": "email_server_server_web_ui_dkim_py_route", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L54", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_dkim_list", + "target": "email_server_server_web_ui_utils_check_dns_record" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L63", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_dkim_list", + "target": "email_server_server_web_ui_utils_generate_spf_record" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L44", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_dkim_list", + "target": "email_server_server_web_ui_utils_get_public_ip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_rationale_26", + "target": "email_server_server_web_ui_dkim_dkim_list", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L110", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_create_dkim", + "target": "email_server_tool_box_get_current_time" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L94", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_rationale_94", + "target": "email_server_server_web_ui_dkim_create_dkim", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L129", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_rationale_129", + "target": "email_server_server_web_ui_dkim_regenerate_dkim", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L174", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_regenerate_dkim", + "target": "email_server_server_web_ui_utils_check_dns_record" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L182", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_regenerate_dkim", + "target": "email_server_server_web_ui_utils_generate_spf_record" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L171", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_regenerate_dkim", + "target": "email_server_server_web_ui_utils_get_public_ip" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L149", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_regenerate_dkim", + "target": "email_server_tool_box_get_current_time" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L260", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_rationale_260", + "target": "email_server_server_web_ui_dkim_edit_dkim", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L312", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_rationale_312", + "target": "email_server_server_web_ui_dkim_toggle_dkim", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L334", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_toggle_dkim", + "target": "email_server_tool_box_get_current_time" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L364", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_rationale_364", + "target": "email_server_server_web_ui_dkim_remove_dkim", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L410", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_check_dkim_dns", + "target": "email_server_server_web_ui_utils_check_dns_record" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L392", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_rationale_392", + "target": "email_server_server_web_ui_dkim_check_dkim_dns", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L425", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_check_spf_dns", + "target": "email_server_server_web_ui_utils_check_dns_record" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L437", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_check_spf_dns", + "target": "email_server_server_web_ui_utils_get_public_ip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/dkim.py", + "source_location": "L419", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_dkim_rationale_419", + "target": "email_server_server_web_ui_dkim_check_spf_dns", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_server_web_ui_domains_add_domain", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L78", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_server_web_ui_domains_delete_domain", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_server_web_ui_domains_domains_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L103", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_server_web_ui_domains_edit_domain", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L179", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_server_web_ui_domains_remove_domain", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L153", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_server_web_ui_domains_toggle_domain", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_server_web_ui_routes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains_rationale_1", + "target": "email_server_server_web_ui_domains", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L37", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_domains_add_domain", + "target": "email_server_server_web_ui_domains_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L77", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_domains_delete_domain", + "target": "email_server_server_web_ui_domains_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L22", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_domains_domains_list", + "target": "email_server_server_web_ui_domains_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L102", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_domains_edit_domain", + "target": "email_server_server_web_ui_domains_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L178", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_domains_remove_domain", + "target": "email_server_server_web_ui_domains_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L152", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_domains_toggle_domain", + "target": "email_server_server_web_ui_domains_py_route", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L79", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains_rationale_79", + "target": "email_server_server_web_ui_domains_delete_domain", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L154", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains_rationale_154", + "target": "email_server_server_web_ui_domains_toggle_domain", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/domains.py", + "source_location": "L180", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_domains_rationale_180", + "target": "email_server_server_web_ui_domains_remove_domain", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_server_web_ui_ip_whitelist_add_ip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L82", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_server_web_ui_ip_whitelist_disable_ip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L157", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_server_web_ui_ip_whitelist_edit_ip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L107", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_server_web_ui_ip_whitelist_enable_ip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_server_web_ui_ip_whitelist_ips_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L132", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_server_web_ui_ip_whitelist_remove_ip", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_server_web_ui_routes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_rationale_1", + "target": "email_server_server_web_ui_ip_whitelist", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L30", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_add_ip", + "target": "email_server_server_web_ui_ip_whitelist_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L81", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_disable_ip", + "target": "email_server_server_web_ui_ip_whitelist_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L156", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_edit_ip", + "target": "email_server_server_web_ui_ip_whitelist_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L106", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_enable_ip", + "target": "email_server_server_web_ui_ip_whitelist_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L20", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_ips_list", + "target": "email_server_server_web_ui_ip_whitelist_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L131", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_remove_ip", + "target": "email_server_server_web_ui_ip_whitelist_py_route", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_rationale_22", + "target": "email_server_server_web_ui_ip_whitelist_ips_list", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_rationale_32", + "target": "email_server_server_web_ui_ip_whitelist_add_ip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L83", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_rationale_83", + "target": "email_server_server_web_ui_ip_whitelist_disable_ip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L108", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_rationale_108", + "target": "email_server_server_web_ui_ip_whitelist_enable_ip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/ip_whitelist.py", + "source_location": "L133", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_ip_whitelist_rationale_133", + "target": "email_server_server_web_ui_ip_whitelist_remove_ip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_logs", + "target": "email_server_server_web_ui_logs_logs", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_logs", + "target": "email_server_server_web_ui_routes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_logs", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_logs", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_logs_rationale_1", + "target": "email_server_server_web_ui_logs", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L16", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_logs_logs", + "target": "email_server_server_web_ui_logs_py_route", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/logs.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_logs_rationale_18", + "target": "email_server_server_web_ui_logs_logs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_server_web_ui_routes_format_datetime", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L52", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_server_web_ui_routes_internal_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L44", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_server_web_ui_routes_not_found", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_server_web_ui_view_message", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_tool_box_get_current_time", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes_rationale_1", + "target": "email_server_server_web_ui_routes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_server_web_ui_routes", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_routes", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L25", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_routes_format_datetime", + "target": "app_template_filter", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes_format_datetime", + "target": "email_server_settings_loader_load_settings" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes_rationale_27", + "target": "email_server_server_web_ui_routes_format_datetime", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L51", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_routes_internal_error", + "target": "errorhandler", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L43", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_routes_not_found", + "target": "errorhandler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes_not_found", + "target": "email_server_tool_box_get_current_time" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/routes.py", + "source_location": "L58", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_routes_internal_error", + "target": "email_server_tool_box_get_current_time" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_server_web_ui_senders_add_sender", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L85", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_server_web_ui_senders_delete_sender", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L160", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_server_web_ui_senders_edit_sender", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L110", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_server_web_ui_senders_enable_sender", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L135", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_server_web_ui_senders_remove_sender", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_server_web_ui_senders_senders_list", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders_rationale_1", + "target": "email_server_server_web_ui_senders", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L31", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_senders_add_sender", + "target": "email_server_server_web_ui_senders_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L84", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_senders_delete_sender", + "target": "email_server_server_web_ui_senders_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L159", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_senders_edit_sender", + "target": "email_server_server_web_ui_senders_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L109", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_senders_enable_sender", + "target": "email_server_server_web_ui_senders_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L134", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_senders_remove_sender", + "target": "email_server_server_web_ui_senders_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L21", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_senders_senders_list", + "target": "email_server_server_web_ui_senders_py_route", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L86", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders_rationale_86", + "target": "email_server_server_web_ui_senders_delete_sender", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/senders.py", + "source_location": "L136", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_senders_rationale_136", + "target": "email_server_server_web_ui_senders_remove_sender", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_settings_allowed_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L243", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_settings_get_available_timezones", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L198", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_settings_get_server_ip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_settings_get_template_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_settings_settings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_settings_settings_update", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L211", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_settings_test_attachments_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L127", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_settings_test_database_connection_endpoint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L144", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_settings_upload_cert", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L171", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_settings_upload_key", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_utils", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_server_web_ui_utils_get_public_ip", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_rationale_1", + "target": "email_server_server_web_ui_settings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L154", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_upload_cert", + "target": "email_server_server_web_ui_settings_allowed_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L181", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_upload_key", + "target": "email_server_server_web_ui_settings_allowed_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_get_template_context", + "target": "email_server_server_web_ui_settings_get_available_timezones", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_get_template_context", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_rationale_34", + "target": "email_server_server_web_ui_settings_get_template_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_settings", + "target": "email_server_server_web_ui_settings_get_template_context", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L197", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_settings_get_server_ip", + "target": "email_server_server_web_ui_settings_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L44", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_settings_settings", + "target": "email_server_server_web_ui_settings_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L49", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_settings_settings_update", + "target": "email_server_server_web_ui_settings_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L210", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_settings_test_attachments_path", + "target": "email_server_server_web_ui_settings_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L126", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_settings_test_database_connection_endpoint", + "target": "email_server_server_web_ui_settings_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L143", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_settings_upload_cert", + "target": "email_server_server_web_ui_settings_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L170", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_settings_upload_key", + "target": "email_server_server_web_ui_settings_py_route", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_rationale_46", + "target": "email_server_server_web_ui_settings_settings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_rationale_51", + "target": "email_server_server_web_ui_settings_settings_update", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L65", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_settings_update", + "target": "email_server_settings_loader_load_settings" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L128", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_rationale_128", + "target": "email_server_server_web_ui_settings_test_database_connection_endpoint", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L145", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_rationale_145", + "target": "email_server_server_web_ui_settings_upload_cert", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L172", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_rationale_172", + "target": "email_server_server_web_ui_settings_upload_key", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L201", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_get_server_ip", + "target": "email_server_server_web_ui_utils_get_public_ip" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L199", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_rationale_199", + "target": "email_server_server_web_ui_settings_get_server_ip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L212", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_rationale_212", + "target": "email_server_server_web_ui_settings_test_attachments_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/settings.py", + "source_location": "L244", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_settings_rationale_244", + "target": "email_server_server_web_ui_settings_get_available_timezones", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/static/js/dkim-management.js", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_static_js_dkim_management", + "target": "email_server_server_web_ui_static_js_dkim_management_dkimmanagement", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/static/js/smtp-management.js", + "source_location": "L149", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_static_js_smtp_management", + "target": "email_server_server_web_ui_static_js_smtp_management_dnsverification", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/static/js/smtp-management.js", + "source_location": "L180", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_static_js_smtp_management", + "target": "email_server_server_web_ui_static_js_smtp_management_formvalidation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/static/js/smtp-management.js", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_static_js_smtp_management", + "target": "email_server_server_web_ui_static_js_smtp_management_smtpmanagement", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_utils", + "target": "email_server_server_web_ui_utils_check_dns_record", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L138", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_utils", + "target": "email_server_server_web_ui_utils_generate_spf_record", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_utils", + "target": "email_server_server_web_ui_utils_get_public_ip", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_utils", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_utils", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_utils_rationale_1", + "target": "email_server_server_web_ui_utils", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_utils_get_public_ip", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_utils_rationale_17", + "target": "email_server_server_web_ui_utils_get_public_ip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_utils_rationale_49", + "target": "email_server_server_web_ui_utils_check_dns_record", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/utils.py", + "source_location": "L139", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_utils_rationale_139", + "target": "email_server_server_web_ui_utils_generate_spf_record", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L115", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_view_message", + "target": "email_server_server_web_ui_view_message_delete_attachment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_view_message", + "target": "email_server_server_web_ui_view_message_download_attachment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_view_message", + "target": "email_server_server_web_ui_view_message_view_message_content", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_view_message", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_view_message", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_view_message_rationale_1", + "target": "email_server_server_web_ui_view_message", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L114", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_view_message_delete_attachment", + "target": "email_server_server_web_ui_view_message_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L29", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_view_message_download_attachment", + "target": "email_server_server_web_ui_view_message_py_route", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L12", + "weight": 1.0, + "context": "decorator", + "_origin": "ast", + "source": "email_server_server_web_ui_view_message_view_message_content", + "target": "email_server_server_web_ui_view_message_py_route", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/server_web_ui/view_message.py", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_server_web_ui_view_message_rationale_14", + "target": "email_server_server_web_ui_view_message_view_message_content", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/settings_loader.py", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_settings_loader", + "target": "configparser", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/settings_loader.py", + "source_location": "L59", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_settings_loader", + "target": "email_server_settings_loader_generate_settings_ini", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/settings_loader.py", + "source_location": "L76", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_settings_loader", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/settings_loader.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_settings_loader_rationale_1", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/tls_utils.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tls_utils", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box", + "target": "email_server_settings_loader", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/settings_loader.py", + "source_location": "L63", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_settings_loader_generate_settings_ini", + "target": "configparser", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "email_server/settings_loader.py", + "source_location": "L59", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_settings_loader_generate_settings_ini", + "target": "path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/settings_loader.py", + "source_location": "L78", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_settings_loader_load_settings", + "target": "email_server_settings_loader_generate_settings_ini", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/settings_loader.py", + "source_location": "L60", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_settings_loader_rationale_60", + "target": "email_server_settings_loader_generate_settings_ini", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "email_server/settings_loader.py", + "source_location": "L76", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_settings_loader_load_settings", + "target": "path", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "return_type", + "confidence": "EXTRACTED", + "source_file": "email_server/settings_loader.py", + "source_location": "L76", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_settings_loader_load_settings", + "target": "configparser", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/settings_loader.py", + "source_location": "L77", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_settings_loader_rationale_77", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/tls_utils.py", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tls_utils", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box", + "target": "email_server_settings_loader_load_settings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_smtp_handler_customsmtp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L64", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_smtp_handler_enhancedcombinedauthenticator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L93", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L707", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_smtp_handler_plaincontroller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L679", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_smtp_handler_tlscontroller", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_tool_box_ensure_folder_exists", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_tool_box_generate_message_id", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_tool_box_get_current_time", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_1", + "target": "email_server_smtp_handler", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_customsmtp", + "target": "aiosmtp", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_customsmtp", + "target": "email_server_smtp_handler_customsmtp_get_auth_methods", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_customsmtp", + "target": "email_server_smtp_handler_customsmtp_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L53", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_customsmtp", + "target": "email_server_smtp_handler_customsmtp_smtp_auth", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L716", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_plaincontroller_factory", + "target": "email_server_smtp_handler_customsmtp", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_31", + "target": "email_server_smtp_handler_customsmtp", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L695", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_tlscontroller_factory", + "target": "email_server_smtp_handler_customsmtp", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_customsmtp_init", + "target": "email_server_smtp_handler_plaincontroller_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L54", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_54", + "target": "email_server_smtp_handler_customsmtp_smtp_auth", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L78", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcombinedauthenticator", + "target": "email_server_smtp_handler_enhancedcombinedauthenticator_call", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L74", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcombinedauthenticator", + "target": "email_server_smtp_handler_enhancedcombinedauthenticator_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L99", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_init", + "target": "email_server_smtp_handler_enhancedcombinedauthenticator", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L65", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_65", + "target": "email_server_smtp_handler_enhancedcombinedauthenticator", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L105", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L611", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L648", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L250", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L589", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_mail", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L583", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_rcpt", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L96", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L94", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_94", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L169", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", + "target": "email_server_tool_box_generate_message_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L314", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L106", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_106", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_ensure_required_headers", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L391", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L412", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L397", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", + "target": "email_server_tool_box_ensure_folder_exists" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L251", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_251", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_data", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L584", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_584", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_rcpt", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L590", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_590", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_handle_mail", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/smtp_handler.py", + "source_location": "L626", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", + "target": "email_server_tool_box_get_current_time" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L612", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_612", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_get_attachment_storage_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L649", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_649", + "target": "email_server_smtp_handler_enhancedcustomsmtphandler_get_content_type", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L680", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_680", + "target": "email_server_smtp_handler_tlscontroller", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L679", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_tlscontroller", + "target": "controller", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L690", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_tlscontroller", + "target": "email_server_smtp_handler_tlscontroller_factory", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L684", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_tlscontroller", + "target": "email_server_smtp_handler_tlscontroller_init", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L707", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_plaincontroller", + "target": "controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L688", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_tlscontroller_init", + "target": "email_server_smtp_handler_plaincontroller_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L714", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_plaincontroller", + "target": "email_server_smtp_handler_plaincontroller_factory", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L710", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_plaincontroller", + "target": "email_server_smtp_handler_plaincontroller_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/smtp_handler.py", + "source_location": "L708", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_smtp_handler_rationale_708", + "target": "email_server_smtp_handler_plaincontroller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/tls_utils.py", + "source_location": "L60", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tls_utils", + "target": "email_server_tls_utils_create_ssl_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/tls_utils.py", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tls_utils", + "target": "email_server_tls_utils_generate_self_signed_cert", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/tls_utils.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tls_utils", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/tls_utils.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tls_utils", + "target": "email_server_tool_box_ensure_folder_exists", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "email_server/tls_utils.py", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tls_utils", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/tls_utils.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tls_utils_rationale_1", + "target": "email_server_tls_utils", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/tls_utils.py", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tls_utils_rationale_21", + "target": "email_server_tls_utils_generate_self_signed_cert", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/tls_utils.py", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tls_utils_rationale_61", + "target": "email_server_tls_utils_create_ssl_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box", + "target": "email_server_tool_box_ensure_folder_exists", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L71", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box", + "target": "email_server_tool_box_generate_message_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L66", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box", + "target": "email_server_tool_box_get_current_time", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box", + "target": "email_server_tool_box_setup_logging", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box_rationale_1", + "target": "email_server_tool_box", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box_rationale_17", + "target": "email_server_tool_box_ensure_folder_exists", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box_get_logger", + "target": "email_server_tool_box_setup_logging", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box_rationale_27", + "target": "email_server_tool_box_setup_logging", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box_rationale_46", + "target": "email_server_tool_box_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L67", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box_rationale_67", + "target": "email_server_tool_box_get_current_time", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "email_server/tool_box.py", + "source_location": "L72", + "weight": 1.0, + "_origin": "ast", + "source": "email_server_tool_box_rationale_72", + "target": "email_server_tool_box_generate_message_id", + "confidence_score": 1.0 + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "source_file": "script_install_service.sh", + "source_location": "L210", + "weight": 1.0, + "_origin": "ast", + "source": "script_install_service", + "target": "script_install_service_remove_system_services", + "confidence_score": 1.0 + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "source_file": "script_install_service.sh", + "source_location": "L129", + "weight": 1.0, + "_origin": "ast", + "source": "script_install_service", + "target": "script_install_service_remove_user_services", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "script_install_service.sh", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "script_install_service", + "target": "script_install_service_sh__entry", + "confidence_score": 1.0 + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "source_file": "script_install_service.sh", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "script_install_service", + "target": "script_install_service_usage", + "confidence_score": 1.0 + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "source_file": "script_install_service.sh", + "source_location": "L140", + "weight": 1.0, + "_origin": "ast", + "source": "script_install_service", + "target": "script_install_service_write_system_services", + "confidence_score": 1.0 + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "source_file": "script_install_service.sh", + "source_location": "L59", + "weight": 1.0, + "_origin": "ast", + "source": "script_install_service", + "target": "script_install_service_write_user_services", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "script_install_service.sh", + "source_location": "L224", + "weight": 1.0, + "context": "call", + "_origin": "ast", + "source": "script_install_service_sh__entry", + "target": "script_install_service_remove_system_services", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "script_install_service.sh", + "source_location": "L226", + "weight": 1.0, + "context": "call", + "_origin": "ast", + "source": "script_install_service_sh__entry", + "target": "script_install_service_remove_user_services", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "script_install_service.sh", + "source_location": "L54", + "weight": 1.0, + "context": "call", + "_origin": "ast", + "source": "script_install_service_sh__entry", + "target": "script_install_service_usage", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "script_install_service.sh", + "source_location": "L230", + "weight": 1.0, + "context": "call", + "_origin": "ast", + "source": "script_install_service_sh__entry", + "target": "script_install_service_write_system_services", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "confidence": "EXTRACTED", + "source_file": "script_install_service.sh", + "source_location": "L232", + "weight": 1.0, + "context": "call", + "_origin": "ast", + "source": "script_install_service_sh__entry", + "target": "script_install_service_write_user_services", + "confidence_score": 1.0 + }, + { + "relation": "defines", + "confidence": "EXTRACTED", + "source_file": "script_nginx_setup.sh", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "script_nginx_setup", + "target": "script_nginx_setup_error_messages", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "script_nginx_setup.sh", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "script_nginx_setup", + "target": "script_nginx_setup_sh__entry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "script_setup_py_environment.sh", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "script_setup_py_environment", + "target": "script_setup_py_environment_sh__entry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/bash_send_email.sh", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "source": "tests_bash_send_email", + "target": "tests_bash_send_email_sh__entry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/send_email.py", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "tests_send_email", + "target": "tests_send_email_send_test_email", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/send_email.py", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "tests_send_email", + "target": "tests_send_email_send_test_email_tls", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/send_email.py", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "tests_send_email_rationale_19", + "target": "tests_send_email_send_test_email", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/send_email.py", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "tests_send_email_rationale_37", + "target": "tests_send_email_send_test_email_tls", + "confidence_score": 1.0 + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/add_domain.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_add_domain_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/add_domain.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_add_domain_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/add_domain.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_add_domain_page", + "target": "email_server_server_web_ui_templates_domains_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_add_domain_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dkim.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dkim_page", + "target": "email_server_server_web_ui_templates_add_domain_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/add_ip.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_add_ip_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/add_ip.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_add_ip_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/add_ip.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_add_ip_page", + "target": "email_server_server_web_ui_templates_ips_ip_whitelist_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/ips.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_ips_page", + "target": "email_server_server_web_ui_templates_add_ip_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_add_ip_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/add_sender.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_add_sender_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/add_sender.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_add_sender_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/add_sender.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_add_sender_page", + "target": "email_server_server_web_ui_templates_senders_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/add_sender.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_add_sender_page", + "target": "email_server_server_web_ui_templates_senders_sender_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_add_sender_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/base.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_base_page", + "target": "email_server_server_web_ui_templates_sidebar_email_partial" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dkim.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dkim_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/domains.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_domains_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_dkim.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_dkim_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_domain.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_domain_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_ip.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_ip_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_sender.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_sender_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/error.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_error_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/ips.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_ips_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/logs.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_logs_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/senders.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_senders_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/settings.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_settings_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "implements", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/view_message_content.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_view_message_content_page", + "target": "email_server_server_web_ui_templates_base_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_base_health_check_concept" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_dkim_dkim_key_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_dkim_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_domains_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_logs_auth_log_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_logs_email_log_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_logs_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_senders_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_senders_sender_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dashboard.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dashboard_page", + "target": "email_server_server_web_ui_templates_settings_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/error.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_error_page", + "target": "email_server_server_web_ui_templates_dashboard_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_dashboard_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dkim.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dkim_page", + "target": "email_server_server_web_ui_templates_dkim_dkim_key_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dkim.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dkim_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/dkim.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_dkim_page", + "target": "email_server_server_web_ui_templates_edit_dkim_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_dkim_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/domains.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_domains_page", + "target": "email_server_server_web_ui_templates_dkim_dkim_key_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/domains.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_domains_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/domains.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_domains_page", + "target": "email_server_server_web_ui_templates_edit_domain_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_domains_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_dkim.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_dkim_page", + "target": "email_server_server_web_ui_templates_dkim_dkim_key_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_dkim.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_dkim_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_domain.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_domain_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "AMBIGUOUS", + "confidence_score": 0.2, + "source_file": "email_server/server_web_ui/templates/edit_domain.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_domain_page", + "target": "email_server_server_web_ui_templates_sidebar_email_partial" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_ip.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_ip_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_ip.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_ip_page", + "target": "email_server_server_web_ui_templates_ips_ip_whitelist_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_ip.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_ip_page", + "target": "email_server_server_web_ui_templates_ips_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_sender.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_sender_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_sender.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_sender_page", + "target": "email_server_server_web_ui_templates_senders_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/edit_sender.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_edit_sender_page", + "target": "email_server_server_web_ui_templates_senders_sender_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/ips.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_ips_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/ips.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_ips_page", + "target": "email_server_server_web_ui_templates_ips_ip_whitelist_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_ips_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/logs.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_logs_page", + "target": "email_server_server_web_ui_templates_logs_auth_log_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/logs.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_logs_page", + "target": "email_server_server_web_ui_templates_logs_email_log_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/logs.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_logs_page", + "target": "email_server_server_web_ui_templates_view_message_content_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_logs_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/senders.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_senders_page", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/senders.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_senders_page", + "target": "email_server_server_web_ui_templates_senders_sender_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_senders_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/settings.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_settings_page", + "target": "email_server_server_web_ui_templates_settings_server_settings_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_settings_page" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_base_health_check_concept" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_dkim_dkim_key_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_domains_domain_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_ips_ip_whitelist_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/sidebar_email.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_sidebar_email_partial", + "target": "email_server_server_web_ui_templates_senders_sender_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/view_message_content.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_view_message_content_page", + "target": "email_server_server_web_ui_templates_logs_email_log_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "email_server/server_web_ui/templates/view_message_content.html", + "source_location": null, + "weight": 1.0, + "source": "email_server_server_web_ui_templates_view_message_content_page", + "target": "email_server_server_web_ui_templates_view_message_content_attachment_model" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": "Plan", + "weight": 1.0, + "source": "readme_doc", + "target": "readme_dkim" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": "Plan", + "weight": 1.0, + "source": "readme_doc", + "target": "readme_ip_whitelisting" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": "License", + "weight": 1.0, + "source": "readme_doc", + "target": "readme_license" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": "Plan", + "weight": 1.0, + "source": "readme_doc", + "target": "readme_spf" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": "Plan", + "weight": 1.0, + "source": "readme_doc", + "target": "readme_store_sent_emails" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "README.md", + "source_location": null, + "weight": 1.0, + "source": "readme_doc", + "target": "readme_unified_doc" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": "Plan", + "weight": 1.0, + "source": "readme_doc", + "target": "readme_username_password_auth" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": "Tests - examples: [CLI commands and usage example]", + "weight": 1.0, + "source": "readme_doc", + "target": "tests_general_cli_usage_doc" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": "Tests - examples: [Send Test Emails examples]", + "weight": 1.0, + "source": "readme_doc", + "target": "tests_run_tests_manually_doc" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": "Production: gunicorn -w 4 -b 0.0.0.0:5000 app:flask_app", + "weight": 1.0, + "source": "requirements_gunicorn", + "target": "readme_doc" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "README.md", + "source_location": null, + "weight": 1.0, + "source": "readme_dkim", + "target": "readme_unified_dkim_support" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "README.md", + "source_location": null, + "weight": 1.0, + "source": "readme_ip_whitelisting", + "target": "readme_unified_ip_whitelisting" + }, + { + "relation": "conceptually_related_to", + "confidence": "AMBIGUOUS", + "confidence_score": 0.2, + "source_file": "README.md", + "source_location": null, + "weight": 1.0, + "source": "readme_license", + "target": "readme_unified_mit_license" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "API Endpoints", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_api_endpoints" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Database Schema", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_database_schema" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Features", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_dkim_support" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "DNS Configuration", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_dns_configuration" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Features", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_domain_management" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Features", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_email_relay" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Features", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_ip_whitelisting" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "License", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_mit_license" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Development", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_project_structure" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Production Deployment", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_reverse_proxy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Configuration", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_settings_ini" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Features / SMTP Server", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_smtp_server" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Production Deployment", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_systemd_service" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Features / TLS Settings", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_tls_ssl" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Features / Security", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_user_authentication" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "Features / Web Management Interface", + "weight": 1.0, + "source": "readme_unified_doc", + "target": "readme_unified_web_management_interface" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "requirements_aiosmtpd", + "target": "readme_unified_smtp_server" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "requirements_aiosmtplib", + "target": "readme_unified_smtp_server" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "requirements_flask", + "target": "readme_unified_web_management_interface" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "README_unified.md", + "source_location": null, + "weight": 1.0, + "source": "readme_unified_dkim_support", + "target": "tests_general_cli_usage_dkim_key_management" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "README_unified.md", + "source_location": null, + "weight": 1.0, + "source": "readme_unified_dkim_support", + "target": "tests_run_tests_manually_dkim_key_generation" + }, + { + "relation": "conceptually_related_to", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README_unified.md", + "source_location": "DKIM Record / DKIM Management", + "weight": 1.0, + "source": "readme_unified_dns_configuration", + "target": "readme_unified_dkim_support" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.75, + "source_file": "requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "requirements_cryptography", + "target": "readme_unified_dkim_support" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "requirements_dkimpy", + "target": "readme_unified_dkim_support" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "requirements_pyopenssl", + "target": "readme_unified_tls_ssl" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "README_unified.md", + "source_location": null, + "weight": 1.0, + "source": "readme_unified_user_authentication", + "target": "tests_note_authentication_order_fix_authentication_order_fix" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "requirements_bcrypt", + "target": "readme_unified_user_authentication" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "README_unified.md", + "source_location": null, + "weight": 1.0, + "source": "readme_unified_ip_whitelisting", + "target": "tests_general_cli_usage_ip_whitelist_management" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "README_unified.md", + "source_location": null, + "weight": 1.0, + "source": "readme_unified_ip_whitelisting", + "target": "tests_note_authentication_order_fix_ip_whitelisting_fallback" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "requirements_flask_sqlalchemy", + "target": "readme_unified_database_schema" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "requirements_sqlalchemy", + "target": "readme_unified_database_schema" + }, + { + "relation": "implements", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "requirements.txt", + "source_location": null, + "weight": 1.0, + "source": "requirements_dnspython", + "target": "readme_unified_dns_configuration" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_aiosmtpd" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_aiosmtplib" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_bcrypt" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_cryptography" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_dkimpy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_dnspython" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_flask" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_flask_sqlalchemy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_gunicorn" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_jinja2" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_pyopenssl" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Additional utilities", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_python_dotenv" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_pytz" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_requests" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Core SMTP Server Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_sqlalchemy" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "requirements.txt", + "source_location": "Web Frontend Dependencies", + "weight": 1.0, + "source": "requirements_doc", + "target": "requirements_werkzeug" + }, + { + "relation": "semantically_similar_to", + "confidence": "INFERRED", + "confidence_score": 0.75, + "source_file": "tests/email_body.txt", + "source_location": null, + "weight": 1.0, + "source": "tests_email_body_lorem_ipsum", + "target": "tests_pdf_test_1_document" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/general_cli_usage.md", + "source_location": "swaks --body @tests/email_body.txt", + "weight": 1.0, + "source": "tests_general_cli_usage_swaks", + "target": "tests_email_body_lorem_ipsum" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/general_cli_usage.md", + "source_location": "Database Direct Access", + "weight": 1.0, + "source": "tests_general_cli_usage_doc", + "target": "tests_general_cli_usage_db_direct_access" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/general_cli_usage.md", + "source_location": "DKIM Key Management", + "weight": 1.0, + "source": "tests_general_cli_usage_doc", + "target": "tests_general_cli_usage_dkim_key_management" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/general_cli_usage.md", + "source_location": "Domain Management", + "weight": 1.0, + "source": "tests_general_cli_usage_doc", + "target": "tests_general_cli_usage_domain_management" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/general_cli_usage.md", + "source_location": "IP Whitelist Management", + "weight": 1.0, + "source": "tests_general_cli_usage_doc", + "target": "tests_general_cli_usage_ip_whitelist_management" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/general_cli_usage.md", + "source_location": "Send emails using python script", + "weight": 1.0, + "source": "tests_general_cli_usage_doc", + "target": "tests_general_cli_usage_send_email_script" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/general_cli_usage.md", + "source_location": "Linux send emails using swaks", + "weight": 1.0, + "source": "tests_general_cli_usage_doc", + "target": "tests_general_cli_usage_swaks" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/general_cli_usage.md", + "source_location": "User Management", + "weight": 1.0, + "source": "tests_general_cli_usage_doc", + "target": "tests_general_cli_usage_user_management" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/general_cli_usage.md", + "source_location": "Example Setup Workflow", + "weight": 1.0, + "source": "tests_general_cli_usage_doc", + "target": "tests_general_cli_usage_web_interface_setup" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/general_cli_usage.md", + "source_location": null, + "weight": 1.0, + "source": "tests_general_cli_usage_send_email_script", + "target": "tests_run_tests_manually_send_email_script" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/general_cli_usage.md", + "source_location": null, + "weight": 1.0, + "source": "tests_general_cli_usage_swaks", + "target": "tests_run_tests_manually_swaks" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/note_authentication_order_fix.md", + "source_location": "Code Snippet for Immediate Authentication Failure Response", + "weight": 1.0, + "source": "tests_note_authentication_order_fix_authentication_order_fix", + "target": "tests_note_authentication_order_fix_auth_call" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/note_authentication_order_fix.md", + "source_location": "What Was Fixed / AUTH on Both Ports", + "weight": 1.0, + "source": "tests_note_authentication_order_fix_authentication_order_fix", + "target": "tests_note_authentication_order_fix_auth_ports" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/note_authentication_order_fix.md", + "source_location": "Authentication Order and Logic", + "weight": 1.0, + "source": "tests_note_authentication_order_fix_authentication_order_fix", + "target": "tests_note_authentication_order_fix_ip_whitelisting_fallback" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/note_authentication_order_fix.md", + "source_location": "Best Practices for Future Development", + "weight": 1.0, + "source": "tests_note_authentication_order_fix_authentication_order_fix", + "target": "tests_note_authentication_order_fix_no_starttls" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/run_tests_manually.md", + "source_location": "Check db logs", + "weight": 1.0, + "source": "tests_run_tests_manually_doc", + "target": "tests_run_tests_manually_db_log_check" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/run_tests_manually.md", + "source_location": "Setup via Web Interface", + "weight": 1.0, + "source": "tests_run_tests_manually_doc", + "target": "tests_run_tests_manually_dkim_key_generation" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/run_tests_manually.md", + "source_location": "Send emails using python script", + "weight": 1.0, + "source": "tests_run_tests_manually_doc", + "target": "tests_run_tests_manually_send_email_script" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/run_tests_manually.md", + "source_location": "Linux send emails using swaks", + "weight": 1.0, + "source": "tests_run_tests_manually_doc", + "target": "tests_run_tests_manually_swaks" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/run_tests_manually.md", + "source_location": "Setup via Web Interface", + "weight": 1.0, + "source": "tests_run_tests_manually_doc", + "target": "tests_run_tests_manually_web_interface_setup" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/pdf_test_1.pdf", + "source_location": null, + "weight": 1.0, + "source": "tests_pdf_test_1_document", + "target": "tests_pdf_test_1_pebbles_image" + }, + { + "relation": "conceptually_related_to", + "confidence": "INFERRED", + "confidence_score": 0.75, + "source_file": "tests/Hello.jpg", + "source_location": null, + "weight": 1.0, + "source": "tests_hello_dogecoin_meme_image", + "target": "tests_hello_email_attachment_test_fixture" + } + ], + "hyperedges": [ + { + "id": "domain_crud_flow", + "label": "Domain CRUD Flow", + "nodes": [ + "email_server_server_web_ui_templates_add_domain_page", + "email_server_server_web_ui_templates_domains_page", + "email_server_server_web_ui_templates_edit_domain_page", + "email_server_server_web_ui_templates_domains_domain_model" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "email_server/server_web_ui/templates/domains.html" + }, + { + "id": "dkim_dns_verification_flow", + "label": "DKIM/SPF DNS Verification Flow", + "nodes": [ + "email_server_server_web_ui_templates_dkim_page", + "email_server_server_web_ui_templates_edit_dkim_page", + "email_server_server_web_ui_templates_dkim_dkim_key_model", + "email_server_server_web_ui_templates_domains_domain_model" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "email_server/server_web_ui/templates/dkim.html" + }, + { + "id": "email_log_message_viewer_flow", + "label": "Email Log Message Viewer Flow", + "nodes": [ + "email_server_server_web_ui_templates_logs_page", + "email_server_server_web_ui_templates_view_message_content_page", + "email_server_server_web_ui_templates_logs_email_log_model", + "email_server_server_web_ui_templates_view_message_content_attachment_model" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "email_server/server_web_ui/templates/logs.html" + }, + { + "id": "smtp_auth_ip_whitelist_flow", + "label": "SMTP Authentication & IP Whitelist Flow", + "nodes": [ + "tests_note_authentication_order_fix_authentication_order_fix", + "tests_note_authentication_order_fix_ip_whitelisting_fallback", + "readme_unified_user_authentication", + "readme_unified_ip_whitelisting" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "tests/note_authentication_order_fix.md" + }, + { + "id": "manual_smtp_testing_workflow", + "label": "Manual SMTP Testing Workflow", + "nodes": [ + "tests_general_cli_usage_swaks", + "tests_run_tests_manually_swaks", + "tests_email_body_lorem_ipsum", + "tests_general_cli_usage_send_email_script" + ], + "relation": "form", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/general_cli_usage.md" + }, + { + "id": "dkim_keygen_dns_verification_flow", + "label": "DKIM Key Generation & DNS Verification Flow", + "nodes": [ + "readme_unified_dkim_support", + "readme_unified_dns_configuration", + "tests_general_cli_usage_dkim_key_management", + "tests_run_tests_manually_dkim_key_generation" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.85, + "source_file": "README_unified.md" + } + ], + "built_at_commit": "71be09a9a8ea654b695c1a0e4d17c0327daba6a8" +} \ No newline at end of file diff --git a/graphify-out/manifest.json b/graphify-out/manifest.json new file mode 100644 index 0000000..8f1dfe7 --- /dev/null +++ b/graphify-out/manifest.json @@ -0,0 +1,292 @@ +{ + "app.py": { + "mtime": 1786507445.420008, + "ast_hash": "74aa21d6233b7e78d881f6d1510a8b33", + "semantic_hash": "74aa21d6233b7e78d881f6d1510a8b33" + }, + "email_server/__init__.py": { + "mtime": 1786507445.420008, + "ast_hash": "716fb9eecb7eb9fe7f975f2acaff5336", + "semantic_hash": "716fb9eecb7eb9fe7f975f2acaff5336" + }, + "email_server/auth.py": { + "mtime": 1786507445.420218, + "ast_hash": "a444385e425610fa8792651931aeefb6", + "semantic_hash": "a444385e425610fa8792651931aeefb6" + }, + "email_server/dkim_manager.py": { + "mtime": 1786507445.420524, + "ast_hash": "6b60aee77636c07a7791fc19943b79c7", + "semantic_hash": "6b60aee77636c07a7791fc19943b79c7" + }, + "email_server/email_relay.py": { + "mtime": 1786507445.4208057, + "ast_hash": "2104fd1a19cc11f2bda2cb810840c2e8", + "semantic_hash": "2104fd1a19cc11f2bda2cb810840c2e8" + }, + "email_server/models.py": { + "mtime": 1786507445.421146, + "ast_hash": "087a53f23d5d85aab276667e47926185", + "semantic_hash": "087a53f23d5d85aab276667e47926185" + }, + "email_server/server_runner.py": { + "mtime": 1786507445.4213533, + "ast_hash": "9b1b5a9097ee1203e5e6d62379d6e890", + "semantic_hash": "9b1b5a9097ee1203e5e6d62379d6e890" + }, + "email_server/server_web_ui/__init__.py": { + "mtime": 1786507445.4213533, + "ast_hash": "0a81840b8f81d3bed3c1508e8cbbeb78", + "semantic_hash": "0a81840b8f81d3bed3c1508e8cbbeb78" + }, + "email_server/server_web_ui/dashboard.py": { + "mtime": 1786507445.4215565, + "ast_hash": "999a07393e92b4f4dd613c04991b00f0", + "semantic_hash": "999a07393e92b4f4dd613c04991b00f0" + }, + "email_server/server_web_ui/database.py": { + "mtime": 1786507445.4215565, + "ast_hash": "4314ef255c59e8ba7317851c873c540b", + "semantic_hash": "4314ef255c59e8ba7317851c873c540b" + }, + "email_server/server_web_ui/dkim.py": { + "mtime": 1786507445.4219456, + "ast_hash": "8e6adb021d099b9168280318f998c583", + "semantic_hash": "8e6adb021d099b9168280318f998c583" + }, + "email_server/server_web_ui/domains.py": { + "mtime": 1786507445.42228, + "ast_hash": "1d7db380f0d4cbf85a3b2b42c6828fba", + "semantic_hash": "1d7db380f0d4cbf85a3b2b42c6828fba" + }, + "email_server/server_web_ui/ip_whitelist.py": { + "mtime": 1786507445.4224377, + "ast_hash": "7112f0220772e0090d461c19232822c0", + "semantic_hash": "7112f0220772e0090d461c19232822c0" + }, + "email_server/server_web_ui/logs.py": { + "mtime": 1786507445.4228892, + "ast_hash": "c3134f64de97480555e826eafc4016b3", + "semantic_hash": "c3134f64de97480555e826eafc4016b3" + }, + "email_server/server_web_ui/routes.py": { + "mtime": 1786507445.4228892, + "ast_hash": "85913d9a1142507b12e83a853452f0c1", + "semantic_hash": "85913d9a1142507b12e83a853452f0c1" + }, + "email_server/server_web_ui/senders.py": { + "mtime": 1786507445.4231021, + "ast_hash": "79872ba3cdaa85082f7a5afef0a2e081", + "semantic_hash": "79872ba3cdaa85082f7a5afef0a2e081" + }, + "email_server/server_web_ui/settings.py": { + "mtime": 1786507445.4232998, + "ast_hash": "9b8cf76d3df3835008eb2822099bf50e", + "semantic_hash": "9b8cf76d3df3835008eb2822099bf50e" + }, + "email_server/server_web_ui/static/js/dkim-management.js": { + "mtime": 1786507445.4234388, + "ast_hash": "9636e71baceeca4a7300e83cb7a92dbd", + "semantic_hash": "9636e71baceeca4a7300e83cb7a92dbd" + }, + "email_server/server_web_ui/static/js/smtp-management.js": { + "mtime": 1786507445.4238064, + "ast_hash": "5947686b5b1f277be78edc24a7149b9a", + "semantic_hash": "5947686b5b1f277be78edc24a7149b9a" + }, + "email_server/server_web_ui/utils.py": { + "mtime": 1786507445.4270105, + "ast_hash": "01d75f9cbc67f7889d38c2348deac329", + "semantic_hash": "01d75f9cbc67f7889d38c2348deac329" + }, + "email_server/server_web_ui/view_message.py": { + "mtime": 1786507445.427105, + "ast_hash": "772385cb7c5591d1880a30c251088de0", + "semantic_hash": "772385cb7c5591d1880a30c251088de0" + }, + "email_server/settings_loader.py": { + "mtime": 1786507445.4271889, + "ast_hash": "e94e850797497c2d623e48d7784fcc22", + "semantic_hash": "e94e850797497c2d623e48d7784fcc22" + }, + "email_server/smtp_handler.py": { + "mtime": 1786507445.4275122, + "ast_hash": "bf0a627e4cd31dc370a4985ac318ad94", + "semantic_hash": "bf0a627e4cd31dc370a4985ac318ad94" + }, + "email_server/tls_utils.py": { + "mtime": 1786507445.4276311, + "ast_hash": "930f99ecb58c7fb530eec8e26f17da20", + "semantic_hash": "930f99ecb58c7fb530eec8e26f17da20" + }, + "email_server/tool_box.py": { + "mtime": 1786507445.427724, + "ast_hash": "23bb9d388d999504eb5e457b79fadadf", + "semantic_hash": "23bb9d388d999504eb5e457b79fadadf" + }, + "migrations/add_email_attachments_table.sql": { + "mtime": 1786507445.427724, + "ast_hash": "e713c2bb34caf226587422dc02877ec6", + "semantic_hash": "e713c2bb34caf226587422dc02877ec6" + }, + "script_install_service.sh": { + "mtime": 1786507445.4279666, + "ast_hash": "e87676f5b71ee58d61a6835c19161d0a", + "semantic_hash": "e87676f5b71ee58d61a6835c19161d0a" + }, + "script_nginx_setup.sh": { + "mtime": 1786507445.428081, + "ast_hash": "cc3f0b0b094d065704b09860843e087c", + "semantic_hash": "cc3f0b0b094d065704b09860843e087c" + }, + "script_setup_py_environment.sh": { + "mtime": 1786507445.428146, + "ast_hash": "43485bc63fe9ff87484f705c9916b7b7", + "semantic_hash": "43485bc63fe9ff87484f705c9916b7b7" + }, + "tests/bash_send_email.sh": { + "mtime": 1786507445.4288027, + "ast_hash": "a8ca89c951cffdfadd24a5f046a52f6c", + "semantic_hash": "a8ca89c951cffdfadd24a5f046a52f6c" + }, + "tests/send_email.py": { + "mtime": 1786507445.4310372, + "ast_hash": "9af6cd850c485ef4adac8f632b5e985c", + "semantic_hash": "9af6cd850c485ef4adac8f632b5e985c" + }, + "README.md": { + "mtime": 1786507445.4194906, + "ast_hash": "8f3976f03b135442097a7acf9ebad587", + "semantic_hash": "8f3976f03b135442097a7acf9ebad587" + }, + "README_unified.md": { + "mtime": 1786507445.419653, + "ast_hash": "18cbf2d66ec27eac6ac683a7ec5a8623", + "semantic_hash": "18cbf2d66ec27eac6ac683a7ec5a8623" + }, + "email_server/server_web_ui/templates/add_domain.html": { + "mtime": 1786507445.4238307, + "ast_hash": "b3e488309b31eca000039cd2aedf32dc", + "semantic_hash": "b3e488309b31eca000039cd2aedf32dc" + }, + "email_server/server_web_ui/templates/add_ip.html": { + "mtime": 1786507445.4246278, + "ast_hash": "d71a779d57612f2776bc126c72acd289", + "semantic_hash": "d71a779d57612f2776bc126c72acd289" + }, + "email_server/server_web_ui/templates/add_sender.html": { + "mtime": 1786507445.424706, + "ast_hash": "fd557547eb245677ca9eec7572ce684e", + "semantic_hash": "fd557547eb245677ca9eec7572ce684e" + }, + "email_server/server_web_ui/templates/base.html": { + "mtime": 1786507445.4248886, + "ast_hash": "8708a86db306ce9653a0088a0c223768", + "semantic_hash": "8708a86db306ce9653a0088a0c223768" + }, + "email_server/server_web_ui/templates/dashboard.html": { + "mtime": 1786507445.4253263, + "ast_hash": "6afb31115c8ead5499b4494c693d00a8", + "semantic_hash": "6afb31115c8ead5499b4494c693d00a8" + }, + "email_server/server_web_ui/templates/dkim.html": { + "mtime": 1786507445.4254458, + "ast_hash": "071316e0c4a7b05c6769f1f95822e900", + "semantic_hash": "071316e0c4a7b05c6769f1f95822e900" + }, + "email_server/server_web_ui/templates/domains.html": { + "mtime": 1786507445.4255998, + "ast_hash": "4f18599d5b24accb1133e947ee991a47", + "semantic_hash": "4f18599d5b24accb1133e947ee991a47" + }, + "email_server/server_web_ui/templates/edit_dkim.html": { + "mtime": 1786507445.4257405, + "ast_hash": "e1af807e0b5d6cb4114a895f719390e7", + "semantic_hash": "e1af807e0b5d6cb4114a895f719390e7" + }, + "email_server/server_web_ui/templates/edit_domain.html": { + "mtime": 1786507445.4257405, + "ast_hash": "138451b7f2232bd8f043a9bd2dea44c5", + "semantic_hash": "138451b7f2232bd8f043a9bd2dea44c5" + }, + "email_server/server_web_ui/templates/edit_ip.html": { + "mtime": 1786507445.4259565, + "ast_hash": "8860ca3ae5914a21a36f877a1e7d93bd", + "semantic_hash": "8860ca3ae5914a21a36f877a1e7d93bd" + }, + "email_server/server_web_ui/templates/edit_sender.html": { + "mtime": 1786507445.4260433, + "ast_hash": "a455eba24fe2b83ee2fc7e0b1d898877", + "semantic_hash": "a455eba24fe2b83ee2fc7e0b1d898877" + }, + "email_server/server_web_ui/templates/error.html": { + "mtime": 1786507445.4261494, + "ast_hash": "1cd9c84b5e41292ddfc4f240eb44a3d4", + "semantic_hash": "1cd9c84b5e41292ddfc4f240eb44a3d4" + }, + "email_server/server_web_ui/templates/ips.html": { + "mtime": 1786507445.4262903, + "ast_hash": "c9c9f8a919efcc73562956d220188ed5", + "semantic_hash": "c9c9f8a919efcc73562956d220188ed5" + }, + "email_server/server_web_ui/templates/logs.html": { + "mtime": 1786507445.4265242, + "ast_hash": "99726a3e0e453b26183c58711024d532", + "semantic_hash": "99726a3e0e453b26183c58711024d532" + }, + "email_server/server_web_ui/templates/senders.html": { + "mtime": 1786507445.4265242, + "ast_hash": "18bfeee2ae2703d2b2e973a43e7e89ec", + "semantic_hash": "18bfeee2ae2703d2b2e973a43e7e89ec" + }, + "email_server/server_web_ui/templates/settings.html": { + "mtime": 1786507445.426726, + "ast_hash": "6e8399fa83764aa37068333f82ebd0d6", + "semantic_hash": "6e8399fa83764aa37068333f82ebd0d6" + }, + "email_server/server_web_ui/templates/sidebar_email.html": { + "mtime": 1786507445.4268527, + "ast_hash": "582b97df95b72a1b0623a84dd0d849ef", + "semantic_hash": "582b97df95b72a1b0623a84dd0d849ef" + }, + "email_server/server_web_ui/templates/view_message_content.html": { + "mtime": 1786507445.4268527, + "ast_hash": "aa18c525b8ca99d65e6f34ad0135843d", + "semantic_hash": "aa18c525b8ca99d65e6f34ad0135843d" + }, + "requirements.txt": { + "mtime": 1786507445.427886, + "ast_hash": "7d27d99d1d67f00c7a3fe65cbdc4742f", + "semantic_hash": "7d27d99d1d67f00c7a3fe65cbdc4742f" + }, + "tests/email_body.txt": { + "mtime": 1786507445.4288692, + "ast_hash": "28b2419589e713968c89e8f29b1f5da9", + "semantic_hash": "28b2419589e713968c89e8f29b1f5da9" + }, + "tests/general_cli_usage.md": { + "mtime": 1786507445.4289312, + "ast_hash": "910ba2ced2405bc17590f389cd70dfb9", + "semantic_hash": "910ba2ced2405bc17590f389cd70dfb9" + }, + "tests/note_authentication_order_fix.md": { + "mtime": 1786507445.4290037, + "ast_hash": "f34a0b1f012afd8431d89b2581cace24", + "semantic_hash": "f34a0b1f012afd8431d89b2581cace24" + }, + "tests/run_tests_manually.md": { + "mtime": 1786507445.4308133, + "ast_hash": "290cb5c01bc6f7382565f056322ff7d9", + "semantic_hash": "290cb5c01bc6f7382565f056322ff7d9" + }, + "tests/pdf_test_1.pdf": { + "mtime": 1786507445.4308133, + "ast_hash": "969aa7be407ae7b97df1aa6c362df7e6", + "semantic_hash": "969aa7be407ae7b97df1aa6c362df7e6" + }, + "tests/Hello.jpg": { + "mtime": 1786507445.4286962, + "ast_hash": "3e57187ec3810aaec71f0513744fe574", + "semantic_hash": "3e57187ec3810aaec71f0513744fe574" + } +} \ No newline at end of file diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 0000000..2776a29 --- /dev/null +++ b/internal/config/config.go @@ -0,0 +1,146 @@ +// Package config loads and generates settings.ini, mirroring email_server/settings_loader.py. +package config + +import ( + "os" + "path/filepath" + + "gopkg.in/ini.v1" +) + +// defaultKV is one key/value pair with the comment line Python renders above it. +type defaultKV struct { + Key string + Value string + Comment string +} + +// defaults mirrors settings_loader.py's DEFAULTS table section-by-section, in order. +// The [Attachments] section does not exist in the Python defaults (a bug: it crashes +// attachment storage there) — it is added here deliberately, per the approved plan. +var defaults = []struct { + Section string + Keys []defaultKV +}{ + {"Server", []defaultKV{ + {"", "", "Server configuration for SMTP ports and hostname"}, + {"", "", "Plain SMTP port for internal/whitelisted IPs"}, + {"SMTP_PORT", "4025", ""}, + {"", "", "TLS SMTP port for authenticated users"}, + {"SMTP_TLS_PORT", "40465", ""}, + {"", "", "Server hostname for HELO/EHLO identification"}, + {"HOSTNAME", "mail.example.com", ""}, + {"", "", "Override HELO hostname"}, + {"helo_hostname", "mail.example.com", ""}, + {"", "", `IP address to bind to (0.0.0.0 = all interfaces), on Windows must use specific IP`}, + {"BIND_IP", "0.0.0.0", ""}, + {"", "", `Custom server banner (to make it empty use "" must be double quotes)`}, + {"server_banner", "", ""}, + {"", "", "Time zone for the server"}, + {"TIME_ZONE", "Europe/London", ""}, + }}, + {"Database", []defaultKV{ + {"", "", "Database configuration"}, + {"DATABASE_URL", "sqlite:///server_data/smtp_server.db", ""}, + }}, + {"Logging", []defaultKV{ + {"", "", "Logging configuration"}, + {"", "", "Log level: DEBUG, INFO, WARNING, ERROR, CRITICAL"}, + {"LOG_LEVEL", "INFO", ""}, + {"", "", "Hide verbose aiosmtpd-equivalent INFO messages when LOG_LEVEL = INFO"}, + {"hide_info_aiosmtpd", "true", ""}, + }}, + {"Relay", []defaultKV{ + {"", "", "Timeout in seconds for external SMTP connections"}, + {"RELAY_TIMEOUT", "30", ""}, + }}, + {"TLS", []defaultKV{ + {"", "", "TLS/SSL certificate configuration"}, + {"TLS_CERT_FILE", "ssl_certs/server.crt", ""}, + {"TLS_KEY_FILE", "ssl_certs/server.key", ""}, + }}, + {"DKIM", []defaultKV{ + {"", "", "DKIM signing configuration"}, + {"", "", "RSA key size for DKIM keys (1024, 2048, 4096)"}, + {"DKIM_KEY_SIZE", "2048", ""}, + {"", "", "Provide Public IP address of server, used for SPF in case detection fails"}, + {"SPF_SERVER_IP", "192.168.1.1", ""}, + }}, + {"Attachments", []defaultKV{ + {"", "", "Directory where stored message attachments are written (fixed: missing in the Python defaults)"}, + {"attachments_path", "server_data/attachments", ""}, + }}, + {"Auth", []defaultKV{ + {"", "", "Admin dashboard login / passkey (WebAuthn) configuration"}, + {"", "", "Must match the domain the admin dashboard is actually accessed at — passkeys are bound to this"}, + {"rp_id", "localhost", ""}, + {"", "", "Display name shown in the authenticator/passkey prompt"}, + {"rp_display_name", "mailgoserver", ""}, + {"", "", `Full origin (scheme+host+port) the dashboard is served at, e.g. "https://mail.example.com"`}, + {"rp_origin", "http://localhost:5000", ""}, + }}, +} + +// GenerateSettingsIni writes settings.ini with default values and comments if it does +// not already exist. Mirrors settings_loader.generate_settings_ini: never overwrites or +// merges into an existing file. +func GenerateSettingsIni(path string) error { + if _, err := os.Stat(path); err == nil { + return nil + } + if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { + return err + } + + cfg := ini.Empty() + for _, sec := range defaults { + section, err := cfg.NewSection(sec.Section) + if err != nil { + return err + } + for _, kv := range sec.Keys { + if kv.Key == "" { + // Comment-only line, e.g. a section header comment. No trailing + // newline: ini.v1's writer splits Comment on "\n" and indexes + // line[0] unconditionally, so a trailing separator produces an + // empty final line and panics. + if section.Comment != "" { + section.Comment += "\n" + } + section.Comment += kv.Comment + continue + } + key, err := section.NewKey(kv.Key, kv.Value) + if err != nil { + return err + } + if kv.Comment != "" { + key.Comment = kv.Comment + } + } + } + return cfg.SaveTo(path) +} + +// Load reads settings.ini at path, generating it with defaults first if missing. +// Mirrors settings_loader.load_settings: always regenerate-if-missing, then read fresh. +func Load(path string) (*ini.File, error) { + if err := GenerateSettingsIni(path); err != nil { + return nil, err + } + return ini.Load(path) +} + +// AbsoluteSQLitePath converts a "sqlite:///relative/path" database URL into an absolute +// filesystem path resolved against root, mirroring app.py's _get_absolute_database_url. +func AbsoluteSQLitePath(databaseURL, root string) string { + const prefix = "sqlite:///" + if len(databaseURL) < len(prefix) || databaseURL[:len(prefix)] != prefix { + return databaseURL + } + rel := databaseURL[len(prefix):] + if filepath.IsAbs(rel) { + return rel + } + return filepath.Join(root, rel) +} diff --git a/internal/config/config_test.go b/internal/config/config_test.go new file mode 100644 index 0000000..81fc36b --- /dev/null +++ b/internal/config/config_test.go @@ -0,0 +1,48 @@ +package config + +import ( + "os" + "path/filepath" + "testing" +) + +func TestGenerateAndLoadRoundTrip(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "settings.ini") + + cfg, err := Load(path) + if err != nil { + t.Fatalf("Load (generate): %v", err) + } + if _, err := os.Stat(path); err != nil { + t.Fatalf("settings.ini was not written: %v", err) + } + if got := cfg.Section("Server").Key("SMTP_PORT").String(); got != "4025" { + t.Errorf("SMTP_PORT = %q, want 4025", got) + } + if got := cfg.Section("Attachments").Key("attachments_path").String(); got == "" { + t.Error("Attachments.attachments_path default is missing (the approved bug fix)") + } + + // Load again against the now-existing file — must not regenerate/overwrite. + cfg2, err := Load(path) + if err != nil { + t.Fatalf("Load (existing): %v", err) + } + if got := cfg2.Section("Server").Key("SMTP_PORT").String(); got != "4025" { + t.Errorf("second Load: SMTP_PORT = %q, want 4025", got) + } +} + +func TestAbsoluteSQLitePath(t *testing.T) { + cases := []struct{ url, root, want string }{ + {"sqlite:///server_data/db.sqlite", "/app", "/app/server_data/db.sqlite"}, + {"sqlite:////abs/db.sqlite", "/app", "/abs/db.sqlite"}, + {"mysql://x", "/app", "mysql://x"}, + } + for _, c := range cases { + if got := AbsoluteSQLitePath(c.url, c.root); got != c.want { + t.Errorf("AbsoluteSQLitePath(%q, %q) = %q, want %q", c.url, c.root, got, c.want) + } + } +} diff --git a/internal/db/admin_models.go b/internal/db/admin_models.go new file mode 100644 index 0000000..25d0d37 --- /dev/null +++ b/internal/db/admin_models.go @@ -0,0 +1,32 @@ +package db + +import "time" + +type AdminUser struct { + ID int64 + Username string + PasswordHash string + MustChangePassword bool + TOTPSecret string + TOTPEnabled bool + IsGlobalAdmin bool + CreatedBy *int64 + CreatedAt time.Time +} + +type AdminSession struct { + Token string + UserID int64 + MFAVerified bool + CreatedAt time.Time + ExpiresAt time.Time +} + +type WebAuthnCredential struct { + ID int64 + UserID int64 + Name string + CredentialID string + CredentialData string + CreatedAt time.Time +} diff --git a/internal/db/crud.go b/internal/db/crud.go new file mode 100644 index 0000000..32522a3 --- /dev/null +++ b/internal/db/crud.go @@ -0,0 +1,58 @@ +package db + +import ( + "database/sql" + "errors" +) + +// GetDomainByNameExact looks up a domain by exact (case-sensitive) name, regardless of +// is_active, mirroring the raw `filter_by(domain_name=domain_name)` query used inside +// DKIMManager.generate_dkim_keypair (unlike get_domain_by_name, which is case-insensitive +// and active-only). +func (d *DB) GetDomainByNameExact(name string) (*Domain, error) { + row := d.QueryRow(`SELECT `+domainColumns+` FROM esrv_domains WHERE domain_name = ?`, name) + return scanDomain(row) +} + +// GetDomainByID looks up a domain by primary key, regardless of is_active — used by the +// admin web UI's edit/delete/toggle actions, which operate on a specific row by id. +func (d *DB) GetDomainByID(id int64) (*Domain, error) { + row := d.QueryRow(`SELECT `+domainColumns+` FROM esrv_domains WHERE id = ?`, id) + return scanDomain(row) +} + +func (d *DB) GetDKIMKeyByDomainAndSelector(domainID int64, selector string) (*DKIMKey, error) { + row := d.QueryRow(`SELECT id, domain_id, selector, private_key, public_key, is_active, created_at, replaced_at + FROM esrv_dkim_keys WHERE domain_id = ? AND selector = ?`, domainID, selector) + return scanDKIMKey(row) +} + +func (d *DB) GetActiveDKIMKeyByDomainID(domainID int64) (*DKIMKey, error) { + row := d.QueryRow(`SELECT id, domain_id, selector, private_key, public_key, is_active, created_at, replaced_at + FROM esrv_dkim_keys WHERE domain_id = ? AND is_active = 1`, domainID) + return scanDKIMKey(row) +} + +func (d *DB) GetDKIMKeyByID(id int64) (*DKIMKey, error) { + row := d.QueryRow(`SELECT id, domain_id, selector, private_key, public_key, is_active, created_at, replaced_at + FROM esrv_dkim_keys WHERE id = ?`, id) + return scanDKIMKey(row) +} + +func scanDKIMKey(row *sql.Row) (*DKIMKey, error) { + var k DKIMKey + var createdAt string + var replacedAt sql.NullString + if err := row.Scan(&k.ID, &k.DomainID, &k.Selector, &k.PrivateKey, &k.PublicKey, &k.IsActive, &createdAt, &replacedAt); err != nil { + if errors.Is(err, sql.ErrNoRows) { + return nil, nil + } + return nil, err + } + k.CreatedAt, _ = parseTime(createdAt) + if replacedAt.Valid { + t, _ := parseTime(replacedAt.String) + k.ReplacedAt = &t + } + return &k, nil +} diff --git a/internal/db/crud_admin.go b/internal/db/crud_admin.go new file mode 100644 index 0000000..b02d76e --- /dev/null +++ b/internal/db/crud_admin.go @@ -0,0 +1,328 @@ +package db + +import ( + "crypto/rand" + "database/sql" + "encoding/hex" + "errors" + "time" +) + +const adminUserColumns = `id, username, password_hash, must_change_password, totp_secret, totp_enabled, is_global_admin, created_by, created_at` + +func scanAdminUser(row *sql.Row) (*AdminUser, error) { + var u AdminUser + var createdAt string + var createdBy sql.NullInt64 + if err := row.Scan(&u.ID, &u.Username, &u.PasswordHash, &u.MustChangePassword, &u.TOTPSecret, &u.TOTPEnabled, &u.IsGlobalAdmin, &createdBy, &createdAt); err != nil { + if errors.Is(err, sql.ErrNoRows) { + return nil, nil + } + return nil, err + } + u.CreatedAt, _ = parseTime(createdAt) + if createdBy.Valid { + u.CreatedBy = &createdBy.Int64 + } + return &u, nil +} + +func (d *DB) CountAdminUsers() (int, error) { + var n int + err := d.QueryRow(`SELECT COUNT(*) FROM esrv_admin_users`).Scan(&n) + return n, err +} + +// DefaultAdminUsername/Password are the seeded first-run credentials — the admin is +// forced to change both before they can use the rest of the dashboard (see +// AdminUser.MustChangePassword and the login flow). +const ( + DefaultAdminUsername = "admin" + DefaultAdminPassword = "Password123!" +) + +// SeedDefaultAdminIfEmpty creates the default admin account on a brand-new install +// (no admin users yet at all) with must_change_password set, so the default +// credentials can never be left in place silently. +func (d *DB) SeedDefaultAdminIfEmpty() error { + n, err := d.CountAdminUsers() + if err != nil { + return err + } + if n > 0 { + return nil + } + hash, err := HashPassword(DefaultAdminPassword) + if err != nil { + return err + } + _, err = d.CreateAdminUser(DefaultAdminUsername, hash, true) + return err +} + +// CreateAdminUser inserts a new global-admin account (full access, no domain +// restriction). mustChangePassword should be true for the seeded default account so +// it can't keep running on default credentials. +func (d *DB) CreateAdminUser(username, passwordHash string, mustChangePassword bool) (int64, error) { + res, err := d.Exec(`INSERT INTO esrv_admin_users (username, password_hash, must_change_password, is_global_admin) VALUES (?, ?, ?, 1)`, + username, passwordHash, mustChangePassword) + if err != nil { + return 0, err + } + return res.LastInsertId() +} + +// CreateScopedAdminUser inserts a new domain-scoped admin (delegated access), owned by +// createdBy, and grants it access to exactly domainIDs — mirrors the delegation flow: +// a scoped admin can create other scoped admins limited to domains within their own. +func (d *DB) CreateScopedAdminUser(username, passwordHash string, createdBy int64, domainIDs []int64) (int64, error) { + tx, err := d.Begin() + if err != nil { + return 0, err + } + defer tx.Rollback() + + res, err := tx.Exec(`INSERT INTO esrv_admin_users (username, password_hash, must_change_password, is_global_admin, created_by) VALUES (?, ?, 1, 0, ?)`, + username, passwordHash, createdBy) + if err != nil { + return 0, err + } + id, err := res.LastInsertId() + if err != nil { + return 0, err + } + for _, domainID := range domainIDs { + if _, err := tx.Exec(`INSERT INTO esrv_admin_domain_access (admin_user_id, domain_id) VALUES (?, ?)`, id, domainID); err != nil { + return 0, err + } + } + return id, tx.Commit() +} + +// ListAllAdminUsers returns every admin account — for a global admin's user-management +// view. +func (d *DB) ListAllAdminUsers() ([]AdminUser, error) { + rows, err := d.Query(`SELECT ` + adminUserColumns + ` FROM esrv_admin_users ORDER BY username`) + if err != nil { + return nil, err + } + return scanAdminUsers(rows) +} + +// ListScopedAdminUsers returns every non-global admin. Combined with AccessibleDomainIDs +// per user, this lets the caller compute "which of these can I (a scoped admin) +// manage" — the subset check happens in Go since the admin counts here are always +// small (a handful of delegated accounts, not enterprise scale). +func (d *DB) ListScopedAdminUsers() ([]AdminUser, error) { + rows, err := d.Query(`SELECT ` + adminUserColumns + ` FROM esrv_admin_users WHERE is_global_admin = 0 ORDER BY username`) + if err != nil { + return nil, err + } + return scanAdminUsers(rows) +} + +func scanAdminUsers(rows *sql.Rows) ([]AdminUser, error) { + defer rows.Close() + var out []AdminUser + for rows.Next() { + var u AdminUser + var createdAt string + var createdBy sql.NullInt64 + if err := rows.Scan(&u.ID, &u.Username, &u.PasswordHash, &u.MustChangePassword, &u.TOTPSecret, &u.TOTPEnabled, &u.IsGlobalAdmin, &createdBy, &createdAt); err != nil { + return nil, err + } + u.CreatedAt, _ = parseTime(createdAt) + if createdBy.Valid { + u.CreatedBy = &createdBy.Int64 + } + out = append(out, u) + } + return out, rows.Err() +} + +// AccessibleDomainIDs returns the domains a scoped admin can see/manage. Meaningless +// for a global admin (they can access everything regardless of this table). +func (d *DB) AccessibleDomainIDs(userID int64) ([]int64, error) { + rows, err := d.Query(`SELECT domain_id FROM esrv_admin_domain_access WHERE admin_user_id = ?`, userID) + if err != nil { + return nil, err + } + defer rows.Close() + var out []int64 + for rows.Next() { + var id int64 + if err := rows.Scan(&id); err != nil { + return nil, err + } + out = append(out, id) + } + return out, rows.Err() +} + +// GrantDomainAccess mirrors auto-assigning a newly-created domain to the scoped admin +// who created it. +func (d *DB) GrantDomainAccess(userID, domainID int64) error { + _, err := d.Exec(`INSERT OR IGNORE INTO esrv_admin_domain_access (admin_user_id, domain_id) VALUES (?, ?)`, userID, domainID) + return err +} + +// SetAdminDomainAccess replaces a scoped admin's entire domain assignment set. +func (d *DB) SetAdminDomainAccess(userID int64, domainIDs []int64) error { + tx, err := d.Begin() + if err != nil { + return err + } + defer tx.Rollback() + if _, err := tx.Exec(`DELETE FROM esrv_admin_domain_access WHERE admin_user_id = ?`, userID); err != nil { + return err + } + for _, id := range domainIDs { + if _, err := tx.Exec(`INSERT INTO esrv_admin_domain_access (admin_user_id, domain_id) VALUES (?, ?)`, userID, id); err != nil { + return err + } + } + return tx.Commit() +} + +// DeleteAdminUser removes an admin account and everything tied to it. +func (d *DB) DeleteAdminUser(id int64) error { + tx, err := d.Begin() + if err != nil { + return err + } + defer tx.Rollback() + for _, stmt := range []string{ + `DELETE FROM esrv_admin_domain_access WHERE admin_user_id = ?`, + `DELETE FROM esrv_admin_sessions WHERE user_id = ?`, + `DELETE FROM esrv_webauthn_credentials WHERE user_id = ?`, + `DELETE FROM esrv_admin_users WHERE id = ?`, + } { + if _, err := tx.Exec(stmt, id); err != nil { + return err + } + } + return tx.Commit() +} + +func (d *DB) GetAdminUserByUsername(username string) (*AdminUser, error) { + row := d.QueryRow(`SELECT `+adminUserColumns+` FROM esrv_admin_users WHERE lower(username) = lower(?)`, username) + return scanAdminUser(row) +} + +func (d *DB) GetAdminUserByID(id int64) (*AdminUser, error) { + row := d.QueryRow(`SELECT `+adminUserColumns+` FROM esrv_admin_users WHERE id = ?`, id) + return scanAdminUser(row) +} + +// UpdateAdminCredentials mirrors the forced first-login change: new username, +// password hash, and clears must_change_password in one step. +func (d *DB) UpdateAdminCredentials(id int64, username, passwordHash string) error { + _, err := d.Exec(`UPDATE esrv_admin_users SET username = ?, password_hash = ?, must_change_password = 0 WHERE id = ?`, username, passwordHash, id) + return err +} + +func (d *DB) UpdateAdminPassword(id int64, passwordHash string) error { + _, err := d.Exec(`UPDATE esrv_admin_users SET password_hash = ? WHERE id = ?`, passwordHash, id) + return err +} + +func (d *DB) SetAdminTOTPSecret(id int64, secret string, enabled bool) error { + _, err := d.Exec(`UPDATE esrv_admin_users SET totp_secret = ?, totp_enabled = ? WHERE id = ?`, secret, enabled, id) + return err +} + +func (d *DB) DisableAdminTOTP(id int64) error { + _, err := d.Exec(`UPDATE esrv_admin_users SET totp_secret = '', totp_enabled = 0 WHERE id = ?`, id) + return err +} + +// --- Sessions --- + +func newSessionToken() string { + b := make([]byte, 32) + rand.Read(b) + return hex.EncodeToString(b) +} + +// CreateSession mirrors starting a new login session; mfaVerified should be true only +// when the account has no second factor enabled (nothing left to verify) or the second +// factor was just satisfied. +func (d *DB) CreateSession(userID int64, mfaVerified bool, ttl time.Duration) (string, error) { + token := newSessionToken() + _, err := d.Exec(`INSERT INTO esrv_admin_sessions (token, user_id, mfa_verified, expires_at) VALUES (?, ?, ?, ?)`, + token, userID, mfaVerified, time.Now().Add(ttl)) + if err != nil { + return "", err + } + return token, nil +} + +func (d *DB) GetSession(token string) (*AdminSession, error) { + row := d.QueryRow(`SELECT token, user_id, mfa_verified, created_at, expires_at FROM esrv_admin_sessions WHERE token = ?`, token) + var s AdminSession + var createdAt, expiresAt string + if err := row.Scan(&s.Token, &s.UserID, &s.MFAVerified, &createdAt, &expiresAt); err != nil { + if errors.Is(err, sql.ErrNoRows) { + return nil, nil + } + return nil, err + } + s.CreatedAt, _ = parseTime(createdAt) + s.ExpiresAt, _ = parseTime(expiresAt) + return &s, nil +} + +func (d *DB) MarkSessionMFAVerified(token string) error { + _, err := d.Exec(`UPDATE esrv_admin_sessions SET mfa_verified = 1 WHERE token = ?`, token) + return err +} + +func (d *DB) DeleteSession(token string) error { + _, err := d.Exec(`DELETE FROM esrv_admin_sessions WHERE token = ?`, token) + return err +} + +// DeleteExpiredSessions is a lightweight best-effort sweep, called opportunistically +// rather than on a schedule — this admin UI has at most a handful of sessions ever. +func (d *DB) DeleteExpiredSessions() error { + _, err := d.Exec(`DELETE FROM esrv_admin_sessions WHERE expires_at < ?`, time.Now()) + return err +} + +// --- WebAuthn credentials --- + +func (d *DB) ListWebAuthnCredentials(userID int64) ([]WebAuthnCredential, error) { + rows, err := d.Query(`SELECT id, user_id, name, credential_id, credential_data, created_at FROM esrv_webauthn_credentials WHERE user_id = ? ORDER BY created_at`, userID) + if err != nil { + return nil, err + } + defer rows.Close() + var out []WebAuthnCredential + for rows.Next() { + var c WebAuthnCredential + var createdAt string + if err := rows.Scan(&c.ID, &c.UserID, &c.Name, &c.CredentialID, &c.CredentialData, &createdAt); err != nil { + return nil, err + } + c.CreatedAt, _ = parseTime(createdAt) + out = append(out, c) + } + return out, rows.Err() +} + +func (d *DB) CreateWebAuthnCredential(userID int64, name, credentialID, credentialData string) error { + _, err := d.Exec(`INSERT INTO esrv_webauthn_credentials (user_id, name, credential_id, credential_data) VALUES (?, ?, ?, ?)`, + userID, name, credentialID, credentialData) + return err +} + +func (d *DB) DeleteWebAuthnCredential(id, userID int64) error { + _, err := d.Exec(`DELETE FROM esrv_webauthn_credentials WHERE id = ? AND user_id = ?`, id, userID) + return err +} + +func (d *DB) CountWebAuthnCredentials(userID int64) (int, error) { + var n int + err := d.QueryRow(`SELECT COUNT(*) FROM esrv_webauthn_credentials WHERE user_id = ?`, userID).Scan(&n) + return n, err +} diff --git a/internal/db/crud_counts.go b/internal/db/crud_counts.go new file mode 100644 index 0000000..f426be5 --- /dev/null +++ b/internal/db/crud_counts.go @@ -0,0 +1,19 @@ +package db + +func (d *DB) CountSendersForDomain(domainID int64) (int, error) { + var n int + err := d.QueryRow(`SELECT COUNT(*) FROM esrv_senders WHERE domain_id = ?`, domainID).Scan(&n) + return n, err +} + +func (d *DB) HasActiveDKIMForDomain(domainID int64) (bool, error) { + var n int + err := d.QueryRow(`SELECT COUNT(*) FROM esrv_dkim_keys WHERE domain_id = ? AND is_active = 1`, domainID).Scan(&n) + return n > 0, err +} + +func (d *DB) HasAnyDKIMForDomain(domainID int64) (bool, error) { + var n int + err := d.QueryRow(`SELECT COUNT(*) FROM esrv_dkim_keys WHERE domain_id = ?`, domainID).Scan(&n) + return n > 0, err +} diff --git a/internal/db/crud_dkim.go b/internal/db/crud_dkim.go new file mode 100644 index 0000000..1765ef6 --- /dev/null +++ b/internal/db/crud_dkim.go @@ -0,0 +1,86 @@ +package db + +type DKIMKeyWithDomain struct { + DKIMKey + DomainName string +} + +func (d *DB) ListActiveDKIMKeysWithDomain() ([]DKIMKeyWithDomain, error) { + rows, err := d.Query(`SELECT k.id, k.domain_id, k.selector, k.private_key, k.public_key, k.is_active, k.created_at, k.replaced_at, dm.domain_name + FROM esrv_dkim_keys k JOIN esrv_domains dm ON dm.id = k.domain_id WHERE k.is_active = 1 ORDER BY dm.domain_name`) + if err != nil { + return nil, err + } + defer rows.Close() + return scanDKIMKeysWithDomain(rows) +} + +func (d *DB) ListInactiveDKIMKeysWithDomain() ([]DKIMKeyWithDomain, error) { + rows, err := d.Query(`SELECT k.id, k.domain_id, k.selector, k.private_key, k.public_key, k.is_active, k.created_at, k.replaced_at, dm.domain_name + FROM esrv_dkim_keys k JOIN esrv_domains dm ON dm.id = k.domain_id WHERE k.is_active = 0 + ORDER BY dm.domain_name, (k.replaced_at IS NULL), k.replaced_at DESC, k.created_at DESC`) + if err != nil { + return nil, err + } + defer rows.Close() + return scanDKIMKeysWithDomain(rows) +} + +func scanDKIMKeysWithDomain(rows interface { + Next() bool + Scan(...any) error + Err() error +}) ([]DKIMKeyWithDomain, error) { + var out []DKIMKeyWithDomain + for rows.Next() { + var k DKIMKeyWithDomain + var createdAt string + var replacedAt *string + if err := rows.Scan(&k.ID, &k.DomainID, &k.Selector, &k.PrivateKey, &k.PublicKey, &k.IsActive, &createdAt, &replacedAt, &k.DomainName); err != nil { + return nil, err + } + k.CreatedAt, _ = parseTime(createdAt) + if replacedAt != nil { + t, _ := parseTime(*replacedAt) + k.ReplacedAt = &t + } + out = append(out, k) + } + return out, rows.Err() +} + +func (d *DB) CountActiveDKIMKeys() (int, error) { + var n int + err := d.QueryRow(`SELECT COUNT(*) FROM esrv_dkim_keys WHERE is_active = 1`).Scan(&n) + return n, err +} + +func (d *DB) DeactivateActiveDKIMKeysForDomain(domainID int64, replacedAt any) error { + _, err := d.Exec(`UPDATE esrv_dkim_keys SET is_active = 0, replaced_at = ? WHERE domain_id = ? AND is_active = 1`, replacedAt, domainID) + return err +} + +func (d *DB) SetDKIMKeyActive(id int64, active bool, replacedAt any) error { + if active { + _, err := d.Exec(`UPDATE esrv_dkim_keys SET is_active = 1, replaced_at = NULL WHERE id = ?`, id) + return err + } + _, err := d.Exec(`UPDATE esrv_dkim_keys SET is_active = 0, replaced_at = ? WHERE id = ?`, replacedAt, id) + return err +} + +func (d *DB) UpdateDKIMKeySelector(id int64, selector string) error { + _, err := d.Exec(`UPDATE esrv_dkim_keys SET selector = ? WHERE id = ?`, selector, id) + return err +} + +func (d *DB) SelectorExistsForDomain(domainID int64, selector string, excludeID int64) (bool, error) { + var n int + err := d.QueryRow(`SELECT COUNT(*) FROM esrv_dkim_keys WHERE domain_id = ? AND selector = ? AND is_active = 1 AND id != ?`, domainID, selector, excludeID).Scan(&n) + return n > 0, err +} + +func (d *DB) RemoveDKIMKey(id int64) error { + _, err := d.Exec(`DELETE FROM esrv_dkim_keys WHERE id = ?`, id) + return err +} diff --git a/internal/db/crud_domains.go b/internal/db/crud_domains.go new file mode 100644 index 0000000..ae2d88c --- /dev/null +++ b/internal/db/crud_domains.go @@ -0,0 +1,132 @@ +package db + +import ( + "crypto/rand" + "encoding/hex" + "time" +) + +func (d *DB) ListDomains() ([]Domain, error) { + rows, err := d.Query(`SELECT ` + domainColumns + ` FROM esrv_domains ORDER BY domain_name`) + if err != nil { + return nil, err + } + defer rows.Close() + var out []Domain + for rows.Next() { + var dm Domain + var createdAt string + var verifiedAt *string + if err := rows.Scan(&dm.ID, &dm.DomainName, &dm.IsActive, &createdAt, &dm.VerificationToken, &dm.IsVerified, &verifiedAt); err != nil { + return nil, err + } + dm.CreatedAt, _ = parseTime(createdAt) + if verifiedAt != nil { + t, _ := parseTime(*verifiedAt) + dm.VerifiedAt = &t + } + out = append(out, dm) + } + return out, rows.Err() +} + +// ListActiveDomains mirrors the `domains` query used to populate + +
+ + +
At least 10 characters, with a letter, a number, and a symbol.
+
+
+ + +
+ + + + + + +
+
+
Authenticator App (TOTP)
+
+ {{if .user.TOTPEnabled}} +

Enabled

+
+ +
+ {{else}} +

Not enabled. Add an authenticator app (Google Authenticator, 1Password, etc.) as an optional second factor.

+
+ +
+ {{end}} +
+
+ +
+
Passkeys / Security Keys
+
+ {{if .passkeys}} +
    + {{range .passkeys}} +
  • + {{.Name}} added {{strftime "%Y-%m-%d" .CreatedAt}} +
    + +
    +
  • + {{end}} +
+ {{else}} +

No passkeys registered yet.

+ {{end}} +
+ +
+
+
+ +{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/add_admin.html b/internal/webui/templates/add_admin.html new file mode 100644 index 0000000..90f0219 --- /dev/null +++ b/internal/webui/templates/add_admin.html @@ -0,0 +1,66 @@ +{{define "title"}}Add Admin{{end}} +{{define "page_title"}}Add Admin{{end}} + +{{define "content"}} +
+
+
+
Add a new admin
+
+
+
+ + +
+
+ + +
At least 10 characters, with a letter, a number, and a symbol. They'll be asked to change it on first login.
+
+ + {{if .can_grant_global}} +
+
+ + +
Full access to every domain, sender, and setting — same as your own account. Leave unchecked to scope this admin to specific domains below.
+
+
+ {{end}} + +
+ + {{if .domains}} +
+ {{range .domains}} +
+ + +
+ {{end}} +
+ {{else}} +

You don't manage any domains yet to delegate.

+ {{end}} +
+ +
+ Back + +
+
+
+
+
+
+{{end}} + +{{define "extra_js"}} +{{if .can_grant_global}} + +{{end}} +{{end}} diff --git a/internal/webui/templates/add_domain.html b/internal/webui/templates/add_domain.html new file mode 100644 index 0000000..357fb53 --- /dev/null +++ b/internal/webui/templates/add_domain.html @@ -0,0 +1,46 @@ +{{define "title"}}Add Domain - Email Server Management{{end}} +{{define "page_title"}}Add New Domain{{end}} + +{{define "content"}} +
+
+
+
Add New Domain
+
+
+
+ + +
Enter the domain name that will be used for sending emails (e.g., example.com)
+
+
+
What happens next?
+
    +
  • Domain will be added to the system
  • +
  • DKIM key pair will be automatically generated
  • +
  • You'll need to configure DNS records
  • +
  • Add users or whitelist IPs for authentication
  • +
+
+
+ Back to Domains + +
+
+
+
+
+
+{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/add_ip.html b/internal/webui/templates/add_ip.html new file mode 100644 index 0000000..c95a134 --- /dev/null +++ b/internal/webui/templates/add_ip.html @@ -0,0 +1,99 @@ +{{define "title"}}Add IP Address - Email Server{{end}} + +{{define "content"}} +
+
+
+
+
Your Current IP
+
+
Detecting...
+ +
+
+
+
+
+
+
+

Add IP Address to Whitelist

+
+
+
+ + +
IPv4 address that will be allowed to send emails without authentication
+
+
+ + +
This IP will only be able to send emails for the selected domain
+
+
+
+ + +
If enabled, the full message body and attachments will be stored and viewable in logs.
+
+
+
+
Security Note
+
    +
  • Only whitelist trusted IP addresses
  • +
  • This IP can send emails without username/password authentication
  • +
  • The IP is restricted to the selected domain only
  • +
  • Use static IP addresses for reliable access
  • +
+
+
+ Back to IP List + +
+
+
+
+
+
+
+{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/add_sender.html b/internal/webui/templates/add_sender.html new file mode 100644 index 0000000..d89115d --- /dev/null +++ b/internal/webui/templates/add_sender.html @@ -0,0 +1,80 @@ +{{define "title"}}Add Sender - Email Server{{end}} + +{{define "content"}} +
+
+
+
+

Add New Sender

+
+
+
+ +
+ + @ + +
+
The sender always belongs to the domain selected here — this can't be typed as free text, so it can't drift from the domain it's assigned to.
+
+
+ + +
Minimum 6 characters
+
+
+
+ + +
If checked, sender can send emails as any address in their domain. Otherwise, sender can only send as their own email address.
+
+
+
+
+ + +
If enabled, the full message body and attachments will be stored and viewable in logs. Otherwise, only headers and subject are stored.
+
+
+
+
Permission Levels
+
    +
  • Regular Sender: Can only send emails from their own email address
  • +
  • Domain Sender: Can send emails from any address in their domain
  • +
+
+
+ Back to Senders + +
+
+
+
+
+
+
+{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/admins.html b/internal/webui/templates/admins.html new file mode 100644 index 0000000..38cfeb7 --- /dev/null +++ b/internal/webui/templates/admins.html @@ -0,0 +1,62 @@ +{{define "title"}}Manage Admins{{end}} +{{define "page_title"}}Manage Admins{{end}} + +{{define "content"}} +
+

Admins

+ Add Admin +
+ +
+ + Delegated admins can only see and manage the domains you assign them. They can also delegate further, but only for domains within their own assignment. +
+ +
+
All Admins You Manage
+
+ {{if .rows}} +
+ + + + {{range .rows}} + {{$u := .user}} + + + + + + + + {{end}} + +
UsernameRoleDomainsCreatedActions
{{$u.Username}} + {{if $u.IsGlobalAdmin}}Global Admin + {{else}}Scoped Admin{{end}} + + {{if $u.IsGlobalAdmin}}All domains + {{else if .domain_names}}{{range .domain_names}}{{.}}{{end}} + {{else}}None assigned{{end}} + {{strftime "%Y-%m-%d %H:%M" $u.CreatedAt}} +
+ {{if not $u.IsGlobalAdmin}} + + {{end}} +
+ +
+
+
+
+ {{else}} +
+ +

No delegated admins yet

+

Add an admin and assign them the domains they should manage

+ Add Your First Admin +
+ {{end}} +
+
+{{end}} diff --git a/internal/webui/templates/base.html b/internal/webui/templates/base.html new file mode 100644 index 0000000..c1da7da --- /dev/null +++ b/internal/webui/templates/base.html @@ -0,0 +1,217 @@ + + + + + + {{block "title" .}}Email Server Management{{end}} + + + + + + + + + + + {{block "extra_css" .}}{{end}} + + +
+ {{template "sidebar_email.html" .}} + +
+ + +
+ {{range .flashes}} + + {{end}} +
+ +
+ {{block "content" .}}{{end}} +
+
+
+ + + + + + + + + + + + {{block "extra_js" .}}{{end}} + + diff --git a/internal/webui/templates/dashboard.html b/internal/webui/templates/dashboard.html new file mode 100644 index 0000000..6a5ccf0 --- /dev/null +++ b/internal/webui/templates/dashboard.html @@ -0,0 +1,184 @@ +{{define "title"}}Dashboard - Email Server Management{{end}} +{{define "page_title"}}Dashboard{{end}} + +{{define "content"}} +
+ + + + + + +
+
+
+
+
+
Status
+
+ + {{title .health.Status}} +
+ + {{if and (eq .health.Services.smtp_server "running") (eq .health.Services.database "ok")}} + All services running + {{else}} + {{if eq .health.Services.smtp_server "stopped"}}SMTP Server stopped{{end}} + {{if eq .health.Services.database "error"}}Database error{{end}} + {{end}} + +
+
+
+
+
+
+
+ +
+
+
+
+
Recent Email Activity
+ View All +
+
+ {{if .recent_emails}} +
+ + + + {{range .recent_emails}} + + + + + + + + {{end}} + +
TimeFromRecipientsStatusDKIM
{{formatDatetime .CreatedAt}}{{.MailFrom}} +
+ {{if .ToAddress}}
To: {{.ToAddress}}
{{end}} + {{if .CcAddresses}}
CC: {{.CcAddresses}}
{{end}} + {{if .BccAddresses}}
BCC: {{.BccAddresses}}
{{end}} +
+
+ {{if eq .Status "relayed"}} + Sent + {{else if eq .Status "partial"}} + Partial Fail + {{else}} + Failed + {{end}} + + {{if .DKIMSigned}} + {{else}}{{end}} +
+
+ {{else}} +

No email activity yet

+ {{end}} +
+
+
+ +
+
+
+
Recent Auth Activity
+ View All +
+
+ {{if .recent_auths}} +
+ {{range .recent_auths}} +
+
+
+ {{if .Success}}{{else}}{{end}} + {{title .AuthType}} +
+ {{.Identifier}}
+ {{formatDatetime .CreatedAt}} +
+ {{.IPAddress}} +
+ {{end}} +
+ {{else}} +

No authentication activity yet

+ {{end}} +
+
+
+
+ +
+
+
+
Quick Actions
+ +
+
+
+{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/dkim.html b/internal/webui/templates/dkim.html new file mode 100644 index 0000000..06cc055 --- /dev/null +++ b/internal/webui/templates/dkim.html @@ -0,0 +1,290 @@ +{{define "title"}}DKIM Keys - Email Server{{end}} + +{{define "extra_css"}} + +{{end}} + +{{define "content"}} +
+
+

DKIM Key Management

+
+ + +
+
+ + + + {{range .dkim_data}} + {{$domain := .domain}}{{$key := .dkim_key}}{{$slug := dotToDash $domain.domain_name}} +
+
+
+
+
+ + {{$domain.domain_name}} + {{if $key.IsActive}}Active{{else}}Inactive{{end}} +
+
+
+ +
+ Edit +
+ {{if $key.IsActive}} + + {{else}} + + {{end}} +
+
+ +
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+ DKIM DNS Record + Active (DNS not checked) +
+
Name:
{{.dns_record.name}}
+
Type: TXT
+
Value:
{{.dns_record.value}}
+ +
+
+
+ SPF DNS Record + Not checked +
+
Name:
{{$domain.domain_name}}
+
Type: TXT
+ {{if .existing_spf}}
Current SPF:
{{.existing_spf}}
{{end}} +
Recommended SPF:
{{.recommended_spf}}
+ +
+
+
+
+
Key Information
+
+
Selector:
{{$key.Selector}}
+
Created:
{{strftime "%Y-%m-%d %H:%M" $key.CreatedAt}}
+
Server IP:
{{.public_ip}}
+
Status:
{{if $key.IsActive}}Active{{else}}Inactive{{end}}
+
+
+
+
+
+
+ {{end}} + + {{if .old_dkim_data}} +
+

Old DKIM Keys {{len .old_dkim_data}}

+
+

These keys have been replaced or disabled. They are kept for reference and can be permanently removed.

+ {{range .old_dkim_data}} + {{$domain := .domain}}{{$key := .dkim_key}} +
+
+
+
+
{{$domain.domain_name}}{{.status_text}}
+ Selector: {{$key.Selector}} | Created: {{strftime "%Y-%m-%d %H:%M" $key.CreatedAt}} +
+
+
+ +
+
+ +
+
+
+
+
+ {{end}} +
+
+ {{end}} + + {{if not .dkim_data}} +
+
+ +

No DKIM Keys Found

+

Add domains first to automatically generate DKIM keys

+ Add Domain +
+
+ {{end}} +
+ + +{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/domains.html b/internal/webui/templates/domains.html new file mode 100644 index 0000000..bc312ec --- /dev/null +++ b/internal/webui/templates/domains.html @@ -0,0 +1,155 @@ +{{define "title"}}Domains - Email Server Management{{end}} +{{define "page_title"}}Domain Management{{end}} + +{{define "content"}} +
+

Domains

+ Add Domain +
+ +
+
All Domains
+
+ {{if .rows}} +
+ + + + {{range .rows}} + {{$domain := .domain}} + + + + + + + + + + {{end}} + +
Domain NameStatusOwnershipCreatedSendersDKIMActions
{{$domain.DomainName}}
+ {{if $domain.IsActive}}Active + {{else}}Inactive{{end}} + + {{if $domain.IsVerified}} + Verified + {{else}} + Unverified + + {{end}} + {{strftime "%Y-%m-%d %H:%M" $domain.CreatedAt}}{{.sender_count}} senders + {{if .has_active_dkim}} + + + {{else if .has_any_dkim}} + + {{else}} + + {{end}} + +
+ +
+ {{if $domain.IsActive}} + + {{else}} + + {{end}} +
+
+ +
+
+
+
+ {{else}} +
+ +

No domains configured

+

Get started by adding your first domain

+ Add Your First Domain +
+ {{end}} +
+
+ + + + +{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/edit_admin.html b/internal/webui/templates/edit_admin.html new file mode 100644 index 0000000..c48ea2c --- /dev/null +++ b/internal/webui/templates/edit_admin.html @@ -0,0 +1,32 @@ +{{define "title"}}Edit Admin Access{{end}} +{{define "page_title"}}Edit Admin Access{{end}} + +{{define "content"}} +
+
+
+
{{.target.Username}}'s domain access
+
+
+ {{if .domains}} +
+ {{range .domains}} +
+ + +
+ {{end}} +
+ {{else}} +

You don't manage any domains to assign.

+ {{end}} +
+ Back + +
+
+
+
+
+
+{{end}} diff --git a/internal/webui/templates/edit_dkim.html b/internal/webui/templates/edit_dkim.html new file mode 100644 index 0000000..c81a4fa --- /dev/null +++ b/internal/webui/templates/edit_dkim.html @@ -0,0 +1,82 @@ +{{define "title"}}Edit DKIM Selector{{end}} + +{{define "content"}} +
+
+
+
+
+

Edit DKIM Selector

+ Back to DKIM Keys +
+
+
+
+ + +
Please provide a valid selector (letters, numbers, hyphens, and underscores only).
+
The selector is used in DNS records to identify this DKIM key (e.g., "selector._domainkey.{{.domain.DomainName}}")
+
+
+
+
+
Current Information
+

Domain: {{.domain.DomainName}}

+

Current Selector: {{.dkim_key.Selector}}

+

Status: {{if .dkim_key.IsActive}}Active{{else}}Inactive{{end}}

+

Created: {{strftime "%Y-%m-%d %H:%M:%S" .dkim_key.CreatedAt}}

+
+
+
+
+
Important Note
+

Changing the selector will require updating your DNS records to match the new selector name.

+
+
+
+
+ Cancel + +
+
+
+
+ +
+
DNS Record Information
+
+
+
Current DNS Record
+

Name: {{.dkim_key.Selector}}._domainkey.{{.domain.DomainName}}

+

Type: TXT

+
+

Tip: After changing the selector, update your DNS provider to use the new record name. The value stays the same.

+
+
+
+
+
+ + +{{end}} diff --git a/internal/webui/templates/edit_domain.html b/internal/webui/templates/edit_domain.html new file mode 100644 index 0000000..e4e9935 --- /dev/null +++ b/internal/webui/templates/edit_domain.html @@ -0,0 +1,71 @@ +{{define "title"}}Edit Domain{{end}} + +{{define "content"}} +
+
+
+
+
+

Edit Domain

+ Back to Domains +
+
+
+
+ + +
Please provide a valid domain name.
+
Enter a fully qualified domain name (e.g., example.com)
+
+ +
+
+
+
Current Status
+

Status: + {{if .domain.IsActive}}Active{{else}}Inactive{{end}} +

+

Created: {{strftime "%Y-%m-%d %H:%M:%S" .domain.CreatedAt}}

+
+
+
+
+
Note
+

Changing the domain name will affect all associated users, IP addresses, and DKIM keys. Make sure to update your DNS records accordingly.

+
+
+
+ +
+ Cancel + +
+
+
+
+
+
+
+ + +{{end}} diff --git a/internal/webui/templates/edit_ip.html b/internal/webui/templates/edit_ip.html new file mode 100644 index 0000000..2981736 --- /dev/null +++ b/internal/webui/templates/edit_ip.html @@ -0,0 +1,63 @@ +{{define "title"}}Edit IP Whitelist - SMTP Management{{end}} + +{{define "content"}} +
+
+
+
Edit IP Whitelist Entry
+
+
+
+ + +
Enter a single IPv4 address
+
+
+ + +
This IP will be able to send emails for the selected domain
+
+
+
+ + +
If enabled, the full message body and attachments will be stored and viewable in logs.
+
+
+
+ + Cancel +
+
+
+
+
+ +
+
+
Current Configuration
+
+
+
Current IP:
{{.ip_record.IPAddress}}
+
Domain:
+
{{range .domains}}{{if eq .ID $.ip_record.DomainID}}{{.DomainName}}{{end}}{{end}}
+
Status:
+
{{if .ip_record.IsActive}}Active{{else}}Inactive{{end}}
+
Store Message:
+
{{if .ip_record.StoreMessageContent}}Full Message{{else}}Headers Only{{end}}
+
Created:
{{strftime "%Y-%m-%d %H:%M" .ip_record.CreatedAt}}
+
+
+
+
+
+{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/edit_sender.html b/internal/webui/templates/edit_sender.html new file mode 100644 index 0000000..3ba57f5 --- /dev/null +++ b/internal/webui/templates/edit_sender.html @@ -0,0 +1,79 @@ +{{define "title"}}Edit Sender - SMTP Management{{end}} + +{{define "content"}} +
+
+
+
Edit Sender
+
+
+
+ +
+ + @ + +
+
The sender always belongs to the domain selected here.
+
+
+ + +
Only enter a password if you want to change it
+
+
+
+ + +
Allow this sender to send emails using any address within their domain
+
+
+
+
+ + +
If enabled, the full message body and attachments will be stored and viewable in logs.
+
+
+
+ + Cancel +
+
+
+
+
+ +
+
+
Current Sender Details
+
+
+
Email:
{{.sender.Email}}
+
Domain:
+
{{range .domains}}{{if eq .ID $.sender.DomainID}}{{.DomainName}}{{end}}{{end}}
+
Status:
+
{{if .sender.IsActive}}Active{{else}}Inactive{{end}}
+
Domain Sender:
+
{{if .sender.CanSendAsDomain}}Yes{{else}}No{{end}}
+
Store Message:
+
{{if .sender.StoreMessageContent}}Full Message{{else}}Headers Only{{end}}
+
Created:
{{strftime "%Y-%m-%d %H:%M" .sender.CreatedAt}}
+
+
+
+
+
+{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/error.html b/internal/webui/templates/error.html new file mode 100644 index 0000000..a325d50 --- /dev/null +++ b/internal/webui/templates/error.html @@ -0,0 +1,66 @@ +{{define "title"}}Error - SMTP Management{{end}} + +{{define "content"}} +
+
+
+
+
+ +
Error Occurred
+
+
+
+ {{if .error_code}} +
+
Error Code:
+
{{.error_code}}
+
+ {{end}} + + {{if .error_message}} +
+
Message:
+
{{.error_message}}
+
+ {{end}} + + {{if .error_details}} +
+
Details:
+
+
+
{{.error_details}}
+
+
+
+ {{end}} + +
+
Timestamp:
+
{{if .current_time}}{{strftime "%Y-%m-%d %H:%M:%S" .current_time}}{{else}}Unknown{{end}}
+
+ +
+
Request URL:
+
{{dget . "request_url"}}
+
+
+ +
+
+
+{{end}} diff --git a/internal/webui/templates/first_login.html b/internal/webui/templates/first_login.html new file mode 100644 index 0000000..0cd4331 --- /dev/null +++ b/internal/webui/templates/first_login.html @@ -0,0 +1,37 @@ +{{define "title"}}Set up your account{{end}} +{{define "page_title"}}Set up your account{{end}} + +{{define "content"}} +
+
+
+ + You're signed in with the default admin account. Choose a new username and password before continuing. +
+
+
Choose your credentials
+
+ {{if .error}}
{{.error}}
{{end}} +
+
+ + +
+
+ + +
At least 10 characters, with a letter, a number, and a symbol.
+
+
+ + +
+
+ +
+
+
+
+
+
+{{end}} diff --git a/internal/webui/templates/ips.html b/internal/webui/templates/ips.html new file mode 100644 index 0000000..25acbe1 --- /dev/null +++ b/internal/webui/templates/ips.html @@ -0,0 +1,116 @@ +{{define "title"}}Whitelisted IPs - Email Server{{end}} + +{{define "content"}} +
+
+

Whitelisted IP Addresses

+ Add IP Address +
+ +
+
+
+
Whitelisted IP Addresses
+
+ {{if .ips}} +
+ + + + {{range .ips}} + {{$ip := index . 0}}{{$domain := index . 1}} + + + + + + + + + {{end}} + +
IP AddressDomainStatusStorage TypeAddedActions
{{$ip.IPAddress}}
{{$domain.domain_name}}{{if $ip.IsActive}}Active{{else}}Inactive{{end}}{{if $ip.StoreMessageContent}}Stores Full Message{{else}}Headers Only{{end}}{{strftime "%Y-%m-%d %H:%M" $ip.CreatedAt}} +
+ + {{if $ip.IsActive}} +
+ +
+ {{else}} +
+ +
+ {{end}} +
+ +
+
+
+
+ {{else}} +
+ +

No IP Addresses Whitelisted

+

Add IP addresses to allow authentication without username/password

+ Add First IP Address +
+ {{end}} +
+
+
+ +
+
+
IP Whitelist Information
+
+
+
How IP Whitelisting Works
+
    +
  • Whitelisted IPs can send emails without username/password authentication
  • +
  • Each IP is associated with a specific domain
  • +
  • IP can only send emails for its authorized domain
  • +
  • Useful for server-to-server email sending
  • +
+
+
+
+ +
+
Your Current IP
+
+
+
Detecting...
+ +
+
+
+
+
+
+{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/login.html b/internal/webui/templates/login.html new file mode 100644 index 0000000..225417e --- /dev/null +++ b/internal/webui/templates/login.html @@ -0,0 +1,45 @@ +{{define "login.html"}} + + + + + + Sign in - mailgoserver + + + + + +
+
+ +

mailgoserver

+

Admin Dashboard

+
+
+
+ {{if .error}}
{{.error}}
{{end}} +
+ +
+ + +
+
+ + +
+
+ +
+
+
+
+
+ + +{{end}} diff --git a/internal/webui/templates/login_mfa.html b/internal/webui/templates/login_mfa.html new file mode 100644 index 0000000..415e464 --- /dev/null +++ b/internal/webui/templates/login_mfa.html @@ -0,0 +1,114 @@ +{{define "login_mfa.html"}} + + + + + + Verify it's you - mailgoserver + + + + + +
+
+ +

Verify it's you

+

One more step to finish signing in

+
+
+
+ {{if .error}}
{{.error}}
{{end}} +
+ + {{if .has_passkeys}} +
+ +
+ {{if .totp_enabled}}
or
{{end}} + {{end}} + + {{if .totp_enabled}} +
+ +
+ + +
+
+ +
+
+ {{end}} +
+
+
+ + + + +{{end}} diff --git a/internal/webui/templates/logs.html b/internal/webui/templates/logs.html new file mode 100644 index 0000000..3beecd3 --- /dev/null +++ b/internal/webui/templates/logs.html @@ -0,0 +1,157 @@ +{{define "title"}}Logs - Email Server{{end}} + +{{define "extra_css"}} + +{{end}} + +{{define "content"}} +
+
+

Emails Log

+ +
+ +
+
+
+
+
Recent Activity
+ +
+
+ {{if .logs}} + {{if eq .filter_type "all"}} + {{range .logs}} + {{if eq .type "email"}} + {{$log := .data}} + {{$overall := emailOverallStatus .recipients}} +
+
+
+ EMAIL + {{$log.MailFrom}} + {{if $log.ToAddress}} → To: {{$log.ToAddress}}{{end}} + {{if $log.DKIMSigned}}DKIM{{end}} +
+ {{strftime "%Y-%m-%d %H:%M:%S" $log.Timestamp}} +
+
+
Status: {{if eq $overall "relayed"}}Sent Successfully{{else if eq $overall "partial"}}Partial Fail{{else}}Failed{{end}}
+
Message ID: {{$log.MessageID}}
+
+ {{if $log.Subject}}
Subject: {{$log.Subject}}
{{end}} + +
+ {{else}} + {{$log := .data}} +
+
+
+ AUTH + {{$log.Identifier}} + {{if $log.Success}}Success{{else}}Failed{{end}} +
+ {{formatDatetime $log.CreatedAt}} +
+
+
Type: {{upper $log.AuthType}}
+
IP: {{if $log.IPAddress}}{{$log.IPAddress}}{{else}}N/A{{end}}
+
+ {{if $log.Message}}
Message: {{$log.Message}}
{{end}} +
+ {{end}} + {{end}} + {{else if eq .filter_type "emails"}} + {{$recMap := .recipient_logs_map}} + {{range .logs}} + {{$log := .}} + {{$recs := index $recMap .ID}} + {{$overall := emailOverallStatus $recs}} +
+
+
+ {{.MailFrom}} + {{if .ToAddress}} → To: {{.ToAddress}}{{end}} + {{if .CcAddresses}}
CC: {{.CcAddresses}}{{end}} + {{if .BccAddresses}}
BCC: {{.BccAddresses}}{{end}} + {{if .DKIMSigned}}DKIM{{end}} +
+ {{strftime "%Y-%m-%d %H:%M:%S" .Timestamp}} +
+
+
Status: {{if eq $overall "relayed"}}Sent{{else if eq $overall "partial"}}Partial Fail{{else}}Failed{{end}}
+
Peer: {{.PeerIP}}
+
Message ID: {{.MessageID}}
+
+ {{if $recs}} +
+ Recipient Delivery Results: +
    + {{range $recs}} +
  • + {{upper .RecipientType}}: {{.Recipient}} {{if eq .Status "success"}}Delivered{{else}}Failed{{end}} + {{if or .ErrorCode .ErrorMessage}}{{.ErrorCode}} {{.ErrorMessage}}{{end}} +
  • + {{end}} +
+
+ {{end}} + {{if .Subject}}
Subject: {{.Subject}}
{{end}} + +
+ {{end}} + {{else}} + {{range .logs}} +
+
+
+ {{.Identifier}} + {{if .Success}}Success{{else}}Failed{{end}} +
+ {{formatDatetime .CreatedAt}} +
+
+
Type: {{upper .AuthType}}
+
IP: {{if .IPAddress}}{{.IPAddress}}{{else}}N/A{{end}}
+
Result: {{if .Success}}Authenticated{{else}}Rejected{{end}}
+
+ {{if .Message}}
Details: {{.Message}}
{{end}} +
+ {{end}} + {{end}} + + {{if or .has_prev .has_next}} + + {{end}} + {{else}} +

No Logs Found

+ {{end}} +
+
+
+
+
+{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/senders.html b/internal/webui/templates/senders.html new file mode 100644 index 0000000..edf7ac9 --- /dev/null +++ b/internal/webui/templates/senders.html @@ -0,0 +1,73 @@ +{{define "title"}}Senders - Email Server Management{{end}} +{{define "page_title"}}Sender Management{{end}} + +{{define "content"}} +
+

Senders

+ Add Sender +
+ +
+
All Senders
+
+ {{if .senders}} +
+ + + + {{range .senders}} + {{$sender := index . 0}}{{$domain := index . 1}} + + + + + + + + + + {{end}} + +
EmailDomainPermissionsStatusStorageCreatedActions
{{$sender.Email}}
{{$domain.domain_name}} + {{if $sender.CanSendAsDomain}} + Domain Sender
+ Can send as *@{{$domain.domain_name}} + {{else}} + Regular Sender
+ Can only send as {{$sender.Email}} + {{end}} +
+ {{if $sender.IsActive}}Active + {{else}}Inactive{{end}} + + {{if $sender.StoreMessageContent}}Stores Full Message + {{else}}Headers Only{{end}} + {{strftime "%Y-%m-%d %H:%M" $sender.CreatedAt}} +
+ + {{if $sender.IsActive}} +
+ +
+ {{else}} +
+ +
+ {{end}} +
+ +
+
+
+
+ {{else}} +
+ +

No senders configured

+

Add sender to enable username/password authentication

+ Add Your First Sender +
+ {{end}} +
+
+{{end}} diff --git a/internal/webui/templates/settings.html b/internal/webui/templates/settings.html new file mode 100644 index 0000000..ad3d88e --- /dev/null +++ b/internal/webui/templates/settings.html @@ -0,0 +1,277 @@ +{{define "title"}}Server Settings - Email Server{{end}} + +{{define "extra_css"}} + +{{end}} + +{{define "content"}} +
+
+

Server Settings

+
+ +
+
+ +
+
+
Server Configuration
+
+
+
+
+
Port for plain/IP-whitelisted SMTP connections
+ +
+
+
Port for direct-TLS authenticated SMTP connections
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+
Custom SMTP banner (empty by default)
+ +
+
+
+
+
+ +
+
Database Configuration
+
+
+
+ +
+ + +
+
+
+
+
+ +
+
Logging Configuration
+
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+
Email Relay Configuration
+
+
+
+ +
+
+
+
+ +
+
TLS/SSL Configuration
+
+
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+
+
+ +
+
DKIM Configuration
+
+
+
+ +
+
+
+ + +
+
+
+
+
+ +
+
Attachments Configuration
+
+
+
+ +
Make sure the path exists and is writable by the server process
+
+
+
+
+
+ +
+
Server restart required after changing settings
+ +
+
+
+{{end}} + +{{define "extra_js"}} + +{{end}} diff --git a/internal/webui/templates/sidebar_email.html b/internal/webui/templates/sidebar_email.html new file mode 100644 index 0000000..2064b68 --- /dev/null +++ b/internal/webui/templates/sidebar_email.html @@ -0,0 +1,150 @@ +{{define "sidebar_email.html"}} + + + + + +{{end}} diff --git a/internal/webui/templates/totp_setup.html b/internal/webui/templates/totp_setup.html new file mode 100644 index 0000000..d538979 --- /dev/null +++ b/internal/webui/templates/totp_setup.html @@ -0,0 +1,30 @@ +{{define "title"}}Set up authenticator app{{end}} +{{define "page_title"}}Set up authenticator app{{end}} + +{{define "content"}} +
+
+
+
Scan with your authenticator app
+
+ {{if .qr_data_uri}} + TOTP QR code + {{end}} +

Can't scan? Enter this key manually:

+ {{.secret}} + +
+
+ + +
+
+ Cancel + +
+
+
+
+
+
+{{end}} diff --git a/internal/webui/templates/view_message_content.html b/internal/webui/templates/view_message_content.html new file mode 100644 index 0000000..f752cd5 --- /dev/null +++ b/internal/webui/templates/view_message_content.html @@ -0,0 +1,49 @@ +{{define "title"}}View Full Message - Email Log{{end}} + +{{define "content"}} +
+

Full Message Content

+
+ From: {{.log.mail_from}}
+ To: {{.log.to_address}}
+ CC: {{if .log.cc_addresses}}{{.log.cc_addresses}}{{else}}None{{end}}
+ BCC: {{if .log.bcc_addresses}}{{.log.bcc_addresses}}{{else}}None{{end}}
+ Subject: {{if .log.subject}}{{.log.subject}}{{else}}N/A{{end}}
+ Date: {{strftime "%Y-%m-%d %H:%M:%S" .log.created_at}}
+
+ + {{if .log.attachments}} +
+
Attachments:
+
+
    + {{range .log.attachments}} +
  • +
    {{.Filename}} ({{filesize .Size}})
    +
    + View + Download +
    + +
    +
    +
  • + {{end}} +
+
+
+ {{end}} + +
+
Message Content:
+
{{.log.message_body}}
+
+ +
+
Message Headers:
+
{{.log.email_headers}}
+
+ + Back to Logs +
+{{end}} diff --git a/internal/webui/utils.go b/internal/webui/utils.go new file mode 100644 index 0000000..49e6c02 --- /dev/null +++ b/internal/webui/utils.go @@ -0,0 +1,137 @@ +package webui + +import ( + "context" + "crypto/tls" + "io" + "net" + "net/http" + "strings" + "time" + + "gopkg.in/ini.v1" +) + +// getPublicIP mirrors server_web_ui/utils.py's get_public_ip: try ifconfig.me, then +// httpbin.org, then the configured SPF_SERVER_IP fallback, then 127.0.0.1. +func getPublicIP(cfg *ini.File) string { + client := &http.Client{ + Timeout: 3 * time.Second, + Transport: &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}}, + } + if ip := fetchBody(client, "http://ifconfig.me/ip"); ip != "" { + return strings.TrimSpace(ip) + } + if ip := fetchBody(client, "http://httpbin.org/ip"); ip != "" { + return strings.TrimSpace(ip) + } + fallback := cfg.Section("DKIM").Key("SPF_SERVER_IP").MustString("") + if net.ParseIP(fallback) != nil { + return fallback + } + return "127.0.0.1" +} + +func fetchBody(client *http.Client, url string) string { + resp, err := client.Get(url) + if err != nil { + return "" + } + defer resp.Body.Close() + b, err := io.ReadAll(io.LimitReader(resp.Body, 4096)) + if err != nil { + return "" + } + return string(b) +} + +// resolverAt builds a resolver pinned to a specific DNS server, mirroring +// utils.check_dns_record's hardcoded Cloudflare resolver (1.1.1.1), 5s timeout. +func resolverAt(serverIP string) *net.Resolver { + return &net.Resolver{ + PreferGo: true, + Dial: func(ctx context.Context, network, address string) (net.Conn, error) { + d := net.Dialer{Timeout: 5 * time.Second} + return d.DialContext(ctx, network, net.JoinHostPort(serverIP, "53")) + }, + } +} + +var pinnedResolver = resolverAt("1.1.1.1") + +type dnsCheckResult struct { + Success bool + Message string + Records []string +} + +// checkDNSRecord mirrors utils.check_dns_record for TXT lookups. +func checkDNSRecord(domain string) dnsCheckResult { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + recs, err := pinnedResolver.LookupTXT(ctx, domain) + if err != nil { + return dnsCheckResult{Success: false, Message: err.Error()} + } + if len(recs) == 0 { + return dnsCheckResult{Success: false, Message: "No TXT records found"} + } + return dnsCheckResult{Success: true, Records: recs} +} + +// verificationRecordName is the DNS TXT record name a domain's ownership proof lives +// at, e.g. "_pymta-verify.example.com". +func verificationRecordName(domain string) string { + return "_pymta-verify." + domain +} + +func verificationRecordValue(token string) string { + return "pymta-verify=" + token +} + +// checkDomainOwnership looks up the verification TXT record via two independent public +// resolvers (1.1.1.1 and 8.8.8.8, per the user's requirement) and considers the domain +// verified if the expected token shows up via either — a domain that's genuinely been +// updated can otherwise show as unverified for a while against whichever resolver has +// a stale cache, so requiring both to agree at the same instant would be a flaky check. +func checkDomainOwnership(domain, token string) (verified bool, checkedRecords []string, err error) { + recordName := verificationRecordName(domain) + expected := verificationRecordValue(token) + + var lastErr error + for _, resolverIP := range []string{"1.1.1.1", "8.8.8.8"} { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + recs, lookupErr := resolverAt(resolverIP).LookupTXT(ctx, recordName) + cancel() + if lookupErr != nil { + lastErr = lookupErr + continue + } + checkedRecords = append(checkedRecords, recs...) + for _, r := range recs { + if strings.TrimSpace(r) == expected { + return true, checkedRecords, nil + } + } + } + if len(checkedRecords) == 0 && lastErr != nil { + return false, nil, lastErr + } + return false, checkedRecords, nil +} + +// generateSPFRecord mirrors utils.generate_spf_record. +func generateSPFRecord(serverIP, existingSPF string) string { + if existingSPF == "" { + return "v=spf1 ip4:" + serverIP + " ~all" + } + if strings.Contains(existingSPF, "ip4:"+serverIP) { + return existingSPF + } + for _, all := range []string{"-all", "~all", "all"} { + if idx := strings.LastIndex(existingSPF, all); idx >= 0 { + return strings.TrimSpace(existingSPF[:idx]) + " ip4:" + serverIP + " " + all + } + } + return existingSPF + " ip4:" + serverIP + " ~all" +} diff --git a/internal/webui/view_message.go b/internal/webui/view_message.go new file mode 100644 index 0000000..c0d89f7 --- /dev/null +++ b/internal/webui/view_message.go @@ -0,0 +1,147 @@ +package webui + +import ( + "net/http" + "os" + "strings" + + "mailgoserver/internal/db" +) + +// emailLogAccessible checks a scoped admin's domain assignment against the sender +// domain of an email log's MAIL FROM address — these logs predate per-domain admin +// scoping and have no domain_id column, so this is the same text-domain heuristic as +// accessibleDomainNames/emailDomain, not a foreign key. +func (a *App) emailLogAccessible(r *http.Request, mailFrom string) (bool, error) { + names, isGlobal, err := a.accessibleDomainNames(r) + if err != nil { + return false, err + } + return isGlobal || names[emailDomain(mailFrom)], nil +} + +// viewMessageContent mirrors view_message.py's view_message_content(). +func (a *App) viewMessageContent(w http.ResponseWriter, r *http.Request) { + log, err := a.DB.GetEmailLogByID(pathID(r)) + if err != nil || log == nil { + http.NotFound(w, r) + return + } + if ok, err := a.emailLogAccessible(r, log.MailFrom); err != nil || !ok { + http.NotFound(w, r) + return + } + attachments, _ := a.DB.ListAttachmentsForEmail(log.ID) + a.render(w, r, "view_message_content.html", M{"active": "logs", "log": M{ + "id": log.ID, "mail_from": log.MailFrom, "to_address": log.ToAddress, + "cc_addresses": log.CcAddresses, "bcc_addresses": log.BccAddresses, + "subject": log.Subject, "created_at": log.CreatedAt, "message_body": log.MessageBody, + "email_headers": log.EmailHeaders, "attachments": attachments, + }}) +} + +var extContentType = map[string]string{ + ".txt": "text/plain", ".csv": "text/csv", ".pdf": "application/pdf", + ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".png": "image/png", ".gif": "image/gif", + ".svg": "image/svg+xml", ".html": "text/html", ".htm": "text/html", + ".json": "application/json", ".xml": "application/xml", ".md": "text/markdown", +} + +// downloadAttachment mirrors view_message.py's download_attachment(), including its +// CSV-to-HTML-table inline preview special case. +func (a *App) downloadAttachment(w http.ResponseWriter, r *http.Request) { + att, err := a.DB.GetAttachmentByID(pathID(r)) + if err != nil || att == nil { + http.NotFound(w, r) + return + } + if !a.attachmentAccessible(w, r, att) { + return + } + if _, err := os.Stat(att.FilePath); err != nil { + setFlash(w, "error", "Attachment file not found on disk") + http.Redirect(w, r, Prefix+"/logs?type=emails", http.StatusFound) + return + } + + contentType := att.ContentType + if contentType == "" || contentType == "application/octet-stream" { + if ext := extOfName(att.Filename); ext != "" { + if ct, ok := extContentType[ext]; ok { + contentType = ct + } + } + } + asAttachment := r.URL.Query().Get("download") == "true" + + if contentType == "text/csv" && !asAttachment { + data, err := os.ReadFile(att.FilePath) + if err != nil { + http.Error(w, "read error", http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.Write([]byte("")) + for _, line := range strings.Split(string(data), "\n") { + w.Write([]byte("")) + for _, cell := range strings.Split(line, ",") { + w.Write([]byte("")) + } + w.Write([]byte("")) + } + w.Write([]byte("
" + template_htmlEscape(cell) + "
")) + return + } + + if asAttachment { + w.Header().Set("Content-Disposition", `attachment; filename="`+att.Filename+`"`) + } + w.Header().Set("Content-Type", contentType) + http.ServeFile(w, r, att.FilePath) +} + +// attachmentAccessible checks the scoped-admin domain restriction against the parent +// email log's sender domain; writes 404 and returns false if disallowed. +func (a *App) attachmentAccessible(w http.ResponseWriter, r *http.Request, att *db.EmailAttachment) bool { + log, err := a.DB.GetEmailLogByID(att.EmailLogID) + if err != nil || log == nil { + http.NotFound(w, r) + return false + } + if ok, err := a.emailLogAccessible(r, log.MailFrom); err != nil || !ok { + http.NotFound(w, r) + return false + } + return true +} + +func extOfName(filename string) string { + if i := strings.LastIndex(filename, "."); i >= 0 { + return strings.ToLower(filename[i:]) + } + return "" +} + +func template_htmlEscape(s string) string { + r := strings.NewReplacer("&", "&", "<", "<", ">", ">") + return r.Replace(s) +} + +// deleteAttachment mirrors view_message.py's delete_attachment(): accepts GET or POST. +func (a *App) deleteAttachment(w http.ResponseWriter, r *http.Request) { + att, err := a.DB.GetAttachmentByID(pathID(r)) + if err != nil || att == nil { + http.NotFound(w, r) + return + } + if !a.attachmentAccessible(w, r, att) { + return + } + os.Remove(att.FilePath) + if err := a.DB.RemoveAttachment(att.ID); err != nil { + setFlash(w, "error", "Error deleting attachment") + } else { + setFlash(w, "success", "Attachment deleted") + } + http.Redirect(w, r, Prefix+"/logs?type=emails", http.StatusFound) +} diff --git a/internal/webui/webauthn.go b/internal/webui/webauthn.go new file mode 100644 index 0000000..23fda2c --- /dev/null +++ b/internal/webui/webauthn.go @@ -0,0 +1,244 @@ +package webui + +import ( + "crypto/sha256" + "encoding/base64" + "encoding/json" + "net/http" + "strconv" + + "github.com/go-webauthn/webauthn/webauthn" + "mailgoserver/internal/db" +) + +// webauthnSessionCookie carries the SessionData between a WebAuthn ceremony's Begin +// and Finish steps — short-lived, httponly, holds no secret beyond the challenge +// itself (which is meaningless without the matching authenticator response). +const webauthnSessionCookie = "mailgoserver_webauthn_session" + +// webauthnUser adapts an AdminUser + their stored credentials to webauthn.User. +type webauthnUser struct { + user *db.AdminUser + creds []db.WebAuthnCredential +} + +func (u *webauthnUser) WebAuthnID() []byte { + sum := sha256.Sum256([]byte("admin-" + strconv.FormatInt(u.user.ID, 10))) + return sum[:] +} +func (u *webauthnUser) WebAuthnName() string { return u.user.Username } +func (u *webauthnUser) WebAuthnDisplayName() string { return u.user.Username } +func (u *webauthnUser) WebAuthnCredentials() []webauthn.Credential { + out := make([]webauthn.Credential, 0, len(u.creds)) + for _, c := range u.creds { + var cred webauthn.Credential + if err := json.Unmarshal([]byte(c.CredentialData), &cred); err == nil { + out = append(out, cred) + } + } + return out +} + +func (a *App) webauthnUserFor(user *db.AdminUser) (*webauthnUser, error) { + creds, err := a.DB.ListWebAuthnCredentials(user.ID) + if err != nil { + return nil, err + } + return &webauthnUser{user: user, creds: creds}, nil +} + +func (a *App) buildWebAuthn() (*webauthn.WebAuthn, error) { + sec := a.Cfg.Section("Auth") + return webauthn.New(&webauthn.Config{ + RPID: sec.Key("rp_id").MustString("localhost"), + RPDisplayName: sec.Key("rp_display_name").MustString("mailgoserver"), + RPOrigins: []string{sec.Key("rp_origin").MustString("http://localhost:5000")}, + }) +} + +func saveWebauthnSession(w http.ResponseWriter, s *webauthn.SessionData) error { + b, err := json.Marshal(s) + if err != nil { + return err + } + http.SetCookie(w, &http.Cookie{ + Name: webauthnSessionCookie, Value: base64.URLEncoding.EncodeToString(b), + Path: "/", HttpOnly: true, SameSite: http.SameSiteLaxMode, MaxAge: 5 * 60, + }) + return nil +} + +func loadWebauthnSession(r *http.Request) (*webauthn.SessionData, error) { + c, err := r.Cookie(webauthnSessionCookie) + if err != nil { + return nil, err + } + raw, err := base64.URLEncoding.DecodeString(c.Value) + if err != nil { + return nil, err + } + var s webauthn.SessionData + if err := json.Unmarshal(raw, &s); err != nil { + return nil, err + } + return &s, nil +} + +func clearWebauthnSession(w http.ResponseWriter) { + http.SetCookie(w, &http.Cookie{Name: webauthnSessionCookie, Value: "", Path: "/", MaxAge: -1}) +} + +// passkeyRegisterBegin starts enrolling a new passkey for the logged-in admin. +func (a *App) passkeyRegisterBegin(w http.ResponseWriter, r *http.Request) { + user := userFromContext(r) + wa, err := a.buildWebAuthn() + if err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": "WebAuthn is not configured correctly: " + err.Error()}) + return + } + wu, err := a.webauthnUserFor(user) + if err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": "Could not load account"}) + return + } + creation, session, err := wa.BeginRegistration(wu) + if err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": err.Error()}) + return + } + if err := saveWebauthnSession(w, session); err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": "Could not start registration"}) + return + } + writeJSON(w, http.StatusOK, creation) +} + +// passkeyRegisterFinish completes enrollment and stores the new credential. +func (a *App) passkeyRegisterFinish(w http.ResponseWriter, r *http.Request) { + user := userFromContext(r) + wa, err := a.buildWebAuthn() + if err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": err.Error()}) + return + } + session, err := loadWebauthnSession(r) + if err != nil { + writeJSON(w, http.StatusBadRequest, M{"error": "Registration session expired — try again"}) + return + } + wu, err := a.webauthnUserFor(user) + if err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": "Could not load account"}) + return + } + cred, err := wa.FinishRegistration(wu, *session, r) + clearWebauthnSession(w) + if err != nil { + writeJSON(w, http.StatusBadRequest, M{"error": err.Error()}) + return + } + data, err := json.Marshal(cred) + if err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": "Could not save passkey"}) + return + } + name := r.URL.Query().Get("name") + if name == "" { + name = "Passkey" + } + if err := a.DB.CreateWebAuthnCredential(user.ID, name, base64.URLEncoding.EncodeToString(cred.ID), string(data)); err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": "Could not save passkey"}) + return + } + writeJSON(w, http.StatusOK, M{"success": true}) +} + +func (a *App) passkeyRemove(w http.ResponseWriter, r *http.Request) { + user := userFromContext(r) + if err := a.DB.DeleteWebAuthnCredential(pathID(r), user.ID); err != nil { + setFlash(w, "error", "Could not remove passkey") + } else { + setFlash(w, "success", "Passkey removed") + } + http.Redirect(w, r, Prefix+"/account", http.StatusFound) +} + +// passkeyLoginBegin starts the passkey ceremony for the user who's already passed +// their password and is now at the MFA step. +func (a *App) passkeyLoginBegin(w http.ResponseWriter, r *http.Request) { + userID := pendingMFAUserID(r) + if userID == 0 { + writeJSON(w, http.StatusUnauthorized, M{"error": "No login in progress"}) + return + } + user, err := a.DB.GetAdminUserByID(userID) + if err != nil || user == nil { + writeJSON(w, http.StatusUnauthorized, M{"error": "No login in progress"}) + return + } + wa, err := a.buildWebAuthn() + if err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": err.Error()}) + return + } + wu, err := a.webauthnUserFor(user) + if err != nil || len(wu.creds) == 0 { + writeJSON(w, http.StatusBadRequest, M{"error": "No passkeys registered"}) + return + } + assertion, session, err := wa.BeginLogin(wu) + if err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": err.Error()}) + return + } + if err := saveWebauthnSession(w, session); err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": "Could not start login"}) + return + } + writeJSON(w, http.StatusOK, assertion) +} + +// passkeyLoginFinish verifies the assertion and, on success, promotes the pending +// login into a fully-verified session — the same outcome as a correct TOTP code. +func (a *App) passkeyLoginFinish(w http.ResponseWriter, r *http.Request) { + userID := pendingMFAUserID(r) + if userID == 0 { + writeJSON(w, http.StatusUnauthorized, M{"error": "No login in progress"}) + return + } + user, err := a.DB.GetAdminUserByID(userID) + if err != nil || user == nil { + writeJSON(w, http.StatusUnauthorized, M{"error": "No login in progress"}) + return + } + wa, err := a.buildWebAuthn() + if err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": err.Error()}) + return + } + session, err := loadWebauthnSession(r) + if err != nil { + writeJSON(w, http.StatusBadRequest, M{"error": "Login session expired — try again"}) + return + } + wu, err := a.webauthnUserFor(user) + if err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": "Could not load account"}) + return + } + if _, err := wa.FinishLogin(wu, *session, r); err != nil { + clearWebauthnSession(w) + writeJSON(w, http.StatusUnauthorized, M{"error": "Passkey verification failed"}) + return + } + clearWebauthnSession(w) + + token, err := a.DB.CreateSession(user.ID, true, sessionTTL) + if err != nil { + writeJSON(w, http.StatusInternalServerError, M{"error": "Could not start session"}) + return + } + clearPendingMFACookie(w) + setSessionCookie(w, token, r.TLS != nil) + writeJSON(w, http.StatusOK, M{"success": true}) +} diff --git a/internal/webui/webui.go b/internal/webui/webui.go new file mode 100644 index 0000000..8003a13 --- /dev/null +++ b/internal/webui/webui.go @@ -0,0 +1,170 @@ +// Package webui is the admin web interface, mirroring email_server/server_web_ui/. +// It's mounted at /pymta-manager, matching the Flask blueprint's url_prefix exactly. +package webui + +import ( + "html/template" + "io/fs" + "net/http" + "time" + + "gopkg.in/ini.v1" + "mailgoserver/internal/db" + "mailgoserver/internal/dkim" + "mailgoserver/internal/toolbox" +) + +const Prefix = "/pymta-manager" + +// App holds every dependency the web routes need, mirroring the module-level +// singletons (Session, DKIMManager, settings) that server_web_ui/*.py imports. +type App struct { + DB *db.DB + DKIM *dkim.Manager + Cfg *ini.File + ConfigPath string + Logger *toolbox.Logger + SMTPUp func() bool // reports whether the SMTP listeners are currently running + + templates map[string]*template.Template +} + +// New builds the web UI. Templates and static assets come from the embedded +// filesystem (embed.go), not disk, so no directory paths are needed for them. +func New(database *db.DB, dkimMgr *dkim.Manager, cfg *ini.File, configPath string, logger *toolbox.Logger, smtpUp func() bool) (*App, error) { + a := &App{DB: database, DKIM: dkimMgr, Cfg: cfg, ConfigPath: configPath, Logger: logger, SMTPUp: smtpUp} + if err := a.loadTemplates(); err != nil { + return nil, err + } + return a, nil +} + +type healthStatus struct { + Status string + Timestamp string + Services map[string]string +} + +// checkHealth mirrors app.py's SMTPServerApp.check_health. +func (a *App) checkHealth() healthStatus { + dbStatus := "ok" + if err := a.DB.Ping(); err != nil { + dbStatus = "error" + } + smtpStatus := "stopped" + if a.SMTPUp != nil && a.SMTPUp() { + smtpStatus = "running" + } + overall := "healthy" + if smtpStatus == "stopped" || dbStatus == "error" { + overall = "degraded" + } + return healthStatus{ + Status: overall, + Timestamp: time.Now().Format(time.RFC3339), + Services: map[string]string{"smtp_server": smtpStatus, "web_frontend": "running", "database": dbStatus}, + } +} + +// Mux builds the *http.ServeMux for the whole admin UI, mirroring routes.py's +// blueprint registration plus every route file's own routes. Everything except +// login/MFA and static assets requires a valid, fully-verified session — see +// requireAuth in auth.go. +func (a *App) Mux() *http.ServeMux { + outer := http.NewServeMux() + + staticFS, err := fs.Sub(assets, "static") + if err != nil { + panic(err) // embed.go's directive is malformed if this ever fails + } + outer.Handle("GET "+Prefix+"/static/", http.StripPrefix(Prefix+"/static/", http.FileServerFS(staticFS))) + + outer.HandleFunc("GET "+Prefix+"/login", a.loginForm) + outer.HandleFunc("POST "+Prefix+"/login", a.loginSubmit) + outer.HandleFunc("GET "+Prefix+"/login/mfa", a.mfaForm) + outer.HandleFunc("POST "+Prefix+"/login/mfa", a.mfaSubmit) + outer.HandleFunc("GET "+Prefix+"/login/passkey/begin", a.passkeyLoginBegin) + outer.HandleFunc("POST "+Prefix+"/login/passkey/finish", a.passkeyLoginFinish) + outer.HandleFunc("POST "+Prefix+"/logout", a.logout) + + mux := http.NewServeMux() + + mux.HandleFunc("GET "+Prefix+"/", a.dashboard) + mux.HandleFunc("GET "+Prefix+"/account", a.accountPage) + mux.HandleFunc("POST "+Prefix+"/account/password", a.changePassword) + mux.HandleFunc("POST "+Prefix+"/account/totp/setup", a.totpSetupBegin) + mux.HandleFunc("POST "+Prefix+"/account/totp/confirm", a.totpSetupConfirm) + mux.HandleFunc("POST "+Prefix+"/account/totp/disable", a.totpDisable) + mux.HandleFunc("POST "+Prefix+"/account/passkey/begin", a.passkeyRegisterBegin) + mux.HandleFunc("POST "+Prefix+"/account/passkey/finish", a.passkeyRegisterFinish) + mux.HandleFunc("POST "+Prefix+"/account/passkey/{id}/remove", a.passkeyRemove) + mux.HandleFunc("GET "+Prefix+"/first-login", a.firstLoginForm) + mux.HandleFunc("POST "+Prefix+"/first-login", a.firstLoginSubmit) + + mux.HandleFunc("GET "+Prefix+"/admins", a.adminsList) + mux.HandleFunc("GET "+Prefix+"/admins/add", a.addAdminForm) + mux.HandleFunc("POST "+Prefix+"/admins/add", a.addAdmin) + mux.HandleFunc("GET "+Prefix+"/admins/{id}/edit", a.editAdminDomainsForm) + mux.HandleFunc("POST "+Prefix+"/admins/{id}/edit", a.editAdminDomains) + mux.HandleFunc("POST "+Prefix+"/admins/{id}/remove", a.removeAdmin) + + mux.HandleFunc("GET "+Prefix+"/domains", a.domainsList) + mux.HandleFunc("GET "+Prefix+"/domains/add", a.addDomainForm) + mux.HandleFunc("POST "+Prefix+"/domains/add", a.addDomain) + mux.HandleFunc("POST "+Prefix+"/domains/{id}/delete", a.toggleDomainOff) + mux.HandleFunc("GET "+Prefix+"/domains/{id}/edit", a.editDomainForm) + mux.HandleFunc("POST "+Prefix+"/domains/{id}/edit", a.editDomain) + mux.HandleFunc("POST "+Prefix+"/domains/{id}/toggle", a.toggleDomain) + mux.HandleFunc("POST "+Prefix+"/domains/{id}/remove", a.removeDomain) + mux.HandleFunc("POST "+Prefix+"/domains/{id}/verify_check", a.verifyDomainCheck) + + mux.HandleFunc("GET "+Prefix+"/senders", a.sendersList) + mux.HandleFunc("GET "+Prefix+"/senders/add", a.addSenderForm) + mux.HandleFunc("POST "+Prefix+"/senders/add", a.addSender) + mux.HandleFunc("POST "+Prefix+"/senders/{id}/delete", a.disableSender) + mux.HandleFunc("POST "+Prefix+"/senders/{id}/enable", a.enableSender) + mux.HandleFunc("POST "+Prefix+"/senders/{id}/remove", a.removeSender) + mux.HandleFunc("GET "+Prefix+"/senders/{id}/edit", a.editSenderForm) + mux.HandleFunc("POST "+Prefix+"/senders/{id}/edit", a.editSender) + + mux.HandleFunc("GET "+Prefix+"/ips", a.ipsList) + mux.HandleFunc("GET "+Prefix+"/ips/add", a.addIPForm) + mux.HandleFunc("POST "+Prefix+"/ips/add", a.addIP) + mux.HandleFunc("POST "+Prefix+"/ips/{id}/delete", a.disableIP) + mux.HandleFunc("POST "+Prefix+"/ips/{id}/enable", a.enableIP) + mux.HandleFunc("POST "+Prefix+"/ips/{id}/remove", a.removeIP) + mux.HandleFunc("GET "+Prefix+"/ips/{id}/edit", a.editIPForm) + mux.HandleFunc("POST "+Prefix+"/ips/{id}/edit", a.editIP) + + mux.HandleFunc("GET "+Prefix+"/dkim", a.dkimList) + mux.HandleFunc("POST "+Prefix+"/dkim/create", a.createDKIM) + mux.HandleFunc("POST "+Prefix+"/dkim/{id}/regenerate", a.regenerateDKIM) + mux.HandleFunc("GET "+Prefix+"/dkim/{id}/edit", a.editDKIMForm) + mux.HandleFunc("POST "+Prefix+"/dkim/{id}/edit", a.editDKIM) + mux.HandleFunc("POST "+Prefix+"/dkim/{id}/toggle", a.toggleDKIM) + mux.HandleFunc("POST "+Prefix+"/dkim/{id}/remove", a.removeDKIM) + mux.HandleFunc("POST "+Prefix+"/dkim/check_dns", a.checkDKIMDNS) + mux.HandleFunc("POST "+Prefix+"/dkim/check_spf", a.checkSPFDNS) + + mux.HandleFunc("GET "+Prefix+"/logs", a.logs) + + mux.HandleFunc("GET "+Prefix+"/settings", a.settingsPage) + mux.HandleFunc("POST "+Prefix+"/settings_update", a.settingsUpdate) + mux.HandleFunc("POST "+Prefix+"/api/settings/test_database", a.testDatabaseConnection) + mux.HandleFunc("POST "+Prefix+"/api/settings/upload_cert", a.uploadCert) + mux.HandleFunc("POST "+Prefix+"/api/settings/upload_key", a.uploadKey) + mux.HandleFunc("GET "+Prefix+"/api/settings/get_public_ip", a.getServerIP) + mux.HandleFunc("POST "+Prefix+"/test_attachments_path", a.testAttachmentsPath) + + mux.HandleFunc("GET "+Prefix+"/msg/content/{id}", a.viewMessageContent) + mux.HandleFunc("GET "+Prefix+"/msg/attachment/{id}/download", a.downloadAttachment) + mux.HandleFunc("GET "+Prefix+"/msg/attachment/{id}/delete", a.deleteAttachment) + mux.HandleFunc("POST "+Prefix+"/msg/attachment/{id}/delete", a.deleteAttachment) + + mux.HandleFunc("GET "+Prefix, func(w http.ResponseWriter, r *http.Request) { + http.Redirect(w, r, Prefix+"/", http.StatusFound) + }) + + outer.Handle(Prefix+"/", a.requireAuth(mux)) + return outer +} diff --git a/internal/webui/webui_test.go b/internal/webui/webui_test.go new file mode 100644 index 0000000..96b7de1 --- /dev/null +++ b/internal/webui/webui_test.go @@ -0,0 +1,215 @@ +package webui + +import ( + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strconv" + "strings" + "testing" + "time" + + "gopkg.in/ini.v1" + "mailgoserver/internal/db" + "mailgoserver/internal/dkim" + "mailgoserver/internal/toolbox" +) + +func newTestApp(t *testing.T) *App { + t.Helper() + dir := t.TempDir() + dbPath := filepath.Join(dir, "test.db") + database, err := db.Open(dbPath) + if err != nil { + t.Fatal(err) + } + t.Cleanup(func() { database.Close() }) + + // Seed one of everything so every page has real data to render. + domainID, err := database.CreateDomain("example.com") + if err != nil { + t.Fatal(err) + } + hash, _ := db.HashPassword("testpass123") + senderID, err := database.CreateSender("test@example.com", hash, domainID, true, true) + if err != nil { + t.Fatal(err) + } + _, err = database.CreateWhitelistedIP("127.0.0.1", domainID, false) + if err != nil { + t.Fatal(err) + } + + dkimMgr := dkim.New(database, 1024) + ok, err := dkimMgr.GenerateDKIMKeypair("example.com", "sel1", false) + if err != nil || !ok { + t.Fatalf("dkim gen: ok=%v err=%v", ok, err) + } + key, err := database.GetActiveDKIMKeyByDomainID(domainID) + if err != nil || key == nil { + t.Fatalf("get active dkim key: %v %v", key, err) + } + + logID, err := database.InsertEmailLog(db.EmailLog{ + MessageID: "abc123@example.com", Timestamp: time.Now(), PeerIP: "127.0.0.1", + MailFrom: "test@example.com", ToAddress: "rcpt@example.org", Subject: "hi", + EmailHeaders: "From: test@example.com\nTo: rcpt@example.org", MessageBody: "hello", + Status: "relayed", DKIMSigned: true, Username: "test@example.com", + }) + if err != nil { + t.Fatal(err) + } + if err := database.InsertEmailRecipientLog(db.EmailRecipientLog{EmailLogID: logID, Recipient: "rcpt@example.org", RecipientType: "to", Status: "success"}); err != nil { + t.Fatal(err) + } + attFile := filepath.Join(dir, "att.txt") + os.WriteFile(attFile, []byte("attachment data"), 0o644) + if err := database.InsertEmailAttachment(db.EmailAttachment{EmailLogID: logID, Filename: "att.txt", ContentType: "text/plain", FilePath: attFile, Size: 15}); err != nil { + t.Fatal(err) + } + if err := database.LogAuthAttempt("sender", "test@example.com", "127.0.0.1", true, "ok"); err != nil { + t.Fatal(err) + } + + cfg := ini.Empty() + serverSec, _ := cfg.NewSection("Server") + serverSec.NewKey("smtp_port", "4025") + serverSec.NewKey("smtp_tls_port", "40465") + serverSec.NewKey("bind_ip", "0.0.0.0") + serverSec.NewKey("time_zone", "UTC") + serverSec.NewKey("hostname", "mail.example.com") + serverSec.NewKey("helo_hostname", "mail.example.com") + serverSec.NewKey("server_banner", "") + dbSec, _ := cfg.NewSection("Database") + dbSec.NewKey("database_url", "sqlite:///server_data/smtp_server.db") + logSec, _ := cfg.NewSection("Logging") + logSec.NewKey("log_level", "INFO") + logSec.NewKey("hide_info_aiosmtpd", "true") + relaySec, _ := cfg.NewSection("Relay") + relaySec.NewKey("relay_timeout", "30") + tlsSec, _ := cfg.NewSection("TLS") + tlsSec.NewKey("tls_cert_file", "ssl_certs/server.crt") + tlsSec.NewKey("tls_key_file", "ssl_certs/server.key") + dkimSec, _ := cfg.NewSection("DKIM") + dkimSec.NewKey("dkim_key_size", "2048") + dkimSec.NewKey("spf_server_ip", "192.168.1.1") + attSec, _ := cfg.NewSection("Attachments") + attSec.NewKey("attachments_path", filepath.Join(dir, "attachments")) + + configPath := filepath.Join(dir, "settings.ini") + cfg.SaveTo(configPath) + + app, err := New(database, dkimMgr, cfg, configPath, toolbox.GetLogger("test"), func() bool { return true }) + if err != nil { + t.Fatalf("New: %v", err) + } + + _ = senderID + _ = key + return app +} + +// loginSession creates a fully-verified admin session (no MFA enrolled) and returns +// its cookie, for tests that need to hit routes behind requireAuth. +func loginSession(t *testing.T, app *App) *http.Cookie { + t.Helper() + hash, err := db.HashPassword("test-password-123!") + if err != nil { + t.Fatal(err) + } + userID, err := app.DB.CreateAdminUser("test-admin", hash, false) + if err != nil { + t.Fatal(err) + } + token, err := app.DB.CreateSession(userID, true, time.Hour) + if err != nil { + t.Fatal(err) + } + return &http.Cookie{Name: sessionCookieName, Value: token} +} + +func TestAllPagesRender(t *testing.T) { + app := newTestApp(t) + mux := app.Mux() + cookie := loginSession(t, app) + + domains, _ := app.DB.ListDomains() + senders, _ := app.DB.ListSenders() + ips, _ := app.DB.ListWhitelistedIPs() + keys, _ := app.DB.ListActiveDKIMKeysWithDomain() + logs, _ := app.DB.ListEmailLogsPage(0, 10) + if len(domains) == 0 || len(senders) == 0 || len(ips) == 0 || len(keys) == 0 || len(logs) == 0 { + t.Fatalf("seed data missing: domains=%d senders=%d ips=%d keys=%d logs=%d", len(domains), len(senders), len(ips), len(keys), len(logs)) + } + + pagesToCheck := []string{ + "/", + "/account", + "/domains", "/domains/add", "/domains/" + itoa(domains[0].ID) + "/edit", + "/senders", "/senders/add", "/senders/" + itoa(senders[0].ID) + "/edit", + "/ips", "/ips/add", "/ips/" + itoa(ips[0].ID) + "/edit", + "/dkim", "/dkim/" + itoa(keys[0].ID) + "/edit", + "/logs", "/logs?type=emails", "/logs?type=auth", + "/settings", + "/msg/content/" + itoa(logs[0].ID), + "/admins", "/admins/add", + } + + for _, path := range pagesToCheck { + req := httptest.NewRequest(http.MethodGet, Prefix+path, nil) + req.AddCookie(cookie) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + if rec.Code != http.StatusOK { + t.Errorf("GET %s: status %d, body: %s", path, rec.Code, rec.Body.String()) + } + } +} + +func TestUnauthenticatedRequestsRedirectToLogin(t *testing.T) { + app := newTestApp(t) + mux := app.Mux() + + req := httptest.NewRequest(http.MethodGet, Prefix+"/domains", nil) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + if rec.Code != http.StatusFound { + t.Fatalf("expected redirect to login, got status %d", rec.Code) + } + loc := rec.Header().Get("Location") + if !strings.HasPrefix(loc, Prefix+"/login") { + t.Fatalf("expected redirect to login page, got %q", loc) + } +} + +func TestFirstLoginForcedBeforeDashboard(t *testing.T) { + app := newTestApp(t) + mux := app.Mux() + + hash, err := db.HashPassword("Password123!") + if err != nil { + t.Fatal(err) + } + userID, err := app.DB.CreateAdminUser("admin", hash, true) // must_change_password + if err != nil { + t.Fatal(err) + } + token, err := app.DB.CreateSession(userID, true, time.Hour) + if err != nil { + t.Fatal(err) + } + cookie := &http.Cookie{Name: sessionCookieName, Value: token} + + req := httptest.NewRequest(http.MethodGet, Prefix+"/domains", nil) + req.AddCookie(cookie) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + if rec.Code != http.StatusFound || rec.Header().Get("Location") != Prefix+"/first-login" { + t.Fatalf("expected redirect to /first-login, got status %d location %q", rec.Code, rec.Header().Get("Location")) + } +} + +func itoa(id int64) string { + return strconv.FormatInt(id, 10) +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..3b3f3f6 --- /dev/null +++ b/main.go @@ -0,0 +1,190 @@ +// Command mailgoserver is the Go port of PyMTA-server: an async SMTP MTA (direct-to-MX +// delivery, DKIM signing, IP/user auth) plus its admin web UI, mirroring app.py. +package main + +import ( + "flag" + "fmt" + "net/http" + "os" + "path/filepath" + "sync/atomic" + "time" + + "mailgoserver/internal/config" + "mailgoserver/internal/db" + "mailgoserver/internal/dkim" + "mailgoserver/internal/relay" + "mailgoserver/internal/smtpserver" + "mailgoserver/internal/tlsutil" + "mailgoserver/internal/toolbox" + "mailgoserver/internal/webui" +) + +func main() { + smtpOnly := flag.Bool("smtp-only", false, "Run SMTP server only") + webOnly := flag.Bool("web-only", false, "Run web frontend only") + host := flag.String("host", "127.0.0.1", "Web server host") + port := flag.Int("port", 5000, "Web server port") + debug := flag.Bool("debug", false, "Enable debug mode") + initData := flag.Bool("init-data", false, "Initialize sample data and exit") + configFlag := flag.String("config", "settings.ini", "Configuration file path") + flag.Parse() + + root, err := os.Getwd() + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + configPath := *configFlag + if !filepath.IsAbs(configPath) { + configPath = filepath.Join(root, configPath) + } + + cfg, err := config.Load(configPath) + if err != nil { + fmt.Fprintln(os.Stderr, "load settings:", err) + os.Exit(1) + } + toolbox.Configure(cfg) + logger := toolbox.GetLogger("main") + + if *initData { + // Mirrors app.py's --init-data: the actual seeding call is commented out + // there too, so this flag currently only logs and exits without touching + // the DB — preserved as-is rather than silently making it do more. + logger.Info("Initializing sample data...") + logger.Info("Sample data initialization complete") + return + } + + dbPath := config.AbsoluteSQLitePath(cfg.Section("Database").Key("DATABASE_URL").String(), root) + if err := toolbox.EnsureFolderExists(dbPath); err != nil { + logger.Error("create database directory: %v", err) + os.Exit(1) + } + database, err := db.Open(dbPath) + if err != nil { + logger.Error("open database: %v", err) + os.Exit(1) + } + defer database.Close() + + if err := database.SeedDefaultAdminIfEmpty(); err != nil { + logger.Error("seed default admin: %v", err) + os.Exit(1) + } + + dkimKeySize := cfg.Section("DKIM").Key("DKIM_KEY_SIZE").MustInt(2048) + dkimMgr := dkim.New(database, dkimKeySize) + relayer := relay.New(database, cfg, toolbox.GetLogger("relay")) + + heloHostname := cfg.Section("Server").Key("helo_hostname").String() + if heloHostname == "" { + heloHostname = cfg.Section("Server").Key("HOSTNAME").MustString("localhost") + } + attachmentsBase := cfg.Section("Attachments").Key("attachments_path").String() + if !filepath.IsAbs(attachmentsBase) { + attachmentsBase = filepath.Join(root, attachmentsBase) + } + + backend := &smtpserver.Backend{ + DB: database, DKIM: dkimMgr, Relay: relayer, Cfg: cfg, + Logger: toolbox.GetLogger("smtp"), HeloHostname: heloHostname, AttachmentsBasePath: attachmentsBase, + } + + var smtpRunning atomic.Bool + + runSMTP := func() { + smtpPort := cfg.Section("Server").Key("SMTP_PORT").MustInt(4025) + smtpTLSPort := cfg.Section("Server").Key("SMTP_TLS_PORT").MustInt(40465) + banner := smtpserver.ResolveBanner(cfg, heloHostname) + + certFile := absPath(root, cfg.Section("TLS").Key("TLS_CERT_FILE").String()) + keyFile := absPath(root, cfg.Section("TLS").Key("TLS_KEY_FILE").String()) + if err := tlsutil.GenerateSelfSignedCert(certFile, keyFile); err != nil { + logger.Error("generate TLS certificate: %v", err) + return + } + tlsConfig, err := tlsutil.CreateSSLContext(certFile, keyFile) + if err != nil { + logger.Error("create TLS context: %v", err) + return + } + + // Bind IPv4-only ("0.0.0.0"), matching both listeners in server_runner.py + // exactly (they hardcode hostname='0.0.0.0' regardless of the BIND_IP + // setting) — a bare ":port" address binds dual-stack on most systems, + // which would accept IPv6 connections the Python version never did. + plainServer := smtpserver.NewPlainServer(backend, fmt.Sprintf("0.0.0.0:%d", smtpPort), banner) + tlsServer := smtpserver.NewTLSServer(backend, fmt.Sprintf("0.0.0.0:%d", smtpTLSPort), banner, tlsConfig) + + smtpRunning.Store(true) + logger.Info("Plain SMTP listening on :%d, direct-TLS SMTP listening on :%d", smtpPort, smtpTLSPort) + + go func() { + if err := plainServer.ListenAndServe(); err != nil { + logger.Error("plain SMTP server: %v", err) + } + }() + if err := tlsServer.ListenAndServeTLS(); err != nil { + logger.Error("TLS SMTP server: %v", err) + } + } + + if *smtpOnly { + runSMTP() + return + } + + app, err := webui.New(database, dkimMgr, cfg, configPath, toolbox.GetLogger("web"), smtpRunning.Load) + if err != nil { + logger.Error("init web UI: %v", err) + os.Exit(1) + } + + mux := app.Mux() + mux.HandleFunc("GET /health", func(w http.ResponseWriter, r *http.Request) { + writeHealthJSON(w, database, smtpRunning.Load()) + }) + mux.HandleFunc("GET /{$}", func(w http.ResponseWriter, r *http.Request) { + http.Redirect(w, r, webui.Prefix+"/", http.StatusFound) + }) + + if !*webOnly { + go runSMTP() + time.Sleep(500 * time.Millisecond) + } + + addr := fmt.Sprintf("%s:%d", *host, *port) + logger.Info("Web interface starting at http://%s (debug=%v)", addr, *debug) + if err := http.ListenAndServe(addr, mux); err != nil { + logger.Error("web server: %v", err) + os.Exit(1) + } +} + +func absPath(root, p string) string { + if filepath.IsAbs(p) { + return p + } + return filepath.Join(root, p) +} + +func writeHealthJSON(w http.ResponseWriter, database *db.DB, smtpUp bool) { + dbStatus := "ok" + if err := database.Ping(); err != nil { + dbStatus = "error" + } + smtpStatus := "stopped" + if smtpUp { + smtpStatus = "running" + } + overall := "healthy" + if smtpStatus == "stopped" || dbStatus == "error" { + overall = "degraded" + } + w.Header().Set("Content-Type", "application/json") + fmt.Fprintf(w, `{"status":%q,"timestamp":%q,"services":{"smtp_server":%q,"web_frontend":"running","database":%q},"version":"1.0.0"}`, + overall, time.Now().Format(time.RFC3339), smtpStatus, dbStatus) +} diff --git a/script_install_service.sh b/script_install_service.sh new file mode 100755 index 0000000..a77b3c3 --- /dev/null +++ b/script_install_service.sh @@ -0,0 +1,234 @@ +#!/bin/bash +SMTP_SERVICE_NAME="pymta-smtp.service" +WEB_SERVICE_NAME="pymta-web.service" +APP_ROOT_FOLDER="" #/opt/PyMTA-server + +# Set APP_ROOT_FOLDER to the directory where this script is located if not already set +if [[ -z "$APP_ROOT_FOLDER" ]]; then + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + APP_ROOT_FOLDER="$SCRIPT_DIR" +fi + +SCRIPT_MODE="install" +TARGET_USER="$USER" +IS_SYSTEM=false + +# Function to print usage +usage() { + echo "Usage:" + echo " $0 Install as current user" + echo " $0 -u username Install as system service for given user (requires sudo)" + echo " $0 -rm Remove user service for current user ( also works with 'remove')" + echo " $0 -rm username Remove system service for specified user (requires sudo)" + echo " $0 -rm system Remove system service" + exit 1 +} + +# Parse arguments +while [[ $# -gt 0 ]]; do + case "$1" in + -u) + TARGET_USER="$2" + IS_SYSTEM=true + shift 2 + ;; + -rm) + SCRIPT_MODE="remove" + if [[ "$2" ]]; then + if [[ "$2" == "system" ]]; then + IS_SYSTEM=true + TARGET_USER="" + else + IS_SYSTEM=true + TARGET_USER="$2" + fi + shift + fi + shift + ;; + remove) + SCRIPT_MODE="remove" + shift + ;; + *) + usage + ;; + esac +done + +write_user_services() { + mkdir -p "$HOME/.config/systemd/user" + + cat > "$HOME/.config/systemd/user/$SMTP_SERVICE_NAME" < "$HOME/.config/systemd/user/$WEB_SERVICE_NAME" < /dev/null < /dev/null <&2 + exit 1 +fi + +# Update system and install required packages +echo "Updating system and installing dependencies..." +apt update && apt upgrade -y +apt install -y nginx certbot python3 python3-pip python3-venv python3-dev + +# Create and activate a virtual environment for certbot-dns-cloudflare +echo "Creating Python virtual environment for certbot-dns-cloudflare..." +mkdir -p "$VENV_DIR" +python3 -m venv "$VENV_DIR" +source "$VENV_DIR/bin/activate" + +# Upgrade pip in the virtual environment +echo "Upgrading pip..." +pip3 install --upgrade pip + +# Install Cloudflare DNS plugin for Certbot +echo "Installing certbot-dns-cloudflare..." +if ! pip3 install "$CLOUDFLARE_DNS_PLUGIN"; then + echo "Failed to install $CLOUDFLARE_DNS_PLUGIN. Please check your network or Python environment." >&2 + deactivate + exit 1 +fi + +# Deactivate virtual environment +deactivate + +# Create web root and error page directory +echo "Creating web root and error page directories..." +mkdir -p "$WEB_ROOT" "$ERROR_PAGE_DIR" + +# Generate HTML files for each error code +for code in "${!ERROR_MESSAGES[@]}"; do + file="$ERROR_PAGE_DIR/$code.html" + cat > "$file" < + + + Error $code + + + +

Error $code

+

${ERROR_MESSAGES[$code]}

+

Return to Home

+ + +EOF + echo "Created: $file" +done + +echo "All error pages generated in $ERROR_PAGE_DIR" + +# Set permissions for error page +chown -R www-data:www-data "$WEB_ROOT" +chmod -R 755 "$WEB_ROOT" + +# Create Cloudflare credentials file (ensure you replace with your actual API token) +echo "Creating Cloudflare credentials file..." +mkdir -p "$(dirname "$CLOUDFLARE_CREDENTIALS")" +cat > "$CLOUDFLARE_CREDENTIALS" << EOF +dns_cloudflare_api_token = $CLOUDFLARE_API_TOKEN_HERE +EOF +chmod 600 "$CLOUDFLARE_CREDENTIALS" + +# Create NGINX configuration +echo "Creating NGINX configuration for $DOMAIN..." +mkdir -p "$NGINX_CONF_DIR/sites-available" "$NGINX_CONF_DIR/sites-enabled" +cat > "$SITES_AVAILABLE" << EOF +server { + listen 80; + server_name $DOMAIN *.$DOMAIN; + + root $WEB_ROOT; + index index.html; + + location / { + try_files \$uri \$uri/ /index.html; + } + + error_page 404 $ERROR_PAGE; + location = $ERROR_PAGE { + root $WEB_ROOT; + internal; + } +} +EOF + +# Enable the site +ln -sf "$SITES_AVAILABLE" "$SITES_ENABLED" +# Disable default site +rm -f "$NGINX_CONF_DIR/sites-enabled/default" + +# Test NGINX configuration +echo "Testing NGINX configuration..." +nginx -t + +# Reload NGINX to apply changes +echo "Reloading NGINX..." +systemctl reload nginx + + +# Obtain Let's Encrypt wildcard SSL certificate using Cloudflare DNS +echo "Obtaining Let's Encrypt wildcard SSL certificate..." +source "$VENV_DIR/bin/activate" +if ! certbot certonly \ + --non-interactive \ + --agree-tos \ + --email "$EMAIL" \ + --dns-cloudflare \ + --dns-cloudflare-credentials "$CLOUDFLARE_CREDENTIALS" \ + --domains "$DOMAIN,*.$DOMAIN"; then + echo "Failed to obtain Let's Encrypt certificate. Please check Cloudflare credentials and DNS settings." >&2 + deactivate + exit 1 +fi +deactivate + +# Export .crt and .key files to LETSENCRYPT_EXPORT_PATH +echo "Exporting SSL certificate and key to $LETSENCRYPT_EXPORT_PATH..." +mkdir -p "$LETSENCRYPT_EXPORT_PATH" +cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" "$LETSENCRYPT_EXPORT_PATH/server.crt" +cp "/etc/letsencrypt/live/$DOMAIN/privkey.pem" "$LETSENCRYPT_EXPORT_PATH/server.key" +chown $APP_USERNAME:$APP_USERNAME "$LETSENCRYPT_EXPORT_PATH/server.crt" "$LETSENCRYPT_EXPORT_PATH/server.key" +chmod 600 "$LETSENCRYPT_EXPORT_PATH/server.crt" "$LETSENCRYPT_EXPORT_PATH/server.key" + +# Update NGINX configuration to use SSL +echo "Updating NGINX configuration for SSL..." +cat > "$SITES_AVAILABLE" << EOF +# Hide NGINX server signature +server_tokens off; + +server { + listen 80 default_server; + server_name _; + + root $WEB_ROOT; + index errors/404.html; #index.html; + + error_page 400 /errors/400.html; + error_page 401 /errors/401.html; + error_page 403 /errors/403.html; + error_page 404 /errors/404.html; + error_page 500 /errors/500.html; + error_page 502 /errors/502.html; + error_page 503 /errors/503.html; + error_page 504 /errors/504.html; + location /errors/ { + root $WEB_ROOT; + internal; + } +} + +server { + listen 443 ssl default_server; + server_name _; + + ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem; + + # SSL security settings + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; + ssl_session_cache shared:SSL:10m; + ssl_session_timeout 1d; + ssl_session_tickets off; + + root $WEB_ROOT; + index errors/404.html; #index.html; + + error_page 400 /errors/400.html; + error_page 401 /errors/401.html; + error_page 403 /errors/403.html; + error_page 404 /errors/404.html; + error_page 500 /errors/500.html; + error_page 502 /errors/502.html; + error_page 503 /errors/503.html; + error_page 504 /errors/504.html; + location /errors/ { + root $WEB_ROOT; + internal; + } +} + +server { + listen 80; + server_name $WEBSITE_URL; + # Prevent redirect loop with Cloudflare + if ($http_x_forwarded_proto = "http") { + return 301 https://\$host\$request_uri; + } +} + +server { + listen 443 ssl; + server_name $WEBSITE_URL; + + ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem; + + # SSL security settings + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; + ssl_session_cache shared:SSL:10m; + ssl_session_timeout 1d; + ssl_session_tickets off; + + # Proxy settings for Flask app + location / { + proxy_pass http://127.0.0.1:5000; # Updated this, where runs your web interface + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$scheme; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_http_version 1.1; + proxy_buffering off; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + } +} +EOF + +# Test NGINX configuration again +echo "Testing updated NGINX configuration..." +nginx -t + +# Reload NGINX to apply SSL changes +echo "Reloading NGINX with SSL configuration..." +systemctl reload nginx + +# Enable NGINX auto-start +echo "Enabling NGINX to start on boot..." +systemctl enable nginx + +# Set up automatic certificate renewal +echo "Setting up Let's Encrypt renewal for wildcard certificate..." +(crontab -l 2>/dev/null; echo "0 3 * * * /opt/certbot-venv/bin/certbot renew --quiet && \\ + cp /etc/letsencrypt/live/\$DOMAIN/fullchain.pem \$LETSENCRYPT_EXPORT_PATH/server.crt && \\ + cp /etc/letsencrypt/live/\$DOMAIN/privkey.pem \$LETSENCRYPT_EXPORT_PATH/server.key && \\ + chown \$APP_USERNAME:\$APP_USERNAME "\$LETSENCRYPT_EXPORT_PATH/server.crt" "\$LETSENCRYPT_EXPORT_PATH/server.key" && \\ + chmod 600 \$LETSENCRYPT_EXPORT_PATH/server.crt \$LETSENCRYPT_EXPORT_PATH/server.key") | crontab - + +echo "NGINX setup complete! Your site is live at https://$DOMAIN" +echo "Wildcard certificate covers *.$DOMAIN" +echo "Custom 404 page is set at $ERROR_PAGE" +echo "SSL certificate and key exported to $LETSENCRYPT_EXPORT_PATH" +echo "Please ensure your Cloudflare API token is correctly set in $CLOUDFLARE_CREDENTIALS" \ No newline at end of file diff --git a/server_data/.gitkeep b/server_data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/ssl_certs/.gitkeep b/ssl_certs/.gitkeep new file mode 100644 index 0000000..e69de29