MCPcopy Index your code
hub / github.com/coder/coder / expireAPIKey

Method expireAPIKey

coderd/apikey.go:440–491  ·  view source on GitHub ↗

@Summary Expire API key @ID expire-api-key @Security CoderSessionToken @Tags Users @Param user path string true "User ID, name, or me" @Param keyid path string true "Key ID" format(string) @Success 204 @Failure 404 {object} codersdk.Response @Failure 500 {object} codersdk.Response @Router /api/v2/us

(rw http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

438// @Failure 500 {object} codersdk.Response
439// @Router /api/v2/users/{user}/keys/{keyid}/expire [put]
440func (api *API) expireAPIKey(rw http.ResponseWriter, r *http.Request) {
441 var (
442 ctx = r.Context()
443 keyID = chi.URLParam(r, "keyid")
444 auditor = api.Auditor.Load()
445 aReq, commitAudit = audit.InitRequest[database.APIKey](rw, &audit.RequestParams{
446 Audit: *auditor,
447 Log: api.Logger,
448 Request: r,
449 Action: database.AuditActionWrite,
450 })
451 )
452 defer commitAudit()
453
454 if err := api.Database.InTx(func(db database.Store) error {
455 key, err := db.GetAPIKeyByID(ctx, keyID)
456 if err != nil {
457 return xerrors.Errorf("fetch API key: %w", err)
458 }
459 if !key.ExpiresAt.After(api.Clock.Now()) {
460 return nil // Already expired
461 }
462 aReq.Old = key
463 if err := db.UpdateAPIKeyByID(ctx, database.UpdateAPIKeyByIDParams{
464 ID: key.ID,
465 LastUsed: key.LastUsed,
466 ExpiresAt: dbtime.Now(),
467 IPAddress: key.IPAddress,
468 }); err != nil {
469 return xerrors.Errorf("expire API key: %w", err)
470 }
471 // Fetch the updated key for audit log.
472 newKey, err := db.GetAPIKeyByID(ctx, keyID)
473 if err != nil {
474 api.Logger.Warn(ctx, "failed to fetch updated API key for audit log", slog.Error(err))
475 } else {
476 aReq.New = newKey
477 }
478 return nil
479 }, nil); httpapi.Is404Error(err) {
480 httpapi.ResourceNotFound(rw)
481 return
482 } else if err != nil {
483 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
484 Message: "Internal error expiring API key.",
485 Detail: err.Error(),
486 })
487 return
488 }
489
490 rw.WriteHeader(http.StatusNoContent)
491}
492
493// @Summary Get token config
494// @ID get-token-config

Callers

nothing calls this directly

Calls 13

InitRequestFunction · 0.92
NowFunction · 0.92
Is404ErrorFunction · 0.92
ResourceNotFoundFunction · 0.92
WriteFunction · 0.92
ContextMethod · 0.65
InTxMethod · 0.65
GetAPIKeyByIDMethod · 0.65
UpdateAPIKeyByIDMethod · 0.65
LoadMethod · 0.45
ErrorfMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected