The server for Open Course World
1package bcd_parser
2
3import (
4 "fmt"
5 "io/ioutil"
6 "net/http"
7 "github.com/mm2srv/smm2_parsing"
8)
9
10func HandlePage(w http.ResponseWriter, r *http.Request) {
11 w.Header().Set("Content-Type", "text/html; charset=utf-8")
12 page := `<form method="post" enctype="multipart/form-data" action="/remove_uploaded_flag"><input type="file" name="file"><input type="submit" value="Remove uploaded-flag from BCD"></form>`
13 w.Write([]byte(page))
14}
15
16func HandleProcess(w http.ResponseWriter, r *http.Request) {
17 maxSize := int64(0x5c000 * 2)
18 r.Body = http.MaxBytesReader(w, r.Body, maxSize)
19 if err := r.ParseMultipartForm(maxSize); err != nil {
20 fmt.Printf("removeUploadCheck error parsing form %v\n", err)
21 http.Error(w, err.Error(), http.StatusBadRequest)
22 return
23 }
24
25 file, fileHeader, err := r.FormFile("file")
26 if err != nil {
27 http.Error(w, err.Error(), http.StatusBadRequest)
28 return
29 }
30 defer file.Close()
31
32 rawBCD, err := ioutil.ReadAll(file)
33 if err != nil {
34 http.Error(w, err.Error(), http.StatusBadRequest)
35 return
36 }
37
38 newBCD, err := smm2_parsing.RemoveUploadedFlag(rawBCD)
39 if err != nil {
40 fmt.Printf("removeUploadCheck error %v\n", err)
41 http.Error(w, err.Error(), http.StatusBadRequest)
42 return
43 }
44
45 w.Header().Set("content-disposition", fmt.Sprintf("attachment; filename=\"%s\"", fileHeader.Filename))
46 w.Write(newBCD)
47}