Session Manager and Storage Manager Implemented.

This commit is contained in:
Luis Fernando Molina committed 2018-06-13 20:45:35 +02:00
1 parent 441c2d1c5b
commit b7c8d6342a
5 files changed
+241 -111

No files matched your search

+4 -1
View File
@@ -54,7 +54,7 @@
<Compile Include="Server\BotsScripts.js">
<SubType>Code</SubType>
</Compile>
<Compile Include="Server\Permissions.js">
<Compile Include="Server\SessionManager.js">
<SubType>Code</SubType>
</Compile>
<Compile Include="CloudVM\CloudSupport.js">
@@ -82,6 +82,9 @@
<Compile Include="ImageButton.js">
<SubType>Code</SubType>
</Compile>
<Compile Include="Server\StorageAccessManager.js">
<SubType>Code</SubType>
</Compile>
<Compile Include="Spaces\BottomSpace.js">
<SubType>Code</SubType>
</Compile>
-47
View File
@@ -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();
}
}
}
}
+48
View File
@@ -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);
}
}
+112
View File
@@ -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"
}
}
*/
+77 -63
View File
@@ -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;