diff --git a/Project.njsproj b/Project.njsproj
index 5666a0e54..7b7e5e06b 100644
--- a/Project.njsproj
+++ b/Project.njsproj
@@ -54,7 +54,7 @@
Code
-
+
Code
@@ -82,6 +82,9 @@
Code
+
+ Code
+
Code
diff --git a/Server/Permissions.js b/Server/Permissions.js
deleted file mode 100644
index d9c18ef55..000000000
--- a/Server/Permissions.js
+++ /dev/null
@@ -1,47 +0,0 @@
-exports.newPermissions = function newPermissions() {
-
- let thisObject = {
- initialize: initialize
- }
-
- return thisObject;
-
- function initialize(pEcosystemObject, callBackFunction) {
-
- readStoragePermissions();
-
- function readStoragePermissions() {
-
- let filePath;
-
- try {
- let fs = require('fs');
- filePath = '../' + 'Connection-Strings' + '/' + 'Storage.Permissions.json';
- pEcosystemObject.STORAGE_PERMISSIONS = JSON.parse(fs.readFileSync(filePath, 'utf8'));
-
- readPermissions();
- }
- catch (err) {
- console.log("[ERROR] readStoragePermissions -> err = " + err.message);
- console.log("[HINT] readStoragePermissions -> You need to have a file at this path -> " + filePath);
- }
- }
-
- function readPermissions() {
-
- try {
- let fs = require('fs');
- let filePath = '../' + 'Permissions' + '/' + 'Secrets' + '.json';
-
- let permissioins = JSON.parse(fs.readFileSync(filePath, 'utf8'));
- callBackFunction(permissioins);
- }
- catch (err) {
- console.log("[ERROR] readPermissions -> err = " + err.message);
- console.log("[HINT] You need to have a file at this path -> " + filePath);
-
- callBackFunction();
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Server/SessionManager.js b/Server/SessionManager.js
new file mode 100644
index 000000000..c7ce0c800
--- /dev/null
+++ b/Server/SessionManager.js
@@ -0,0 +1,48 @@
+exports.newSessionManager = function newSessionManager() {
+
+ let thisObject = {
+ getSession: getSession,
+ initialize: initialize
+ }
+
+ let activeSessions = new Map();
+
+ return thisObject;
+
+ function initialize(callBackFunction) {
+
+ readSessions();
+
+ function readSessions() {
+
+ try {
+ let fs = require('fs');
+ let filePath = '../' + 'Sessions' + '/' + 'Open.Sessions' + '.json';
+
+ let sessions = JSON.parse(fs.readFileSync(filePath, 'utf8'));
+
+ for (let i = 0; i < sessions.lenght; i++) {
+
+ let session = sessions[i];
+
+ activeSessions.set(session.sessionToken, session);
+
+ }
+
+ callBackFunction();
+ }
+ catch (err) {
+ console.log("[ERROR] readSessions -> err = " + err.message);
+ console.log("[HINT] You need to have a file at this path -> " + filePath);
+
+ callBackFunction();
+ }
+ }
+ }
+
+ function getSession(pSessionToken) {
+
+ return activeSessions.get(pSessionToken);
+
+ }
+}
\ No newline at end of file
diff --git a/Server/StorageAccessManager.js b/Server/StorageAccessManager.js
new file mode 100644
index 000000000..a2630363f
--- /dev/null
+++ b/Server/StorageAccessManager.js
@@ -0,0 +1,112 @@
+exports.newStorageAccessManager = function newStorageAccessManager() {
+
+ let thisObject = {
+ getPermissions: getPermissions,
+ initialize: initialize
+ }
+
+ let permissions;
+
+ return thisObject;
+
+ function initialize(callBackFunction) {
+
+ readStoragePermissions();
+
+ function readStoragePermissions() {
+
+ let filePath;
+
+ try {
+ let fs = require('fs');
+ filePath = '../' + 'Storage' + '/' + 'Storage.Permissions.json';
+ permissions = JSON.parse(fs.readFileSync(filePath, 'utf8'));
+
+ callBackFunction();
+
+ }
+ catch (err) {
+ console.log("[ERROR] readStoragePermissions -> err = " + err.message);
+ console.log("[HINT] readStoragePermissions -> You need to have a file at this path -> " + filePath);
+
+ callBackFunction();
+ }
+ }
+ }
+
+ function getPermissions(pTeams) {
+
+ let azure = require('azure-storage');
+ let blobService = azure.createBlobService(permissions.connectionString);
+
+ let startDate = new Date();
+ startDate.setDate(startDate.getDate() - 1);
+
+ let expiryDate = new Date(startDate);
+ expiryDate.setDate(startDate.getDate() + 3);
+
+ for (let i = 0; i < pTeams.length; i++) {
+
+ let team = pTeams[i];
+
+ if (team.readConnectionString !== undefined) {
+
+ let azurePermissions = azure.BlobUtilities.SharedAccessPermissions.READ;
+
+ let container = team.codeName;
+ let blobName = undefined;
+
+ let sharedAccessPolicy = {
+ AccessPolicy: {
+ Permissions: azurePermissions,
+ Start: startDate,
+ Expiry: expiryDate
+ }
+ };
+
+ let sasToken = blobService.generateSharedAccessSignature(container, blobName, sharedAccessPolicy);
+ team.readConnectionString = "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=" + sasToken + "";
+ }
+
+ if (team.writeConnectionString !== undefined) {
+
+ let azurePermissions = azure.BlobUtilities.SharedAccessPermissions.WRITE;
+
+ let container = team.codeName;
+ let blobName = undefined;
+
+ let sharedAccessPolicy = {
+ AccessPolicy: {
+ Permissions: azurePermissions,
+ Start: startDate,
+ Expiry: expiryDate
+ }
+ };
+
+ let sasToken = blobService.generateSharedAccessSignature(container, blobName, sharedAccessPolicy);
+ team.readConnectionString = "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=" + sasToken + "";
+ }
+ }
+
+ return pTeams;
+ }
+}
+
+
+/*
+
+ "Develop": {
+ "aaplatform": {
+ "readConnectionString": "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=st=2018-05-21T07%3A16%3A54Z&se=2018-08-19T07%3A16%3A54Z&sp=r&sv=2017-07-29&sr=c&sig=YzkqXqAaXsbyn5hOgHCLDjKL8xcSkjBa0e9E1nNdoEI%3D"
+ },
+ "aamasters": {
+ "readConnectionString": "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=st=2018-05-18T11%3A46%3A36Z&se=2018-08-16T11%3A46%3A36Z&sp=r&sv=2017-07-29&sr=c&sig=XHpklrDCK3Ta7Zp2F1S6UWkKgd2Sf0wTUUWcrykhh%2FA%3D",
+ "writeConnectionString": "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=st=2018-05-18T11%3A47%3A35Z&se=2018-08-16T11%3A47%3A35Z&sp=w&sv=2017-07-29&sr=c&sig=MENzxltuTVcXCgM%2BCtgfGkNtEULelIEHk0ke1nFCr6E%3D"
+ },
+ "aabash": {
+ "readConnectionString": "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=st=2018-06-10T17%3A12%3A13Z&se=2018-09-08T17%3A12%3A13Z&sp=r&sv=2017-07-29&sr=c&sig=zb1JWz2Fl1baO2VjFFP4qKzobV85%2F79c2dXWX4fuBLc%3D",
+ "writeConnectionString": "BlobEndpoint=https://aadevelop.blob.core.windows.net;SharedAccessSignature=st=2018-06-10T17%3A13%3A51Z&se=2018-09-08T17%3A13%3A51Z&sp=w&sv=2017-07-29&sr=c&sig=OCrxZggKIQS0Vm8wKA1SAhhTbSlq%2BRd7VqQhp8NUhF8%3D"
+ }
+ }
+
+*/
\ No newline at end of file
diff --git a/server.js b/server.js
index 59cd0c015..272e7aba3 100644
--- a/server.js
+++ b/server.js
@@ -49,7 +49,7 @@ let isHttpServerStarted = false;
const STORAGE = require('./Server/Storage');
let storage = STORAGE.newStorage();
-let authenticatedSession; // We do not send these keys to the browser, instead they are kept here for when they are needed.
+let sessionManager; // This module have all authenticated active sessions.
initialize();
@@ -90,25 +90,31 @@ function initialize() {
function onLoadCompeted(pHTMLCloudScripts) {
- const PERMISSIONS = require('./Server/Permissions');
- let permissions = PERMISSIONS.newPermissions();
+ const SESSION_MANAGER = require('./Server/SessionManager');
+ sessionManager = SESSION_MANAGER.newSessionManager();
- permissions.initialize(ecosystemObject, onInitialized);
+ sessionManager.initialize(onInitialized);
- function onInitialized(pPermissionsSecrets) {
+ function onInitialized() {
- authenticatedSession = pPermissionsSecrets;
+ const STORAGE_ACCESS_MANAGER = require('./Server/StorageAccessManager');
+ storageAccessManager = STORAGE_ACCESS_MANAGER.newStorageAccessManager();
- const BOT_SCRIPTS = require('./Server/BotsScripts');
- botScripts = BOT_SCRIPTS.newBotScripts();
-
- botScripts.initialize(serverConfig, onInitialized);
+ storageAccessManager.initialize(onInitialized);
function onInitialized() {
- HTMLCloudScripts = pHTMLCloudScripts;
- startHtttpServer();
+ const BOT_SCRIPTS = require('./Server/BotsScripts');
+ botScripts = BOT_SCRIPTS.newBotScripts();
+ botScripts.initialize(serverConfig, onInitialized);
+
+ function onInitialized() {
+
+ HTMLCloudScripts = pHTMLCloudScripts;
+ startHtttpServer();
+
+ }
}
}
}
@@ -584,67 +590,75 @@ function onBrowserRequest(request, response) {
let sessionToken = requestParameters[3];
- for (let i = 0; i < authenticatedSession.length; i++) {
+ let session = sessionManager.getSession(sessionToken);
- let session = authenticatedSession[i];
+ if (session !== undefined) {
- if (session.sessionToken === sessionToken) {
+ let exchangeKey = session.exchangeKeys[0].key; // 0 because we only deal with one exchange for now.
+ let exchangeSecret = session.exchangeKeys[0].secret;
- let exchangeKey = session.exchangeKeys[0].key; // 0 because we only deal with one exchange for now.
- let exchangeSecret = session.exchangeKeys[0].secret;
+ const POLONIEX_CLIENT_MODULE = require('./Exchanges/' + 'PoloniexAPIClient');
+ let poloniexApiClient = POLONIEX_CLIENT_MODULE.newPoloniexAPIClient(exchangeKey, exchangeSecret);
- const POLONIEX_CLIENT_MODULE = require('./Exchanges/' + 'PoloniexAPIClient');
- let poloniexApiClient = POLONIEX_CLIENT_MODULE.newPoloniexAPIClient(exchangeKey, exchangeSecret);
+ switch (requestParameters[2]) {
- switch (requestParameters[2]) {
-
- case "returnOpenOrders": {
- poloniexApiClient.API.returnOpenOrders(requestParameters[4], requestParameters[5], onExchangeResponse);
- break;
- }
-
- case "returnOrderTrades": {
- poloniexApiClient.API.returnOrderTrades(requestParameters[4], onExchangeResponse);
- break;
- }
-
- case "buy": {
- poloniexApiClient.API.buy(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse);
- break;
- }
-
- case "sell": {
- poloniexApiClient.API.sell(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse);
- break;
- }
-
- case "moveOrder": {
- poloniexApiClient.API.moveOrder(requestParameters[4], requestParameters[5], requestParameters[6], onExchangeResponse);
- break;
- }
-
- case "returnTicker": {
- poloniexApiClient.API.returnTicker(onExchangeResponse);
- break;
- }
+ case "returnOpenOrders": {
+ poloniexApiClient.API.returnOpenOrders(requestParameters[4], requestParameters[5], onExchangeResponse);
+ break;
}
- function onExchangeResponse(err, exchangeResponse) {
-
- /* Delete these secrets before they get logged. */
-
- requestParameters[3] = "";
-
- let serverResponse = {
- err: err,
- exchangeResponse: exchangeResponse
- }
-
- respondWithContent(JSON.stringify(serverResponse), response);
+ case "returnOrderTrades": {
+ poloniexApiClient.API.returnOrderTrades(requestParameters[4], onExchangeResponse);
+ break;
}
- return;
+ case "buy": {
+ poloniexApiClient.API.buy(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse);
+ break;
+ }
+
+ case "sell": {
+ poloniexApiClient.API.sell(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse);
+ break;
+ }
+
+ case "moveOrder": {
+ poloniexApiClient.API.moveOrder(requestParameters[4], requestParameters[5], requestParameters[6], onExchangeResponse);
+ break;
+ }
+
+ case "returnTicker": {
+ poloniexApiClient.API.returnTicker(onExchangeResponse);
+ break;
+ }
}
+
+ function onExchangeResponse(err, exchangeResponse) {
+
+ /* Delete these secrets before they get logged. */
+
+ requestParameters[3] = "";
+
+ let serverResponse = {
+ err: err,
+ exchangeResponse: exchangeResponse
+ }
+
+ respondWithContent(JSON.stringify(serverResponse), response);
+ }
+
+ return;
+ }
+
+ else {
+
+ let customResponse = {
+ result: global.CUSTOM_FAIL_RESPONSE.result,
+ message: "Your session has expired. Please login again."
+ };
+
+ respondWithContent(JSON.stringify(customResponse), response);
+
}
}
break;