Skip to content

Commit

Permalink
#47 draft implementation of the service is complete - needs support f…
Browse files Browse the repository at this point in the history
…or client API and tests
  • Loading branch information
kecso committed Apr 3, 2015
1 parent 9ff9ced commit beb4ad1
Show file tree
Hide file tree
Showing 8 changed files with 514 additions and 6 deletions.
5 changes: 5 additions & 0 deletions config/config.default.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,11 @@ var path = require('path'),
components: {}
},

seedProjects: {
enable: true,
basePaths: [path.join(__dirname, '../seeds')]
},

server: {
port: 8888,
maxWorkers: 10,
Expand Down
5 changes: 5 additions & 0 deletions config/validator.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,11 @@ function validateConfig (configOrFileName) {
assertBoolean('config.rest.secure', config.rest.secure);
assertObject('config.rest.components', config.rest.components);

//seedProjects
expectedKeys.push('seedProjects');
assertBoolean('config.seedProjects.enable',config.seedProjects.enable);
assertArray('config.seedProjects.basePaths',config.seedProjects.basePaths);

// server configuration
expectedKeys.push('server');
assertObject('config.server', config.server);
Expand Down
122 changes: 122 additions & 0 deletions seeds/base001.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{
"bases": {},
"root": {
"path": "",
"guid": "03d36072-9e09-7866-cb4e-d0a36ff825f6"
},
"relids": {
"03d36072-9e09-7866-cb4e-d0a36ff825f6": null,
"cd891e7b-e2ea-e929-f6cd-9faf4f1fc045": "1"
},
"containment": {
"cd891e7b-e2ea-e929-f6cd-9faf4f1fc045": {}
},
"nodes": {
"03d36072-9e09-7866-cb4e-d0a36ff825f6": {
"attributes": {
"name": "ROOT"
},
"base": null,
"constraints": {},
"meta": {
"attributes": {
"name": {
"type": "string"
}
},
"children": {
"minItems": [
-1
],
"maxItems": [
-1
],
"items": [
"cd891e7b-e2ea-e929-f6cd-9faf4f1fc045"
]
}
},
"parent": null,
"pointers": {
"base": null
},
"registry": {
"MetaSheets": [
{
"SetID": "MetaAspectSet_68f8146d-b1b7-6c40-3464-f8c070e97e8d",
"order": 0,
"title": "META"
}
],
"ProjectRegistry": {
"FCO_ID": "/1"
},
"usedAddOns": "ConstraintAddOn",
"validPlugins": ""
},
"sets": {
"MetaAspectSet": [
{
"attributes": {},
"guid": "cd891e7b-e2ea-e929-f6cd-9faf4f1fc045",
"registry": {
"position": {
"x": 100,
"y": 100
}
}
}
],
"MetaAspectSet_68f8146d-b1b7-6c40-3464-f8c070e97e8d": [
{
"attributes": {},
"guid": "cd891e7b-e2ea-e929-f6cd-9faf4f1fc045",
"registry": {
"position": {
"x": 100,
"y": 100
}
}
}
]
}
},
"cd891e7b-e2ea-e929-f6cd-9faf4f1fc045": {
"attributes": {
"name": "FCO"
},
"base": null,
"constraints": {},
"meta": {
"attributes": {
"name": {
"type": "string"
}
},
"children": {
"minItems": [],
"maxItems": [],
"items": []
}
},
"parent": "03d36072-9e09-7866-cb4e-d0a36ff825f6",
"pointers": {
"base": null
},
"registry": {
"DisplayFormat": "$name",
"PortSVGIcon": "",
"SVGIcon": "",
"decorator": "",
"isAbstract": false,
"isPort": false,
"position": {
"x": 100,
"y": 100
}
},
"sets": {}
}
},
"metaSheets": {}
}
7 changes: 5 additions & 2 deletions src/server/middleware/rest/RestServer.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@
*/

var REST = require('./rest');
function createExpressRest(__app, gmeConfig, __logger, ensureAuthenticated, restAuthorization) {
function createExpressRest(__app, gmeConfig, __logger, ensureAuthenticated, restAuthorization, tokenToUserId, workerManager) {
'use strict';

var __REST = new REST({
globConf: gmeConfig,
baseUrl: '',
authorization: restAuthorization
authorization: restAuthorization,
workerManager: workerManager,
tokenToUserId: tokenToUserId
}),
logger = __logger.fork('rest');

Expand All @@ -26,6 +28,7 @@ function createExpressRest(__app, gmeConfig, __logger, ensureAuthenticated, rest
req.headers.webGMEToken,
req.query,
function (httpStatus, object) {
console.log('backAgain',object);
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
if (req.params.command === __REST.command.etf) {
Expand Down
78 changes: 76 additions & 2 deletions src/server/middleware/rest/rest.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ var Core = requireJS('common/core/core'),
Logger = require('../../logger');

function Rest(_parameters) {
var gmeConfig = _parameters.globConf;
var gmeConfig = _parameters.globConf,
workerManager = _parameters.workerManager,
tokenToUserId = _parameters.tokenToUserId;
_parameters.baseUrl = _parameters.baseUrl || "http://localhost/rest"; // FIXME: This should come from config
_parameters.authorization = /*_parameters.authorization || */function (token, projectname, callback) {
callback(null, true);
Expand Down Expand Up @@ -87,6 +89,10 @@ function Rest(_parameters) {
'etf': {
'description': "Responds with the JSON representation of the pointed node. All sub-nodes are extracted and outer relations of the sub-tree represented by JSON reference objects. It forces file download.",
'example': _baseUrl + '/etf?project=projectName&root=rootHash&path=pathOfNode&output=outputFileName'
},
'seedProject': {
'description': 'Creates a project from the given seed.',
'example': _baseUrl + '/seedProject?type=file&seedName=SignalFlowSystem&projectName=myCopyProject'
}
}
}
Expand Down Expand Up @@ -290,6 +296,73 @@ function Rest(_parameters) {
});
}

function getSeedInfo(userId, callback) {
var parameters = {
command: 'getSeedInfo',
userId: userId
};
workerManager.request(parameters, function (err, id) {
if (!err && id) {
workerManager.result(id, function (err, seedInfo) {
if (err) {
return callback(_HTTPError.internalServerError, err);
}
callback(_HTTPError.ok, seedInfo);
});
} else {
//FIXME generate meaningful HTTP result based on the error
callback(_HTTPError.forbidden, err);
}
});
}

//FIXME check for errors to set HTTPRESULT
function createProjectFromSeed(userId, inputParameters, callback) {
var parameters = {
command: 'seedProject',
userId: userId,
type: inputParameters.type,
seedName: inputParameters.seedName,
projectName: inputParameters.projectName,
branch: inputParameters.branch || 'master',
seedCommit: inputParameters.seedCommit,
seedBranch: inputParameters.seedBranch || 'master'
};
workerManager.request(parameters, function (err, id) {
if (!err && id) {
workerManager.result(id, function (err) {
if (err) {
return callback(_HTTPError.internalServerError, err);
}
callback(_HTTPError.ok);
});
} else {
//FIXME generate meaningful HTTP result based on the error
callback(_HTTPError.forbidden, err);
}
});
}

function seedProject(token, parameters, callback) {
//check parameters
if (!(
typeof parameters.seedName === 'string' &&
typeof parameters.projectName === 'string' &&
typeof parameters.type === 'string' &&
(parameters.type === 'db' || parameters.type === 'file')
)) {
return callback(_HTTPError.badRequest);
}

tokenToUserId(token, function (err, userId) {
if (err && userId[0] === true) {
return callback(_HTTPError.authenticate);
}

createProjectFromSeed(userId[1], parameters, callback);
});
}

function doGET(command, token, parameters, callback) {
switch (command) {
case _commands.help:
Expand Down Expand Up @@ -377,7 +450,8 @@ function Rest(_parameters) {
});
break;
case _commands.seedProject:

seedProject(token, parameters, callback);
break;
default:
printHelp(callback);
}
Expand Down
10 changes: 9 additions & 1 deletion src/server/standalone.js
Original file line number Diff line number Diff line change
Expand Up @@ -798,7 +798,15 @@ function StandAloneServer(gmeConfig) {

//TODO: needs to refactor for the /rest/... format
logger.debug('creating REST related routing rules');
RestServer.createExpressRest(__app, gmeConfig, logger, ensureAuthenticated, __gmeAuth.tokenAuthorization);
RestServer.createExpressRest(
__app,
gmeConfig,
logger,
ensureAuthenticated,
__gmeAuth.tokenAuthorization,
__gmeAuth.tokenAuth,
__workerManager
);

logger.debug("creating server-worker related routing rules");
__app.get('/worker/simpleResult/*', function (req, res) {
Expand Down
4 changes: 3 additions & 1 deletion src/server/worker/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ module.exports = {
'connectedWorkerStop': 'connectedworkerStop',
'getProjectInfo': 'getProjectInfo',
'setProjectInfo': 'setProjectInfo',
'getAllInfoTags': 'getAllInfoTags'
'getAllInfoTags': 'getAllInfoTags',
'getSeedInfo': 'getSeedInfo',
'seedProject': 'seedProject'
}
};
Loading

0 comments on commit beb4ad1

Please sign in to comment.