Add bypass for SMTP settings and fix maddyctl call

This commit is contained in:
Mysh! 2023-02-27 11:57:42 +03:00
parent 35b4b60fb7
commit 9ccd47b236
No known key found for this signature in database
GPG key ID: 9D23DF47A088FE6C

71
main.go
View file

@ -66,6 +66,8 @@ const (
// HTTPServerPort is an HTTP server port // HTTPServerPort is an HTTP server port
HTTPServerPort = 1323 HTTPServerPort = 1323
DebugBypassMailSending = true
) )
const ( const (
@ -97,26 +99,34 @@ func (t *Template) Render(w io.Writer, name string, data interface{}, _ echo.Con
} }
func main() { func main() {
log.Println("[EmailMessage const] Checking your template") var auth smtp.Auth
if !strings.Contains(EmailMessage, "$RESET_LINK") { if !DebugBypassMailSending {
log.Fatalln("[EmailMessage const] Your message template does not contain $RESET_LINK, so user can't reset his password!") log.Println("[EmailMessage const] Checking your template")
} if !strings.Contains(EmailMessage, "$RESET_LINK") {
log.Fatalln("[EmailMessage const] Your message template does not contain $RESET_LINK, so user can't reset his password!")
}
log.Println("[EmailTemplate const] Checking your template") log.Println("[EmailTemplate const] Checking your template")
if !strings.Contains(EmailTemplate, "$TO") { if !strings.Contains(EmailTemplate, "$TO") {
log.Fatalln("[EmailTemplate const] Your template does not contain $TO, make sure to add it.") log.Fatalln("[EmailTemplate const] Your template does not contain $TO, make sure to add it.")
} }
if !strings.Contains(EmailTemplate, "$FROM") { if !strings.Contains(EmailTemplate, "$FROM") {
log.Fatalln("[EmailTemplate const] Your template does not contain $FROM, make sure to add it.") log.Fatalln("[EmailTemplate const] Your template does not contain $FROM, make sure to add it.")
} }
if !strings.Contains(EmailTemplate, "$SUBJECT") { if !strings.Contains(EmailTemplate, "$SUBJECT") {
log.Fatalln("[EmailTemplate const] Your template does not contain $SUBJECT, make sure to add it, so user can see a message preview.") log.Fatalln("[EmailTemplate const] Your template does not contain $SUBJECT, make sure to add it, so user can see a message preview.")
} }
if !strings.Contains(EmailTemplate, "$MESSAGE") { if !strings.Contains(EmailTemplate, "$MESSAGE") {
log.Fatalln("[EmailTemplate const] Your template does not contain $MESSAGE, make sure to add it.") log.Fatalln("[EmailTemplate const] Your template does not contain $MESSAGE, make sure to add it.")
}
// Set up authentication information.
auth = smtp.PlainAuth("", SMTPMailUsername, SMTPMailPassword, SMTPMailHostname)
} else {
log.Println("[SMTP] Debug mode enabled, not checking email template")
} }
log.Println("[Sqlite] Loading Maddy's credentials database") log.Println("[Sqlite] Loading Maddy's credentials database")
@ -125,9 +135,6 @@ func main() {
log.Fatalln(err) log.Fatalln(err)
} }
// Set up authentication information.
auth := smtp.PlainAuth("", SMTPMailUsername, SMTPMailPassword, SMTPMailHostname)
log.Println("[Cache] Registering cache for password resets") log.Println("[Cache] Registering cache for password resets")
passwordResetCache := cache.New(CacheTime) passwordResetCache := cache.New(CacheTime)
@ -178,17 +185,21 @@ func main() {
// and send the email all in one step. // and send the email all in one step.
to := []string{mail} to := []string{mail}
msg := strings.ReplaceAll(EmailTemplate, "$TO", mail) if !DebugBypassMailSending {
msg = strings.ReplaceAll(msg, "$FROM", EmailFrom) msg := strings.ReplaceAll(EmailTemplate, "$TO", mail)
msg = strings.ReplaceAll(msg, "$SUBJECT", EmailSubject) msg = strings.ReplaceAll(msg, "$FROM", EmailFrom)
msg = strings.ReplaceAll(msg, "$MESSAGE", EmailMessage) msg = strings.ReplaceAll(msg, "$SUBJECT", EmailSubject)
msg = strings.ReplaceAll(msg, "$RESET_LINK", HostingURL+"reset/"+random) msg = strings.ReplaceAll(msg, "$MESSAGE", EmailMessage)
msg = strings.ReplaceAll(msg, "$RESET_LINK", HostingURL+"reset/"+random)
//msg := []byte(fmt.Sprintf(EmailMessage, mail, SMTPMailUsername, HostingURL+"reset/"+random)) err := smtp.SendMail(MXServer, auth, SMTPMailUsername, to, []byte(msg))
err := smtp.SendMail(MXServer, auth, SMTPMailUsername, to, []byte(msg)) if err != nil {
if err != nil { log.Println("[SMTP] Failed to send mail - ", err)
log.Println("[SMTP] Failed to send mail - ", err) return
return }
} else {
log.Println("[SMTP] Debug mode enabled, not sending email")
log.Println("[SMTP] Reset link:", HostingURL+"reset/"+random)
} }
}() }()
return c.Render(http.StatusOK, "reset.gohtml", map[string]any{ return c.Render(http.StatusOK, "reset.gohtml", map[string]any{
@ -215,7 +226,7 @@ func main() {
passwordResetCache.Delete(key) passwordResetCache.Delete(key)
} }
maddyExecCommand := exec.Command("maddy", "creds", "password", mail.(string), "-p", password) maddyExecCommand := exec.Command("maddy", "creds", "password", "-p", password, mail.(string))
err = maddyExecCommand.Run() err = maddyExecCommand.Run()
if err != nil { if err != nil {
log.Println("[maddyExecCommand] Failed to execute Maddy's password reset command - ", err) log.Println("[maddyExecCommand] Failed to execute Maddy's password reset command - ", err)