package identity import ( "errors" "tug/internal/service/password" "tug/internal/storage" ) const ( PathLogin = "login" PathSudo = "sudo" PathPassword = "password" ) var Paths = []string{PathLogin, PathSudo, PathPassword} const ( checkAccepted = "accepted" checkRejected = "rejected" checkLocked = "locked" checkBusy = "busy" checkUnavailable = "unavailable" ) var CheckResults = []string{checkAccepted, checkRejected, checkLocked, checkBusy, checkUnavailable} func discard(string, string) {} func (s *Service) Observed(path string, observe func(path, result string)) *Service { if observe == nil { observe = discard } c := *s c.path, c.observe = path, observe return &c } func (s *Service) observed(user storage.User, err error) (storage.User, error) { s.observe(s.path, checkResult(err)) return user, err } func checkResult(err error) string { switch { case err == nil: return checkAccepted case errors.Is(err, ErrRejected): return checkRejected case errors.Is(err, password.ErrBusy): return checkBusy } return checkUnavailable } func (s *Service) Observer() func(path, result string) { return s.observe }