Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions bot.properties-example
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
LOGIN-EMAIL=example@host.com
PASSWORD=password
ROOMS=1
TRIGGER=**
SITE=stackoverflow
28 changes: 22 additions & 6 deletions src/main/java/com/gmail/inverseconduit/BotConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Integer> rooms;
Expand All @@ -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<Integer> rooms = new ArrayList<>();
Expand All @@ -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);
}

/**
Expand Down Expand Up @@ -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;
}
}
2 changes: 1 addition & 1 deletion src/main/java/com/gmail/inverseconduit/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/gmail/inverseconduit/SESite.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down
15 changes: 14 additions & 1 deletion src/test/java/com/gmail/inverseconduit/BotConfigTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -33,23 +34,35 @@ 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());
assertEquals("password", config.getLoginPassword());
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());
}
}