44 "encoding/json"
55 "net/http"
66 "os"
7+ "strconv"
78
89 "github.com/go-chi/chi/v5"
910 "github.com/go-chi/chi/v5/middleware"
@@ -15,6 +16,8 @@ import (
1516 "github.com/coder/code-marketplace/storage"
1617)
1718
19+ const MaxPageSizeDefault int = 200
20+
1821// QueryRequest implements an untyped object. It is the data sent to the API to
1922// query for extensions.
2023// https://github.com/microsoft/vscode/blob/a69f95fdf3dc27511517eef5ff62b21c7a418015/src/vs/platform/extensionManagement/common/extensionGalleryService.ts#L338-L342
@@ -55,14 +58,16 @@ type Options struct {
5558 Database database.Database
5659 Logger slog.Logger
5760 // Set to <0 to disable.
58- RateLimit int
59- Storage storage.Storage
61+ RateLimit int
62+ Storage storage.Storage
63+ MaxPageSize int
6064}
6165
6266type API struct {
63- Database database.Database
64- Handler http.Handler
65- Logger slog.Logger
67+ Database database.Database
68+ Handler http.Handler
69+ Logger slog.Logger
70+ MaxPageSize int
6671}
6772
6873// New creates a new API server.
@@ -71,6 +76,10 @@ func New(options *Options) *API {
7176 options .RateLimit = 512
7277 }
7378
79+ if options .MaxPageSize == 0 {
80+ options .MaxPageSize = MaxPageSizeDefault
81+ }
82+
7483 r := chi .NewRouter ()
7584
7685 r .Use (
@@ -84,9 +93,10 @@ func New(options *Options) *API {
8493 )
8594
8695 api := & API {
87- Database : options .Database ,
88- Handler : r ,
89- Logger : options .Logger ,
96+ Database : options .Database ,
97+ Handler : r ,
98+ Logger : options .Logger ,
99+ MaxPageSize : options .MaxPageSize ,
90100 }
91101
92102 r .Get ("/" , func (rw http.ResponseWriter , r * http.Request ) {
@@ -163,10 +173,10 @@ func (api *API) extensionQuery(rw http.ResponseWriter, r *http.Request) {
163173 })
164174 }
165175 for _ , filter := range query .Filters {
166- if filter .PageSize < 0 || filter .PageSize > 50 {
176+ if filter .PageSize < 0 || filter .PageSize > api . MaxPageSize {
167177 httpapi .Write (rw , http .StatusBadRequest , httpapi.ErrorResponse {
168- Message : "Invalid page size" ,
169- Detail : "Check that the page size is between zero and fifty " ,
178+ Message : "The page size must be between 0 and " + strconv . Itoa ( api . MaxPageSize ) ,
179+ Detail : "Contact an administrator to increase the page size " ,
170180 RequestID : httpmw .RequestID (r ),
171181 })
172182 }
0 commit comments