@Summary Get user tokens @ID get-user-tokens @Security CoderSessionToken @Produce json @Tags Users @Param user path string true "User ID, name, or me" @Success 200 {array} codersdk.APIKey @Param include_expired query bool false "Include expired tokens in the list" @Router /api/v2/users/{user}/keys/t
(rw http.ResponseWriter, r *http.Request)
| 310 | // @Param include_expired query bool false "Include expired tokens in the list" |
| 311 | // @Router /api/v2/users/{user}/keys/tokens [get] |
| 312 | func (api *API) tokens(rw http.ResponseWriter, r *http.Request) { |
| 313 | var ( |
| 314 | ctx = r.Context() |
| 315 | user = httpmw.UserParam(r) |
| 316 | keys []database.APIKey |
| 317 | err error |
| 318 | queryStr = r.URL.Query().Get("include_all") |
| 319 | includeAll, _ = strconv.ParseBool(queryStr) |
| 320 | expiredStr = r.URL.Query().Get("include_expired") |
| 321 | includeExpired, _ = strconv.ParseBool(expiredStr) |
| 322 | ) |
| 323 | |
| 324 | if includeAll { |
| 325 | // get tokens for all users |
| 326 | keys, err = api.Database.GetAPIKeysByLoginType(ctx, database.GetAPIKeysByLoginTypeParams{ |
| 327 | LoginType: database.LoginTypeToken, |
| 328 | IncludeExpired: includeExpired, |
| 329 | }) |
| 330 | if err != nil { |
| 331 | httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{ |
| 332 | Message: "Internal error fetching API keys.", |
| 333 | Detail: err.Error(), |
| 334 | }) |
| 335 | return |
| 336 | } |
| 337 | } else { |
| 338 | // get user's tokens only |
| 339 | keys, err = api.Database.GetAPIKeysByUserID(ctx, database.GetAPIKeysByUserIDParams{LoginType: database.LoginTypeToken, UserID: user.ID, IncludeExpired: includeExpired}) |
| 340 | if err != nil { |
| 341 | httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{ |
| 342 | Message: "Internal error fetching API keys.", |
| 343 | Detail: err.Error(), |
| 344 | }) |
| 345 | return |
| 346 | } |
| 347 | } |
| 348 | |
| 349 | keys, err = AuthorizeFilter(api.HTTPAuth, r, policy.ActionRead, keys) |
| 350 | if err != nil { |
| 351 | httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{ |
| 352 | Message: "Internal error fetching keys.", |
| 353 | Detail: err.Error(), |
| 354 | }) |
| 355 | return |
| 356 | } |
| 357 | |
| 358 | var userIDs []uuid.UUID |
| 359 | for _, key := range keys { |
| 360 | userIDs = append(userIDs, key.UserID) |
| 361 | } |
| 362 | |
| 363 | users, _ := api.Database.GetUsersByIDs(ctx, userIDs) |
| 364 | usersByID := map[uuid.UUID]database.User{} |
| 365 | for _, user := range users { |
| 366 | usersByID[user.ID] = user |
| 367 | } |
| 368 | |
| 369 | var apiKeys []codersdk.APIKeyWithOwner |
no test coverage detected