@@ -24,6 +24,7 @@ import (
24
24
"github.com/coder/coder/v2/coderd/database"
25
25
"github.com/coder/coder/v2/coderd/database/dbtime"
26
26
"github.com/coder/coder/v2/coderd/httpapi/httpapiconstraints"
27
+ "github.com/coder/coder/v2/coderd/httpmw/loggermw"
27
28
"github.com/coder/coder/v2/coderd/rbac"
28
29
"github.com/coder/coder/v2/coderd/util/slice"
29
30
"github.com/coder/coder/v2/provisionersdk"
@@ -162,6 +163,7 @@ func ActorFromContext(ctx context.Context) (rbac.Subject, bool) {
162
163
163
164
var (
164
165
subjectProvisionerd = rbac.Subject {
166
+ Type : rbac .SubjectTypeProvisionerd ,
165
167
FriendlyName : "Provisioner Daemon" ,
166
168
ID : uuid .Nil .String (),
167
169
Roles : rbac .Roles ([]rbac.Role {
@@ -193,6 +195,7 @@ var (
193
195
}.WithCachedASTValue ()
194
196
195
197
subjectAutostart = rbac.Subject {
198
+ Type : rbac .SubjectTypeAutostart ,
196
199
FriendlyName : "Autostart" ,
197
200
ID : uuid .Nil .String (),
198
201
Roles : rbac .Roles ([]rbac.Role {
@@ -216,6 +219,7 @@ var (
216
219
217
220
// See unhanger package.
218
221
subjectHangDetector = rbac.Subject {
222
+ Type : rbac .SubjectTypeHangDetector ,
219
223
FriendlyName : "Hang Detector" ,
220
224
ID : uuid .Nil .String (),
221
225
Roles : rbac .Roles ([]rbac.Role {
@@ -236,6 +240,7 @@ var (
236
240
237
241
// See cryptokeys package.
238
242
subjectCryptoKeyRotator = rbac.Subject {
243
+ Type : rbac .SubjectTypeCryptoKeyRotator ,
239
244
FriendlyName : "Crypto Key Rotator" ,
240
245
ID : uuid .Nil .String (),
241
246
Roles : rbac .Roles ([]rbac.Role {
@@ -254,6 +259,7 @@ var (
254
259
255
260
// See cryptokeys package.
256
261
subjectCryptoKeyReader = rbac.Subject {
262
+ Type : rbac .SubjectTypeCryptoKeyReader ,
257
263
FriendlyName : "Crypto Key Reader" ,
258
264
ID : uuid .Nil .String (),
259
265
Roles : rbac .Roles ([]rbac.Role {
@@ -271,6 +277,7 @@ var (
271
277
}.WithCachedASTValue ()
272
278
273
279
subjectNotifier = rbac.Subject {
280
+ Type : rbac .SubjectTypeNotifier ,
274
281
FriendlyName : "Notifier" ,
275
282
ID : uuid .Nil .String (),
276
283
Roles : rbac .Roles ([]rbac.Role {
@@ -288,6 +295,7 @@ var (
288
295
}.WithCachedASTValue ()
289
296
290
297
subjectSystemRestricted = rbac.Subject {
298
+ Type : rbac .SubjectTypeSystemRestricted ,
291
299
FriendlyName : "System" ,
292
300
ID : uuid .Nil .String (),
293
301
Roles : rbac .Roles ([]rbac.Role {
@@ -323,6 +331,7 @@ var (
323
331
}.WithCachedASTValue ()
324
332
325
333
subjectSystemReadProvisionerDaemons = rbac.Subject {
334
+ Type : rbac .SubjectTypeSystemReadProvisionerDaemons ,
326
335
FriendlyName : "Provisioner Daemons Reader" ,
327
336
ID : uuid .Nil .String (),
328
337
Roles : rbac .Roles ([]rbac.Role {
@@ -343,47 +352,47 @@ var (
343
352
// AsProvisionerd returns a context with an actor that has permissions required
344
353
// for provisionerd to function.
345
354
func AsProvisionerd (ctx context.Context ) context.Context {
346
- return context . WithValue (ctx , authContextKey {} , subjectProvisionerd )
355
+ return As (ctx , subjectProvisionerd )
347
356
}
348
357
349
358
// AsAutostart returns a context with an actor that has permissions required
350
359
// for autostart to function.
351
360
func AsAutostart (ctx context.Context ) context.Context {
352
- return context . WithValue (ctx , authContextKey {} , subjectAutostart )
361
+ return As (ctx , subjectAutostart )
353
362
}
354
363
355
364
// AsHangDetector returns a context with an actor that has permissions required
356
365
// for unhanger.Detector to function.
357
366
func AsHangDetector (ctx context.Context ) context.Context {
358
- return context . WithValue (ctx , authContextKey {} , subjectHangDetector )
367
+ return As (ctx , subjectHangDetector )
359
368
}
360
369
361
370
// AsKeyRotator returns a context with an actor that has permissions required for rotating crypto keys.
362
371
func AsKeyRotator (ctx context.Context ) context.Context {
363
- return context . WithValue (ctx , authContextKey {} , subjectCryptoKeyRotator )
372
+ return As (ctx , subjectCryptoKeyRotator )
364
373
}
365
374
366
375
// AsKeyReader returns a context with an actor that has permissions required for reading crypto keys.
367
376
func AsKeyReader (ctx context.Context ) context.Context {
368
- return context . WithValue (ctx , authContextKey {} , subjectCryptoKeyReader )
377
+ return As (ctx , subjectCryptoKeyReader )
369
378
}
370
379
371
380
// AsNotifier returns a context with an actor that has permissions required for
372
381
// creating/reading/updating/deleting notifications.
373
382
func AsNotifier (ctx context.Context ) context.Context {
374
- return context . WithValue (ctx , authContextKey {} , subjectNotifier )
383
+ return As (ctx , subjectNotifier )
375
384
}
376
385
377
386
// AsSystemRestricted returns a context with an actor that has permissions
378
387
// required for various system operations (login, logout, metrics cache).
379
388
func AsSystemRestricted (ctx context.Context ) context.Context {
380
- return context . WithValue (ctx , authContextKey {} , subjectSystemRestricted )
389
+ return As (ctx , subjectSystemRestricted )
381
390
}
382
391
383
392
// AsSystemReadProvisionerDaemons returns a context with an actor that has permissions
384
393
// to read provisioner daemons.
385
394
func AsSystemReadProvisionerDaemons (ctx context.Context ) context.Context {
386
- return context . WithValue (ctx , authContextKey {} , subjectSystemReadProvisionerDaemons )
395
+ return As (ctx , subjectSystemReadProvisionerDaemons )
387
396
}
388
397
389
398
var AsRemoveActor = rbac.Subject {
@@ -401,6 +410,9 @@ func As(ctx context.Context, actor rbac.Subject) context.Context {
401
410
// should be removed from the context.
402
411
return context .WithValue (ctx , authContextKey {}, nil )
403
412
}
413
+ if rlogger := loggermw .RequestLoggerFromContext (ctx ); rlogger != nil {
414
+ rlogger .WithAuthContext (actor )
415
+ }
404
416
return context .WithValue (ctx , authContextKey {}, actor )
405
417
}
406
418
0 commit comments