Skip to content
Snippets Groups Projects
Commit 1f928f99 authored by Manuel Krombholz's avatar Manuel Krombholz
Browse files

Moved pw and username to ExternalHost

parent 54ddb9a5
Branches
No related tags found
2 merge requests!19dev to master,!13Resolve "Add mqtt username and password to MQTTReceiver.java"
Pipeline #9885 passed
This commit is part of merge request !19. Comments created here will be created in the context of that merge request.
Showing
with 88 additions and 57 deletions
...@@ -7,9 +7,14 @@ aspect ItemHistory { ...@@ -7,9 +7,14 @@ aspect ItemHistory {
public static final InfluxRoot InfluxRoot.createDefault() { public static final InfluxRoot InfluxRoot.createDefault() {
InfluxRoot result = new InfluxRoot(); InfluxRoot result = new InfluxRoot();
result.setUser(DEFAULT_USER);
result.setPassword(DEFAULT_PASSWORD); ExternalHost eh = new ExternalHost();
eh.setUserName(DEFAULT_USER);
eh.setPassword(DEFAULT_PASSWORD);
result.setHost(eh);
result.setDbName(DEFAULT_DB_NAME); result.setDbName(DEFAULT_DB_NAME);
return result; return result;
} }
......
...@@ -182,30 +182,31 @@ aspect Printing { ...@@ -182,30 +182,31 @@ aspect Printing {
} }
// ExternalHost: "hostName:port" // ExternalHost: "hostName:port"
syn String ExternalHost.prettyPrint(int defaultPort) { syn String ExternalHost.prettyPrint() {
if (getPort() == defaultPort) { if (getHostName().contains(":")) {
// default port, do not add
return getHostName(); return getHostName();
} // otherwise specify port }
return getHostName() + ":" + getPort(); return getHostName() + (getPort()>0 ? ":" + getPort() : "");
} }
// Mqtt: incoming="" outgoing="" host=""; // Mqtt: incoming="" outgoing="" host="";
eq MqttRoot.prettyPrint() { eq MqttRoot.prettyPrint() {
ExternalHost host = getHost();
return new MemberPrinter("Mqtt") return new MemberPrinter("Mqtt")
.addNonDefault("incoming", getIncomingPrefix()) .addNonDefault("incoming", getIncomingPrefix())
.addNonDefault("outgoing", getOutgoingPrefix()) .addNonDefault("outgoing", getOutgoingPrefix())
.addOptional("host", hasHost(), () -> getHost().prettyPrint(DEFAULT_PORT)) .addOptional("host", hasHost() && !host.getHostName().isEmpty(), () -> host.prettyPrint())
.build(); .build();
} }
// Influx: user="" password="" dbName="" host="" ; // Influx: user="" password="" dbName="" host="" ;
eq InfluxRoot.prettyPrint() { eq InfluxRoot.prettyPrint() {
ExternalHost host = getHost();
return new MemberPrinter("Influx") return new MemberPrinter("Influx")
.addNonDefault("user", getUser(), DEFAULT_USER) .addNonDefault("user", host.getUserName(), DEFAULT_USER)
.addNonDefault("password", getPassword(), DEFAULT_PASSWORD) .addNonDefault("password", host.getPassword(), DEFAULT_PASSWORD)
.addNonDefault("dbName", getDbName(), DEFAULT_DB_NAME) .addNonDefault("dbName", getDbName(), DEFAULT_DB_NAME)
.addOptional("host", hasHost(), () -> getHost().prettyPrint(DEFAULT_PORT)) .addOptional("host", hasHost() && !host.getHostName().isEmpty(), () -> host.prettyPrint())
.build(); .build();
} }
......
...@@ -4,16 +4,47 @@ aspect Util { ...@@ -4,16 +4,47 @@ aspect Util {
// public static ExternalHost ExternalHost.createByName(String hostName) { // public static ExternalHost ExternalHost.createByName(String hostName) {
// return new ExternalHost(hostName, 1883); // return new ExternalHost(hostName, 1883);
// } // }
public void MqttRoot.setHostByName(String hostName) { public void MqttRoot.updateHost(String hostName, int port, String username, String password) {
setHost(ExternalHost.of(hostName, DEFAULT_PORT)); if (getHost()==null) {
setHost(new ExternalHost());
}
if (hostName!=null) {
getHost().setHostName(hostName);
}
if (port>0) {
getHost().setPort(port);
}
if (username!=null) {
getHost().setUserName(username);
}
if (password!=null) {
getHost().setPassword(password);
}
flushCache(); flushCache();
} }
public void InfluxRoot.setHostByName(String hostName) {
setHost(ExternalHost.of(hostName, DEFAULT_PORT)); public void InfluxRoot.updateHost(String hostName, String username, String password) {
if (getHost()==null) {
setHost(new ExternalHost());
}
if (hostName!=null) {
getHost().setHostName(hostName);
}
if (username!=null) {
getHost().setUserName(username);
}
if (password!=null) {
getHost().setPassword(password);
}
} }
public static ExternalHost ExternalHost.of(String hostName, int defaultPort) { public static ExternalHost ExternalHost.of(String hostName, int defaultPort) {
return ExternalHost.of(hostName,defaultPort,null,null);
}
public static ExternalHost ExternalHost.of(String hostName, int defaultPort, String username, String password) {
String host = hostName; String host = hostName;
int port = defaultPort; int port = defaultPort;
if (hostName.contains(":")) { if (hostName.contains(":")) {
...@@ -21,10 +52,18 @@ aspect Util { ...@@ -21,10 +52,18 @@ aspect Util {
host = parts[0]; host = parts[0];
port = Integer.parseInt(parts[1]); port = Integer.parseInt(parts[1]);
} }
return new ExternalHost(host, port); ExternalHost eh = new ExternalHost();
eh.setHostName(host);
eh.setPort(port);
if (username!=null)
eh.setUserName(username);
if (password!=null)
eh.setPassword(password);
return eh;
} }
syn String ExternalHost.urlAsString() = String.format("http://%s:%s", getHostName(), getPort()); syn String ExternalHost.urlAsString() = String.format("http://%s", getHostName()).concat(getPort()>0 ? ""+getPort() : "");
public static Root Root.createEmptyRoot() { public static Root Root.createEmptyRoot() {
Root model = new Root(); Root model = new Root();
......
...@@ -331,9 +331,9 @@ MqttRoot mqtt_root = ...@@ -331,9 +331,9 @@ MqttRoot mqtt_root =
MqttRoot mqtt_root_body = MqttRoot mqtt_root_body =
INCOMING EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setIncomingPrefix(ensureTrailingSlash(n)); return mrb; :} INCOMING EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setIncomingPrefix(ensureTrailingSlash(n)); return mrb; :}
| OUTGOING EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setOutgoingPrefix(ensureTrailingSlash(n)); return mrb; :} | OUTGOING EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setOutgoingPrefix(ensureTrailingSlash(n)); return mrb; :}
| HOST EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setHostByName(n); return mrb; :} | HOST EQUALS TEXT.n mqtt_root_body.mrb {: mrb.updateHost(n,0,null,null); return mrb; :}
| USER EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setUser(n); return mrb; :} | USER EQUALS TEXT.n mqtt_root_body.mrb {: mrb.updateHost(null,0,n,null); return mrb; :}
| PASSWORD EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setPassword(n); return mrb; :} | PASSWORD EQUALS TEXT.n mqtt_root_body.mrb {: mrb.updateHost(null,0,null,n); return mrb; :}
| {: return new MqttRoot(); :} | {: return new MqttRoot(); :}
; ;
...@@ -345,10 +345,10 @@ InfluxRoot influx_root = ...@@ -345,10 +345,10 @@ InfluxRoot influx_root =
// Influx: user="" password="" dbName="" host="" ; // Influx: user="" password="" dbName="" host="" ;
InfluxRoot influx_root_body = InfluxRoot influx_root_body =
USER EQUALS TEXT.n influx_root_body.irb {: irb.setUser(n); return irb; :} USER EQUALS TEXT.n influx_root_body.irb {: irb.updateHost(null,n,null); return irb; :}
| PASSWORD EQUALS TEXT.n influx_root_body.irb {: irb.setPassword(n); return irb; :} | PASSWORD EQUALS TEXT.n influx_root_body.irb {: irb.updateHost(null,null,n); return irb; :}
| DB_NAME EQUALS TEXT.n influx_root_body.irb {: irb.setDbName(n); return irb; :} | DB_NAME EQUALS TEXT.n influx_root_body.irb {: irb.setDbName(n); return irb; :}
| HOST EQUALS TEXT.n influx_root_body.irb {: irb.setHostByName(n); return irb; :} | HOST EQUALS TEXT.n influx_root_body.irb {: irb.updateHost(n,null,null); return irb; :}
| {: return InfluxRoot.createDefault(); :} | {: return InfluxRoot.createDefault(); :}
; ;
......
...@@ -6,7 +6,7 @@ User : LabelledModelElement ; ...@@ -6,7 +6,7 @@ User : LabelledModelElement ;
rel Root.CurrentUser? -> User ; rel Root.CurrentUser? -> User ;
// ---------------- Util ------------------------------ // ---------------- Util ------------------------------
ExternalHost ::= <HostName:String> <Port:int> ; ExternalHost ::= <HostName:String> <Port:int> <UserName:String> <Password:String>;
// ---------------- InfluxDB ------------------------------ // ---------------- InfluxDB ------------------------------
InfluxRoot ::= <User:String> <Password:String> <DbName:String> [Host:ExternalHost] ; InfluxRoot ::= <DbName:String> [Host:ExternalHost] ;
...@@ -48,7 +48,7 @@ aspect MQTT { ...@@ -48,7 +48,7 @@ aspect MQTT {
} else { } else {
result = new MQTTSenderStub(); result = new MQTTSenderStub();
} }
return result.setHost(getHost(), getUser(), getPassword()); return result.setHost(getHost());
} }
//--- getMqttRoot --- //--- getMqttRoot ---
......
// ---------------- MQTT ------------------------------ // ---------------- MQTT ------------------------------
MqttRoot ::= Topic:MqttTopic* <IncomingPrefix:String> <OutgoingPrefix:String> <User:String> <Password:String> [Host:ExternalHost] ; MqttRoot ::= Topic:MqttTopic* <IncomingPrefix:String> <OutgoingPrefix:String> [Host:ExternalHost] ;
MqttTopic ::= <TopicString:String> ; MqttTopic ::= <TopicString:String> ;
rel Item.Topic? <-> MqttTopic.Item* ; rel Item.Topic? <-> MqttTopic.Item* ;
...@@ -15,17 +15,7 @@ public interface MQTTSender extends AutoCloseable { ...@@ -15,17 +15,7 @@ public interface MQTTSender extends AutoCloseable {
* Sets the host running the MQTT broker (no username/password set). * Sets the host running the MQTT broker (no username/password set).
* @param host host name (IP address or domain name) and port * @param host host name (IP address or domain name) and port
*/ */
default MQTTSender setHost(ExternalHost host) { MQTTSender setHost(ExternalHost host);
return setHost(host, null, null);
}
/**
* Sets the host, username and password running the MQTT broker.
* @param host host name (IP address or domain name) and port
* @param username username for authentication
* @param password password for authentication
*/
MQTTSender setHost(ExternalHost host, String username, String password);
/** /**
......
...@@ -29,11 +29,13 @@ public class MQTTSenderImpl implements MQTTSender { ...@@ -29,11 +29,13 @@ public class MQTTSenderImpl implements MQTTSender {
private TimeUnit publishTimeoutUnit; private TimeUnit publishTimeoutUnit;
@Override @Override
public MQTTSender setHost(ExternalHost host, String username, String password) { public MQTTSender setHost(ExternalHost host) {
/* The host running the MQTT broker. */ /* The host running the MQTT broker. */
URI hostUri = URI.create("tcp://" + host.getHostName() + ":" + host.getPort()); URI hostUri = URI.create("tcp://" + host.getHostName() + ":" + host.getPort());
logger.debug("Host is {}", hostUri); logger.debug("Host is {}", hostUri);
MQTT mqtt = new MQTT(); MQTT mqtt = new MQTT();
String username = host.getUserName();
String password = host.getPassword();
if (username != null && !username.isEmpty()) { if (username != null && !username.isEmpty()) {
mqtt.setUserName(username); mqtt.setUserName(username);
} }
......
...@@ -20,10 +20,12 @@ public class MQTTSenderStub implements MQTTSender { ...@@ -20,10 +20,12 @@ public class MQTTSenderStub implements MQTTSender {
private Logger logger = LogManager.getLogger(MQTTSenderStub.class); private Logger logger = LogManager.getLogger(MQTTSenderStub.class);
private PublishCallback callback; private PublishCallback callback;
public MQTTSender setHost(ExternalHost host, String username, String password) { @Override
public MQTTSender setHost(ExternalHost host) {
return this; return this;
} }
public void setCallback(PublishCallback callback) { public void setCallback(PublishCallback callback) {
this.callback = callback; this.callback = callback;
} }
......
...@@ -39,9 +39,7 @@ public class MQTTUpdater implements AutoCloseable { ...@@ -39,9 +39,7 @@ public class MQTTUpdater implements AutoCloseable {
*/ */
public void setRoot(Root root) { public void setRoot(Root root) {
ExternalHost host = root.getMqttRoot().getHost(); ExternalHost host = root.getMqttRoot().getHost();
delegatee.setHost(host.getHostName(), host.getPort()); delegatee.setHost(host);
delegatee.setUsername(root.getMqttRoot().getUser());
delegatee.setPassword(root.getMqttRoot().getPassword());
delegatee.setOnMessage((topicString, message)-> delegatee.setOnMessage((topicString, message)->
root.getMqttRoot().resolveTopic(topicString).ifPresent(topic -> root.getMqttRoot().resolveTopic(topicString).ifPresent(topic ->
topic.getItems().forEach( topic.getItems().forEach(
......
package de.tudresden.inf.st.eraser.util; package de.tudresden.inf.st.eraser.util;
import de.tudresden.inf.st.eraser.jastadd.model.ExternalHost;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.fusesource.hawtbuf.Buffer; import org.fusesource.hawtbuf.Buffer;
...@@ -51,18 +52,11 @@ public class MqttReceiver implements AutoCloseable { ...@@ -51,18 +52,11 @@ public class MqttReceiver implements AutoCloseable {
/** /**
* Sets the host to receive messages from * Sets the host to receive messages from
*/ */
public void setHost(String host, int port) { public void setHost(ExternalHost externalHost) {
this.host = URI.create("tcp://" + host + ":" + port); this.host = URI.create("tcp://" + externalHost.getHostName() + ":" + externalHost.getPort());
logger.debug("Host is {}", this.host); logger.debug("Host is {}", externalHost.getHostName());
} }
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setOnMessage(BiConsumer<String, String> callback) { public void setOnMessage(BiConsumer<String, String> callback) {
this.onMessageCallback = callback; this.onMessageCallback = callback;
......
...@@ -170,7 +170,7 @@ public class InfluxTest { ...@@ -170,7 +170,7 @@ public class InfluxTest {
influxRoot = InfluxRoot.createDefault(); influxRoot = InfluxRoot.createDefault();
// use container running influx // use container running influx
influxRoot.setDbName(InfluxTest.class.getSimpleName()); influxRoot.setDbName(InfluxTest.class.getSimpleName());
influxRoot.setHostByName(getInfluxHost()); influxRoot.setHost(new ExternalHost().setHostName(getInfluxHost()));
} }
mai.model.getRoot().setInfluxRoot(influxRoot); mai.model.getRoot().setInfluxRoot(influxRoot);
assumeTrue(influxRoot.influxAdapter().isConnected()); assumeTrue(influxRoot.influxAdapter().isConnected());
......
...@@ -158,7 +158,7 @@ public class MqttTests { ...@@ -158,7 +158,7 @@ public class MqttTests {
} }
MqttReceiver receiver = new MqttReceiver(); MqttReceiver receiver = new MqttReceiver();
List<String> expectedTopicList = Arrays.asList(expectedTopics); List<String> expectedTopicList = Arrays.asList(expectedTopics);
receiver.setHost(getMqttHost(), 1883); receiver.setHost(ExternalHost.of(getMqttHost(),1883));
receiver.setTopicsForSubscription(expectedTopics); receiver.setTopicsForSubscription(expectedTopics);
receiver.setOnMessage((topic, message) -> { receiver.setOnMessage((topic, message) -> {
assertThat(expectedTopicList).contains(topic); assertThat(expectedTopicList).contains(topic);
......
...@@ -47,7 +47,7 @@ public class IntegrationMain { ...@@ -47,7 +47,7 @@ public class IntegrationMain {
InputStream inputStream = IntegrationMain.class.getResourceAsStream(filename); InputStream inputStream = IntegrationMain.class.getResourceAsStream(filename);
String host = "localhost"; String host = "localhost";
MqttRoot mqttRoot = new MqttRoot(); MqttRoot mqttRoot = new MqttRoot();
mqttRoot.setHostByName(host); mqttRoot.setHost(new ExternalHost().setHostName(host));
// columns: time,topic,qos,message // columns: time,topic,qos,message
try (InputStreamReader inputStreamReader = new InputStreamReader(inputStream); try (InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
CSVReader reader = new CSVReaderBuilder(inputStreamReader) CSVReader reader = new CSVReaderBuilder(inputStreamReader)
...@@ -90,7 +90,7 @@ public class IntegrationMain { ...@@ -90,7 +90,7 @@ public class IntegrationMain {
// Root model = importFromLocalFile(); // Root model = importFromLocalFile();
logger.debug("Got model: {}", model.getSmartHomeEntityModel().description()); logger.debug("Got model: {}", model.getSmartHomeEntityModel().description());
MqttRoot mqttRoot = new MqttRoot(); MqttRoot mqttRoot = new MqttRoot();
mqttRoot.setHostByName("localhost"); mqttRoot.updateHost("localhost",-1,null,null);
mqttRoot.setIncomingPrefix("oh2/out/"); mqttRoot.setIncomingPrefix("oh2/out/");
MqttTopic irisStateTopic = new MqttTopic(); MqttTopic irisStateTopic = new MqttTopic();
irisStateTopic.setTopicString("iris1_item/state"); irisStateTopic.setTopicString("iris1_item/state");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment