This commit is contained in:
parent
16292a3b74
commit
82441fc9d6
4 changed files with 42 additions and 17 deletions
4
main.go
4
main.go
|
@ -30,8 +30,10 @@ func main() {
|
|||
d := gomail.NewDialer("localhost", 1025, "from@gmail.com", "email_password")
|
||||
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
|
||||
|
||||
userconfig := user.NewUserConfig()
|
||||
|
||||
sample.Register(router)
|
||||
user.Register(router, tokenAuth, uc, d)
|
||||
user.Register(router, tokenAuth, uc, d, userconfig)
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
Hallo {{ .username }},<br><br>
|
||||
um deine E-Mail addresse zu bestätigen klicke auf folgenden link: {{ .url }}<br/><br/>
|
||||
um deine E-Mail addresse zu bestätigen klicke auf folgenden link: <a href="{{ .url }}">LINK</a><br/><br/>
|
||||
|
||||
Kthxbye,<br/>
|
||||
system
|
|
@ -25,8 +25,31 @@ var tokenAuth *jwtauth.JWTAuth
|
|||
|
||||
var d *gomail.Dialer
|
||||
|
||||
func Register(router chi.Router, token *jwtauth.JWTAuth, userClient UserClient, dialer *gomail.Dialer) {
|
||||
type UserConfig struct {
|
||||
RegisterMail *gomail.Message
|
||||
URLValidationToken string
|
||||
}
|
||||
|
||||
var userconfig UserConfig
|
||||
|
||||
func NewUserConfig() UserConfig {
|
||||
uc := UserConfig{}
|
||||
|
||||
m := gomail.NewMessage()
|
||||
m.SetHeader("From", "test@keks.cloud")
|
||||
m.SetHeader("To", "to@example.com")
|
||||
m.SetHeader("Subject", "Activate your Account")
|
||||
uc.RegisterMail = m
|
||||
|
||||
uc.URLValidationToken = "http://localhost/validate/%s"
|
||||
|
||||
|
||||
return uc
|
||||
}
|
||||
|
||||
func Register(router chi.Router, token *jwtauth.JWTAuth, userClient UserClient, dialer *gomail.Dialer, config UserConfig) {
|
||||
uc = userClient
|
||||
userconfig = config
|
||||
ren = render.New(render.Options{
|
||||
//Layout: "layout",
|
||||
FileSystem: &render.EmbedFileSystem{
|
||||
|
@ -111,23 +134,21 @@ func register(w http.ResponseWriter, r *http.Request) {
|
|||
buf: &bytes.Buffer{},
|
||||
}
|
||||
|
||||
ren.HTML(rw, http.StatusOK, "token", map[string]string{"username": r.FormValue("username"), "url": "http://www.google.de"})
|
||||
token, err := uc.getMailValidationToken(r.FormValue("email"), true)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
ren.HTML(rw, http.StatusOK, "token", map[string]string{"username": r.FormValue("username"), "url": fmt.Sprintf(userconfig.URLValidationToken, token)})
|
||||
|
||||
content, err := io.ReadAll(rw.buf)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
m := gomail.NewMessage()
|
||||
m.SetHeader("From", "test@keks.cloud")
|
||||
m.SetHeader("To", "to@example.com")
|
||||
m.SetHeader("Subject", "Gomail test subject")
|
||||
m.SetBody("text/plain", "This is Gomail test body")
|
||||
m.SetBody("text/html", string(content))
|
||||
|
||||
|
||||
|
||||
if err := d.DialAndSend(m); err != nil {
|
||||
mail := *userconfig.RegisterMail
|
||||
mail.SetBody("text/html", string(content))
|
||||
if err := d.DialAndSend(&mail); err != nil {
|
||||
fmt.Println(err)
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package user
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
|
@ -9,7 +10,7 @@ import (
|
|||
type UserClient interface {
|
||||
register(username, password, email string) (bool, error)
|
||||
login(username, password string, requiredMailValidation bool) (bool, error)
|
||||
getMailValidationToken(forceRecreate bool) (string, error)
|
||||
getMailValidationToken(email string, forceRecreate bool,) (string, error)
|
||||
}
|
||||
|
||||
type UserClientMemory struct {
|
||||
|
@ -54,8 +55,9 @@ func (uc UserClientMemory) login(username, password string, requiredMailValidati
|
|||
return false, nil
|
||||
}
|
||||
|
||||
func (uc UserClientMemory) getMailValidationToken(forceRecreate bool) (string, error) {
|
||||
token := randomString(5)
|
||||
func (uc UserClientMemory) getMailValidationToken(email string, forceRecreate bool) (string, error) {
|
||||
token := randomString(35)
|
||||
token = fmt.Sprintf("%v/%v", base64.StdEncoding.EncodeToString([]byte(email)), token)
|
||||
return token, nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue