Initial cloud-services repo - gateway service + pkg modules
This commit is contained in:
67
pkg/security/salter.go
Normal file
67
pkg/security/salter.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package security
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"fiskerinc.com/modules/redis"
|
||||
"fiskerinc.com/modules/utils/envtool"
|
||||
|
||||
redigo "github.com/gomodule/redigo/redis"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func NewSalter(auth string) (ISalter, error) {
|
||||
var encryptor IEncryptor
|
||||
|
||||
key := []byte(envtool.GetEnv("MASTER_KEY", "REPLACE_ME_REPLACE_ME_REPLACE_ME"))
|
||||
byteAuth := []byte(auth)
|
||||
nonce := []byte(envtool.GetEnv("MASTER_KEY_NONCE", "_REPLACE_ME_"))
|
||||
|
||||
encryptor, _, err := NewEncryptor(key, byteAuth, nonce)
|
||||
return &Salter{encryptor: encryptor, auth: auth}, err
|
||||
}
|
||||
|
||||
type ISalter interface {
|
||||
GenerateSessionID(string, string) string
|
||||
ValidateSessionID(string) error
|
||||
CheckSessionID(redis.Client, string) error
|
||||
}
|
||||
|
||||
type Salter struct {
|
||||
encryptor IEncryptor
|
||||
auth string
|
||||
}
|
||||
|
||||
func (s *Salter) GenerateSessionID(key string, salt string) string {
|
||||
return s.encryptor.EncryptStringToBase64(fmt.Sprintf("%s:%s", key, salt))
|
||||
}
|
||||
|
||||
func (s *Salter) ValidateSessionID(sessionID string) error {
|
||||
if sessionID == "" {
|
||||
return ErrInvalidSessionID
|
||||
}
|
||||
data, err := s.encryptor.DecryptBase64ToString(sessionID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
vin := strings.Split(data, ":")[0]
|
||||
if vin != s.auth {
|
||||
return ErrInvalidSessionID
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Salter) CheckSessionID(client redis.Client, vin string) error {
|
||||
sessionID, err := redigo.String(client.Get(redis.HMISessionKey(vin)))
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
err = s.ValidateSessionID(sessionID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user