@@ -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