Session Manager and Storage Manager Implemented.
This commit is contained in:
1 parent
441c2d1c5b
commit
b7c8d6342a
5 files changed
+241
-111
No files matched your search
+4
-1
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user