@@ -168,23 +168,19 @@ type submitResponse struct {
168168type submitErrorResponse struct {
169169 Error string `json:"error"`
170170 ErrorCode string `json:"errcode"`
171- }
172-
173- type submitPolicyErrorResponse struct {
174- Error string `json:"error"`
175- ErrorCode string `json:"errcode"`
176171 PolicyURL string `json:"policy_url,omitempty"`
177172}
178173
179174
175+
180176func (s * submitServer ) ServeHTTP (w http.ResponseWriter , req * http.Request ) {
181177 // if we attempt to return a response without reading the request body,
182178 // apache gets upset and returns a 500. Let's try this.
183179 defer req .Body .Close ()
184180 defer io .Copy (ioutil .Discard , req .Body )
185181
186182 if req .Method != "POST" && req .Method != "OPTIONS" {
187- writeError (w , 405 , submitErrorResponse {"Method not allowed. Use POST." , ErrCodeMethodNotAllowed })
183+ writeError (w , 405 , submitErrorResponse {Error : "Method not allowed. Use POST." , ErrorCode : ErrCodeMethodNotAllowed })
188184 return
189185 }
190186
@@ -210,7 +206,7 @@ func (s *submitServer) handleSubmission(w http.ResponseWriter, req *http.Request
210206 reportDir := filepath .Join ("bugs" , prefix )
211207 if err := os .MkdirAll (reportDir , os .ModePerm ); err != nil {
212208 log .Println ("Unable to create report directory" , err )
213- writeError (w , 500 , submitErrorResponse {"Internal error" , ErrCodeUnknown })
209+ writeError (w , 500 , submitErrorResponse {Error : "Internal error" , ErrorCode : ErrCodeUnknown })
214210 return
215211 }
216212
@@ -235,7 +231,7 @@ func (s *submitServer) handleSubmission(w http.ResponseWriter, req *http.Request
235231 log .Printf ("Unable to remove report dir %s after rejected upload: %v\n " ,
236232 reportDir , err )
237233 }
238- writeError (w , 400 , submitPolicyErrorResponse {"This server does not accept rageshakes from your application." , ErrCodeDisallowedApp , "https://github.com/matrix-org/rageshake/blob/master/docs/blocked_rageshake.md" })
234+ writeError (w , 400 , submitErrorResponse {"This server does not accept rageshakes from your application." , "RS_DISALLOWED_APP" , "https://github.com/matrix-org/rageshake/blob/master/docs/blocked_rageshake.md" })
239235 return
240236 }
241237 rejection , code := s .cfg .matchesRejectionCondition (p )
@@ -246,7 +242,7 @@ func (s *submitServer) handleSubmission(w http.ResponseWriter, req *http.Request
246242 reportDir , err )
247243 }
248244 userErrorText := fmt .Sprintf ("This server did not accept the rageshake because it matches a rejection condition: %s." , * rejection )
249- writeError (w , 400 , submitPolicyErrorResponse {userErrorText , * code , "https://github.com/matrix-org/rageshake/blob/master/docs/blocked_rageshake.md" })
245+ writeError (w , 400 , submitErrorResponse {userErrorText , * code , "https://github.com/matrix-org/rageshake/blob/master/docs/blocked_rageshake.md" })
250246 return
251247 }
252248
@@ -258,7 +254,7 @@ func (s *submitServer) handleSubmission(w http.ResponseWriter, req *http.Request
258254 resp , err := s .saveReport (req .Context (), * p , reportDir , listingURL )
259255 if err != nil {
260256 log .Println ("Error handling report submission:" , err )
261- http . Error (w , "Internal error " , 500 )
257+ writeError (w , 500 , submitErrorResponse { Error : "Could not save report " , ErrorCode : ErrCodeUnknown } )
262258 return
263259 }
264260
@@ -267,7 +263,7 @@ func (s *submitServer) handleSubmission(w http.ResponseWriter, req *http.Request
267263 json .NewEncoder (w ).Encode (resp )
268264}
269265
270- func writeError (w http.ResponseWriter , status int , response interface {} ) {
266+ func writeError (w http.ResponseWriter , status int , response submitErrorResponse ) {
271267 w .Header ().Set ("Content-Type" , "application/json" )
272268 w .WriteHeader (status )
273269 json .NewEncoder (w ).Encode (response )
@@ -279,12 +275,12 @@ func parseRequest(w http.ResponseWriter, req *http.Request, reportDir string) *p
279275 length , err := strconv .Atoi (req .Header .Get ("Content-Length" ))
280276 if err != nil {
281277 log .Println ("Couldn't parse content-length" , err )
282- writeError (w , 400 , submitErrorResponse {"Bad Content-Length header" , ErrCodeBadHeader })
278+ writeError (w , 400 , submitErrorResponse {Error : "Bad Content-Length header" , ErrorCode : ErrCodeBadHeader })
283279 return nil
284280 }
285281 if length > maxPayloadSize {
286282 log .Println ("Content-length" , length , "too large" )
287- writeError (w , 413 , submitErrorResponse {"Content too large" , ErrCodeContentTooLarge })
283+ writeError (w , 413 , submitErrorResponse {Error : "Content too large" , ErrorCode : ErrCodeContentTooLarge })
288284 return nil
289285 }
290286
@@ -295,7 +291,7 @@ func parseRequest(w http.ResponseWriter, req *http.Request, reportDir string) *p
295291 p , err1 := parseMultipartRequest (w , req , reportDir )
296292 if err1 != nil {
297293 log .Println ("Error parsing multipart data:" , err1 )
298- writeError (w , 400 , submitErrorResponse {"Bad multipart data" , ErrCodeBadContent })
294+ writeError (w , 400 , submitErrorResponse {Error : "Bad multipart data" , ErrorCode : ErrCodeBadContent })
299295 return nil
300296 }
301297 return p
@@ -305,7 +301,7 @@ func parseRequest(w http.ResponseWriter, req *http.Request, reportDir string) *p
305301 p , err := parseJSONRequest (w , req , reportDir )
306302 if err != nil {
307303 log .Println ("Error parsing JSON body" , err )
308- writeError (w , 400 , submitErrorResponse {fmt .Sprintf ("Could not decode payload: %s" , err .Error ()), ErrCodeBadContent })
304+ writeError (w , 400 , submitErrorResponse {Error : fmt .Sprintf ("Could not decode payload: %s" , err .Error ()), ErrorCode : ErrCodeBadContent })
309305 return nil
310306 }
311307
0 commit comments