git.s-ol.nu json-hopper / 50901e2
fix CORS etc s-ol 5 months ago
1 changed file(s) with 29 addition(s) and 20 deletion(s). Raw diff Collapse all Expand all
9191
9292 func processValue(typ string, value string) interface{} {
9393 switch typ {
94 case "null":
95 if value == "" {
96 return nil
97 }
98 case "boolean":
99 if value == "true" || value == "on" {
100 return true
101 } else if value == "false" || value == "off" {
102 return false
103 }
104 case "number":
105 val, err := strconv.ParseFloat(value, 64)
106 if err == nil {
107 return val
108 }
94109 case "integer":
95110 val, err := strconv.Atoi(value)
96 if err != nil {
97 return value
98 }
99 return val
100 case "number":
101 val, err := strconv.ParseFloat(value, 64)
102 if err != nil {
103 return value
104 }
105 return val
106 case "boolean":
107 return value == "true"
108 default:
109 return value
110 }
111 if err == nil {
112 return val
113 }
114 }
115 return value
111116 }
112117
113118 func (h *SiteHandler) collectData(r *http.Request) (map[string]interface{}, error) {
154159 return data, nil
155160 }
156161
157 func (h *SiteHandler) handlePUTPOST(w http.ResponseWriter, r *http.Request, meta map[string]interface{}) error {
162 func (h *SiteHandler) handlePOST(w http.ResponseWriter, r *http.Request, meta map[string]interface{}) error {
158163 data, err := h.collectData(r)
159164 if err != nil {
160165 return err
161166 }
162167
163168 if err := h.schema.Validate(data); err != nil {
169 log.Printf("Validation Error %s", err)
164170 return &HTTPError{http.StatusNotAcceptable, nil}
165171 }
166172
188194 return err
189195 }
190196
191 log.Printf("%s %s", r.Method, meta["id"])
197 log.Printf("POST %s", meta["id"])
192198
193199 var redirect_buf bytes.Buffer
194200 h.redirect_tpl.Execute(&redirect_buf, TemplateParams{id, key})
211217 return &HTTPError{http.StatusUnauthorized, nil}
212218 }
213219
220 w.Header().Set("Access-Control-Allow-Origin", "*")
221 w.Header().Set("Access-Control-Allow-Methods", "*")
222
214223 id := parts[2]
215224
216225 if id == "" {
218227 return &HTTPError{http.StatusMethodNotAllowed, nil}
219228 }
220229
221 return h.handlePUTPOST(w, r, nil)
230 return h.handlePOST(w, r, nil)
222231 }
223232
224233 var data map[string]interface{}
237246 return &HTTPError{http.StatusUnauthorized, nil}
238247 }
239248
240 if r.Method == "PUT" {
241 return h.handlePUTPOST(w, r, meta)
249 if r.Method == "POST" {
250 return h.handlePOST(w, r, meta)
242251 } else if r.Method == "GET" {
243252 w.Header().Set("Content-Type", "application/json")
244253 w.Write(raw_data)