Skip to content

Can't list more than 200 certificates #4640

@bkcsoft

Description

@bkcsoft

Describe the bug

Listing certificates in either the UI or API is limited to at most 200 entries (limit=100, offset=100). We have on the order of thousands.

The error is on this line

offset: z.coerce.number().min(0).max(100).default(0).describe(PROJECTS.LIST_CERTIFICATES.offset),

It either needs to be set way higher, or the limit removed entirely. In short: a list function should not have a limit lower than the amount you can put in that collection.

To Reproduce

Steps to reproduce the behavior:

  1. Go to 'Certifiates'
  2. Generate more than 200 certificates
  3. List certificates by 100 per page
  4. Page 1 will load (limit=100, offset=0)`
  5. Page 2 will load (limit=100, offset=100)´
  6. Page 3 will fail to load, since offset > 100

This will work for <100 per page as well, but you still can't list more than 200 certificates

Expected behavior

I expect to be able to list all certificates

Screenshots

{"level":30,"time":1760000977443,"pid":1729348,"hostname":"infisical-01","reqId":"req-XRZmpyA7ZPgtoj","severity":"INFO","req":{"method":"GET","url":"/api/v2/workspace/<REDACTED>/certificates?offset=200&limit=100","hostname":"10.142.206.179:8080","remoteAddress":"10.142.206.179","remotePort":40376},"msg":"incoming request"}
{"level":30,"time":1760000977452,"pid":1729348,"hostname":"infisical-01","reqId":"req-XRZmpyA7ZPgtoj","orgId":"<REDACTED>","severity":"INFO","msg":"injectPermission: Injecting permissions for [permissionsForIdentity=<REDACTED>] [type=user]"}
{"level":30,"time":1760000977452,"pid":1729348,"hostname":"infisical-01","reqId":"req-XRZmpyA7ZPgtoj","orgId":"<REDACTED>","severity":"INFO","msg":"getPlan: attempting to fetch plan for [orgId=<REDACTED>] [projectId=undefined]"}
{"level":30,"time":1760000977452,"pid":1729348,"hostname":"infisical-01","reqId":"req-XRZmpyA7ZPgtoj","orgId":"<REDACTED>","severity":"INFO","msg":"getPlan: Process done for [orgId=<REDACTED>] [projectId=undefined]"}
{"level":50,"time":1760000977455,"pid":1729348,"hostname":"infisical-01","reqId":"req-XRZmpyA7ZPgtoj","severity":"ERROR","err":{"type":"ZodError","message":"[\n  {\n    \"code\": \"too_big\",\n    \"maximum\": 100,\n    \"type\": \"number\",\n    \"inclusive\": true,\n    \"exact\": false,\n    \"message\": \"Number must be less than or equal to 100\",\n    \"path\": [\n      \"offset\"\n    ]\n  }\n]","stack":"ZodError: [\n  {\n    \"code\": \"too_big\",\n    \"maximum\": 100,\n    \"type\": \"number\",\n    \"inclusive\": true,\n    \"exact\": false,\n    \"message\": \"Number must be less than or equal to 100\",\n    \"path\": [\n      \"offset\"\n    ]\n  }\n]\n    at get error [as error] (file:///opt/infisical-core/server/node_modules/zod/lib/index.mjs:587:31)\n    at ZodObject.parse (file:///opt/infisical-core/server/node_modules/zod/lib/index.mjs:663:22)\n    at <anonymous> (/opt/infisical-core/server/src/server/plugins/fastify-zod.ts:134:30)\n    at validateParam (/opt/infisical-core/server/node_modules/fastify/lib/validation.js:110:36)\n    at validate (/opt/infisical-core/server/node_modules/fastify/lib/validation.js:154:19)\n    at preValidationCallback (/opt/infisical-core/server/node_modules/fastify/lib/handleRequest.js:92:25)\n    at IncomingMessage.next (/opt/infisical-core/server/node_modules/fastify/lib/hooks.js:233:9)\n    at AsyncResource.runInAsyncScope (node:async_hooks:206:9)\n    at Object.<anonymous> (/opt/infisical-core/server/node_modules/@fastify/request-context/index.js:53:21)\n    at hookIterator (/opt/infisical-core/server/node_modules/fastify/lib/hooks.js:405:10)","aggregateErrors":[{"type":"Object","message":"Number must be less than or equal to 100","stack":"","code":"too_big","maximum":100,"inclusive":true,"exact":false,"path":["offset"]}],"issues":[{"code":"too_big","maximum":100,"type":"number","inclusive":true,"exact":false,"message":"Number must be less than or equal to 100","path":["offset"]}],"name":"ZodError","statusCode":400,"code":"FST_ERR_VALIDATION","validationContext":"querystring"},"msg":"[\n  {\n    \"code\": \"too_big\",\n    \"maximum\": 100,\n    \"type\": \"number\",\n    \"inclusive\": true,\n    \"exact\": false,\n    \"message\": \"Number must be less than or equal to 100\",\n    \"path\": [\n      \"offset\"\n    ]\n  }\n]"}
{"level":30,"time":1760000977457,"pid":1729348,"hostname":"infisical-01","reqId":"req-XRZmpyA7ZPgtoj","severity":"INFO","res":{"statusCode":422},"responseTime":13.229728698730469,"msg":"request completed"}

(orgId, workspaceSlug, and projectId redacted out of habbit)

Platform you are having the issue on:

Self-hosted. Production runs on v0.146.0 but the error is still in latest

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions