Mercurial > gemma
view pkg/imports/email.go @ 2006:35acb7f9ae0c
Do anything else before expectedly failing role creation
Creating roles during database setup expectedly fails in case there
already is another gemma database in the cluster. Doing it at the end
of the transaction ensures it does not hide errors in other commands
in the script.
In passing, add the default admin via the designated view to ensure it
will become a correctly set up application user.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Thu, 24 Jan 2019 17:23:43 +0100 |
parents | d966f03ea819 |
children | 42849084f063 |
line wrap: on
line source
// 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 <sascha.teichmann@intevation.de> 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 "unchanged" }}The import has not changed any data in 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) } }