commit 21/01/2026
This commit is contained in:
12
.idea/libraries/fasterxml_jackson_core_databind.xml
generated
Normal file
12
.idea/libraries/fasterxml_jackson_core_databind.xml
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="fasterxml.jackson.core.databind" type="repository">
|
||||||
|
<properties maven-id="com.fasterxml.jackson.core:jackson-databind:2.17.2" />
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.17.2/jackson-databind-2.17.2.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.17.2/jackson-annotations-2.17.2.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.17.2/jackson-core-2.17.2.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
17
.idea/libraries/fasterxml_jackson_module_kotlin.xml
generated
Normal file
17
.idea/libraries/fasterxml_jackson_module_kotlin.xml
generated
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="fasterxml.jackson.module.kotlin" type="repository">
|
||||||
|
<properties maven-id="com.fasterxml.jackson.module:jackson-module-kotlin:2.17.2" />
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-kotlin/2.17.2/jackson-module-kotlin-2.17.2.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.17.2/jackson-databind-2.17.2.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.17.2/jackson-core-2.17.2.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.17.2/jackson-annotations-2.17.2.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/1.7.22/kotlin-reflect-1.7.22.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.7.22/kotlin-stdlib-1.7.22.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.7.22/kotlin-stdlib-common-1.7.22.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
11
.idea/libraries/slf4j_simple.xml
generated
Normal file
11
.idea/libraries/slf4j_simple.xml
generated
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="slf4j.simple" type="repository">
|
||||||
|
<properties maven-id="org.slf4j:slf4j-simple:2.0.16" />
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-simple/2.0.16/slf4j-simple-2.0.16.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
12
.idea/libraries/tools_jackson_core_databind.xml
generated
Normal file
12
.idea/libraries/tools_jackson_core_databind.xml
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="tools.jackson.core.databind" type="repository">
|
||||||
|
<properties maven-id="tools.jackson.core:jackson-databind:3.0.3" />
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/tools/jackson/core/jackson-databind/3.0.3/jackson-databind-3.0.3.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/tools/jackson/core/jackson-core/3.0.3/jackson-core-3.0.3.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
16
.idea/libraries/tools_jackson_module_kotlin.xml
generated
Normal file
16
.idea/libraries/tools_jackson_module_kotlin.xml
generated
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="tools.jackson.module.kotlin" type="repository">
|
||||||
|
<properties maven-id="tools.jackson.module:jackson-module-kotlin:3.0.3" />
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/tools/jackson/module/jackson-module-kotlin/3.0.3/jackson-module-kotlin-3.0.3.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/tools/jackson/core/jackson-databind/3.0.3/jackson-databind-3.0.3.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/tools/jackson/core/jackson-core/3.0.3/jackson-core-3.0.3.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.20/jackson-annotations-2.20.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/2.1.21/kotlin-reflect-2.1.21.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/2.1.21/kotlin-stdlib-2.1.21.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
@@ -16,5 +16,8 @@
|
|||||||
<orderEntry type="library" name="apache.activemq.client" level="project" />
|
<orderEntry type="library" name="apache.activemq.client" level="project" />
|
||||||
<orderEntry type="library" name="tinylog.impl" level="project" />
|
<orderEntry type="library" name="tinylog.impl" level="project" />
|
||||||
<orderEntry type="library" name="mysql.connector.j" level="project" />
|
<orderEntry type="library" name="mysql.connector.j" level="project" />
|
||||||
|
<orderEntry type="library" name="slf4j.simple" level="project" />
|
||||||
|
<orderEntry type="library" name="fasterxml.jackson.core.databind" level="project" />
|
||||||
|
<orderEntry type="library" name="fasterxml.jackson.module.kotlin" level="project" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
||||||
18
config.properties
Normal file
18
config.properties
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#Configuration saved on 2026-01-21T17:17:53.684082100
|
||||||
|
#Wed Jan 21 17:17:53 WIB 2026
|
||||||
|
activemq_brokerurl=tcp\://localhost\:61616
|
||||||
|
activemq_password=admin
|
||||||
|
activemq_queuename=TEST.QUEUE
|
||||||
|
activemq_username=admin
|
||||||
|
mysql_aas1=jdbc\:mysql\://192.168.10.10\:3306/aas
|
||||||
|
mysql_aas1_password=admin
|
||||||
|
mysql_aas1_username=admin
|
||||||
|
mysql_aas2=jdbc\:mysql\://192.168.10.11\:3306/aas
|
||||||
|
mysql_aas2_password=admin
|
||||||
|
mysql_aas2_username=admin
|
||||||
|
mysql_aas3=\ jdbc\:mysql\://192.168.10.12\:3306/aas
|
||||||
|
mysql_aas3_password=admin
|
||||||
|
mysql_aas3_username=admin
|
||||||
|
webpassword=admin
|
||||||
|
webport=7000
|
||||||
|
webusername=admin
|
||||||
15
html/assets/js/home.js
Normal file
15
html/assets/js/home.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
$(document).ready(function() {
|
||||||
|
// Your code here
|
||||||
|
console.log("home.js is loaded and ready.");
|
||||||
|
$('#logoutbtn').on('click', function() {
|
||||||
|
// Clear session storage on logout
|
||||||
|
fetch('/logout').then(() => {
|
||||||
|
window.location.href = '/login.html';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(window).on('beforeunload', function() {
|
||||||
|
console.log("User is leaving home.html");
|
||||||
|
// Your cleanup code here
|
||||||
|
});
|
||||||
15
html/assets/js/log.js
Normal file
15
html/assets/js/log.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
$(document).ready(function() {
|
||||||
|
// Your code here
|
||||||
|
console.log("log.js is loaded and ready.");
|
||||||
|
$('#logoutbtn').on('click', function() {
|
||||||
|
// Clear session storage on logout
|
||||||
|
fetch('/logout').then(() => {
|
||||||
|
window.location.href = '/login.html';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(window).on('beforeunload', function() {
|
||||||
|
console.log("User is leaving log.html");
|
||||||
|
// Your cleanup code here
|
||||||
|
});
|
||||||
13
html/assets/js/login.js
Normal file
13
html/assets/js/login.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
$(document).ready(function() {
|
||||||
|
// Your code here
|
||||||
|
console.log("login.js is loaded and ready.");
|
||||||
|
const params = new URLSearchParams(window.location.search);
|
||||||
|
if (params.get("error")) {
|
||||||
|
alert("Login failed. Please try again.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(window).on('beforeunload', function() {
|
||||||
|
console.log("User is leaving login.html");
|
||||||
|
// Your cleanup code here
|
||||||
|
});
|
||||||
77
html/assets/js/script.js
Normal file
77
html/assets/js/script.js
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
/**
|
||||||
|
* Checks if a string is valid (not null and not empty)
|
||||||
|
* @param {string} str
|
||||||
|
* @returns true if valid, false otherwise
|
||||||
|
*/
|
||||||
|
function ValidString(str) {
|
||||||
|
if (str) {
|
||||||
|
if (str.length > 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a POST request to the specified URL with the given data.
|
||||||
|
* @param {string} url Service endpoint URL
|
||||||
|
* @param {object} data Data to be sent in the request body
|
||||||
|
* @param {function} onSuccess callback for successful response
|
||||||
|
* @param {function} onError callback for error response
|
||||||
|
*/
|
||||||
|
function Post(url, data, onSuccess, onError) {
|
||||||
|
fetch(url, {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify(data)
|
||||||
|
}).then(response => {
|
||||||
|
if (response.ok) {
|
||||||
|
return response.json();
|
||||||
|
} else {
|
||||||
|
let str = `POST request to ${url} failed. Status: ${response.statusText}`;
|
||||||
|
throw new Error(str);
|
||||||
|
}
|
||||||
|
}).then(data => {
|
||||||
|
if (onSuccess) {
|
||||||
|
onSuccess(data);
|
||||||
|
}
|
||||||
|
}).catch(error => {
|
||||||
|
if (ValidString(error.message)) {
|
||||||
|
if (onError) {
|
||||||
|
onError(error.message);
|
||||||
|
} else {
|
||||||
|
console.error(error.message);
|
||||||
|
}
|
||||||
|
} else console.log("An unknown error occurred during POST request.");
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a GET request to the specified URL.
|
||||||
|
* @param {string} url Service endpoint URL
|
||||||
|
* @param {function} onSuccess callback for successful response
|
||||||
|
* @param {function} onError callback for error response
|
||||||
|
*/
|
||||||
|
function Get(url, onSuccess, onError) {
|
||||||
|
fetch(url).then(response => {
|
||||||
|
if (response.ok) {
|
||||||
|
return response.json();
|
||||||
|
} else {
|
||||||
|
let str = `GET request to ${url} failed. Status: ${response.statusText}`;
|
||||||
|
throw new Error(str);
|
||||||
|
}
|
||||||
|
}).then(data => {
|
||||||
|
if (onSuccess) {
|
||||||
|
onSuccess(data);
|
||||||
|
}
|
||||||
|
}).catch(error => {
|
||||||
|
if (ValidString(error.message)) {
|
||||||
|
if (onError) {
|
||||||
|
onError(error.message);
|
||||||
|
} else {
|
||||||
|
console.error(error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else console.log("An unknown error occurred during GET request.");
|
||||||
|
});
|
||||||
|
}
|
||||||
168
html/assets/js/setting.js
Normal file
168
html/assets/js/setting.js
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
$(document).ready(function () {
|
||||||
|
// Your code here
|
||||||
|
console.log("setting.js is loaded and ready.");
|
||||||
|
|
||||||
|
loadSetting();
|
||||||
|
|
||||||
|
$('#logoutbtn').on('click', function () {
|
||||||
|
// Clear session storage on logout
|
||||||
|
fetch('/logout').then(() => {
|
||||||
|
window.location.href = '/login.html';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#savefarm').on('click', function () {
|
||||||
|
saveFarmParameter();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#saveaas').on('click', function () {
|
||||||
|
saveAASParameter();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(window).on('beforeunload', function () {
|
||||||
|
console.log("User is leaving setting.html");
|
||||||
|
// Your cleanup code here
|
||||||
|
});
|
||||||
|
|
||||||
|
function loadSetting() {
|
||||||
|
Get("getSetting", function (data) {
|
||||||
|
if (data) {
|
||||||
|
if (data.farm) {
|
||||||
|
if (data.aas1) {
|
||||||
|
if (data.aas2) {
|
||||||
|
if (data.aas3) {
|
||||||
|
// all good
|
||||||
|
$('#brokerurl').val(data.farm.url);
|
||||||
|
$('#brokerusername').val(data.farm.username);
|
||||||
|
$('#brokerpassword').val(data.farm.password);
|
||||||
|
$('#brokerqueue').val(data.farm.queue);
|
||||||
|
$('#aas1url').val(data.aas1.url);
|
||||||
|
$('#aas1username').val(data.aas1.username);
|
||||||
|
$('#aas1password').val(data.aas1.password);
|
||||||
|
$('#aas2url').val(data.aas2.url);
|
||||||
|
$('#aas2username').val(data.aas2.username);
|
||||||
|
$('#aas2password').val(data.aas2.password);
|
||||||
|
$('#aas3url').val(data.aas3.url);
|
||||||
|
$('#aas3username').val(data.aas3.username);
|
||||||
|
$('#aas3password').val(data.aas3.password);
|
||||||
|
} else console.log("No AAS 3 data received");
|
||||||
|
} else console.log("No AAS 2 data received");
|
||||||
|
} else console.log("No AAS 1 data received");
|
||||||
|
} else console.log("No FARM data received");
|
||||||
|
} else console.log("No data received");
|
||||||
|
|
||||||
|
}, function (error) {
|
||||||
|
alert(error);
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveFarmParameter() {
|
||||||
|
let url = $('#brokerurl').val();
|
||||||
|
let username = $('#brokerusername').val();
|
||||||
|
let password = $('#brokerpassword').val();
|
||||||
|
let queue = $('#brokerqueue').val();
|
||||||
|
|
||||||
|
if (ValidString(url) == false) {
|
||||||
|
alert("FARM Broker URL is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ValidString(username) == false) {
|
||||||
|
alert("FARM Broker Username is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ValidString(password) == false) {
|
||||||
|
alert("FARM Broker Password is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ValidString(queue) == false) {
|
||||||
|
alert("FARM Broker Queue is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Post("saveFARM", {
|
||||||
|
farm: {
|
||||||
|
url: url,
|
||||||
|
username: username,
|
||||||
|
password: password,
|
||||||
|
queue: queue
|
||||||
|
}
|
||||||
|
|
||||||
|
}, function (data) {
|
||||||
|
alert(data.message);
|
||||||
|
}, function (error) {
|
||||||
|
alert(error);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
function saveAASParameter() {
|
||||||
|
let aas1URL = $('#aas1url').val();
|
||||||
|
let aas1username = $('#aas1username').val();
|
||||||
|
let aas1password = $('#aas1password').val();
|
||||||
|
let aas2URL = $('#aas2url').val();
|
||||||
|
let aas2username = $('#aas2username').val();
|
||||||
|
let aas2password = $('#aas2password').val();
|
||||||
|
let aas3URL = $('#aas3url').val();
|
||||||
|
let aas3username = $('#aas3username').val();
|
||||||
|
let aas3password = $('#aas3password').val();
|
||||||
|
|
||||||
|
if (ValidString(aas1URL) == false) {
|
||||||
|
alert("AAS1 URL is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ValidString(aas1username) == false) {
|
||||||
|
alert("AAS1 Username is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ValidString(aas1password) == false) {
|
||||||
|
alert("AAS1 Password is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ValidString(aas2URL) == false) {
|
||||||
|
alert("AAS2 URL is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ValidString(aas2username) == false) {
|
||||||
|
alert("AAS2 Username is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ValidString(aas2password) == false) {
|
||||||
|
alert("AAS2 Password is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ValidString(aas3URL) == false) {
|
||||||
|
alert("AAS3 URL is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ValidString(aas3username) == false) {
|
||||||
|
alert("AAS3 Username is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ValidString(aas3password) == false) {
|
||||||
|
alert("AAS3 Password is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Post("saveAAS", {
|
||||||
|
aas1: {
|
||||||
|
url: aas1URL,
|
||||||
|
username: aas1username,
|
||||||
|
password: aas1password
|
||||||
|
},
|
||||||
|
aas2: {
|
||||||
|
url: aas2URL,
|
||||||
|
username: aas2username,
|
||||||
|
password: aas2password
|
||||||
|
},
|
||||||
|
aas3: {
|
||||||
|
url: aas3URL,
|
||||||
|
username: aas3username,
|
||||||
|
password: aas3password
|
||||||
|
}
|
||||||
|
}, function (data) {
|
||||||
|
alert(data.message);
|
||||||
|
}, function (error) {
|
||||||
|
alert(error)
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
<div class="collapse navbar-collapse" id="navcol-1">
|
<div class="collapse navbar-collapse" id="navcol-1">
|
||||||
<ul class="navbar-nav me-auto">
|
<ul class="navbar-nav me-auto">
|
||||||
<li class="nav-item"><a class="nav-link active" href="#">Overview</a></li>
|
<li class="nav-item"><a class="nav-link active" href="#">Overview</a></li>
|
||||||
<li class="nav-item"><a class="nav-link" href="#">Setting</a></li>
|
<li class="nav-item"><a class="nav-link" href="setting.html">Setting</a></li>
|
||||||
<li class="nav-item"><a class="nav-link" href="#">Log</a></li>
|
<li class="nav-item"><a class="nav-link" href="log.html">Log</a></li>
|
||||||
</ul><button class="btn btn-primary" type="button">Logout</button>
|
</ul><button class="btn btn-primary" id="logoutbtn" type="button">Logout</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -30,6 +30,8 @@
|
|||||||
<div class="row"></div>
|
<div class="row"></div>
|
||||||
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
|
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
|
||||||
<script src="assets/js/jquery-3.7.1.min.js"></script>
|
<script src="assets/js/jquery-3.7.1.min.js"></script>
|
||||||
|
<script src="assets/js/home.js"></script>
|
||||||
|
<script src="assets/js/script.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -14,10 +14,10 @@
|
|||||||
<div class="container"><a class="navbar-brand d-flex align-items-center" href="#"><span class="bs-icon-sm bs-icon-rounded bs-icon-primary d-flex justify-content-center align-items-center me-2 bs-icon"><img class="img-fluid" width="80" height="80" src="assets/img/gtc%20icon%2080x80.png"></span><span>Farm To AAS</span></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navcol-1"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
|
<div class="container"><a class="navbar-brand d-flex align-items-center" href="#"><span class="bs-icon-sm bs-icon-rounded bs-icon-primary d-flex justify-content-center align-items-center me-2 bs-icon"><img class="img-fluid" width="80" height="80" src="assets/img/gtc%20icon%2080x80.png"></span><span>Farm To AAS</span></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navcol-1"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
|
||||||
<div class="collapse navbar-collapse" id="navcol-1">
|
<div class="collapse navbar-collapse" id="navcol-1">
|
||||||
<ul class="navbar-nav me-auto">
|
<ul class="navbar-nav me-auto">
|
||||||
<li class="nav-item"><a class="nav-link" href="#">Overview</a></li>
|
<li class="nav-item"><a class="nav-link" href="home.html">Overview</a></li>
|
||||||
<li class="nav-item"><a class="nav-link" href="#">Setting</a></li>
|
<li class="nav-item"><a class="nav-link" href="setting.html">Setting</a></li>
|
||||||
<li class="nav-item"><a class="nav-link active" href="#">Log</a></li>
|
<li class="nav-item"><a class="nav-link active" href="#">Log</a></li>
|
||||||
</ul><button class="btn btn-primary" type="button">Logout</button>
|
</ul><button class="btn btn-primary" id="logoutbtn" type="button">Logout</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -45,6 +45,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
|
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
|
||||||
<script src="assets/js/jquery-3.7.1.min.js"></script>
|
<script src="assets/js/jquery-3.7.1.min.js"></script>
|
||||||
|
<script src="assets/js/log.js"></script>
|
||||||
|
<script src="assets/js/script.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -28,7 +28,6 @@
|
|||||||
<div class="mb-3"><input class="form-control" type="text" name="username" placeholder="Username"></div>
|
<div class="mb-3"><input class="form-control" type="text" name="username" placeholder="Username"></div>
|
||||||
<div class="mb-3"><input class="form-control" type="password" name="password" placeholder="Password"></div>
|
<div class="mb-3"><input class="form-control" type="password" name="password" placeholder="Password"></div>
|
||||||
<div class="mb-3"><button class="btn btn-primary w-100 d-block" type="submit">Login</button></div>
|
<div class="mb-3"><button class="btn btn-primary w-100 d-block" type="submit">Login</button></div>
|
||||||
<p class="text-muted">Forgot your password?</p>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -38,6 +37,8 @@
|
|||||||
</section>
|
</section>
|
||||||
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
|
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
|
||||||
<script src="assets/js/jquery-3.7.1.min.js"></script>
|
<script src="assets/js/jquery-3.7.1.min.js"></script>
|
||||||
|
<script src="assets/js/login.js"></script>
|
||||||
|
<script src="assets/js/script.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -14,10 +14,10 @@
|
|||||||
<div class="container"><a class="navbar-brand d-flex align-items-center" href="#"><span class="bs-icon-sm bs-icon-rounded bs-icon-primary d-flex justify-content-center align-items-center me-2 bs-icon"><img class="img-fluid" width="80" height="80" src="assets/img/gtc%20icon%2080x80.png"></span><span>Farm To AAS</span></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navcol-1"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
|
<div class="container"><a class="navbar-brand d-flex align-items-center" href="#"><span class="bs-icon-sm bs-icon-rounded bs-icon-primary d-flex justify-content-center align-items-center me-2 bs-icon"><img class="img-fluid" width="80" height="80" src="assets/img/gtc%20icon%2080x80.png"></span><span>Farm To AAS</span></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navcol-1"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
|
||||||
<div class="collapse navbar-collapse" id="navcol-1">
|
<div class="collapse navbar-collapse" id="navcol-1">
|
||||||
<ul class="navbar-nav me-auto">
|
<ul class="navbar-nav me-auto">
|
||||||
<li class="nav-item"><a class="nav-link" href="#">Overview</a></li>
|
<li class="nav-item"><a class="nav-link" href="home.html">Overview</a></li>
|
||||||
<li class="nav-item"><a class="nav-link active" href="#">Setting</a></li>
|
<li class="nav-item"><a class="nav-link active" href="#">Setting</a></li>
|
||||||
<li class="nav-item"><a class="nav-link" href="#">Log</a></li>
|
<li class="nav-item"><a class="nav-link" href="log.html">Log</a></li>
|
||||||
</ul><button class="btn btn-primary" type="button">Logout</button>
|
</ul><button class="btn btn-primary" id="logoutbtn" type="button">Logout</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -49,25 +49,27 @@
|
|||||||
<h4 class="card-title">AAS Setting</h4>
|
<h4 class="card-title">AAS Setting</h4>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="row mb-1">
|
<div class="row mb-1">
|
||||||
<div class="col-6"><input class="w-100 h-100 ms-1 me-1" type="text" placeholder="AAS IP 1"></div>
|
<div class="col-6"><input class="w-100 h-100 ms-1 me-1" type="text" id="aas1url" placeholder="AAS IP 1"></div>
|
||||||
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="text" placeholder="DB Username"></div>
|
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="text" id="aas1username" placeholder="DB Username"></div>
|
||||||
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="password" placeholder="DB Password"></div>
|
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="password" id="aas1password" placeholder="DB Password"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-1">
|
<div class="row mb-1">
|
||||||
<div class="col-6"><input class="w-100 h-100 ms-1 me-1" type="text" placeholder="AAS IP 2"></div>
|
<div class="col-6"><input class="w-100 h-100 ms-1 me-1" type="text" id="aas2url" placeholder="AAS IP 2"></div>
|
||||||
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="text" placeholder="DB Username"></div>
|
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="text" id="aas2username" placeholder="DB Username"></div>
|
||||||
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="password" placeholder="DB Password"></div>
|
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="password" id="aas2password" placeholder="DB Password"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-1">
|
<div class="row mb-1">
|
||||||
<div class="col-6"><input class="w-100 h-100 ms-1 me-1" type="text" placeholder="AAS IP 3"></div>
|
<div class="col-6"><input class="w-100 h-100 ms-1 me-1" type="text" id="aas3url" placeholder="AAS IP 3"></div>
|
||||||
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="text" placeholder="DB Username"></div>
|
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="text" id="aas3username" placeholder="DB Username"></div>
|
||||||
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="password" placeholder="DB Password"></div>
|
<div class="col-3"><input class="w-100 h-100 ms-1 me-1" type="password" id="aas3password" placeholder="DB Password"></div>
|
||||||
</div>
|
</div>
|
||||||
</div><button class="btn btn-primary btn-lg mt-2" id="saveaas" type="button">Save</button>
|
</div><button class="btn btn-primary btn-lg mt-2" id="saveaas" type="button">Save</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
|
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
|
||||||
<script src="assets/js/jquery-3.7.1.min.js"></script>
|
<script src="assets/js/jquery-3.7.1.min.js"></script>
|
||||||
|
<script src="assets/js/script.js"></script>
|
||||||
|
<script src="assets/js/setting.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -11,7 +11,7 @@ fun main() {
|
|||||||
val webUI = WebUI()
|
val webUI = WebUI()
|
||||||
webUI.Start()
|
webUI.Start()
|
||||||
val activeclient = ActiveMQClient()
|
val activeclient = ActiveMQClient()
|
||||||
activeclient.Start()
|
//activeclient.Start()
|
||||||
val mysql = MySQLInjector()
|
val mysql = MySQLInjector()
|
||||||
mysql.Start()
|
mysql.Start()
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package Web
|
|||||||
|
|
||||||
import config
|
import config
|
||||||
import io.javalin.Javalin
|
import io.javalin.Javalin
|
||||||
|
import io.javalin.apibuilder.ApiBuilder.before
|
||||||
import io.javalin.apibuilder.ApiBuilder.get
|
import io.javalin.apibuilder.ApiBuilder.get
|
||||||
import io.javalin.apibuilder.ApiBuilder.path
|
import io.javalin.apibuilder.ApiBuilder.path
|
||||||
import io.javalin.apibuilder.ApiBuilder.post
|
import io.javalin.apibuilder.ApiBuilder.post
|
||||||
@@ -14,49 +15,99 @@ import org.tinylog.Logger
|
|||||||
*/
|
*/
|
||||||
class WebUI{
|
class WebUI{
|
||||||
private var app : Javalin = Javalin.create { cfg ->
|
private var app : Javalin = Javalin.create { cfg ->
|
||||||
cfg.staticFiles.add("/html")
|
cfg.staticFiles.add("/")
|
||||||
cfg.router.apiBuilder {
|
cfg.router.apiBuilder {
|
||||||
path("/"){
|
path("/"){
|
||||||
get {
|
get {
|
||||||
if (config.WebUsername==it.cookie("username")){
|
if (config.WebUsername==it.cookie("username")){
|
||||||
|
Logger.info{"${it.ip()} logged in as ${it.cookie("username")}, forward to home.html"}
|
||||||
it.redirect("home.html")
|
it.redirect("home.html")
|
||||||
} else{
|
} else{
|
||||||
|
Logger.info{"${it.ip()} have not logged in, forward to login.html"}
|
||||||
it.redirect("login.html")
|
it.redirect("login.html")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
path("login"){
|
path("login.html"){
|
||||||
post{
|
post{
|
||||||
val username = it.formParam("username")
|
val username = it.formParam("username")
|
||||||
val password = it.formParam("password")
|
val password = it.formParam("password")
|
||||||
if (config.WebUsername==username && config.WebPassword==password) {
|
if (config.WebUsername==username && config.WebPassword==password) {
|
||||||
|
Logger.info { "${it.ip()} login successful for user $username" }
|
||||||
it.cookie("username", username)
|
it.cookie("username", username)
|
||||||
it.redirect("home.html")
|
it.redirect("home.html")
|
||||||
} else {
|
} else {
|
||||||
|
Logger.info { "${it.ip()} Login failed for user $username" }
|
||||||
it.redirect("/login.html?error=1")
|
it.redirect("/login.html?error=1")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
path("logout"){
|
path("logout"){
|
||||||
get {
|
get {
|
||||||
|
Logger.info{"${it.ip()} User ${it.cookie("username")} logged out"}
|
||||||
it.removeCookie("username")
|
it.removeCookie("username")
|
||||||
it.redirect("login.html")
|
it.redirect("login.html")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
path("login.html"){
|
|
||||||
get {
|
get("getSetting"){
|
||||||
it.removeCookie("username")
|
val fd = farmData(config.ActiveMQ_BrokerURL, config.ActiveMQ_Username, config.ActiveMQ_Password, config.ActiveMQ_QueueName)
|
||||||
|
val aas1 = aasData(config.MySQL_AAS1, config.MySQL_AAS1_Username, config.MySQL_AAS1_Password)
|
||||||
|
val aas2 = aasData(config.MySQL_AAS2, config.MySQL_AAS2_Username, config.MySQL_AAS2_Password)
|
||||||
|
val aas3 = aasData(config.MySQL_AAS3, config.MySQL_AAS3_Username, config.MySQL_AAS3_Password)
|
||||||
|
val setting = getSetting(fd, aas1, aas2, aas3)
|
||||||
|
it.json(setting)
|
||||||
|
}
|
||||||
|
post("saveFARM"){
|
||||||
|
|
||||||
|
try{
|
||||||
|
val fd = it.bodyAsClass(saveFARM::class.java)
|
||||||
|
config.ActiveMQ_BrokerURL = fd.farm.url
|
||||||
|
config.ActiveMQ_Username = fd.farm.username
|
||||||
|
config.ActiveMQ_Password = fd.farm.password
|
||||||
|
config.ActiveMQ_QueueName = fd.farm.queue
|
||||||
|
config.Save()
|
||||||
|
it.json(webReply("success"))
|
||||||
|
} catch (e: Exception){
|
||||||
|
val str = "Error saving FARM settings: ${e.message}"
|
||||||
|
Logger.error { str }
|
||||||
|
it.status(500).json(webReply(str))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
path("home.html"){
|
post("saveAAS"){
|
||||||
|
|
||||||
get {
|
try {
|
||||||
if (config.WebUsername!=it.cookie("username")){
|
val ax = it.bodyAsClass(saveAAS::class.java)
|
||||||
it.redirect("login.html")
|
config.MySQL_AAS1 = ax.aas1.url
|
||||||
return@get
|
config.MySQL_AAS1_Username = ax.aas1.username
|
||||||
}
|
config.MySQL_AAS1_Password = ax.aas1.password
|
||||||
|
config.MySQL_AAS2 = ax.aas2.url
|
||||||
|
config.MySQL_AAS2_Username = ax.aas2.username
|
||||||
|
config.MySQL_AAS2_Password = ax.aas2.password
|
||||||
|
config.MySQL_AAS3 = ax.aas3.url
|
||||||
|
config.MySQL_AAS3_Username = ax.aas3.username
|
||||||
|
config.MySQL_AAS3_Password = ax.aas3.password
|
||||||
|
config.Save()
|
||||||
|
it.json(webReply("success"))
|
||||||
|
|
||||||
|
} catch (e: Exception){
|
||||||
|
val str = "Error saving AAS settings: ${e.message}"
|
||||||
|
Logger.error { str }
|
||||||
|
it.status(500).json(webReply(str))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
path("home.html"){
|
||||||
|
before{
|
||||||
|
if (config.WebUsername!=it.cookie("username")){
|
||||||
|
Logger.info {"${it.ip()} Have not logged in, forward to login.html"}
|
||||||
|
it.redirect("login.html")
|
||||||
|
return@before
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ws("/ws"){ ws ->
|
ws("/ws"){ ws ->
|
||||||
ws.onConnect { wsconnectcontext -> Logger.info { "WebSocket connected: ${wsconnectcontext.sessionId()}"; wsconnectcontext.enableAutomaticPings() } }
|
ws.onConnect { wsconnectcontext -> Logger.info { "WebSocket connected: ${wsconnectcontext.sessionId()}"; wsconnectcontext.enableAutomaticPings() } }
|
||||||
ws.onClose { wsclosecontext -> Logger.info { "WebSocket closed: ${wsclosecontext.sessionId()}" } }
|
ws.onClose { wsclosecontext -> Logger.info { "WebSocket closed: ${wsclosecontext.sessionId()}" } }
|
||||||
@@ -68,27 +119,26 @@ class WebUI{
|
|||||||
|
|
||||||
}
|
}
|
||||||
path("log.html"){
|
path("log.html"){
|
||||||
get {
|
before{
|
||||||
if (config.WebUsername!=it.cookie("username")){
|
if (config.WebUsername!=it.cookie("username")){
|
||||||
|
Logger.info{"${it.ip()} Have not logged in, forward to login.html"}
|
||||||
it.redirect("login.html")
|
it.redirect("login.html")
|
||||||
return@get
|
return@before
|
||||||
}
|
}
|
||||||
val logdate = it.queryParam("logdate")
|
|
||||||
if (logdate.isNullOrEmpty()) return@get
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
path("setting.html"){
|
path("setting.html"){
|
||||||
get {
|
before{
|
||||||
if (config.WebUsername!=it.cookie("username")){
|
if (config.WebUsername!=it.cookie("username")){
|
||||||
|
Logger.info{"${it.ip()} Have not logged in, forward to login.html"}
|
||||||
it.redirect("login.html")
|
it.redirect("login.html")
|
||||||
return@get
|
return@before
|
||||||
}
|
}
|
||||||
// TODO send config values in JSON format
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
// TODO save config values from form parameters
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
3
src/Web/aasData.kt
Normal file
3
src/Web/aasData.kt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
package Web
|
||||||
|
|
||||||
|
data class aasData(val url: String, val username: String, val password: String)
|
||||||
3
src/Web/farmData.kt
Normal file
3
src/Web/farmData.kt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
package Web
|
||||||
|
|
||||||
|
data class farmData(val url: String, val username: String, val password: String, val queue: String)
|
||||||
3
src/Web/getSetting.kt
Normal file
3
src/Web/getSetting.kt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
package Web
|
||||||
|
|
||||||
|
data class getSetting(val farm: farmData, val aas1: aasData, val aas2: aasData, val aas3: aasData)
|
||||||
3
src/Web/saveAAS.kt
Normal file
3
src/Web/saveAAS.kt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
package Web
|
||||||
|
|
||||||
|
data class saveAAS(val aas1: aasData, val aas2: aasData, val aas3: aasData)
|
||||||
3
src/Web/saveFARM.kt
Normal file
3
src/Web/saveFARM.kt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
package Web
|
||||||
|
|
||||||
|
data class saveFARM(val farm: farmData)
|
||||||
4
src/Web/webReply.kt
Normal file
4
src/Web/webReply.kt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
package Web
|
||||||
|
|
||||||
|
class webReply(val message: String) {
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user