# HG changeset patch # User Sascha L. Teichmann # Date 1545384829 -3600 # Node ID c354631e0018e982d983a147cf9b9ccd8caa2a6e # Parent 6dfad1ad59c86561ef1e9242afb289cdb1c2ae75 Import queue: Moved email notification stuff to separate file. diff -r 6dfad1ad59c8 -r c354631e0018 pkg/imports/email.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/imports/email.go Fri Dec 21 10:33:49 2018 +0100 @@ -0,0 +1,91 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann + +package imports + +import ( + "context" + "database/sql" + "log" + "strings" + "text/template" + + "gemma.intevation.de/gemma/pkg/auth" + "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/misc" +) + +const ( + selectEmailSQL = `SELECT email_address FROM users.list_users WHERE username = $1` + + importNotificationMailSubject = `import notification mail` +) + +var ( + importNotificationMailTmpl = template.Must( + template.New("notification").Parse(`Dear {{ .User }}, + +a {{ .Description }} import on server {{ .Server }} triggered +this email notification. + +{{ if eq .State "accepted" }}The imported data were successfully integrated into the database.{{ end -}} +{{ if eq .State "failed" }}The import failed for some reasons.{{ end -}} +{{ if eq .State "pending" }}The imported data could be integrated into the database +but your final decision is needed.{{ end }} + +Please follow this link to have a closer look at the details: + +{{ .Server }}/#/?{{ if eq .State "pending" }}review{{ else }}importlog{{ end }}={{ .ID }} + +Best regards + Your service team`)) +) + +func sendNotificationMail(user, description, state string, id int64) { + config.WaitReady() + + ctx := context.Background() + var email string + if err := auth.RunAs(ctx, user, + func(conn *sql.Conn) error { + return conn.QueryRowContext(ctx, selectEmailSQL, user).Scan(&email) + }, + ); err != nil { + log.Printf("error: %v\n", err) + return + } + + data := struct { + User string + Description string + Server string + State string + ID int64 + }{ + User: user, + Description: description, + Server: config.ExternalURL(), + State: state, + ID: id, + } + + var body strings.Builder + if err := importNotificationMailTmpl.Execute(&body, &data); err != nil { + log.Printf("error: %v\n", err) + return + } + + if err := misc.SendMail(email, importNotificationMailSubject, body.String()); err != nil { + log.Printf("error: %v\n", err) + } +} diff -r 6dfad1ad59c8 -r c354631e0018 pkg/imports/queue.go --- a/pkg/imports/queue.go Fri Dec 21 10:25:15 2018 +0100 +++ b/pkg/imports/queue.go Fri Dec 21 10:33:49 2018 +0100 @@ -18,7 +18,6 @@ "database/sql" "encoding/json" "fmt" - "html/template" "log" "runtime/debug" "strings" @@ -29,7 +28,6 @@ "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/config" - "gemma.intevation.de/gemma/pkg/misc" ) type ( @@ -529,68 +527,3 @@ }(jc, idj) } } - -const ( - selectEmailSQL = `SELECT email_address FROM users.list_users WHERE username = $1` - - importNotificationMailSubject = `import notification mail` -) - -var ( - importNotificationMailTmpl = template.Must( - template.New("notification").Parse(`Dear {{ .User }}, - -a {{ .Description }} import on server {{ .Server }} triggered -this email notification. - -{{ if eq .State "accepted" }}The imported data were successfully integrated into the database.{{ end -}} -{{ if eq .State "failed" }}The import failed for some reasons.{{ end -}} -{{ if eq .State "pending" }}The imported data could be integrated into the database -but your final decision is needed.{{ end }} - -Please follow this link to have a closer look at the details: - -{{ .Server }}/#/?{{ if eq .State "pending" }}review{{ else }}importlog{{ end }}={{ .ID }} - -Best regards - Your service team`)) -) - -func sendNotificationMail(user, description, state string, id int64) { - config.WaitReady() - - ctx := context.Background() - var email string - if err := auth.RunAs(ctx, user, - func(conn *sql.Conn) error { - return conn.QueryRowContext(ctx, selectEmailSQL, user).Scan(&email) - }, - ); err != nil { - log.Printf("error: %v\n", err) - return - } - - data := struct { - User string - Description string - Server string - State string - ID int64 - }{ - User: user, - Description: description, - Server: config.ExternalURL(), - State: state, - ID: id, - } - - var body strings.Builder - if err := importNotificationMailTmpl.Execute(&body, &data); err != nil { - log.Printf("error: %v\n", err) - return - } - - if err := misc.SendMail(email, importNotificationMailSubject, body.String()); err != nil { - log.Printf("error: %v\n", err) - } -}