nutrition docker file fix
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
// Sending email.
|
||||
@@ -97,10 +98,56 @@ func MailFromEnv() MailConfig {
|
||||
Host: env("MAIL_HOST", ""),
|
||||
Port: port,
|
||||
Username: env("MAIL_USERNAME", ""),
|
||||
Password: env("MAIL_PASSWORD", ""),
|
||||
Password: smtpPassword(env("MAIL_HOST", ""), env("MAIL_PASSWORD", "")),
|
||||
// A name is optional; an address is not.
|
||||
FromAddress: env("MAIL_FROM", ""),
|
||||
FromName: env("MAIL_FROM_NAME", "Nearle"),
|
||||
ConsoleURL: env("MAIL_CONSOLE_URL", "https://app.nearledaily.com"),
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
smtpPassword takes the spaces out of a Google App Password.
|
||||
|
||||
Google shows a 16-character App Password formatted for reading — "abcd efgh
|
||||
ijkl mnop" — and the spaces are presentation, not part of the secret. Pasted
|
||||
verbatim they survive into the credential and Gmail refuses the login, which
|
||||
Fiesta reports as "the mail server refused our credentials". That sends somebody
|
||||
to revoke a perfectly good password and generate another one with the same four
|
||||
spaces in it.
|
||||
|
||||
ONLY for Google's own SMTP hosts, and only when what is left is the 16
|
||||
alphanumeric characters an App Password actually is. A password is a secret and
|
||||
quietly editing one is normally the wrong thing: another relay's password may
|
||||
legitimately contain a space, and stripping it there would turn a working
|
||||
credential into a silent authentication failure — the exact bug this avoids,
|
||||
pointed the other way.
|
||||
*/
|
||||
func smtpPassword(host, password string) string {
|
||||
if !isGoogleSMTP(host) {
|
||||
return password
|
||||
}
|
||||
|
||||
stripped := strings.Join(strings.Fields(password), "")
|
||||
if stripped == password || len(stripped) != googleAppPasswordLength {
|
||||
return password
|
||||
}
|
||||
for _, r := range stripped {
|
||||
if !unicode.IsLetter(r) && !unicode.IsDigit(r) {
|
||||
return password
|
||||
}
|
||||
}
|
||||
return stripped
|
||||
}
|
||||
|
||||
// googleAppPasswordLength is what Google issues: sixteen characters, shown in
|
||||
// four groups of four.
|
||||
const googleAppPasswordLength = 16
|
||||
|
||||
func isGoogleSMTP(host string) bool {
|
||||
switch strings.ToLower(strings.TrimSpace(host)) {
|
||||
case "smtp.gmail.com", "smtp-relay.gmail.com", "aspmx.l.google.com":
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user