diff --git a/bot.properties-example b/bot.properties-example new file mode 100644 index 0000000..50acaf8 --- /dev/null +++ b/bot.properties-example @@ -0,0 +1,5 @@ +LOGIN-EMAIL=example@host.com +PASSWORD=password +ROOMS=1 +TRIGGER=** +SITE=stackoverflow \ No newline at end of file diff --git a/src/main/java/com/gmail/inverseconduit/BotConfig.java b/src/main/java/com/gmail/inverseconduit/BotConfig.java index cf3c84f..423823b 100644 --- a/src/main/java/com/gmail/inverseconduit/BotConfig.java +++ b/src/main/java/com/gmail/inverseconduit/BotConfig.java @@ -20,6 +20,8 @@ public class BotConfig implements CredentialsProvider { private final String loginEmail, password, trigger; + private final SESite site; + private final Path javadocs; private final List rooms; @@ -30,17 +32,17 @@ public class BotConfig implements CredentialsProvider { */ public BotConfig(Properties properties) { loginEmail = properties.getProperty("LOGIN-EMAIL"); - LOGGER.info("Setting loginEmail to " + loginEmail); + LOGGER.log(Level.CONFIG, "Setting loginEmail to " + loginEmail); password = properties.getProperty("PASSWORD"); - LOGGER.info("Setting password"); + LOGGER.log(Level.CONFIG, "Setting password"); trigger = properties.getProperty("TRIGGER", "!!"); - LOGGER.info("Setting trigger to " + trigger); + LOGGER.log(Level.CONFIG, "Setting trigger to " + trigger); String value = properties.getProperty("JAVADOCS", "javadocs"); javadocs = Paths.get(value); - LOGGER.info("Setting javadocs dir to " + javadocs); + LOGGER.log(Level.CONFIG, "Setting javadocs dir to " + javadocs); value = properties.getProperty("ROOMS", "1"); //default to "Sandbox" List rooms = new ArrayList<>(); @@ -49,11 +51,15 @@ public BotConfig(Properties properties) { Integer room = Integer.valueOf(v); rooms.add(room); } catch(NumberFormatException e) { - LOGGER.log(Level.WARNING, "Skipping unparsable room ID.", e); + LOGGER.log(Level.CONFIG, "Skipping unparsable room ID."); + LOGGER.log(Level.FINEST, "", e); } } this.rooms = Collections.unmodifiableList(rooms); - LOGGER.info("Setting rooms to " + rooms); + LOGGER.log(Level.CONFIG, "Setting rooms to " + rooms); + + this.site = SESite.fromUrl(properties.getProperty("SITE", "stackoverflow").toLowerCase()); + LOGGER.log(Level.CONFIG, "Setting site to " + site); } /** @@ -115,4 +121,14 @@ public String getIdentificator() { public String getAuthenticator() { return password; } + + /** + * Gets the Site configured as chathost and account host + * + * @return the {@link SESite} considered as host. Defaults to + * {@link SESite#STACK_OVERFLOW STACK_OVERFLOW} + */ + public SESite getSite() { + return site; + } } diff --git a/src/main/java/com/gmail/inverseconduit/Main.java b/src/main/java/com/gmail/inverseconduit/Main.java index fe41f66..9d15c71 100644 --- a/src/main/java/com/gmail/inverseconduit/Main.java +++ b/src/main/java/com/gmail/inverseconduit/Main.java @@ -42,7 +42,7 @@ public static void main(String[] args) throws Exception { // Must be leaked from main thread StackExchangeChat seInterface = new StackExchangeChat(); - if ( !seInterface.login(SESite.STACK_OVERFLOW, config)) { + if ( !seInterface.login(config.getSite(), config)) { LOGGER.log(Level.SEVERE, "Login failed!"); throw new RuntimeException("Login failure"); } diff --git a/src/main/java/com/gmail/inverseconduit/SESite.java b/src/main/java/com/gmail/inverseconduit/SESite.java index 496e402..24dfa41 100644 --- a/src/main/java/com/gmail/inverseconduit/SESite.java +++ b/src/main/java/com/gmail/inverseconduit/SESite.java @@ -46,7 +46,7 @@ public String getLoginUrl() { public static SESite fromUrl(URL url) { for (SESite site : SESite.values()) { - if (url.toString().contains(site.dir)) + if (url.getHost().equals(site.dir)) return site; } return null; @@ -58,7 +58,7 @@ public String getDir() { public static SESite fromUrl(String value) { for (SESite site : SESite.values()) { - if (value.contains(site.dir)) { return site; } + if (site.dir.equals(value)) { return site; } } return null; } diff --git a/src/test/java/com/gmail/inverseconduit/BotConfigTest.java b/src/test/java/com/gmail/inverseconduit/BotConfigTest.java index da7aae8..a42f0a1 100644 --- a/src/test/java/com/gmail/inverseconduit/BotConfigTest.java +++ b/src/test/java/com/gmail/inverseconduit/BotConfigTest.java @@ -23,6 +23,7 @@ public void defaults() { assertEquals("!!", config.getTrigger()); assertEquals(Paths.get("javadocs"), config.getJavadocsDir()); assertEquals(Arrays.asList(1), config.getRooms()); + assertEquals(SESite.STACK_OVERFLOW, config.getSite()); } @Test @@ -33,6 +34,7 @@ public void values() { props.setProperty("TRIGGER", "**"); props.setProperty("JAVADOCS", "dir"); props.setProperty("ROOMS", "1,2 , 3"); + props.setProperty("SITE", "meta.stackexchange"); BotConfig config = new BotConfig(props); assertEquals("email", config.getLoginEmail()); @@ -40,16 +42,27 @@ public void values() { assertEquals("**", config.getTrigger()); assertEquals(Paths.get("dir"), config.getJavadocsDir()); assertEquals(Arrays.asList(1, 2, 3), config.getRooms()); + assertEquals(SESite.META_STACK_EXCHANGE, config.getSite()); } @Test() public void invalid_room_gets_ignored() { Properties props = new Properties(); - props.setProperty("ROOMS", "1,foo"); + props.setProperty("ROOMS", "1,foo,#123"); BotConfig config = new BotConfig(props); assertEquals(1, config.getRooms().size()); assertEquals((Integer) 1, config.getRooms().get(0)); } + + @Test + public void site_ignores_casing() { + Properties props = new Properties(); + props.setProperty("SITE", "STACKEXCHANGE"); + + BotConfig config = new BotConfig(props); + + assertEquals(SESite.STACK_EXCHANGE, config.getSite()); + } }