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
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