diff options
Diffstat (limited to 'syz-cluster/pkg/controller/api.go')
| -rw-r--r-- | syz-cluster/pkg/controller/api.go | 53 |
1 files changed, 43 insertions, 10 deletions
diff --git a/syz-cluster/pkg/controller/api.go b/syz-cluster/pkg/controller/api.go index de8545319..4a230a35d 100644 --- a/syz-cluster/pkg/controller/api.go +++ b/syz-cluster/pkg/controller/api.go @@ -16,20 +16,22 @@ import ( ) type APIServer struct { - seriesService *service.SeriesService - sessionService *service.SessionService - buildService *service.BuildService - testService *service.SessionTestService - findingService *service.FindingService + seriesService *service.SeriesService + sessionService *service.SessionService + buildService *service.BuildService + testService *service.SessionTestService + findingService *service.FindingService + baseFindingService *service.BaseFindingService } func NewAPIServer(env *app.AppEnvironment) *APIServer { return &APIServer{ - seriesService: service.NewSeriesService(env), - sessionService: service.NewSessionService(env), - buildService: service.NewBuildService(env), - testService: service.NewSessionTestService(env), - findingService: service.NewFindingService(env), + seriesService: service.NewSeriesService(env), + sessionService: service.NewSessionService(env), + buildService: service.NewBuildService(env), + testService: service.NewSessionTestService(env), + findingService: service.NewFindingService(env), + baseFindingService: service.NewBaseFindingService(env), } } @@ -46,6 +48,8 @@ func (c APIServer) Mux() *http.ServeMux { mux.HandleFunc("/tests/upload_artifacts", c.uploadTestArtifact) mux.HandleFunc("/tests/upload", c.uploadTest) mux.HandleFunc("/trees", c.getTrees) + mux.HandleFunc("/base_findings/upload", c.uploadBaseFinding) + mux.HandleFunc("/base_findings/status", c.baseFindingStatus) return mux } @@ -206,3 +210,32 @@ func (c APIServer) getTrees(w http.ResponseWriter, r *http.Request) { FuzzConfigs: api.FuzzConfigs, }) } + +func (c APIServer) uploadBaseFinding(w http.ResponseWriter, r *http.Request) { + req := api.ParseJSON[api.BaseFindingInfo](w, r) + if req == nil { + return + } + err := c.baseFindingService.Upload(r.Context(), req) + if errors.Is(err, service.ErrBuildNotFound) { + http.Error(w, fmt.Sprint(err), http.StatusNotFound) + return + } else if err != nil { + http.Error(w, fmt.Sprint(err), http.StatusInternalServerError) + return + } + api.ReplyJSON[interface{}](w, nil) +} + +func (c APIServer) baseFindingStatus(w http.ResponseWriter, r *http.Request) { + req := api.ParseJSON[api.BaseFindingInfo](w, r) + if req == nil { + return + } + resp, err := c.baseFindingService.Status(r.Context(), req) + if err != nil { + http.Error(w, fmt.Sprint(err), http.StatusInternalServerError) + return + } + api.ReplyJSON[*api.BaseFindingStatus](w, resp) +} |
