Skip to content

Commit c5384d6

Browse files
committed
Add handling for FB verification callback
1 parent 55aea20 commit c5384d6

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

api/main.go

+24-2
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,12 @@ func (h *RequestHandler) DeleteReminderHandler(w http.ResponseWriter, r *http.Re
144144
func (h *RequestHandler) WhatsappResponseHandler(w http.ResponseWriter, r *http.Request) {
145145
log.Printf("WhatsApp message received.")
146146
body, err := ioutil.ReadAll(r.Body)
147+
148+
if len(body) == 0 {
149+
handleVerification(w, r)
150+
return
151+
}
152+
147153
if err != nil {
148154
http.Error(w, "Unable to read request body.", http.StatusBadRequest)
149155
return
@@ -189,6 +195,21 @@ func (h *RequestHandler) WhatsappResponseHandler(w http.ResponseWriter, r *http.
189195
}
190196
}
191197

198+
func handleVerification(w http.ResponseWriter, r *http.Request) {
199+
queryString := r.URL.Query()
200+
verifyToken, tokenFound := queryString["hub.verify_token"]
201+
challenge, challengeFound := queryString["hub.challenge"]
202+
203+
if tokenFound == false || challengeFound == false || verifyToken[0] != app.FB_VERIFY_TOKEN {
204+
http.Error(w, "Unrecognized request.", http.StatusBadRequest)
205+
return
206+
}
207+
w.WriteHeader(http.StatusOK)
208+
fbResp := fmt.Sprintf("%s", challenge[0])
209+
io.WriteString(w, fbResp)
210+
return
211+
}
212+
192213
func doMessageAction(c client.Client, phone string, message string, fromTime time.Time) (utils.ReminderDetails, error) {
193214
if name, text, nMinutes, err := app.ParseCreateReminderMessage(message); err == nil {
194215
return createReminderFromMessage(c, phone, name, text, nMinutes, fromTime)
@@ -302,7 +323,7 @@ func (h RequestHandler) HandleDelete(writer http.ResponseWriter, reader *http.Re
302323
h.DeleteReminderHandler(writer, reader)
303324
}
304325

305-
func (h RequestHandler) HandleWhatsappCreate(writer http.ResponseWriter, reader *http.Request) {
326+
func (h RequestHandler) HandleWhatsappCallback(writer http.ResponseWriter, reader *http.Request) {
306327
h.WhatsappResponseHandler(writer, reader)
307328
}
308329

@@ -314,7 +335,8 @@ func main() {
314335
r.HandleFunc("/reminders/{referenceId}", requestHandler.HandleGet).Methods("GET")
315336
r.HandleFunc("/reminders/{referenceId}", requestHandler.HandleUpdate).Methods("PUT")
316337
r.HandleFunc("/reminders/{referenceId}", requestHandler.HandleDelete).Methods("DELETE")
317-
r.HandleFunc("/external/reminders/whatsapp", requestHandler.HandleWhatsappCreate).Methods("POST")
338+
r.HandleFunc("/external/reminders/whatsapp", requestHandler.HandleWhatsappCallback).Methods("GET")
339+
r.HandleFunc("/external/reminders/whatsapp", requestHandler.HandleWhatsappCallback).Methods("POST")
318340
http.Handle("/", r)
319341

320342
log.Fatal(http.ListenAndServe(":8000", r))

env.sh

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
WHATSAPP_ACCOUNT_ID=""
22
WHATSAPP_TOKEN=""
3+
FB_VERIFY_TOKEN=

settings.go

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66

77
var ENV = os.Getenv("ENV")
88

9+
var FB_VERIFY_TOKEN = os.Getenv("FB_VERIFY_TOKEN")
10+
911
var WhatsappAccountId = os.Getenv("WHATSAPP_ACCOUNT_ID")
1012
var WhatsappToken = os.Getenv("WHATSAPP_TOKEN")
1113

0 commit comments

Comments
 (0)