// AddFeed add a feed by its url func AddFeed(dbManager db.DatabaseManager) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // get raw via http get, parse, then add into db decoder := json.NewDecoder(r.Body) var reqPayload subscribeStruct err := decoder.Decode(&reqPayload) // TODO: validate url is an actual http address and nothing else, maybe regex? if err != nil { // throw some error log.Println(err) sendError(w, "Error: I don't understand your url :(", http.StatusInternalServerError) } else { log.Println(reqPayload.URL) if dbManager.SubscribeToFeed(reqPayload.GcmClientID, reqPayload.URL) { // TODO: send push notification when this feed is available WorkerPool.Add(retrieveFeed, reqPayload.URL, reqPayload.GcmClientID) w.WriteHeader(http.StatusAccepted) } else { log.Println("user already subscribed") sendError(w, "Error: user already subscribed", http.StatusConflict) } } }) }