Add endpoint to handle feedback reports

This commit is contained in:
David Dworken 2022-11-16 21:42:07 -08:00
parent 8ace786f2b
commit 48c77d88f7
No known key found for this signature in database

View File

@ -42,6 +42,12 @@ type UsageData struct {
Version string `json:"version"` Version string `json:"version"`
} }
type Feedback struct {
UserId string `json:"user_id" gorm:"not null"`
Date time.Time `json:"date" gorm:"not null"`
Feedback string `json:"feedback"`
}
func getRequiredQueryParam(r *http.Request, queryParam string) string { func getRequiredQueryParam(r *http.Request, queryParam string) string {
val := r.URL.Query().Get(queryParam) val := r.URL.Query().Get(queryParam)
if val == "" { if val == "" {
@ -398,6 +404,7 @@ func OpenDB() (*gorm.DB, error) {
db.AutoMigrate(&UsageData{}) db.AutoMigrate(&UsageData{})
db.AutoMigrate(&shared.DumpRequest{}) db.AutoMigrate(&shared.DumpRequest{})
db.AutoMigrate(&shared.DeletionRequest{}) db.AutoMigrate(&shared.DeletionRequest{})
db.AutoMigrate(&Feedback{})
db.Exec("PRAGMA journal_mode = WAL") db.Exec("PRAGMA journal_mode = WAL")
return db, nil return db, nil
} }
@ -608,6 +615,20 @@ func slsaStatusHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("OK")) w.Write([]byte("OK"))
} }
func feedbackHandler(w http.ResponseWriter, r *http.Request) {
data, err := ioutil.ReadAll(r.Body)
if err != nil {
panic(err)
}
var feedback Feedback
err = json.Unmarshal(data, &feedback)
if err != nil {
panic(fmt.Sprintf("feedbackHandler: body=%#v, err=%v", data, err))
}
fmt.Printf("feedbackHandler: received request containg feedback %#v\n", feedback)
checkGormResult(GLOBAL_DB.Create(feedback))
}
type loggedResponseData struct { type loggedResponseData struct {
size int size int
} }
@ -678,6 +699,7 @@ func main() {
http.Handle("/api/v1/get-deletion-requests", withLogging(getDeletionRequestsHandler)) http.Handle("/api/v1/get-deletion-requests", withLogging(getDeletionRequestsHandler))
http.Handle("/api/v1/add-deletion-request", withLogging(addDeletionRequestHandler)) http.Handle("/api/v1/add-deletion-request", withLogging(addDeletionRequestHandler))
http.Handle("/api/v1/slsa-status", withLogging(slsaStatusHandler)) http.Handle("/api/v1/slsa-status", withLogging(slsaStatusHandler))
http.Handle("/api/v1/feedback", withLogging(feedbackHandler))
http.Handle("/healthcheck", withLogging(healthCheckHandler)) http.Handle("/healthcheck", withLogging(healthCheckHandler))
http.Handle("/internal/api/v1/usage-stats", withLogging(usageStatsHandler)) http.Handle("/internal/api/v1/usage-stats", withLogging(usageStatsHandler))
http.Handle("/internal/api/v1/stats", withLogging(statsHandler)) http.Handle("/internal/api/v1/stats", withLogging(statsHandler))