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.
website/auth/auth.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}
}