Exemple #1
0
// 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)
			}
		}
	})
}