52 u := h.config.PublicURL
53 u.Path = input.Body.Path
56 postSignInURL := u.String()
57 }
58 result, err := h.sso.Start(r.Context(), Params{
59 Email: input.Body.Email,
60 ProviderID: input.Body.ProviderID,
62 PostSignInURL: postSignInURL,
63 Flow: FlowNormal,
64 })
65 if err != nil {
66 return nil, err
67 }
68 return result, nil
69}
70
71func (h *Handler) buildPostSignInURL(p string) (string, error) {
72 if p == "" {
73 return "", nil
74 }
75 if !strings.HasPrefix(p, "/profile/") {
76 return "", ErrInvalidRequest
77 }
78 u := h.config.PublicURL
79 u.Path = p
80 return u.String(), nil
81}
82
1package authservice
2
3import (
4 "context"
5 "database/sql"
6)
7
8func (s *Service) DeleteSSOLink(ctx context.Context, id string) error {
9 tx, err := s.db.BeginTx(ctx, nil)
10 if err != nil {
11 return err
12 }
13 defer tx.Rollback()
14
15 if err := s.links.DeleteByID(ctx, tx, id); err != nil {
16 return err
17 }
18 return tx.Commit()
19}
20
21func (s *Service) ListByUser(ctx context.Context, uid string) ([]Link, error) {
22 rows, err := s.links.ListByUser(ctx, uid)
23 if err != nil {
24 return nil, err
25 }
26 out := make([]Link, 0, len(rows))
27 for _, r := range rows {
28 out = append(out, toLink(r))
29 }
30 return out, nil
31}
32
33func toLink(r row) Link {
34 return Link{
35 ID: r.ID,
36 ProviderID: r.ProviderID,
37 CreatedAt: r.CreatedAt,
38 }
39}
40
41func (s *Service) VerifyCode(ctx context.Context, c string) error {
42 if len(c) != 6 {
43 return ErrInvalidRequest
44 }
45 return s.codes.Consume(ctx, c)
46}
47
48func (s *Service) SignInWithPassword(ctx context.Context, in Input) (*Session, error) {
49 u, err := s.users.ByEmail(ctx, in.Email)
50 if err != nil {
51 return nil, err
52 }
53 if err := s.hasher.Compare(u.Hash, in.Password); err != nil {
54 return nil, ErrUnauthorized
55 }
56 return s.sessions.Create(ctx, u.ID)
57}
58
59func (s *Service) linkExists(ctx context.Context, uid, pid string) (bool, error) {
60 _, err := s.links.Get(ctx, uid, pid)
61 if err == sql.ErrNoRows {
62 return false, nil
63 }
64 return err == nil, err
65}