4
4
"encoding/json"
5
5
"net/http"
6
6
"os"
7
+ "strconv"
7
8
8
9
"github.com/go-chi/chi/v5"
9
10
"github.com/go-chi/chi/v5/middleware"
@@ -15,6 +16,8 @@ import (
15
16
"github.com/coder/code-marketplace/storage"
16
17
)
17
18
19
+ const MaxPageSizeDefault int = 200
20
+
18
21
// QueryRequest implements an untyped object. It is the data sent to the API to
19
22
// query for extensions.
20
23
// https://github.com/microsoft/vscode/blob/a69f95fdf3dc27511517eef5ff62b21c7a418015/src/vs/platform/extensionManagement/common/extensionGalleryService.ts#L338-L342
@@ -55,14 +58,16 @@ type Options struct {
55
58
Database database.Database
56
59
Logger slog.Logger
57
60
// Set to <0 to disable.
58
- RateLimit int
59
- Storage storage.Storage
61
+ RateLimit int
62
+ Storage storage.Storage
63
+ MaxPageSize int
60
64
}
61
65
62
66
type 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
66
71
}
67
72
68
73
// New creates a new API server.
@@ -71,6 +76,10 @@ func New(options *Options) *API {
71
76
options .RateLimit = 512
72
77
}
73
78
79
+ if options .MaxPageSize == 0 {
80
+ options .MaxPageSize = MaxPageSizeDefault
81
+ }
82
+
74
83
r := chi .NewRouter ()
75
84
76
85
r .Use (
@@ -84,9 +93,10 @@ func New(options *Options) *API {
84
93
)
85
94
86
95
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 ,
90
100
}
91
101
92
102
r .Get ("/" , func (rw http.ResponseWriter , r * http.Request ) {
@@ -163,10 +173,10 @@ func (api *API) extensionQuery(rw http.ResponseWriter, r *http.Request) {
163
173
})
164
174
}
165
175
for _ , filter := range query .Filters {
166
- if filter .PageSize < 0 || filter .PageSize > 50 {
176
+ if filter .PageSize < 0 || filter .PageSize > api . MaxPageSize {
167
177
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 " ,
170
180
RequestID : httpmw .RequestID (r ),
171
181
})
172
182
}
0 commit comments