@@ -16,20 +16,22 @@ import (
1616)
1717
1818type APIServer struct {
19- seriesService * service.SeriesService
20- sessionService * service.SessionService
21- buildService * service.BuildService
22- testService * service.SessionTestService
23- findingService * service.FindingService
19+ seriesService * service.SeriesService
20+ sessionService * service.SessionService
21+ buildService * service.BuildService
22+ testService * service.SessionTestService
23+ findingService * service.FindingService
24+ baseFindingService * service.BaseFindingService
2425}
2526
2627func NewAPIServer (env * app.AppEnvironment ) * APIServer {
2728 return & APIServer {
28- seriesService : service .NewSeriesService (env ),
29- sessionService : service .NewSessionService (env ),
30- buildService : service .NewBuildService (env ),
31- testService : service .NewSessionTestService (env ),
32- findingService : service .NewFindingService (env ),
29+ seriesService : service .NewSeriesService (env ),
30+ sessionService : service .NewSessionService (env ),
31+ buildService : service .NewBuildService (env ),
32+ testService : service .NewSessionTestService (env ),
33+ findingService : service .NewFindingService (env ),
34+ baseFindingService : service .NewBaseFindingService (env ),
3335 }
3436}
3537
@@ -46,6 +48,8 @@ func (c APIServer) Mux() *http.ServeMux {
4648 mux .HandleFunc ("/tests/upload_artifacts" , c .uploadTestArtifact )
4749 mux .HandleFunc ("/tests/upload" , c .uploadTest )
4850 mux .HandleFunc ("/trees" , c .getTrees )
51+ mux .HandleFunc ("/base_findings/upload" , c .uploadBaseFinding )
52+ mux .HandleFunc ("/base_findings/status" , c .baseFindingStatus )
4953 return mux
5054}
5155
@@ -206,3 +210,32 @@ func (c APIServer) getTrees(w http.ResponseWriter, r *http.Request) {
206210 FuzzConfigs : api .FuzzConfigs ,
207211 })
208212}
213+
214+ func (c APIServer ) uploadBaseFinding (w http.ResponseWriter , r * http.Request ) {
215+ req := api .ParseJSON [api.BaseFindingInfo ](w , r )
216+ if req == nil {
217+ return
218+ }
219+ err := c .baseFindingService .Upload (r .Context (), req )
220+ if errors .Is (err , service .ErrBuildNotFound ) {
221+ http .Error (w , fmt .Sprint (err ), http .StatusNotFound )
222+ return
223+ } else if err != nil {
224+ http .Error (w , fmt .Sprint (err ), http .StatusInternalServerError )
225+ return
226+ }
227+ api .ReplyJSON [interface {}](w , nil )
228+ }
229+
230+ func (c APIServer ) baseFindingStatus (w http.ResponseWriter , r * http.Request ) {
231+ req := api .ParseJSON [api.BaseFindingInfo ](w , r )
232+ if req == nil {
233+ return
234+ }
235+ resp , err := c .baseFindingService .Status (r .Context (), req )
236+ if err != nil {
237+ http .Error (w , fmt .Sprint (err ), http .StatusInternalServerError )
238+ return
239+ }
240+ api .ReplyJSON [* api.BaseFindingStatus ](w , resp )
241+ }
0 commit comments