Skip to content

Commit 9c3567d

Browse files
committed
refactored to pass rbac.Subject instead of small struct
1 parent e27f20a commit 9c3567d

File tree

5 files changed

+20
-27
lines changed

5 files changed

+20
-27
lines changed

coderd/database/dbauthz/dbauthz.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ func As(ctx context.Context, actor rbac.Subject) context.Context {
474474

475475
func InjectActorToContext(ctx context.Context, actor rbac.Subject) context.Context {
476476
if rlogger := loggermw.RequestLoggerFromContext(ctx); rlogger != nil {
477-
rlogger.WithAuthContext(actor.ID, actor.FriendlyName, actor.Email, actor.Type)
477+
rlogger.WithAuthContext(actor)
478478
}
479479
return context.WithValue(ctx, authContextKey{}, actor)
480480
}

coderd/database/queries.sql.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/users.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ WHERE
300300
-- This function returns roles for authorization purposes. Implied member roles
301301
-- are included.
302302
SELECT
303-
-- username is returned just to help for logging purposes
303+
-- username and email are returned just to help for logging purposes
304304
-- status is used to enforce 'suspended' users, as all roles are ignored
305305
-- when suspended.
306306
id, username, status, email,

coderd/httpmw/loggermw/logger.go

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -63,22 +63,15 @@ func Logger(log slog.Logger) func(next http.Handler) http.Handler {
6363
type RequestLogger interface {
6464
WithFields(fields ...slog.Field)
6565
WriteLog(ctx context.Context, status int)
66-
WithAuthContext(id string, name string, email string, subjectType rbac.SubjectType)
66+
WithAuthContext(actor rbac.Subject)
6767
}
6868

6969
type SlogRequestLogger struct {
7070
log slog.Logger
7171
written bool
7272
message string
7373
start time.Time
74-
authCtx map[rbac.SubjectType]authContext
75-
}
76-
77-
type authContext struct {
78-
id string
79-
name string
80-
email string
81-
subjectType rbac.SubjectType
74+
actors map[rbac.SubjectType]rbac.Subject
8275
}
8376

8477
var _ RequestLogger = &SlogRequestLogger{}
@@ -89,30 +82,30 @@ func NewRequestLogger(log slog.Logger, message string, start time.Time) RequestL
8982
written: false,
9083
message: message,
9184
start: start,
92-
authCtx: make(map[rbac.SubjectType]authContext),
85+
actors: make(map[rbac.SubjectType]rbac.Subject),
9386
}
9487
}
9588

9689
func (c *SlogRequestLogger) WithFields(fields ...slog.Field) {
9790
c.log = c.log.With(fields...)
9891
}
9992

100-
func (c *SlogRequestLogger) WithAuthContext(id string, name string, email string, subjectType rbac.SubjectType) {
101-
c.authCtx[subjectType] = authContext{id, name, email, subjectType}
93+
func (c *SlogRequestLogger) WithAuthContext(actor rbac.Subject) {
94+
c.actors[actor.Type] = actor
10295
}
10396

10497
func (c *SlogRequestLogger) addAuthContextFields() {
105-
usr, ok := c.authCtx[rbac.SubjectTypeUser]
98+
usr, ok := c.actors[rbac.SubjectTypeUser]
10699
if ok {
107100
c.log = c.log.With(
108-
slog.F("requestor_id", usr.id),
109-
slog.F("requestor_name", usr.name),
110-
slog.F("requestor_email", usr.email),
101+
slog.F("requestor_id", usr.ID),
102+
slog.F("requestor_name", usr.FriendlyName),
103+
slog.F("requestor_email", usr.Email),
111104
)
112-
} else if len(c.authCtx) > 0 {
113-
for _, v := range c.authCtx {
105+
} else if len(c.actors) > 0 {
106+
for _, v := range c.actors {
114107
c.log = c.log.With(
115-
slog.F("requestor_name", v.name),
108+
slog.F("requestor_name", v.FriendlyName),
116109
)
117110
break
118111
}
@@ -126,7 +119,7 @@ func (c *SlogRequestLogger) WriteLog(ctx context.Context, status int) {
126119
c.written = true
127120
end := time.Now()
128121

129-
// Right before we write the log, we try to find the user in the authCtx
122+
// Right before we write the log, we try to find the user in the actors
130123
// and add the fields to the log.
131124
c.addAuthContextFields()
132125

coderd/httpmw/loggermw/loggermock/loggermock.go

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)