package main import ( "database/sql" "fmt" "io/ioutil" "net/http" ) func uploadGo(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { return } w.Header().Set("Content-Type", "application/json") err := r.ParseForm() if err != nil { http.Error(w, `{"success": false, "message": "Request parameters not parsed"}`, 500) return } err = r.ParseMultipartForm(5 << 20) if err != nil { http.Error(w, `{"success": false, "message": "Request parameters too large"}`, 500) return } name := r.Form.Get("project-name") tag := r.Form.Get("tag") id := r.Form.Get("id") if name == "" || tag == "" || id == "" { http.Error(w, `{"success": false, "message": "Request parameters [secret, name, tag, id] not found"}`, 400) return } file, _, err := r.FormFile("file") if err != nil { http.Error(w, `{"success": false, "message": "Request parameter file not found"}`, 400) return } b, _ := ioutil.ReadAll(file) coverage := parseCoverage(string(b)) db.Exec("INSERT INTO badge (commit_hash, percentage) VALUES (?, ?)", id, coverage) _, err = db.Query("SELECT commit_hash FROM alias WHERE project_name=? AND project_tag=?", name, tag) if err == nil { db.Exec("UPDATE ALIAS SET commit_hash=? WHERE project_name=? AND project_tag=?", id, name, tag) } else if err == sql.ErrNoRows { db.Exec("INSERT INTO alias (commit_hash, project_name, project_tag VALUES (?, ?, ?)", id, name, tag) } else { panic(err) } fmt.Fprintf(w, `{"success": "true", "coverage": %s%%}`, toOneDecimal(coverage*100)) }