79 lines
1.7 KiB
Go
79 lines
1.7 KiB
Go
package auth
|
|
|
|
import (
|
|
// "errors"
|
|
)
|
|
|
|
var (
|
|
Store StorageDriver
|
|
)
|
|
|
|
// Store = gormauth.NewGormAuthDriver()
|
|
|
|
type UserAuth interface {
|
|
// getters/setters implemented by the app-level model
|
|
UserId() string
|
|
Secret() string
|
|
HashedSecret() string
|
|
SetHashedSecret(string)
|
|
|
|
SecretDriver
|
|
// // implemented by secret driver
|
|
// Authenticate() (bool, error)
|
|
}
|
|
|
|
type SecretDriver interface {
|
|
Authenticate() (bool, error)
|
|
HashSecret(args ...interface{}) (string, error)
|
|
|
|
// stuff for documentation
|
|
// UserContext is expected in these?
|
|
|
|
// Secret expects 0 or non-0 arguments
|
|
// When no parameter is passed, it acts as a getter
|
|
// When one or more parameters are passed, it acts as a setter
|
|
// A driver should specify the expected arguments and their meanings
|
|
|
|
// Register()
|
|
// Login()
|
|
// Logout()
|
|
}
|
|
|
|
type StorageDriver interface {
|
|
Save(user interface{}) error
|
|
// Load should take a partially filled struct
|
|
// (with values needed to look up)
|
|
// and fills in the rest
|
|
Load(user interface{}) error
|
|
}
|
|
|
|
// func init() {
|
|
// // auth.Store = gorm...
|
|
// }
|
|
|
|
// func (c App) Login(email, password string) {
|
|
|
|
// u := User {
|
|
// Email ...
|
|
// }
|
|
|
|
// good, err := auth.Authenticate(email, password)
|
|
|
|
// user, err := user_info.GetUserByEmail(email)
|
|
// }
|
|
|
|
// Bycrypt Authenticate() expects a single string argument of the plaintext password
|
|
// It returns true on success and false if error or password mismatch
|
|
// func Authenticate(attemptedUser UserAuth) (bool, error) {
|
|
// // check user in Store
|
|
// loadedUser, err := Store.Load(attemptedUser.UserId())
|
|
// if err != nil {
|
|
// return false, errors.New("User Not Found")
|
|
// }
|
|
|
|
// loadedUser.Authenticate(attemptedUser.Secret())
|
|
|
|
// // successfully authenticated
|
|
// return true, nil
|
|
// }
|