-
Notifications
You must be signed in to change notification settings - Fork 2
/
middleware.go
120 lines (95 loc) · 3.87 KB
/
middleware.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package sales
import (
"context"
"fmt"
"time"
"encore.dev/middleware"
authsrv "github.com/ardanlabs/encore/api/services/auth"
"github.com/ardanlabs/encore/app/sdk/errs"
"github.com/ardanlabs/encore/app/sdk/mid"
"github.com/ardanlabs/encore/business/sdk/sqldb"
)
// NOTE: The order matters so be careful when injecting new middleware. Global
// middleware will always come first. We want the Auth middleware to
// happen before any non-global middlware.
// =============================================================================
// Global middleware functions
//lint:ignore U1000 "called by encore"
//encore:middleware target=all
func (s *Service) panics(req middleware.Request, next middleware.Next) middleware.Response {
return mid.Panics(s.mtrcs, req, next)
}
// =============================================================================
// Authorization related middleware
//lint:ignore U1000 "called by encore"
//encore:middleware target=tag:authorize
func (s *Service) authorize(req middleware.Request, next middleware.Next) middleware.Response {
p, req, err := mid.Authorize(req)
if err != nil {
return errs.NewResponse(errs.Unauthenticated, err)
}
ctx, cancel := context.WithTimeout(req.Context(), 5*time.Second)
defer cancel()
if err := authsrv.Authorize(ctx, p); err != nil {
err = fmt.Errorf("%s", err.Error()[17:]) // Remove "unauthenticated:" from the error string.
return errs.NewResponse(errs.Unauthenticated, err)
}
return next(req)
}
//lint:ignore U1000 "called by encore"
//encore:middleware target=tag:authorize_user
func (s *Service) authorizeUser(req middleware.Request, next middleware.Next) middleware.Response {
p, req, err := mid.AuthorizeUser(s.userBus, req)
if err != nil {
return errs.NewResponse(errs.Unauthenticated, err)
}
ctx, cancel := context.WithTimeout(req.Context(), 5*time.Second)
defer cancel()
if err := authsrv.Authorize(ctx, p); err != nil {
err = fmt.Errorf("%s", err.Error()[17:]) // Remove "unauthenticated:" from the error string.
return errs.NewResponse(errs.Unauthenticated, err)
}
return next(req)
}
//lint:ignore U1000 "called by encore"
//encore:middleware target=tag:authorize_product
func (s *Service) authorizeProduct(req middleware.Request, next middleware.Next) middleware.Response {
p, req, err := mid.AuthorizeProduct(s.productBus, req)
if err != nil {
return errs.NewResponse(errs.Unauthenticated, err)
}
ctx, cancel := context.WithTimeout(req.Context(), 5*time.Second)
defer cancel()
if err := authsrv.Authorize(ctx, p); err != nil {
err = fmt.Errorf("%s", err.Error()[17:]) // Remove "unauthenticated:" from the error string.
return errs.NewResponse(errs.Unauthenticated, err)
}
return next(req)
}
//lint:ignore U1000 "called by encore"
//encore:middleware target=tag:authorize_home
func (s *Service) authorizeHome(req middleware.Request, next middleware.Next) middleware.Response {
p, req, err := mid.AuthorizeHome(s.homeBus, req)
if err != nil {
return errs.NewResponse(errs.Unauthenticated, err)
}
ctx, cancel := context.WithTimeout(req.Context(), 5*time.Second)
defer cancel()
if err := authsrv.Authorize(ctx, p); err != nil {
err = fmt.Errorf("%s", err.Error()[17:]) // Remove "unauthenticated:" from the error string.
return errs.NewResponse(errs.Unauthenticated, err)
}
return next(req)
}
// =============================================================================
// Specific middleware functions
//lint:ignore U1000 "called by encore"
//encore:middleware target=tag:transaction
func (s *Service) beginCommitRollback(req middleware.Request, next middleware.Next) middleware.Response {
return mid.BeginCommitRollback(s.log, sqldb.NewBeginner(s.db), req, next)
}
//lint:ignore U1000 "called by encore"
//encore:middleware target=tag:metrics
func (s *Service) metrics(req middleware.Request, next middleware.Next) middleware.Response {
return mid.Metrics(s.mtrcs, req, next)
}