sophuwu.site > goauth   
              61
            
             package goauth

import (
	"crypto/rand"
	"crypto/sha256"
	"crypto/subtle"
	"github.com/pquerna/otp/totp"
)

// User struct for storing user data
type User struct {
	Name string
	Hash []byte
	Salt []byte
	OtpS string
}

func salt() []byte {
	var s = make([]byte, 32)
	_, err := rand.Read(s)
	if err != nil {
		panic(err)
	}
	return s
}
func hash(b ...[]byte) []byte {
	h := sha256.New()
	for _, v := range b {
		h.Write(v)
	}
	return h.Sum(nil)
}

func (u *User) SetPass(pass string) {
	u.Salt = salt()
	u.Hash = hash([]byte(pass), u.Salt)
}

func (u *User) CheckPass(pass string) bool {
	return subtle.ConstantTimeCompare(u.Hash, hash([]byte(pass), u.Salt)) == 1
}

// NewUser creates a new user
func NewUser(name, pass string) *User {
	var u User
	key, err := totp.Generate(totp.GenerateOpts{AccountName: name, Issuer: "soph.local"})
	if err != nil {
		panic(err)
	}
	key.Secret()
	u.Name = name
	u.SetPass(pass)

}

// CheckPassword checks if the password is correct
func CheckPassword(name, pass string) bool {
	return false
}

// subtle.ConstantTimeCompare([]byte(expectedPass), []byte(pass)) == 1