initial commit
authorebelcrom <ebelcrom@gmail.com>
Fri, 2 Apr 2021 21:45:11 +0000 (23:45 +0200)
committerebelcrom <ebelcrom@gmail.com>
Fri, 2 Apr 2021 21:45:11 +0000 (23:45 +0200)
.gitignore [new file with mode: 0644]
README.md [new file with mode: 0644]
app.js [new file with mode: 0644]
lib/logger.js [new file with mode: 0644]
package-lock.json [new file with mode: 0644]
package.json [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..21ae622
--- /dev/null
@@ -0,0 +1,67 @@
+# User defined
+public/mVk7Yr3k/
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Typescript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# next.js build output
+.next
+
+# nano backup files
+*.swp
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..5e4e15f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,30 @@
+# mqtt-server.git
+
+This is a MQTT Server.
+
+## Getting started
+
+These instructions let get you a copy of the project and running it on your local machine.
+
+### Installing
+
+Get the project using git:
+
+```
+git clone https://binomiant.duckdns.org/MpqU9XX8/mqtt-server.git 
+```
+
+Install required packages:
+
+```
+cd mqtt-server.git
+npm install
+```
+
+Now you can start the server:
+
+```
+npm start
+```
+
+To see debug information of express type `DEBUG=*` before the command, to see debug information of the application set the environment variable `LOGLEVEL=debug`.
diff --git a/app.js b/app.js
new file mode 100644 (file)
index 0000000..4b5a843
--- /dev/null
+++ b/app.js
@@ -0,0 +1,32 @@
+const log = require('./lib/logger')(__filename.slice(__dirname.length + 1));
+const aedes = require('aedes')({
+  id: 'CDOOR'
+});
+const server = require('net').createServer(aedes.handle);
+const port = 1883
+
+server.listen(port, function () {
+  log.debug('Aedes listening on port:', port);
+});
+
+aedes.on('client', function (client) {
+  log.debug('Client ' + (client ? client.id : client) + ' connected ' +
+    'to broker', aedes.id);
+});
+
+aedes.on('clientDisconnect', function (client) {
+  log.debug('Client ' + (client ? client.id : client) + ' disconnected ' +
+    'from broker', aedes.id);
+});
+
+aedes.on('subscribe', function (subscriptions, client) {
+  log.info('MQTT client ' + (client ? client.id : client) +
+    ' subscribed to topics: ' + subscriptions.map(s => s.topic).join('\n'),
+    'from broker', aedes.id);
+});
+
+aedes.on('publish', async function (packet, client) {
+  log.info('Client ' + (client ? client.id : 'BROKER_' + aedes.id) +
+    ' has published', packet.payload.toString(), 'on', packet.topic,
+    'to broker', aedes.id);
+});
diff --git a/lib/logger.js b/lib/logger.js
new file mode 100644 (file)
index 0000000..c0f145e
--- /dev/null
@@ -0,0 +1,67 @@
+const winston = require("winston");
+const dateformat = require("dateformat");
+
+const custom = {
+  levels: {
+    error: 5,
+    warn: 4,
+    info: 3,
+    todo: 2,
+    verbose: 1,
+    debug: 0
+  },
+  colors: {
+    error: 'red',
+    warn: 'yellow',
+    info: 'green',
+    todo: 'magenta',
+    verbose: 'blue',
+    debug: 'gray'
+  }
+};
+
+var level = "error";
+if (typeof process.env.LOGLEVEL != "undefined") {
+  level = process.env.LOGLEVEL;
+};
+
+winston.addColors(custom.colors);
+
+const logger = new (winston.Logger) ({
+  levels: custom.levels,
+  transports: [
+    new (winston.transports.Console) ({
+      level: level,
+//      timestamp() {
+//        var now = new Date();
+//        return dateformat(now, "HH:MM:ss.l");
+//      },
+      colorize: true
+    })
+  ]
+});
+
+module.exports = function(fileName) {
+  var myLogger = {
+    error: function(...args) {
+      logger.error('[' + fileName + ']', ...args);
+    },
+    warn: function(...args) {
+      logger.warn('[' + fileName + ']', ...args);
+    },
+    info: function(...args) {
+      logger.info('[' + fileName + ']', ...args);
+    },
+    todo: function(...args) {
+      logger.todo('[' + fileName + ']', ...args);
+    },
+    verbose: function(...args) {
+      logger.verbose('[' + fileName + ']', ...args);
+    },
+    debug: function(...args) {
+      logger.debug('[' + fileName + ']', ...args);
+    },
+  }
+
+  return myLogger
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644 (file)
index 0000000..286bd29
--- /dev/null
@@ -0,0 +1,292 @@
+{
+  "name": "mqtt-server",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "aedes": {
+      "version": "0.45.0",
+      "resolved": "https://registry.npmjs.org/aedes/-/aedes-0.45.0.tgz",
+      "integrity": "sha512-xeaf7nWRb2AjIKpZeo151juVF+S9XV+BIFRrigg3FXRry9/HL6aZY1JA0Xj9WmlMBFtOmKM0+NS2qmNEbe4bNg==",
+      "requires": {
+        "aedes-packet": "^2.3.1",
+        "aedes-persistence": "^8.1.1",
+        "bulk-write-stream": "^2.0.1",
+        "end-of-stream": "^1.4.4",
+        "fastfall": "^1.5.1",
+        "fastparallel": "^2.4.0",
+        "fastseries": "^2.0.0",
+        "hyperid": "^2.0.5",
+        "mqemitter": "^4.4.0",
+        "mqtt-packet": "^6.9.0",
+        "readable-stream": "^3.6.0",
+        "retimer": "^3.0.0",
+        "reusify": "^1.0.4",
+        "uuid": "^8.3.1"
+      }
+    },
+    "aedes-packet": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/aedes-packet/-/aedes-packet-2.3.1.tgz",
+      "integrity": "sha512-LqBd57uc2rui2RbjycW17dylglejG26mM4ewVXGNDnVp/SUHFVEgm7d1HTmYrnSkSCNoHti042qgcTwv/F+BtQ==",
+      "requires": {
+        "mqtt-packet": "^6.3.0"
+      }
+    },
+    "aedes-persistence": {
+      "version": "8.1.3",
+      "resolved": "https://registry.npmjs.org/aedes-persistence/-/aedes-persistence-8.1.3.tgz",
+      "integrity": "sha512-VMCjEV+2g1TNJb/IlDEUy6SP9crT+QUhe2xc6UjyqrFNBNgTvHmOefXY7FxWrwmR2QA02vwg3+5p/JXkyg/Dkw==",
+      "requires": {
+        "aedes-packet": "^2.3.1",
+        "from2": "^2.3.0",
+        "qlobber": "^5.0.3"
+      }
+    },
+    "base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+    },
+    "bl": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+      "requires": {
+        "buffer": "^5.5.0",
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.4.0"
+      }
+    },
+    "buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "requires": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
+    "bulk-write-stream": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/bulk-write-stream/-/bulk-write-stream-2.0.1.tgz",
+      "integrity": "sha512-XWOLjgHtpDasHfwM8oO4df1JoZwa7/OwTsXDzh4rUTo+9CowzeOFBZz43w+H14h1fyq+xl28tVIBrdjcjj4Gug==",
+      "requires": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^3.1.1"
+      }
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+    },
+    "debug": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+      "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+      "requires": {
+        "ms": "2.1.2"
+      }
+    },
+    "end-of-stream": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+      "requires": {
+        "once": "^1.4.0"
+      }
+    },
+    "fastfall": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/fastfall/-/fastfall-1.5.1.tgz",
+      "integrity": "sha1-P+4DMxpJ0dObPN96XpzWb0dee5Q=",
+      "requires": {
+        "reusify": "^1.0.0"
+      }
+    },
+    "fastparallel": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/fastparallel/-/fastparallel-2.4.0.tgz",
+      "integrity": "sha512-sacwQ7wwKlQXsa7TN24UvMBLZNLmVcPhmxccC9riFqb3N+fSczJL8eWdnZodZ/KijGVgNBBfvF/NeXER08uXnQ==",
+      "requires": {
+        "reusify": "^1.0.4",
+        "xtend": "^4.0.2"
+      }
+    },
+    "fastseries": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fastseries/-/fastseries-2.0.0.tgz",
+      "integrity": "sha512-XBU9RXeoYc2/VnvMhplAxEmZLfIk7cvTBu+xwoBuTI8pL19E03cmca17QQycKIdxgwCeFA/a4u27gv1h3ya5LQ=="
+    },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
+    "hyperid": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/hyperid/-/hyperid-2.1.0.tgz",
+      "integrity": "sha512-cSakhxbUsaIuqjfvvcUuvl/Fl342J65xgLLYrYxSSr9qmJ/EJK+S8crS6mIlQd/a7i+Pe4D0MgSrtZPLze+aCw==",
+      "requires": {
+        "uuid": "^3.4.0",
+        "uuid-parse": "^1.1.0"
+      },
+      "dependencies": {
+        "uuid": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+          "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+        }
+      }
+    },
+    "ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+    },
+    "mqemitter": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/mqemitter/-/mqemitter-4.4.1.tgz",
+      "integrity": "sha512-tXSsyzhsD70Jc7WFz1tjbfczGOAyObMhJ8O15ZFkpDI+g9ENmWFUo5BseAuS9HCxNnFtnMWo4lHh7yDi5CjVTQ==",
+      "requires": {
+        "fastparallel": "^2.3.0",
+        "qlobber": "^5.0.0"
+      }
+    },
+    "mqtt-packet": {
+      "version": "6.9.0",
+      "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.9.0.tgz",
+      "integrity": "sha512-cngFSAXWSl5XHKJYUQiYQjtp75zhf1vygY00NnJdhQoXOH2v3aizmaaMIHI5n1N/TJEHSAbHryQhFr3gJ9VNvA==",
+      "requires": {
+        "bl": "^4.0.2",
+        "debug": "^4.1.1",
+        "process-nextick-args": "^2.0.1"
+      }
+    },
+    "ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+    },
+    "qlobber": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/qlobber/-/qlobber-5.0.3.tgz",
+      "integrity": "sha512-wW4GTZPePyh0RgOsM18oDyOUlXfurVRgoNyJfS+y7VWPyd0GYhQp5T2tycZFZjonH+hngxIfklGJhTP/ghidgQ=="
+    },
+    "readable-stream": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+      "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+      "requires": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      }
+    },
+    "retimer": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/retimer/-/retimer-3.0.0.tgz",
+      "integrity": "sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA=="
+    },
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
+    },
+    "safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+    },
+    "string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "requires": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+    },
+    "uuid": {
+      "version": "8.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+    },
+    "uuid-parse": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz",
+      "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A=="
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+    },
+    "xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+    }
+  }
+}
diff --git a/package.json b/package.json
new file mode 100644 (file)
index 0000000..92349be
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "name": "mqtt-server",
+  "version": "1.0.0",
+  "description": "An MQTT server.",
+  "main": "app.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "ebelcrom",
+  "license": "ISC",
+  "dependencies": {
+    "aedes": "^0.45.0"
+  }
+}