diff --git a/backend/broker.ts b/backend/broker.ts
index fc012a3..e672cb6 100644
--- a/backend/broker.ts
+++ b/backend/broker.ts
@@ -1,13 +1,15 @@
import { exec } from 'child_process';
import * as fs from 'fs';
import * as nodemailer from 'nodemailer';
+import { fileURLToPath } from 'url';
+import * as path from 'path';
// Config for scheduling the next time the main process (sending of horoscope) is run
-/*interface Config {
+interface Config {
emailReceiver: string;
mailHost: string;
mailPort: number;
-}*/
+}
// Node structure for the Parse Tree (it's a degenerated tree with one or zero children per node)
interface Node {
@@ -16,7 +18,7 @@ interface Node {
value?: string;
}
-//var config : Config;
+var config : Config;
export function executeCommand(): void {
@@ -35,9 +37,9 @@ export function executeCommand(): void {
}
//Load config once
- /*if (config == undefined) {
+ if (config == undefined) {
config = loadConfig();
- } */
+ }
console.log(`Horoscope received; sending E-Mail next`);
sendEmail(stdout);
@@ -48,28 +50,33 @@ export function executeCommand(): void {
executeCommand();
// Load the Configuration
-/*function loadConfig(): Config {
+function loadConfig(): Config {
console.log(`Load Config`);
- const data = fs.readFileSync('config.json', 'utf-8');
+ const __filename = fileURLToPath(import.meta.url);
+ const __dirname = path.dirname(__filename);
+ const configPath = path.join(__dirname, 'config.json');
+
+ const data = fs.readFileSync(configPath, 'utf-8');
+
return JSON.parse(data);
-}*/
+}
// Send E-Mail
async function sendEmail(content: string) {
// Create Transporter
const transporter = nodemailer.createTransport({
- host: "mailhog.mailhog.svc.cluster.local", //config.mailHost,
- port: 1025, //config.mailPort,
+ host: config.mailHost, //"mailhog.mailhog.svc.cluster.local", //config.mailHost,
+ port: config.mailPort, //1025, //config.mailPort,
secure: false
});
try {
const info = await transporter.sendMail({
from: '"The Oracle" " + node.value + " " + node.value + "" + line + "
";
+ }
+ else if (line.startsWith("Judgement")) {
+ const judgement = { type: "Judgement" };
+ currentNode.child = judgement;
+ currentNode = judgement;
+ currentNode.value = "" + line + "
";
+ }
+ else if (line.startsWith("Images")) {
+ const images = { type: "Images" };
+ currentNode.child = images;
+ currentNode = images;
+ currentNode.value = "" + line + "
";
+ }
+ else if (line.startsWith("~") && currentNode.type != "ChangingLines") {
+ const changingLines = { type: "ChangingLines" };
+ currentNode.child = changingLines;
+ currentNode = changingLines;
+ currentNode.value = line;
+ }
+ else {
+ currentNode.value = currentNode.value + line + "
";
+ }
+ }
+ return root;
+}
+// Generate HTML from Parse Tree
+function render(node) {
+ if (node == undefined) {
+ console.log("I-Ching-Broker: Rendering of nodes finished!");
+ return "";
+ }
+ var outputHTML = "";
+ switch (node.type) {
+ case "Root":
+ return render(node.child);
+ case "Hexagram":
+ node.value = node.value?.replace("", "
");
+ node.value = node.value?.replace("
", "");
+ node.value = node.value?.replace("
", " - ");
+ outputHTML = "
" + node.value + "
"; + outputHTML = outputHTML + render(node.child); + return outputHTML; + } +} diff --git a/dist/backend/config.json b/dist/backend/config.json new file mode 100644 index 0000000..121311d --- /dev/null +++ b/dist/backend/config.json @@ -0,0 +1,5 @@ +{ + "emailReceiver": "test@mailhog.local", + "mailHost": "mailhog.mailhog.svc.cluster.local", + "mailPort": 1025 +} \ No newline at end of file diff --git a/dist/backend/server.js b/dist/backend/server.js new file mode 100644 index 0000000..b0f87f6 --- /dev/null +++ b/dist/backend/server.js @@ -0,0 +1,15 @@ +import express from 'express'; +import cors from 'cors'; +import { executeCommand } from './broker.js'; +const app = express(); +const port = 8090; +app.use(cors()); +app.post('/iching/api/command', (req, res) => { + //TODO no logging from inside this method??? + console.log(`Backend-Server: receiving POST to /iching/api/command`); + executeCommand(); + res.status(200).send('Backend-Server: Broker was called\n'); +}); +app.listen(port, '0.0.0.0', () => { + console.log(`Backend-Server running on http://0.0.0.0:${port}`); +}); diff --git a/dist/frontend/deploy.js b/dist/frontend/deploy.js new file mode 100644 index 0000000..402c906 --- /dev/null +++ b/dist/frontend/deploy.js @@ -0,0 +1 @@ +window.DEPLOY_MODE = 'local'; diff --git a/dist/frontend/event.mjs b/dist/frontend/event.mjs new file mode 100644 index 0000000..c0fa2db --- /dev/null +++ b/dist/frontend/event.mjs @@ -0,0 +1,18 @@ +"use strict"; +function handleClick() { + console.log("Der Button wurde geklickt!"); + //const deployMode = (window as { DEPLOY_MODE?: 'docker' | 'k8s' }).DEPLOY_MODE ?? 'k8s'; + const deployMode = window.DEPLOY_MODE ?? 'k8s'; + const endpoint = deployMode === 'docker' || deployMode === 'local' + ? 'http://localhost:8090/iching/api/command' + : '/iching/api/command'; + console.log(`DEPLOY_MODE=${deployMode}, sende POST an: ${endpoint}`); + fetch(endpoint, { method: 'POST' }) + .then(res => res.text()) + .then(text => console.log("HTTP-Server says:", text)) + .catch(error => console.error("HTTP-Server - Error:", error)); +} +document.addEventListener("DOMContentLoaded", () => { + const button = document.getElementById("myButton"); + button?.addEventListener("click", handleClick); +}); diff --git a/dist/frontend/index.html b/dist/frontend/index.html new file mode 100644 index 0000000..9c6984a --- /dev/null +++ b/dist/frontend/index.html @@ -0,0 +1,67 @@ + + + + + +Click on the Button to receive your personal Horoscope. 100% accuracy guaranteed!
+ + +