You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package auth
|
|
|
|
import "fmt"
|
|
|
|
var ErrInvalidSession = fmt.Errorf(`invalid session token`)
|
|
|
|
type User struct {
|
|
Username string `json:"username"`
|
|
Name string `json:"name"`
|
|
Surname string `json:"surname"`
|
|
FullName string `json:"fullName"`
|
|
Email string `json:"email"`
|
|
}
|
|
|
|
func (u User) WithDefaultFullName() User {
|
|
return User{
|
|
Username: u.Username,
|
|
Name: u.Name,
|
|
Surname: u.Surname,
|
|
Email: u.Email,
|
|
|
|
FullName: u.Username + " " + u.Surname,
|
|
}
|
|
}
|
|
|
|
type Session struct {
|
|
Username string `json:"username"`
|
|
Token string `json:"token"`
|
|
}
|
|
|
|
type AuthenticatorService interface {
|
|
GetUser(username string) (*User, error)
|
|
GetUsers() ([]*User, error)
|
|
GetSession(token string) (*Session, error)
|
|
Login(username, password string) (*Session, error)
|
|
}
|
|
|
|
func UserForSession(as AuthenticatorService, token string) (*User, error) {
|
|
session, err := as.GetSession(token)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
user, err := as.GetUser(session.Username)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return user, nil
|
|
}
|
|
|
|
func New(host string) AuthenticatorService {
|
|
if host == ":memory:" {
|
|
return exampleMemoryUsers
|
|
}
|
|
|
|
return &LDAPAuthService{host}
|
|
}
|