import * as plugins from "./smartsocket.plugins"; import * as helpers from "./smartsocket.helpers"; // import classes import { SocketRole } from "./smartsocket.classes.socketrole"; import { SocketFunction, ISocketFunctionData } from "./smartsocket.classes.socketfunction"; export interface ISocketConnectionOptions { alias?: string; authenticated: boolean; role?: SocketRole; socket: SocketIO.Socket; }; export class SocketConnection { alias?: string; authenticated: boolean; role?: SocketRole; socket: SocketIO.Socket; constructor(optionsArg: ISocketConnectionOptions) { this.alias = optionsArg.alias; this.authenticated = optionsArg.authenticated; this.role = optionsArg.role; this.socket = optionsArg.socket; } /** * authenticate the socket */ authenticate() { let done = plugins.q.defer(); this.socket.on("dataAuth", dataArg => { plugins.beautylog.log("received authentication data. now hashing and comparing..."); this.socket.removeListener("dataAuth", () => { }); if ((true)) { // TODO: authenticate password this.alias = dataArg.alias this.authenticated = true; this.role = helpers.findSocketRoleByString(dataArg.role); this.socket.emit("authenticated"); plugins.beautylog.ok(`socket with >>alias ${this.alias} >>role ${this.role} is authenticated!`); done.resolve(this); } else { this.socket.disconnect(); done.reject("not authenticated"); }; }); this.socket.emit("requestAuth"); return done.promise; }; /** * listen to function requests */ listenToFunctionRequests() { let done = plugins.q.defer(); if(this.authenticated){ this.socket.on("function", (dataArg:ISocketFunctionData) => { this.role.allowedFunctions }) } else { done.reject("socket needs to be authenticated first"); }; return done.promise; } };