1package admin
2
3import (
4 "context"
5 "errors"
6 "time"
7
8 "tug/internal/storage"
9)
10
11type ResetLink struct {
12 URL string
13 Username string
14 ExpiresAt time.Time
15}
16
17func (s *Service) IssueResetLink(ctx context.Context, actor, id string) (ResetLink, error) {
18 issued, err := s.invites.IssueReset(ctx, actor, id)
19 switch {
20 case errors.Is(err, storage.ErrResetLinkPending):
21 return ResetLink{}, ProblemResetLinkPending
22 case errors.Is(err, storage.ErrResetLinkDisabled):
23 return ResetLink{}, ProblemResetLinkDisabled
24 case err != nil:
25 return ResetLink{}, target("issue reset link", err)
26 }
27 return ResetLink{URL: issued.URL, Username: issued.Username, ExpiresAt: issued.ExpiresAt}, nil
28}