63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package redis
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
|
|
"src.dualinventive.com/go/authentication-service/internal/storage"
|
|
"src.dualinventive.com/go/lib/kv"
|
|
)
|
|
|
|
const expirationDuration = 1 * time.Minute
|
|
|
|
//ResetCodeRepository contains functions to manage tokens.
|
|
type ResetCodeRepository struct {
|
|
kvstore kv.KV
|
|
}
|
|
|
|
//NewResetCodeRepository returns a new instance of a redis or ram backed repository
|
|
func NewResetCodeRepository(host, port string) (storage.ResetCodeRepository, error) {
|
|
repo := &ResetCodeRepository{}
|
|
|
|
kvstore, err := kv.New(kv.TypeRedis, fmt.Sprintf("%s:%s", host, port))
|
|
if err != nil {
|
|
return nil, NewErr(err)
|
|
}
|
|
|
|
repo.kvstore = kvstore
|
|
|
|
return repo, nil
|
|
}
|
|
|
|
//CreateCode creates a code using redis SET operation.
|
|
func (tr *ResetCodeRepository) CreateCode(userName string, uuid string) error {
|
|
err := tr.kvstore.SetExp("reset:"+userName, uuid, expirationDuration)
|
|
if err != nil {
|
|
return NewErr(err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
//DeleteCode deletes a code using redis DEL operation.
|
|
func (tr *ResetCodeRepository) DeleteCode(userName string) error {
|
|
ok, err := tr.kvstore.Del("reset:" + userName)
|
|
if err != nil {
|
|
return NewErr(err)
|
|
}
|
|
if !ok {
|
|
return NewErr(errors.New("password reset code not found"))
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
//GetCode returns a code using redis GET operation.
|
|
func (tr *ResetCodeRepository) GetCode(userName string) (string, error) {
|
|
code, err := tr.kvstore.Get("reset:" + userName)
|
|
if err != nil {
|
|
return "", NewErr(err)
|
|
}
|
|
return code, err
|
|
}
|