From 8e0c59bb520d2534cd8e84f22fbf954fc8806f0f Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Fri, 7 Jul 2023 21:24:02 +0200 Subject: [PATCH] email sending --- cmd/wg-portal/main.go | 12 +- frontend/src/components/PeerViewModal.vue | 13 +- frontend/src/components/UserViewModal.vue | 2 + frontend/src/helpers/fetch-wrapper.js | 2 +- frontend/src/stores/peers.js | 16 ++ frontend/src/views/InterfaceView.vue | 2 +- frontend/src/views/UserView.vue | 4 +- go.sum | 144 -------------- internal/adapters/database.go | 2 +- internal/adapters/mailer.go | 48 ++--- ...ew-dcaf2465.js => ProfileView-d9b6bf03.js} | 2 +- .../frontend-dist/assets/UserView-c9f71a71.js | 1 - .../frontend-dist/assets/UserView-fc734ab4.js | 1 + .../{index-b5bbe402.js => index-6aef20f0.js} | 62 +++--- .../app/api/core/frontend-dist/index.html | 2 +- .../app/api/v0/handlers/endpoint_peers.go | 42 ++++ internal/app/api/v0/model/models_peer.go | 5 + internal/app/app.go | 8 +- .../{filetemplate => configfile}/manager.go | 4 +- .../{filetemplate => configfile}/qrwriter.go | 2 +- .../app/{filetemplate => configfile}/repos.go | 2 +- internal/app/configfile/template.go | 68 +++++++ .../tpl_files/wg_interface.tpl | 0 .../tpl_files/wg_peer.tpl | 0 internal/app/filetemplate/template.go | 132 ------------- .../tpl_files/mail_with_attachment.gohtml | 0 .../tpl_files/mail_with_attachment.gotpl | 1 - .../tpl_files/mail_with_link.gohtml | 0 .../tpl_files/mail_with_link.gotpl | 0 internal/app/mail/manager.go | 127 ++++++++++++ internal/app/mail/repos.go | 27 +++ internal/app/mail/template.go | 93 +++++++++ .../tpl_files/mail_with_attachment.gohtml | 187 ++++++++++++++++++ .../mail/tpl_files/mail_with_attachment.gotpl | 24 +++ .../app/mail/tpl_files/mail_with_link.gohtml | 187 ++++++++++++++++++ .../app/mail/tpl_files/mail_with_link.gotpl | 24 +++ internal/app/repos.go | 6 +- internal/domain/peer.go | 23 +++ internal/util.go | 7 + 39 files changed, 924 insertions(+), 358 deletions(-) rename internal/app/api/core/frontend-dist/assets/{ProfileView-dcaf2465.js => ProfileView-d9b6bf03.js} (98%) delete mode 100644 internal/app/api/core/frontend-dist/assets/UserView-c9f71a71.js create mode 100644 internal/app/api/core/frontend-dist/assets/UserView-fc734ab4.js rename internal/app/api/core/frontend-dist/assets/{index-b5bbe402.js => index-6aef20f0.js} (91%) rename internal/app/{filetemplate => configfile}/manager.go (94%) rename internal/app/{filetemplate => configfile}/qrwriter.go (98%) rename internal/app/{filetemplate => configfile}/repos.go (96%) create mode 100644 internal/app/configfile/template.go rename internal/app/{filetemplate => configfile}/tpl_files/wg_interface.tpl (100%) rename internal/app/{filetemplate => configfile}/tpl_files/wg_peer.tpl (100%) delete mode 100644 internal/app/filetemplate/template.go delete mode 100644 internal/app/filetemplate/tpl_files/mail_with_attachment.gohtml delete mode 100644 internal/app/filetemplate/tpl_files/mail_with_attachment.gotpl delete mode 100644 internal/app/filetemplate/tpl_files/mail_with_link.gohtml delete mode 100644 internal/app/filetemplate/tpl_files/mail_with_link.gotpl create mode 100644 internal/app/mail/manager.go create mode 100644 internal/app/mail/repos.go create mode 100644 internal/app/mail/template.go create mode 100644 internal/app/mail/tpl_files/mail_with_attachment.gohtml create mode 100644 internal/app/mail/tpl_files/mail_with_attachment.gotpl create mode 100644 internal/app/mail/tpl_files/mail_with_link.gohtml create mode 100644 internal/app/mail/tpl_files/mail_with_link.gotpl diff --git a/cmd/wg-portal/main.go b/cmd/wg-portal/main.go index 39e6d08..ccfd5f3 100644 --- a/cmd/wg-portal/main.go +++ b/cmd/wg-portal/main.go @@ -5,7 +5,8 @@ import ( "github.com/h44z/wg-portal/internal/app/api/core" handlersV0 "github.com/h44z/wg-portal/internal/app/api/v0/handlers" "github.com/h44z/wg-portal/internal/app/auth" - "github.com/h44z/wg-portal/internal/app/filetemplate" + "github.com/h44z/wg-portal/internal/app/configfile" + "github.com/h44z/wg-portal/internal/app/mail" "github.com/h44z/wg-portal/internal/app/users" "github.com/h44z/wg-portal/internal/app/wireguard" "os" @@ -38,6 +39,8 @@ func main() { wireGuard := adapters.NewWireGuardRepository() + mailer := adapters.NewSmtpMailRepo(cfg.Mail) + shouldExit, err := app.HandleProgramArgs(cfg, rawDb) switch { case shouldExit && err == nil: @@ -64,11 +67,14 @@ func main() { statisticsCollector, err := wireguard.NewStatisticsCollector(cfg, database, wireGuard) internal.AssertNoError(err) - templateManager, err := filetemplate.NewTemplateManager(cfg, database, database) + cfgFileManager, err := configfile.NewConfigFileManager(cfg, database, database) + internal.AssertNoError(err) + + mailManager, err := mail.NewMailManager(cfg, mailer, cfgFileManager, database, database) internal.AssertNoError(err) backend, err := app.New(cfg, eventBus, authenticator, userManager, wireGuardManager, - statisticsCollector, templateManager) + statisticsCollector, cfgFileManager, mailManager) internal.AssertNoError(err) err = backend.Startup(ctx) internal.AssertNoError(err) diff --git a/frontend/src/components/PeerViewModal.vue b/frontend/src/components/PeerViewModal.vue index d5ea2a5..94cb240 100644 --- a/frontend/src/components/PeerViewModal.vue +++ b/frontend/src/components/PeerViewModal.vue @@ -6,6 +6,7 @@ import {computed, ref, watch} from "vue"; import {useI18n} from "vue-i18n"; import { freshInterface, freshPeer } from '@/helpers/models'; import Prism from "vue-prism-component"; +import {notify} from "@kyvg/vue3-notification"; const { t } = useI18n() @@ -89,6 +90,16 @@ function download() { document.body.removeChild(element) } +function email() { + peers.MailPeerConfig(false, [selectedPeer.value.Identifier]).catch(error => { + notify({ + title: "Peer email failure", + text: "Failed to send mail with peer configuration!", + type: 'error', + }) + }) +} +