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