From d25ab2c9f881aad6acce16b9150ed884472f3dc8 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Mon, 27 Mar 2017 16:31:22 +0300 Subject: juick-api: Messenger bot webhook --- .../src/main/java/com/juick/api/MessengerBot.java | 16 +++++++++ .../api/configuration/ApiAppConfiguration.java | 8 +++++ .../juick/api/configuration/ApiSecurityConfig.java | 2 +- .../juick/api/controllers/MessengerWebhook.java | 42 ++++++++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 juick-api/src/main/java/com/juick/api/MessengerBot.java create mode 100644 juick-api/src/main/java/com/juick/api/controllers/MessengerWebhook.java diff --git a/juick-api/src/main/java/com/juick/api/MessengerBot.java b/juick-api/src/main/java/com/juick/api/MessengerBot.java new file mode 100644 index 00000000..639adb12 --- /dev/null +++ b/juick-api/src/main/java/com/juick/api/MessengerBot.java @@ -0,0 +1,16 @@ +package com.juick.api; + +/** + * Created by vitalyster on 27.03.2017. + */ +public class MessengerBot { + private String verifyToken; + + public String getVerifyToken() { + return verifyToken; + } + + public void setVerifyToken(String verifyToken) { + this.verifyToken = verifyToken; + } +} diff --git a/juick-api/src/main/java/com/juick/api/configuration/ApiAppConfiguration.java b/juick-api/src/main/java/com/juick/api/configuration/ApiAppConfiguration.java index 5ca1def1..382b3df5 100644 --- a/juick-api/src/main/java/com/juick/api/configuration/ApiAppConfiguration.java +++ b/juick-api/src/main/java/com/juick/api/configuration/ApiAppConfiguration.java @@ -1,6 +1,7 @@ package com.juick.api.configuration; import com.juick.api.ApiServer; +import com.juick.api.MessengerBot; import com.juick.api.TGBot; import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Bean; @@ -33,6 +34,13 @@ public class ApiAppConfiguration { return new TGBot(env.getProperty("telegram_token", StringUtils.EMPTY)); } + @Bean + public MessengerBot fbBot() { + MessengerBot bot = new MessengerBot(); + bot.setVerifyToken(env.getProperty("fb_verify_token", StringUtils.EMPTY)); + return bot; + } + private static final String WS_URI = "wss://ws.juick.com/"; @Bean diff --git a/juick-api/src/main/java/com/juick/api/configuration/ApiSecurityConfig.java b/juick-api/src/main/java/com/juick/api/configuration/ApiSecurityConfig.java index 48d79e27..a8dacb03 100644 --- a/juick-api/src/main/java/com/juick/api/configuration/ApiSecurityConfig.java +++ b/juick-api/src/main/java/com/juick/api/configuration/ApiSecurityConfig.java @@ -44,7 +44,7 @@ public class ApiSecurityConfig extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers(HttpMethod.OPTIONS).permitAll() - .antMatchers("/messages", "/users", "/thread", "/tags", "/tlgmbtwbhk").permitAll() + .antMatchers("/messages", "/users", "/thread", "/tags", "/tlgmbtwbhk", "/fbwbhk").permitAll() .anyRequest().hasRole("USER") .and().httpBasic().authenticationEntryPoint(getJuickAuthenticationEntryPoint()) .and().anonymous() diff --git a/juick-api/src/main/java/com/juick/api/controllers/MessengerWebhook.java b/juick-api/src/main/java/com/juick/api/controllers/MessengerWebhook.java new file mode 100644 index 00000000..f03a3633 --- /dev/null +++ b/juick-api/src/main/java/com/juick/api/controllers/MessengerWebhook.java @@ -0,0 +1,42 @@ +package com.juick.api.controllers; + +import com.juick.api.MessengerBot; +import com.juick.server.util.HttpForbiddenException; +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +/** + * Created by vitalyster on 27.03.2017. + */ +@RestController +public class MessengerWebhook { + private static Logger logger = LoggerFactory.getLogger(MessengerWebhook.class); + + @Inject + MessengerBot fbBot; + + @RequestMapping(value = "/fbwbhk", method = RequestMethod.GET) + public ResponseEntity verifyHook(@RequestParam(name = "hub.mode") String hubMode, + @RequestParam(name = "hub.challenge") Integer hubChallenge, + @RequestParam(name = "hub.verify_token") String verifyToken) { + if (hubMode.equals("subscribe") && verifyToken.equals(fbBot.getVerifyToken())) { + return new ResponseEntity<>(hubChallenge, HttpStatus.OK); + } + throw new HttpForbiddenException(); + } + @RequestMapping(value = "/fbwbhk", method = RequestMethod.POST) + @ResponseStatus(value = HttpStatus.OK) + public void processUpdate(HttpServletRequest req) throws IOException { + String data = IOUtils.toString(req.getInputStream(), StandardCharsets.UTF_8); + logger.info("got data: {}", data); + } +} -- cgit v1.2.3