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} }