@@ -144,6 +144,12 @@ func (h *RequestHandler) DeleteReminderHandler(w http.ResponseWriter, r *http.Re
144
144
func (h * RequestHandler ) WhatsappResponseHandler (w http.ResponseWriter , r * http.Request ) {
145
145
log .Printf ("WhatsApp message received." )
146
146
body , err := ioutil .ReadAll (r .Body )
147
+
148
+ if len (body ) == 0 {
149
+ handleVerification (w , r )
150
+ return
151
+ }
152
+
147
153
if err != nil {
148
154
http .Error (w , "Unable to read request body." , http .StatusBadRequest )
149
155
return
@@ -189,6 +195,21 @@ func (h *RequestHandler) WhatsappResponseHandler(w http.ResponseWriter, r *http.
189
195
}
190
196
}
191
197
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
+
192
213
func doMessageAction (c client.Client , phone string , message string , fromTime time.Time ) (utils.ReminderDetails , error ) {
193
214
if name , text , nMinutes , err := app .ParseCreateReminderMessage (message ); err == nil {
194
215
return createReminderFromMessage (c , phone , name , text , nMinutes , fromTime )
@@ -302,7 +323,7 @@ func (h RequestHandler) HandleDelete(writer http.ResponseWriter, reader *http.Re
302
323
h .DeleteReminderHandler (writer , reader )
303
324
}
304
325
305
- func (h RequestHandler ) HandleWhatsappCreate (writer http.ResponseWriter , reader * http.Request ) {
326
+ func (h RequestHandler ) HandleWhatsappCallback (writer http.ResponseWriter , reader * http.Request ) {
306
327
h .WhatsappResponseHandler (writer , reader )
307
328
}
308
329
@@ -314,7 +335,8 @@ func main() {
314
335
r .HandleFunc ("/reminders/{referenceId}" , requestHandler .HandleGet ).Methods ("GET" )
315
336
r .HandleFunc ("/reminders/{referenceId}" , requestHandler .HandleUpdate ).Methods ("PUT" )
316
337
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" )
318
340
http .Handle ("/" , r )
319
341
320
342
log .Fatal (http .ListenAndServe (":8000" , r ))
0 commit comments