@@ -2,6 +2,7 @@ package handler
22
33import (
44 "context"
5+ "crypto/subtle"
56 "encoding/json"
67 "io"
78 "log"
@@ -67,7 +68,7 @@ type IDClusterDocument struct {
6768
6869func (s * OsReleasesMiddleware ) HandleOsRelease (w http.ResponseWriter , r * http.Request ) {
6970 token := r .Header .Get ("x-api-token" )
70- if token != s .ApiToken {
71+ if subtle . ConstantTimeCompare ([] byte ( token ), [] byte ( s .ApiToken )) != 1 {
7172 w .Header ().Set ("Content-Type" , "text/plain" )
7273 w .WriteHeader (http .StatusForbidden )
7374 io .WriteString (w , "FORBIDDEN" )
@@ -87,6 +88,7 @@ func (s *OsReleasesMiddleware) HandleOsRelease(w http.ResponseWriter, r *http.Re
8788func (s * OsReleasesMiddleware ) handleInsert (w http.ResponseWriter , r * http.Request ) {
8889 var req ReleaseDocument
8990 var res IDDocument
91+ r .Body = http .MaxBytesReader (w , r .Body , 1 << 20 )
9092 err := json .NewDecoder (r .Body ).Decode (& req )
9193 if err != nil {
9294 http .Error (w , err .Error (), http .StatusBadRequest )
@@ -108,6 +110,7 @@ func (s *OsReleasesMiddleware) handleInsert(w http.ResponseWriter, r *http.Reque
108110
109111func (s * OsReleasesMiddleware ) handleGetByID (w http.ResponseWriter , r * http.Request ) {
110112 var req IDDocument
113+ r .Body = http .MaxBytesReader (w , r .Body , 1 << 20 )
111114 err := json .NewDecoder (r .Body ).Decode (& req )
112115 if err != nil {
113116 http .Error (w , err .Error (), http .StatusBadRequest )
@@ -161,6 +164,7 @@ func (p *PackageVersionsHandler) handleInsertPackages(w http.ResponseWriter, r *
161164 var req PackageDocument
162165 var res IDDocumentPackage
163166
167+ r .Body = http .MaxBytesReader (w , r .Body , 1 << 20 )
164168 err := json .NewDecoder (r .Body ).Decode (& req )
165169 if err != nil {
166170 http .Error (w , "Invalid request payload" , http .StatusBadRequest )
@@ -210,6 +214,7 @@ func (p *PackageVersionsHandler) handleInsertPackages(w http.ResponseWriter, r *
210214func (p * PackageVersionsHandler ) handleGetPackages (w http.ResponseWriter , r * http.Request ) {
211215 var req IDDocumentPackage
212216
217+ r .Body = http .MaxBytesReader (w , r .Body , 1 << 20 )
213218 err := json .NewDecoder (r .Body ).Decode (& req )
214219 if err != nil {
215220 http .Error (w , err .Error (), http .StatusBadRequest )
@@ -238,7 +243,7 @@ func (p *PackageVersionsHandler) handleGetPackages(w http.ResponseWriter, r *htt
238243
239244func (s * PackageVersionsHandler ) HandlePackage (w http.ResponseWriter , r * http.Request ) {
240245 token := r .Header .Get ("x-api-token" )
241- if token != s .ApiToken {
246+ if subtle . ConstantTimeCompare ([] byte ( token ), [] byte ( s .ApiToken )) != 1 {
242247 w .Header ().Set ("Content-Type" , "text/plain" )
243248 w .WriteHeader (http .StatusForbidden )
244249 io .WriteString (w , "FORBIDDEN" )
@@ -259,7 +264,7 @@ func (s *PackageVersionsHandler) HandlePackage(w http.ResponseWriter, r *http.Re
259264// Simplife new endpoint handling logic. Maybe define common handler for all endpoints.
260265func (s * KubernetesClusterMiddleware ) HandleKubernetesCluster (w http.ResponseWriter , r * http.Request ) {
261266 token := r .Header .Get ("x-api-token" )
262- if token != s .ApiToken {
267+ if subtle . ConstantTimeCompare ([] byte ( token ), [] byte ( s .ApiToken )) != 1 {
263268 http .Error (w , "FORBIDDEN" , http .StatusForbidden )
264269 return
265270 }
0 commit comments