1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-29 13:49:28 +08:00

91 lines
1.6 KiB
Go
Raw Normal View History

MF-532 - Password reset (#873) * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add default value for metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add default value for metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add default value for metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add default value for metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add default value for metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add default value for metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * when metadata is not set dont save 'null' string Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * when metadata is not set dont save 'null' string Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * when metadata is not set dont save 'null' string Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * change metadata type, add error handling Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * change metadata type, add error handling Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * change metadata type, add error handling Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove extra char Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove extra char Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove extra char Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * few small fixes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * few small fixes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * few small fixes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix identityRes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix identityRes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix identityRes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * mail Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * mail Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reset request endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reset request endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reset request endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add token Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add token Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add token Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add token methods Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add token methods Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add token methods Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding token endpoints Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding token endpoints Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding token endpoints Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding reset passw endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding reset passw endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding reset passw endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add logic for token verifying Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add logic for token verifying Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add logic for token verifying Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove mail from main Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove mail from main Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove mail from main Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * token and passwd update logic Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * token and passwd update logic Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * token and passwd update logic Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize mailing code Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add comments for password reset flow Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add comments for password reset flow Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * change struct members to private Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * small changes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * small changes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * small changes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add space Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add space Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add space Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * revert back changes used for testing Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * revert back changes used for testing Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * revert back changes used for testing Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize endpoints, extract host for link from Referer Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize endpoints, extract host for link from Referer Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding swagger docs for reset passw Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding swagger docs for reset passw Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix imports and some typos Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix imports and some typos Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding swagger docs for reset passw Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize endpoints, extract host for link from Referer Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize endpoints, extract host for link from Referer Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * addint test and update swagger for pass reset Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * addint test and update swagger for pass reset Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * addint test and update swagger for pass reset Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding test for endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding test for endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding test for endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding test for endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding endpoint test Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding endpoint test Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding endpoint test Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * change token generation Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * change token generation Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * change token generation Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize and change token gen Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize and change token gen Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize and change token gen Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * addint token and mail Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding token env Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding token env Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix error reporting Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix some comments and update readme Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix some comments and update readme Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix some comments and update readme Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * update readme Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix problmes due merge Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix problmes due merge Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix typos Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix typos Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add trusted certificates Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add endpoint for password change of currently authenticated user Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add env variable for conf reset endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add metadata to users Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add default value for metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add default value for metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * when metadata is not set dont save 'null' string Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * change metadata type, add error handling Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove extra char Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * few small fixes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix identityRes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add users metadata Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * password reset, sketching Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reset request endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding token endpoints Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding reset passw endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add logic for token verifying Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove mail from main Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * small changes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add space Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * revert back changes used for testing Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize endpoints, extract host for link from Referer Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize endpoints, extract host for link from Referer Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * addint test and update swagger for pass reset Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * adding endpoint test Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix some comments and update readme Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add env variable for conf reset endpoint Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix tests Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * resolving some style comments Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * minor fixes due to bad merge Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix problem with unsigned commits Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix problem with unsigned commits Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix call to users.New Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix call to users.New Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * rename file Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * rename to email.go Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * additional comments Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * additional comments Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * refactor email util Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * refactor email util Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * refactor email util Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * refactor email util Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove debug bin Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add driver conf for mail Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * refactor email Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * refactor email Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix failing tests Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add testify Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * small fix Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add token conf Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * small fix Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * small fix Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * configurable email template Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix missing var Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add env for email template file Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add env for email template file Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix tests Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix test Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix test Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * revert to master Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove dev container Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * small fixes, typos, namings Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix typo Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * resolving comments Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * resolving comments Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * resolving comments Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * resolving comments Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * resolving comments Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add line Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * return err from email New() Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * change MF_TOKEN_RESET_ENDPOINT Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add and remove env vars Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * separate password logic into two methods Change and Reset Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * update comments Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove blank line Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * update docs Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * dont use camel case Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * small fix Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize email template for passw reset Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reorganize email template for passw reset Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com>
2019-10-22 14:53:14 +02:00
// Copyright (c) Mainflux
// SPDX-License-Identifier: Apache-2.0
package email
import (
"bytes"
"errors"
"fmt"
"html/template"
"net/smtp"
"github.com/mainflux/mainflux/logger"
)
var (
// ErrMissingEmailTemplate missing email template file
ErrMissingEmailTemplate = errors.New("Missing e-mail template file")
)
type emailTemplate struct {
To []string
From string
Subject string
Header string
Content string
Footer string
}
// Config email agent configuration.
type Config struct {
Driver string
Host string
Port string
Username string
Password string
FromAddress string
FromName string
Template string
}
// Agent for mailing
type Agent struct {
conf *Config
auth smtp.Auth
addr string
log logger.Logger
tmpl *template.Template
}
// New creates new email agent
func New(c *Config) (*Agent, error) {
a := &Agent{}
a.conf = c
a.auth = smtp.PlainAuth("", c.Username, c.Password, c.Host)
a.addr = fmt.Sprintf("%s:%s", c.Host, c.Port)
tmpl, err := template.ParseFiles(c.Template)
if err != nil {
return nil, err
}
a.tmpl = tmpl
return a, nil
}
// Send sends e-mail
func (a *Agent) Send(To []string, From, Subject, Header, Content, Footer string) error {
if a.tmpl == nil {
return ErrMissingEmailTemplate
}
email := new(bytes.Buffer)
tmpl := emailTemplate{
To: To,
From: From,
Subject: Subject,
Header: Header,
Content: Content,
Footer: Footer,
}
if From == "" {
tmpl.From = a.conf.FromName
}
if err := a.tmpl.Execute(email, tmpl); err != nil {
return err
}
return smtp.SendMail(a.addr, a.auth, a.conf.FromAddress, To, email.Bytes())
}