diff --git a/dist/index.d.ts b/dist/index.d.ts index 6da3fef..5c46efd 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1 +1,2 @@ export * from "./smartsocket.classes.smartsocket"; +export * from "./smartsocket.classes.smartsocketclient"; diff --git a/dist/index.js b/dist/index.js index e3e1dab..df74310 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3,4 +3,5 @@ function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } __export(require("./smartsocket.classes.smartsocket")); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsaUJBQWMsbUNBQW1DLENBQUMsRUFBQSJ9 \ No newline at end of file +__export(require("./smartsocket.classes.smartsocketclient")); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsaUJBQWMsbUNBQW1DLENBQUMsRUFBQTtBQUNsRCxpQkFBYyx5Q0FBeUMsQ0FBQyxFQUFBIn0= \ No newline at end of file diff --git a/dist/smartsocket.classes.smartsocket.d.ts b/dist/smartsocket.classes.smartsocket.d.ts index d8f0be1..a4fe738 100644 --- a/dist/smartsocket.classes.smartsocket.d.ts +++ b/dist/smartsocket.classes.smartsocket.d.ts @@ -1,19 +1,29 @@ /// -/// -import * as plugins from "./smartsocket.plugins"; import { Objectmap } from "lik"; +import { SocketRole } from "./smartsocket.classes.socketrole"; export interface ISocketObject { - socket: SocketIO.Socket; + alias?: string; authenticated: boolean; + role?: string; + socket: SocketIO.Socket; } export interface ISmartsocketConstructorOptions { port: number; } export declare class Smartsocket { + options: ISmartsocketConstructorOptions; io: SocketIO.Server; openSockets: Objectmap; - constructor(options: ISmartsocketConstructorOptions); - startListening: any; - authenticateSocket(socketObjectArg: ISocketObject): plugins.q.Promise<{}>; + registeredRoles: Objectmap; + constructor(optionsArg: ISmartsocketConstructorOptions); + /** + * the standard handler for new socket connections + */ + private _handleSocket(socket); + registerFunctions(socketRoleArg: SocketRole): void; + /** + * starts listening to incling sockets: + */ + startServer: () => void; closeServer: () => void; } diff --git a/dist/smartsocket.classes.smartsocket.js b/dist/smartsocket.classes.smartsocket.js index b1e53cf..f1b467b 100644 --- a/dist/smartsocket.classes.smartsocket.js +++ b/dist/smartsocket.classes.smartsocket.js @@ -1,39 +1,51 @@ "use strict"; const plugins = require("./smartsocket.plugins"); +const helpers = require("./smartsocket.helpers"); // classes const lik_1 = require("lik"); ; +; class Smartsocket { - constructor(options) { + constructor(optionsArg) { this.openSockets = new lik_1.Objectmap(); + this.registeredRoles = new lik_1.Objectmap(); + /** + * starts listening to incling sockets: + */ + this.startServer = () => { + this.io = plugins.socketIo(this.options.port); + this.io.on('connection', (socketArg) => { + this._handleSocket(socketArg); + }); + }; this.closeServer = () => { - this.io.close(); this.openSockets.forEach((socketObjectArg) => { + plugins.beautylog.log(`disconnect socket with >>alias ${socketObjectArg.alias}`); socketObjectArg.socket.disconnect(); }); this.openSockets.wipe(); + this.io.close(); }; - this.io = plugins.socketIo(options.port); - this.io.on('connection', (socket) => { - let socketObject = { - socket: socket, - authenticated: false - }; - this.openSockets.add(socketObject); - this.authenticateSocket(socketObject); - }); + this.options = optionsArg; } ; - authenticateSocket(socketObjectArg) { - let done = plugins.q.defer(); - socketObjectArg.socket.on("dataAuth", data => { - socketObjectArg.socket.removeListener("dataAuth", () => { }); - done.resolve(); - }); - socketObjectArg.socket.emit("requestAuth"); - return done.promise; + /** + * the standard handler for new socket connections + */ + _handleSocket(socket) { + let socketObject = { + socket: socket, + authenticated: false + }; + plugins.beautylog.log("Socket connected. Trying to authenticate..."); + this.openSockets.add(socketObject); + helpers.authenticateSocket(socketObject) + .then(); + } + registerFunctions(socketRoleArg) { + this.registeredRoles.add(socketRoleArg); } ; } exports.Smartsocket = Smartsocket; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zbWFydHNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc21hcnRzb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHVCQUF1QixDQUFDLENBQUE7QUFHakQsVUFBVTtBQUNWLHNCQUEwQixLQUFLLENBQUMsQ0FBQTtBQUsvQixDQUFDO0FBT0Y7SUFHSSxZQUFZLE9BQXVDO1FBRG5ELGdCQUFXLEdBQUcsSUFBSSxlQUFTLEVBQUUsQ0FBQztRQXNCOUIsZ0JBQVcsR0FBRztZQUNWLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUE4QjtnQkFDcEQsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFBO1FBMUJHLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTTtZQUM1QixJQUFJLFlBQVksR0FBa0I7Z0JBQzlCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLGFBQWEsRUFBRSxLQUFLO2FBQ3ZCLENBQUM7WUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztJQUVELGtCQUFrQixDQUFDLGVBQThCO1FBQzdDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUk7WUFDdEMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQzs7QUFRTCxDQUFDO0FBL0JZLG1CQUFXLGNBK0J2QixDQUFBIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zbWFydHNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc21hcnRzb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHVCQUF1QixDQUFDLENBQUE7QUFDakQsTUFBWSxPQUFPLFdBQU0sdUJBQXVCLENBQUMsQ0FBQTtBQUVqRCxVQUFVO0FBQ1Ysc0JBQTBCLEtBQUssQ0FBQyxDQUFBO0FBVS9CLENBQUM7QUFLRCxDQUFDO0FBRUY7SUFLSSxZQUFZLFVBQTBDO1FBRnRELGdCQUFXLEdBQUcsSUFBSSxlQUFTLEVBQUUsQ0FBQztRQUM5QixvQkFBZSxHQUFHLElBQUksZUFBUyxFQUFFLENBQUM7UUF3QmxDOztXQUVHO1FBRUgsZ0JBQVcsR0FBRztZQUNWLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVM7Z0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUE7UUFDRCxnQkFBVyxHQUFHO1lBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUE4QjtnQkFDcEQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0NBQWtDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRixlQUFlLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQTtRQXZDRyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUM5QixDQUFDOztJQUVEOztPQUVHO0lBQ0ssYUFBYSxDQUFDLE1BQU07UUFDeEIsSUFBSSxZQUFZLEdBQWtCO1lBQzlCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsYUFBYSxFQUFFLEtBQUs7U0FDdkIsQ0FBQztRQUNGLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxDQUFDLENBQUE7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQzthQUNuQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsYUFBd0I7UUFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7QUFxQkwsQ0FBQztBQTlDWSxtQkFBVyxjQThDdkIsQ0FBQSJ9 \ No newline at end of file diff --git a/dist/smartsocket.classes.smartsocketclient.d.ts b/dist/smartsocket.classes.smartsocketclient.d.ts new file mode 100644 index 0000000..db290db --- /dev/null +++ b/dist/smartsocket.classes.smartsocketclient.d.ts @@ -0,0 +1,10 @@ +/** + * interface for class SmartsocketClient + */ +export interface ISmartsocketClientOptions { + port: number; + url: string; +} +export declare class SmartsocketClient { + constructor(); +} diff --git a/dist/smartsocket.classes.smartsocketclient.js b/dist/smartsocket.classes.smartsocketclient.js new file mode 100644 index 0000000..c34b871 --- /dev/null +++ b/dist/smartsocket.classes.smartsocketclient.js @@ -0,0 +1,7 @@ +"use strict"; +class SmartsocketClient { + constructor() { + } +} +exports.SmartsocketClient = SmartsocketClient; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zbWFydHNvY2tldGNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc21hcnRzb2NrZXRjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQVVBO0lBQ0k7SUFFQSxDQUFDO0FBQ0wsQ0FBQztBQUpZLHlCQUFpQixvQkFJN0IsQ0FBQSJ9 \ No newline at end of file diff --git a/dist/smartsocket.classes.socketfunction.d.ts b/dist/smartsocket.classes.socketfunction.d.ts new file mode 100644 index 0000000..f2ecd87 --- /dev/null +++ b/dist/smartsocket.classes.socketfunction.d.ts @@ -0,0 +1,12 @@ +import { SocketRole } from "./smartsocket.classes.socketrole"; +export interface SocketFunctionOptions { + name: string; + func: any; + roles: SocketRole[]; +} +export declare class SocketFunction { + name: string; + func: any; + roles: SocketRole[]; + constructor(optionsArg: SocketFunctionOptions); +} diff --git a/dist/smartsocket.classes.socketfunction.js b/dist/smartsocket.classes.socketfunction.js new file mode 100644 index 0000000..3ab3af9 --- /dev/null +++ b/dist/smartsocket.classes.socketfunction.js @@ -0,0 +1,12 @@ +"use strict"; +; +class SocketFunction { + constructor(optionsArg) { + this.name = optionsArg.name; + this.func = optionsArg.func; + this.roles = optionsArg.roles; + } + ; +} +exports.SocketFunction = SocketFunction; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRmdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc29ja2V0ZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQVlDLENBQUM7QUFFRjtJQUlJLFlBQVksVUFBaUM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDbEMsQ0FBQzs7QUFDTCxDQUFDO0FBVFksc0JBQWMsaUJBUzFCLENBQUEifQ== \ No newline at end of file diff --git a/dist/smartsocket.classes.socketrole.d.ts b/dist/smartsocket.classes.socketrole.d.ts new file mode 100644 index 0000000..02dc56d --- /dev/null +++ b/dist/smartsocket.classes.socketrole.d.ts @@ -0,0 +1,15 @@ +/** + * interface for class SocketRole + */ +export interface SocketRoleOptions { + name: string; + passwordHash: string; +} +/** + * A socketrole defines access to certain routines. + */ +export declare class SocketRole { + name: string; + passwordHash: string; + constructor(optionsArg: SocketRoleOptions); +} diff --git a/dist/smartsocket.classes.socketrole.js b/dist/smartsocket.classes.socketrole.js new file mode 100644 index 0000000..efbe61f --- /dev/null +++ b/dist/smartsocket.classes.socketrole.js @@ -0,0 +1,12 @@ +"use strict"; +/** + * A socketrole defines access to certain routines. + */ +class SocketRole { + constructor(optionsArg) { + this.name = optionsArg.name; + this.passwordHash = optionsArg.passwordHash; + } +} +exports.SocketRole = SocketRole; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyb2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFjQTs7R0FFRztBQUNIO0lBR0ksWUFBWSxVQUE0QjtRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ2hELENBQUM7QUFDTCxDQUFDO0FBUFksa0JBQVUsYUFPdEIsQ0FBQSJ9 \ No newline at end of file diff --git a/dist/smartsocket.helpers.d.ts b/dist/smartsocket.helpers.d.ts index e69de29..d30673c 100644 --- a/dist/smartsocket.helpers.d.ts +++ b/dist/smartsocket.helpers.d.ts @@ -0,0 +1,7 @@ +/// +import * as plugins from "./smartsocket.plugins"; +import { ISocketObject } from "./smartsocket.classes.smartsocket"; +/** + * authenticate a socket + */ +export declare let authenticateSocket: (socketObjectArg: ISocketObject) => plugins.q.Promise<{}>; diff --git a/dist/smartsocket.helpers.js b/dist/smartsocket.helpers.js index 1834b0a..fc62b3d 100644 --- a/dist/smartsocket.helpers.js +++ b/dist/smartsocket.helpers.js @@ -1,2 +1,28 @@ "use strict"; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9 \ No newline at end of file +const plugins = require("./smartsocket.plugins"); +/** + * authenticate a socket + */ +exports.authenticateSocket = (socketObjectArg) => { + let done = plugins.q.defer(); + socketObjectArg.socket.on("dataAuth", dataArg => { + plugins.beautylog.log("received authentication data. now hashing and comparing..."); + socketObjectArg.socket.removeListener("dataAuth", () => { }); + if ((true)) { + socketObjectArg.alias = dataArg.alias; + socketObjectArg.authenticated = true; + socketObjectArg.role = dataArg.role; + socketObjectArg.socket.emit("authenticated"); + plugins.beautylog.ok(`socket with >>alias ${socketObjectArg.alias} >>role ${socketObjectArg.role} is authenticated!`); + done.resolve(socketObjectArg); + } + else { + socketObjectArg.socket.disconnect(); + done.reject("not authenticated"); + } + ; + }); + socketObjectArg.socket.emit("requestAuth"); + return done.promise; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHVCQUF1QixDQUFDLENBQUE7QUFRakQ7O0dBRUc7QUFDUSwwQkFBa0IsR0FBRyxDQUFDLGVBQThCO0lBQzNELElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLE9BQU87UUFDekMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUNwRixlQUFlLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM3RCxFQUFFLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUNQLGVBQWUsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQTtZQUNyQyxlQUFlLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUNyQyxlQUFlLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDcEMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLGVBQWUsQ0FBQyxLQUFLLFdBQVcsZUFBZSxDQUFDLElBQUksb0JBQW9CLENBQUMsQ0FBQTtZQUNySCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLGVBQWUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFBQSxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7SUFDSCxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUMifQ== \ No newline at end of file diff --git a/dist/smartsocket.plugins.d.ts b/dist/smartsocket.plugins.d.ts index 5de4cd4..c2cdd28 100644 --- a/dist/smartsocket.plugins.d.ts +++ b/dist/smartsocket.plugins.d.ts @@ -3,4 +3,5 @@ export import beautylog = require("beautylog"); export import lik = require("lik"); export import q = require("q"); export import socketIo = require("socket.io"); +export import socketIoClient = require("socket.io-client"); export import taskbuffer = require("taskbuffer"); diff --git a/dist/smartsocket.plugins.js b/dist/smartsocket.plugins.js index 5a8521c..53e7b41 100644 --- a/dist/smartsocket.plugins.js +++ b/dist/smartsocket.plugins.js @@ -4,5 +4,6 @@ exports.beautylog = require("beautylog"); exports.lik = require("lik"); exports.q = require("q"); exports.socketIo = require("socket.io"); +exports.socketIoClient = require("socket.io-client"); exports.taskbuffer = require("taskbuffer"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUNWLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDakMsV0FBRyxXQUFZLEtBQUssQ0FBQyxDQUFDO0FBQ3RCLFNBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNqQixnQkFBUSxXQUFXLFdBQVcsQ0FBQyxDQUFDO0FBQ2hDLGtCQUFVLFdBQVcsWUFBWSxDQUFDLENBQUMifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUNWLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDakMsV0FBRyxXQUFZLEtBQUssQ0FBQyxDQUFDO0FBQ3RCLFNBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNqQixnQkFBUSxXQUFXLFdBQVcsQ0FBQyxDQUFDO0FBQ2hDLHNCQUFjLFdBQVcsa0JBQWtCLENBQUMsQ0FBQztBQUM3QyxrQkFBVSxXQUFXLFlBQVksQ0FBQyxDQUFDIn0= \ No newline at end of file diff --git a/package.json b/package.json index a664518..478a22d 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@types/socket.io": "^1.4.26", "@types/socket.io-client": "^1.4.26", "beautylog": "^5.0.20", - "lik": "^1.0.9", + "lik": "^1.0.10", "q": "^1.4.1", "socket.io": "^1.4.8", "socket.io-client": "^1.4.8", diff --git a/test/test.js b/test/test.js index d6f5add..7a93c30 100644 --- a/test/test.js +++ b/test/test.js @@ -9,16 +9,29 @@ describe("smartsocket", function () { testSmartsocket = new smartsocket.Smartsocket({ port: 3000 }); testSmartsocket.should.be.instanceOf(smartsocket.Smartsocket); }); + it("should register a new Function", function () { + }); + it("should start listening when .started is called", function () { + testSmartsocket.startServer(); + }); it("should react to a new websocket connection", function (done) { this.timeout(10000); let socket = socketIoClient("http://localhost:3000", {}); socket.on("requestAuth", function () { console.log("server requested authentication"); socket.emit("dataAuth", { - secret: "hello" + role: "coreflowContainer", + password: "somePassword", + alias: "coreflow1" + }); + socket.on("authenticated", () => { + console.log("client is authenticated"); + done(); }); - done(); }); }); + it("should close the server", function () { + testSmartsocket.closeServer(); + }); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQixNQUFPLGNBQWMsV0FBVyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3BELE1BQU8sV0FBVyxXQUFXLGVBQWUsQ0FBQyxDQUFDO0FBRTlDLElBQUksZUFBd0MsQ0FBQztBQUU3QyxRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3BCLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtRQUNsQyxlQUFlLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxVQUFVLElBQUk7UUFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixJQUFJLE1BQU0sR0FBRyxjQUFjLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUU7WUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixNQUFNLEVBQUUsT0FBTzthQUNsQixDQUFDLENBQUM7WUFDSCxJQUFJLEVBQUUsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQyJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQixNQUFPLGNBQWMsV0FBVyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3BELE1BQU8sV0FBVyxXQUFXLGVBQWUsQ0FBQyxDQUFDO0FBRTlDLElBQUksZUFBd0MsQ0FBQztBQUU3QyxRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3BCLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtRQUNsQyxlQUFlLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBQztJQUVwQyxDQUFDLENBQUMsQ0FBQTtJQUNGLEVBQUUsQ0FBQyxnREFBZ0QsRUFBQztRQUNoRCxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUE7SUFDRixFQUFFLENBQUMsNENBQTRDLEVBQUUsVUFBVSxJQUFJO1FBQzNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsSUFBSSxNQUFNLEdBQUcsY0FBYyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLEtBQUssRUFBRSxXQUFXO2FBQ3JCLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFDO2dCQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQ3ZDLElBQUksRUFBRSxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLHlCQUF5QixFQUFDO1FBQ3pCLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFDIn0= \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index 5517327..9438c47 100644 --- a/test/test.ts +++ b/test/test.ts @@ -10,15 +10,29 @@ describe("smartsocket", function () { testSmartsocket = new smartsocket.Smartsocket({ port: 3000 }); testSmartsocket.should.be.instanceOf(smartsocket.Smartsocket); }); + it("should register a new Function",function(){ + + }) + it("should start listening when .started is called",function(){ + testSmartsocket.startServer(); + }) it("should react to a new websocket connection", function (done) { this.timeout(10000); let socket = socketIoClient("http://localhost:3000", {}); socket.on("requestAuth", function () { console.log("server requested authentication"); socket.emit("dataAuth", { - secret: "hello" + role: "coreflowContainer", + password: "somePassword", + alias: "coreflow1" + }); + socket.on("authenticated",() => { + console.log("client is authenticated"); + done(); }); - done(); }); + }); + it("should close the server",function(){ + testSmartsocket.closeServer(); }) }); \ No newline at end of file diff --git a/ts/smartsocket.classes.smartsocket.ts b/ts/smartsocket.classes.smartsocket.ts index a6949a2..8504b65 100644 --- a/ts/smartsocket.classes.smartsocket.ts +++ b/ts/smartsocket.classes.smartsocket.ts @@ -8,9 +8,10 @@ import {SocketFunction} from "./smartsocket.classes.socketfunction"; export interface ISocketObject { - group?:string, - socket: SocketIO.Socket, + alias?:string; authenticated: boolean + role?:string, + socket: SocketIO.Socket, }; export interface ISmartsocketConstructorOptions { @@ -19,12 +20,12 @@ export interface ISmartsocketConstructorOptions { }; export class Smartsocket { + options:ISmartsocketConstructorOptions io: SocketIO.Server; openSockets = new Objectmap(); registeredRoles = new Objectmap(); - constructor(options: ISmartsocketConstructorOptions) { - this.io = plugins.socketIo(options.port); - this.io.on('connection', this._handleSocket); + constructor(optionsArg: ISmartsocketConstructorOptions) { + this.options = optionsArg; }; /** @@ -35,22 +36,33 @@ export class Smartsocket { socket: socket, authenticated: false }; + plugins.beautylog.log("Socket connected. Trying to authenticate...") this.openSockets.add(socketObject); helpers.authenticateSocket(socketObject) .then(); } - registerRole(socketRoleArg:SocketRole){ + registerFunctions(socketRoleArg:SocketRole){ this.registeredRoles.add(socketRoleArg); }; + /** + * starts listening to incling sockets: + */ + startServer = () => { + this.io = plugins.socketIo(this.options.port); + this.io.on('connection', (socketArg) => { + this._handleSocket(socketArg); + }); + } closeServer = () => { - this.io.close(); this.openSockets.forEach((socketObjectArg: ISocketObject) => { + plugins.beautylog.log(`disconnect socket with >>alias ${socketObjectArg.alias}`); socketObjectArg.socket.disconnect(); }); this.openSockets.wipe(); + this.io.close(); } } \ No newline at end of file diff --git a/ts/smartsocket.classes.socketfunction.ts b/ts/smartsocket.classes.socketfunction.ts index 0271117..efd3522 100644 --- a/ts/smartsocket.classes.socketfunction.ts +++ b/ts/smartsocket.classes.socketfunction.ts @@ -1,6 +1,7 @@ import * as plugins from "./smartsocket.plugins"; // import classes +import { Stringmap } from "lik"; import { SocketRole } from "./smartsocket.classes.socketrole"; diff --git a/ts/smartsocket.classes.socketrole.ts b/ts/smartsocket.classes.socketrole.ts index 7ab3bf9..4af71c7 100644 --- a/ts/smartsocket.classes.socketrole.ts +++ b/ts/smartsocket.classes.socketrole.ts @@ -1,5 +1,8 @@ import * as plugins from "./smartsocket.plugins"; +// import classes +import { Stringmap } from "lik"; + /** * interface for class SocketRole */ diff --git a/ts/smartsocket.helpers.ts b/ts/smartsocket.helpers.ts index dc9a197..cb0e545 100644 --- a/ts/smartsocket.helpers.ts +++ b/ts/smartsocket.helpers.ts @@ -11,9 +11,20 @@ import {ISocketObject} from "./smartsocket.classes.smartsocket"; */ export let authenticateSocket = (socketObjectArg: ISocketObject) => { let done = plugins.q.defer(); - socketObjectArg.socket.on("dataAuth", data => { + socketObjectArg.socket.on("dataAuth", dataArg => { + plugins.beautylog.log("received authentication data. now hashing and comparing..."); socketObjectArg.socket.removeListener("dataAuth", () => { }); - done.resolve(); + if((true)){ // TODO: authenticate password + socketObjectArg.alias = dataArg.alias + socketObjectArg.authenticated = true; + socketObjectArg.role = dataArg.role; + socketObjectArg.socket.emit("authenticated"); + plugins.beautylog.ok(`socket with >>alias ${socketObjectArg.alias} >>role ${socketObjectArg.role} is authenticated!`) + done.resolve(socketObjectArg); + } else { + socketObjectArg.socket.disconnect(); + done.reject("not authenticated"); + }; }); socketObjectArg.socket.emit("requestAuth"); return done.promise;