diff --git a/jbot-example/src/main/java/example/jbot/facebook/FbBot.java b/jbot-example/src/main/java/example/jbot/facebook/FbBot.java
index fb55688e..d51d004a 100644
--- a/jbot-example/src/main/java/example/jbot/facebook/FbBot.java
+++ b/jbot-example/src/main/java/example/jbot/facebook/FbBot.java
@@ -4,20 +4,21 @@
import me.ramswaroop.jbot.core.common.EventType;
import me.ramswaroop.jbot.core.common.JBot;
import me.ramswaroop.jbot.core.facebook.Bot;
+import me.ramswaroop.jbot.core.facebook.FacebookProperties;
import me.ramswaroop.jbot.core.facebook.models.Attachment;
import me.ramswaroop.jbot.core.facebook.models.Button;
import me.ramswaroop.jbot.core.facebook.models.Element;
import me.ramswaroop.jbot.core.facebook.models.Event;
import me.ramswaroop.jbot.core.facebook.models.Message;
import me.ramswaroop.jbot.core.facebook.models.Payload;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
+import org.springframework.web.client.RestTemplate;
/**
* A simple Facebook Bot. You can create multiple bots by just
* extending {@link Bot} class like this one. Though it is
* recommended to create only bot per jbot instance.
- *
+ *
* @author ramswaroop
* @version 17/09/2016
*/
@@ -25,31 +26,23 @@
@Profile("facebook")
public class FbBot extends Bot {
- /**
- * Set this property in {@code application.properties}.
- */
- @Value("${fbBotToken}")
- private String fbToken;
-
- /**
- * Set this property in {@code application.properties}.
- */
- @Value("${fbPageAccessToken}")
- private String pageAccessToken;
+ FbBot(FacebookProperties facebookProperties, RestTemplate restTemplate) {
+ super(facebookProperties, restTemplate);
+ }
@Override
public String getFbToken() {
- return fbToken;
+ return facebookProperties.getBotToken();
}
@Override
public String getPageAccessToken() {
- return pageAccessToken;
+ return facebookProperties.getPageAccessToken();
}
/**
* Sets the "Get Started" button with a payload "hi". It also set the "Greeting Text" which the user sees when it
- * opens up the chat window. Uncomment the {@code @PostConstruct} annotation only after you have verified your
+ * opens up the chat window. Uncomment the {@code @PostConstruct} annotation only after you have verified your
* webhook.
*/
//@PostConstruct
@@ -185,7 +178,7 @@ public void confirmTiming(Event event) {
public void askTimeForMeeting(Event event) {
if (event.getMessage().getText().contains("yes")) {
reply(event, "Okay. Would you like me to set a reminder for you?");
- nextConversation(event); // jump to next question in conversation
+ nextConversation(event); // jump to next question in conversation
} else {
reply(event, "No problem. You can always schedule one with 'setup meeting' command.");
stopConversation(event); // stop conversation only if user says no
diff --git a/jbot-example/src/main/java/example/jbot/slack/SlackBot.java b/jbot-example/src/main/java/example/jbot/slack/SlackBot.java
index d1164818..bf62b84b 100644
--- a/jbot-example/src/main/java/example/jbot/slack/SlackBot.java
+++ b/jbot-example/src/main/java/example/jbot/slack/SlackBot.java
@@ -4,10 +4,11 @@
import me.ramswaroop.jbot.core.common.EventType;
import me.ramswaroop.jbot.core.common.JBot;
import me.ramswaroop.jbot.core.slack.Bot;
+import me.ramswaroop.jbot.core.slack.SlackProperties;
+import me.ramswaroop.jbot.core.slack.SlackService;
import me.ramswaroop.jbot.core.slack.models.Event;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.web.socket.WebSocketSession;
@@ -27,12 +28,12 @@ public class SlackBot extends Bot {
private static final Logger logger = LoggerFactory.getLogger(SlackBot.class);
- /**
- * Slack token from application.properties file. You can get your slack token
- * next creating a new bot.
- */
- @Value("${slackBotToken}")
- private String slackToken;
+ private final String slackToken;
+
+ SlackBot(SlackService slackService, SlackProperties slackProperties) {
+ super(slackService);
+ this.slackToken = slackProperties.getSlackBotToken();
+ }
@Override
public String getSlackToken() {
@@ -139,7 +140,7 @@ public void confirmTiming(WebSocketSession session, Event event) {
public void askTimeForMeeting(WebSocketSession session, Event event) {
if (event.getText().contains("yes")) {
reply(session, event, "Okay. Would you like me to set a reminder for you?");
- nextConversation(event); // jump to next question in conversation
+ nextConversation(event); // jump to next question in conversation
} else {
reply(session, event, "No problem. You can always schedule one with 'setup meeting' command.");
stopConversation(event); // stop conversation only if user says no
@@ -161,4 +162,4 @@ public void askWhetherToRepeat(WebSocketSession session, Event event) {
}
stopConversation(event); // stop conversation
}
-}
\ No newline at end of file
+}
diff --git a/jbot-example/src/main/java/example/jbot/slack/SlackSlashCommand.java b/jbot-example/src/main/java/example/jbot/slack/SlackSlashCommand.java
index b24e8f78..207e551b 100644
--- a/jbot-example/src/main/java/example/jbot/slack/SlackSlashCommand.java
+++ b/jbot-example/src/main/java/example/jbot/slack/SlackSlashCommand.java
@@ -2,11 +2,12 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+
+import me.ramswaroop.jbot.core.slack.SlackProperties;
import me.ramswaroop.jbot.core.slack.models.Attachment;
import me.ramswaroop.jbot.core.slack.models.RichMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -26,13 +27,11 @@ public class SlackSlashCommand {
private static final Logger logger = LoggerFactory.getLogger(SlackSlashCommand.class);
- /**
- * The token you get while creating a new Slash Command. You
- * should paste the token in application.properties file.
- */
- @Value("${slashCommandToken}")
- private String slackToken;
+ private final SlackProperties slackProperties;
+ SlackSlashCommand(SlackProperties slackProperties) {
+ this.slackProperties = slackProperties;
+ }
/**
* Slash Command handler. When a user types for example "/app help"
@@ -65,7 +64,7 @@ public RichMessage onReceiveSlashCommand(@RequestParam("token") String token,
@RequestParam("text") String text,
@RequestParam("response_url") String responseUrl) {
// validate token
- if (!token.equals(slackToken)) {
+ if (!token.equals(slackProperties.getSlashCommandToken())) {
return new RichMessage("Sorry! You're not lucky enough to use our slack command.");
}
@@ -77,7 +76,7 @@ public RichMessage onReceiveSlashCommand(@RequestParam("token") String token,
attachments[0] = new Attachment();
attachments[0].setText("I will perform all tasks for you.");
richMessage.setAttachments(attachments);
-
+
// For debugging purpose only
if (logger.isDebugEnabled()) {
try {
@@ -86,7 +85,7 @@ public RichMessage onReceiveSlashCommand(@RequestParam("token") String token,
logger.debug("Error parsing RichMessage: ", e);
}
}
-
+
return richMessage.encodedMessage(); // don't forget to send the encoded message to Slack
}
}
diff --git a/jbot-example/src/main/java/example/jbot/slack/SlackWebhooks.java b/jbot-example/src/main/java/example/jbot/slack/SlackWebhooks.java
index 850f0bc0..27805fda 100644
--- a/jbot-example/src/main/java/example/jbot/slack/SlackWebhooks.java
+++ b/jbot-example/src/main/java/example/jbot/slack/SlackWebhooks.java
@@ -2,11 +2,12 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+
+import me.ramswaroop.jbot.core.slack.SlackProperties;
import me.ramswaroop.jbot.core.slack.models.Attachment;
import me.ramswaroop.jbot.core.slack.models.RichMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestClientException;
@@ -30,13 +31,11 @@ public class SlackWebhooks {
private static final Logger logger = LoggerFactory.getLogger(SlackWebhooks.class);
- /**
- * The Url you get while configuring a new incoming webhook
- * on Slack. You can setup a new incoming webhook
- * here.
- */
- @Value("${slackIncomingWebhookUrl}")
- private String slackIncomingWebhookUrl;
+ private final SlackProperties slackProperties;
+
+ SlackWebhooks(SlackProperties slackProperties) {
+ this.slackProperties = slackProperties;
+ }
/**
* Make a POST call to the incoming webhook url.
@@ -60,7 +59,7 @@ public void invokeSlackWebhook() {
// Always remember to send the encoded message to Slack
try {
- restTemplate.postForEntity(slackIncomingWebhookUrl, richMessage.encodedMessage(), String.class);
+ restTemplate.postForEntity(slackProperties.getSlackIncomingWebhookUrl(), richMessage.encodedMessage(), String.class);
} catch (RestClientException e) {
logger.error("Error posting to Slack Incoming Webhook: ", e);
}
diff --git a/jbot-example/src/main/resources/application.properties b/jbot-example/src/main/resources/application.properties
index 24635232..1e0b91d0 100644
--- a/jbot-example/src/main/resources/application.properties
+++ b/jbot-example/src/main/resources/application.properties
@@ -5,14 +5,14 @@ logging.level.me.ramswaroop=DEBUG
server.port=8080
# slack integrations
-rtmUrl=https://slack.com/api/rtm.start?token={token}&simple_latest&no_unreads
-slackBotToken=
-slashCommandToken=
-slackIncomingWebhookUrl=
+jbot.slack.rtmUrl=https://slack.com/api/rtm.start?token={token}&simple_latest&no_unreads
+jbot.slack.slackBotToken=
+jbot.slack.slashCommandToken=
+jbot.slack.slackIncomingWebhookUrl=
# fb bot
-fbSubscribeUrl=https://graph.facebook.com/v2.7/me/subscribed_apps
-fbSendUrl=https://graph.facebook.com/v2.6/me/messages?access_token={PAGE_ACCESS_TOKEN}
-fbMessengerProfileUrl=https://graph.facebook.com/v2.6/me/messenger_profile?access_token={PAGE_ACCESS_TOKEN}
-fbBotToken=fb_token_for_jbot
-fbPageAccessToken=
\ No newline at end of file
+jbot.facebook.subscribeUrl=https://graph.facebook.com/v2.7/me/subscribed_apps
+jbot.facebook.sendUrl=https://graph.facebook.com/v2.6/me/messages?access_token={PAGE_ACCESS_TOKEN}
+jbot.facebook.messengerProfileUrl=https://graph.facebook.com/v2.6/me/messenger_profile?access_token={PAGE_ACCESS_TOKEN}
+jbot.facebook.botToken=fb_token_for_jbot
+jbot.facebook.pageAccessToken=
diff --git a/jbot-example/src/test/java/example/jbot/facebook/FbBotTest.java b/jbot-example/src/test/java/example/jbot/facebook/FbBotTest.java
index 14ab03f3..26fca06f 100644
--- a/jbot-example/src/test/java/example/jbot/facebook/FbBotTest.java
+++ b/jbot-example/src/test/java/example/jbot/facebook/FbBotTest.java
@@ -4,6 +4,7 @@
import me.ramswaroop.jbot.core.common.Controller;
import me.ramswaroop.jbot.core.common.EventType;
import me.ramswaroop.jbot.core.facebook.Bot;
+import me.ramswaroop.jbot.core.facebook.FacebookProperties;
import me.ramswaroop.jbot.core.facebook.models.Callback;
import me.ramswaroop.jbot.core.facebook.models.Event;
import org.junit.Rule;
@@ -11,10 +12,8 @@
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.boot.test.rule.OutputCapture;
-import org.springframework.test.context.ActiveProfiles;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
@@ -26,8 +25,6 @@
* @author ramswaroop
* @version 11/03/2018
*/
-@SpringBootTest
-@ActiveProfiles("facebook")
@RunWith(MockitoJUnitRunner.class)
public class FbBotTest {
@@ -39,7 +36,7 @@ public class FbBotTest {
@Rule
public OutputCapture capture = new OutputCapture();
-
+
@Test
public void When_PostbackInCallback_Then_InvokeOnReceivePostback() throws IOException {
Callback callback = new ObjectMapper().readValue("{\"object\":\"page\",\"entry\":[{\"id\":" +
@@ -128,6 +125,10 @@ public void Given_InConversation_When_AnswerNoInCallback_Then_StopConversation()
* Facebook Bot for unit tests.
*/
public static class TestBot extends Bot {
+ public TestBot(FacebookProperties facebookProperties, RestTemplate restTemplate) {
+ super(facebookProperties, restTemplate);
+ }
+
@Override
public String getFbToken() {
return "fb_token";
@@ -142,7 +143,7 @@ public String getPageAccessToken() {
public void onReceivePostback(Event event) {
reply(event, "Postback with payload `hi|hello|hey` received from facebook.");
}
-
+
@Controller(events = EventType.QUICK_REPLY, pattern = "(yes|no)")
public void onReceiveQuickReply(Event event) {
if ("yes".equals(event.getMessage().getQuickReply().getPayload())) {
diff --git a/jbot-example/src/test/java/example/jbot/slack/SlackBotTest.java b/jbot-example/src/test/java/example/jbot/slack/SlackBotTest.java
index 67e8568d..7a783888 100644
--- a/jbot-example/src/test/java/example/jbot/slack/SlackBotTest.java
+++ b/jbot-example/src/test/java/example/jbot/slack/SlackBotTest.java
@@ -13,10 +13,8 @@
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.boot.test.rule.OutputCapture;
-import org.springframework.test.context.ActiveProfiles;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
@@ -31,8 +29,6 @@
* @author ramswaroop
* @version 20/06/2016
*/
-@SpringBootTest
-@ActiveProfiles("slack")
@RunWith(MockitoJUnitRunner.class)
public class SlackBotTest {
@@ -57,7 +53,6 @@ public void init() {
// set rtm
when(slackService.getDmChannels()).thenReturn(Arrays.asList("D1E79BACV", "C0NDSV5B8"));
when(slackService.getCurrentUser()).thenReturn(user);
- when(slackService.getWebSocketUrl()).thenReturn("");
}
@Test
@@ -201,6 +196,10 @@ public void Given_InConversation_When_AnswerNo_Then_StopConversation() {
*/
public static class TestBot extends Bot {
+ protected TestBot(SlackService slackService) {
+ super(slackService);
+ }
+
@Override
public String getSlackToken() {
return "slackToken";
@@ -277,4 +276,4 @@ public void askWhetherToRepeat(WebSocketSession session, Event event) {
stopConversation(event); // stop conversation
}
}
-}
\ No newline at end of file
+}
diff --git a/jbot-example/src/test/java/example/jbot/slack/SlackSlashCommandTest.java b/jbot-example/src/test/java/example/jbot/slack/SlackSlashCommandTest.java
index c6e57d57..db93c4af 100644
--- a/jbot-example/src/test/java/example/jbot/slack/SlackSlashCommandTest.java
+++ b/jbot-example/src/test/java/example/jbot/slack/SlackSlashCommandTest.java
@@ -4,12 +4,15 @@
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import me.ramswaroop.jbot.core.slack.SlackProperties;
+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@@ -25,6 +28,9 @@ public class SlackSlashCommandTest {
@Autowired
private MockMvc mvc;
+ @MockBean
+ private SlackProperties slackProperties;
+
@Test
public void onReceiveSlashCommand_When_IncorrectToken_Should_ReturnSorryRichMessage() throws Exception {
mvc.perform(MockMvcRequestBuilders.post("/slash-command?" +
diff --git a/jbot/src/main/java/me/ramswaroop/jbot/core/facebook/Bot.java b/jbot/src/main/java/me/ramswaroop/jbot/core/facebook/Bot.java
index 573a5537..a3883cf9 100644
--- a/jbot/src/main/java/me/ramswaroop/jbot/core/facebook/Bot.java
+++ b/jbot/src/main/java/me/ramswaroop/jbot/core/facebook/Bot.java
@@ -13,8 +13,6 @@
import me.ramswaroop.jbot.core.facebook.models.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
@@ -43,22 +41,23 @@ public abstract class Bot extends BaseBot {
private static final Logger logger = LoggerFactory.getLogger(Bot.class);
- @Value("${fbSubscribeUrl}")
- private String subscribeUrl;
+ protected final RestTemplate restTemplate;
- @Value("${fbSendUrl}")
private String fbSendUrl;
- @Value("${fbMessengerProfileUrl}")
private String fbMessengerProfileUrl;
- @Autowired
- protected RestTemplate restTemplate;
+ protected final FacebookProperties facebookProperties;
+
+ public Bot(FacebookProperties facebookProperties, RestTemplate restTemplate) {
+ this.facebookProperties = facebookProperties;
+ this.restTemplate = restTemplate;
+ }
@PostConstruct
private void constructFbSendUrl() {
- fbSendUrl = fbSendUrl.replace("{PAGE_ACCESS_TOKEN}", getPageAccessToken());
- fbMessengerProfileUrl = fbMessengerProfileUrl.replace("{PAGE_ACCESS_TOKEN}", getPageAccessToken());
+ fbSendUrl = facebookProperties.getSendUrl().replace("{PAGE_ACCESS_TOKEN}", getPageAccessToken());
+ fbMessengerProfileUrl = facebookProperties.getMessengerProfileUrl().replace("{PAGE_ACCESS_TOKEN}", getPageAccessToken());
}
/**
@@ -231,7 +230,7 @@ public final ResponseEntity setGreetingText(Payload[] greeting) {
public final void subscribeAppToPage() {
MultiValueMap params = new LinkedMultiValueMap<>();
params.set("access_token", getPageAccessToken());
- restTemplate.postForEntity(subscribeUrl, params, String.class);
+ restTemplate.postForEntity(facebookProperties.getSubscribeUrl(), params, String.class);
}
/**
diff --git a/jbot/src/main/java/me/ramswaroop/jbot/core/facebook/FacebookConfiguration.java b/jbot/src/main/java/me/ramswaroop/jbot/core/facebook/FacebookConfiguration.java
new file mode 100644
index 00000000..9d6120b8
--- /dev/null
+++ b/jbot/src/main/java/me/ramswaroop/jbot/core/facebook/FacebookConfiguration.java
@@ -0,0 +1,13 @@
+package me.ramswaroop.jbot.core.facebook;
+
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Maciej Walkowiak
+ * @version 14/04/2018
+ */
+@Configuration
+@EnableConfigurationProperties(FacebookProperties.class)
+public class FacebookConfiguration {
+}
diff --git a/jbot/src/main/java/me/ramswaroop/jbot/core/facebook/FacebookProperties.java b/jbot/src/main/java/me/ramswaroop/jbot/core/facebook/FacebookProperties.java
new file mode 100644
index 00000000..a855d1d0
--- /dev/null
+++ b/jbot/src/main/java/me/ramswaroop/jbot/core/facebook/FacebookProperties.java
@@ -0,0 +1,56 @@
+package me.ramswaroop.jbot.core.facebook;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * @author Maciej Walkowiak
+ * @version 14/04/2018
+ */
+@ConfigurationProperties("jbot.facebook")
+public class FacebookProperties {
+ private String subscribeUrl;
+ private String sendUrl;
+ private String messengerProfileUrl;
+ private String botToken;
+ private String pageAccessToken;
+
+ public String getSubscribeUrl() {
+ return subscribeUrl;
+ }
+
+ public void setSubscribeUrl(String subscribeUrl) {
+ this.subscribeUrl = subscribeUrl;
+ }
+
+ public String getSendUrl() {
+ return sendUrl;
+ }
+
+ public void setSendUrl(String sendUrl) {
+ this.sendUrl = sendUrl;
+ }
+
+ public String getMessengerProfileUrl() {
+ return messengerProfileUrl;
+ }
+
+ public void setMessengerProfileUrl(String messengerProfileUrl) {
+ this.messengerProfileUrl = messengerProfileUrl;
+ }
+
+ public String getBotToken() {
+ return botToken;
+ }
+
+ public void setBotToken(String botToken) {
+ this.botToken = botToken;
+ }
+
+ public String getPageAccessToken() {
+ return pageAccessToken;
+ }
+
+ public void setPageAccessToken(String pageAccessToken) {
+ this.pageAccessToken = pageAccessToken;
+ }
+}
diff --git a/jbot/src/main/java/me/ramswaroop/jbot/core/slack/Bot.java b/jbot/src/main/java/me/ramswaroop/jbot/core/slack/Bot.java
index 514938db..1baf6c15 100644
--- a/jbot/src/main/java/me/ramswaroop/jbot/core/slack/Bot.java
+++ b/jbot/src/main/java/me/ramswaroop/jbot/core/slack/Bot.java
@@ -41,8 +41,11 @@ public abstract class Bot extends BaseBot {
/**
* Service to access Slack APIs.
*/
- @Autowired
- protected SlackService slackService;
+ protected final SlackService slackService;
+
+ protected Bot(SlackService slackService) {
+ this.slackService = slackService;
+ }
/**
* Class extending this must implement this as it's
@@ -159,7 +162,7 @@ public final void reply(WebSocketSession session, Event event, Message reply) {
logger.error("Error sending event: {}. Exception: {}", event.getText(), e.getMessage());
}
}
-
+
public final void reply(WebSocketSession session, Event event, String text) {
reply(session, event, new Message(text));
}
diff --git a/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackConfiguration.java b/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackConfiguration.java
new file mode 100644
index 00000000..7db15ea0
--- /dev/null
+++ b/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackConfiguration.java
@@ -0,0 +1,13 @@
+package me.ramswaroop.jbot.core.slack;
+
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Maciej Walkowiak
+ * @version 14/04/2018
+ */
+@Configuration
+@EnableConfigurationProperties(SlackProperties.class)
+public class SlackConfiguration {
+}
diff --git a/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackDao.java b/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackDao.java
index 0e4f4029..461961ed 100644
--- a/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackDao.java
+++ b/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackDao.java
@@ -9,7 +9,6 @@
import me.ramswaroop.jbot.core.slack.models.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
@@ -30,23 +29,24 @@
public class SlackDao {
private static final Logger logger = LoggerFactory.getLogger(SlackDao.class);
+
+ private final SlackProperties slackProperties;
/**
- * Endpoint for RTM.start()
+ * Rest template to make http calls.
*/
- @Value("${rtmUrl}")
- private String rtmUrl;
+ private final RestTemplate restTemplate;
/**
* RTM object constructed from RTM.start().
*/
private RTM rtm;
- /**
- * Rest template to make http calls.
- */
- private RestTemplate restTemplate;
+
+ SlackDao(SlackProperties slackProperties, RestTemplate restTemplate) {
+ this.slackProperties = slackProperties;
+ this.restTemplate = restTemplate;
+ }
public RTM startRTM(String slackToken) {
try {
- restTemplate = new RestTemplate();
rtm = new RTM();
// Custom Deserializers
List> httpMessageConverters = new ArrayList<>();
@@ -84,8 +84,8 @@ public RTM deserialize(JsonParser p, DeserializationContext ctxt) {
httpMessageConverters.add(jsonConverter);
restTemplate.setMessageConverters(httpMessageConverters);
- ResponseEntity response = restTemplate.getForEntity(rtmUrl, RTM.class, slackToken);
- if (response.getBody() != null) {
+ ResponseEntity response = restTemplate.getForEntity(slackProperties.getRtmUrl(), RTM.class, slackToken);
+ if (response.hasBody()) {
rtm.setWebSocketUrl(response.getBody().getWebSocketUrl());
rtm.setDmChannels(response.getBody().getDmChannels());
rtm.setUser(response.getBody().getUser());
diff --git a/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackProperties.java b/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackProperties.java
new file mode 100644
index 00000000..98f79e10
--- /dev/null
+++ b/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackProperties.java
@@ -0,0 +1,67 @@
+package me.ramswaroop.jbot.core.slack;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * @author Maciej Walkowiak
+ * @version 14/04/2018
+ */
+@ConfigurationProperties("jbot.slack")
+public class SlackProperties {
+
+ /**
+ * Endpoint for RTM.start()
+ */
+ private String rtmUrl;
+
+ /**
+ * Slack token from application.properties file. You can get your slack token
+ * next creating a new bot.
+ */
+ private String slackBotToken;
+
+ /**
+ * The token you get while creating a new Slash Command. You
+ * should paste the token in application.properties file.
+ */
+ private String slashCommandToken;
+
+ /**
+ * The Url you get while configuring a new incoming webhook
+ * on Slack. You can setup a new incoming webhook
+ * here.
+ */
+ private String slackIncomingWebhookUrl;
+
+ public String getRtmUrl() {
+ return rtmUrl;
+ }
+
+ public void setRtmUrl(String rtmUrl) {
+ this.rtmUrl = rtmUrl;
+ }
+
+ public String getSlackBotToken() {
+ return slackBotToken;
+ }
+
+ public void setSlackBotToken(String slackBotToken) {
+ this.slackBotToken = slackBotToken;
+ }
+
+ public String getSlashCommandToken() {
+ return slashCommandToken;
+ }
+
+ public void setSlashCommandToken(String slashCommandToken) {
+ this.slashCommandToken = slashCommandToken;
+ }
+
+ public String getSlackIncomingWebhookUrl() {
+ return slackIncomingWebhookUrl;
+ }
+
+ public void setSlackIncomingWebhookUrl(String slackIncomingWebhookUrl) {
+ this.slackIncomingWebhookUrl = slackIncomingWebhookUrl;
+ }
+}
diff --git a/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackService.java b/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackService.java
index 9eae353f..b3e6f3a2 100644
--- a/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackService.java
+++ b/jbot/src/main/java/me/ramswaroop/jbot/core/slack/SlackService.java
@@ -2,7 +2,6 @@
import me.ramswaroop.jbot.core.slack.models.RTM;
import me.ramswaroop.jbot.core.slack.models.User;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@@ -17,13 +16,16 @@
@Scope("prototype")
public class SlackService {
- @Autowired
- private SlackDao slackDao;
+ private final SlackDao slackDao;
private User currentUser;
private List dmChannels;
private String webSocketUrl;
private List users;
+ public SlackService(SlackDao slackDao) {
+ this.slackDao = slackDao;
+ }
+
/**
* Start a RTM connection. Fetch the web socket url to connect to, current user details
* and list of channel ids where the current user has had conversation.
@@ -86,5 +88,5 @@ public List getUsers() {
public void setUsers(List users) {
this.users = users;
}
-
+
}
diff --git a/pom.xml b/pom.xml
index d0f9d88b..4a0141dc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,10 +5,10 @@
org.springframework.boot
spring-boot-starter-parent
- 1.4.0.RELEASE
+ 2.0.1.RELEASE
-
+
me.ramswaroop.jbot
jbot-parent
4.0.2-SNAPSHOT
@@ -61,7 +61,7 @@
UTF-8
1.8
- 1.4.0.RELEASE
+ 2.0.1.RELEASE
${java.version}
${java.version}