Skip to content
This repository has been archived by the owner on Jan 6, 2020. It is now read-only.

Commit

Permalink
Merge pull request #116 from krishnaIndia/ffi_logger
Browse files Browse the repository at this point in the history
Version updated to 0.4.1
  • Loading branch information
Shankar committed Mar 15, 2016
2 parents 1e82145 + 046734e commit 9459541
Show file tree
Hide file tree
Showing 10 changed files with 92 additions and 32 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -10,3 +10,4 @@ Thumbs.db
/app/api/ffi/safe_ffi.dll
/app/bower_components
/app_dist
/.idea
10 changes: 10 additions & 0 deletions CHANGELOG.MD
@@ -1,5 +1,15 @@
# SAFE Launcher Change Log

##[0.4.1]
- safe_ffi 0.5.0
- 500 Error code removed
- 404 added and 202 changed to 200
- file response metadata_undefined issue fixed
- Fixed the issue with user metadata not being updated
- Post Package workflow integration
- API Version Updated to 0.4
- Error Codes updated to match with safe_core

##[0.4.0]
- UX update
- Port opening up issues handled (in use and elevated privilege)
Expand Down
4 changes: 3 additions & 1 deletion README.md
Expand Up @@ -3,9 +3,11 @@ safe_launcher

# Quick start
The development dependency of this project is [Node.js](https://nodejs.org).
Build the [safe_ffi](https://github.com/maidsafe/safe_ffi) and copy the `.dll` for Windows
Build the [safe_ffi](https://github.com/maidsafe/safe_ffi) with feature `use-mock-network` and copy the `.dll` for Windows
, `.so` for Linux or `.dylib` for OSX to the `app/api/ffi` folder.

The launcher can be developed/tested only with ffi with mock feature or by running a local network only.

So just make sure you have it installed.
Then type few commands known to every Node developer...
```
Expand Down
5 changes: 4 additions & 1 deletion app/api/ffi/mod/handler.js
Expand Up @@ -23,6 +23,7 @@ module.exports = function(libPath) {

var methodsToRegister = function() {
return {
'init_logging': [ 'int', [] ],
'create_unregistered_client': [ 'int', [ clientHandlePtrPtr ] ],
'create_account': [ 'int', [ 'string', 'string', 'string', clientHandlePtrPtr ] ],
'log_in': [ 'int', [ 'string', 'string', 'string', clientHandlePtrPtr ] ],
Expand Down Expand Up @@ -54,7 +55,9 @@ module.exports = function(libPath) {
var loadLibrary = function() {
try {
lib = ffi.Library(libPath, methodsToRegister());
return true;
/*jscs:disable requireCamelCaseOrUpperCaseIdentifiers*/
return lib.init_logging() === 0;
/*jscs:enable requireCamelCaseOrUpperCaseIdentifiers*/
} catch (e) {
console.log('Ffi load error', e);
}
Expand Down
2 changes: 1 addition & 1 deletion app/package.json
Expand Up @@ -3,7 +3,7 @@
"productName": "SAFELauncher",
"identifier": "com.maidsafe.safe_launcher",
"description": "SAFE Launcher - Gateway to the SAFE Network",
"version": "0.4.0",
"version": "0.4.1",
"author": "Maidsafe",
"copyright": "",
"main": "background.js",
Expand Down
6 changes: 3 additions & 3 deletions app/server/boot.js
Expand Up @@ -4,7 +4,7 @@ import express from 'express';
import EventEmitter from 'events';
import bodyParser from 'body-parser';
import sessionManager from './session_manager';
import { versionOneRouter } from './routes/version_one';
import { router_0_4 } from './routes/version_0_4';
import { CreateSession } from './controllers/auth';
import { decryptRequest } from './utils';

Expand Down Expand Up @@ -80,8 +80,8 @@ export default class RESTServer {
app.get('/pac-file', function(req, res) {
res.download(path.resolve(__dirname, 'server/web_proxy.pac'));
});
app.use('/', versionOneRouter);
app.use('/v1', versionOneRouter);
app.use('/', router_0_4);
app.use('/0.4', router_0_4);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
Expand Down
26 changes: 14 additions & 12 deletions app/server/error_code_lookup.js
Expand Up @@ -16,28 +16,30 @@ export function errorCodeLookup(errCode) {
return 'CoreError::ReceivedUnexpectedData';
case CLIENT_ERROR_START_RANGE - 5:
return 'CoreError::VersionCacheMiss';
case CLIENT_ERROR_START_RANGE - 6:
return 'CoreError::RoutingMessageCacheMiss';
case CLIENT_ERROR_START_RANGE - 8:
case CLIENT_ERROR_START_RANGE - 7:
return 'CoreError::RootDirectoryAlreadyExists';
case CLIENT_ERROR_START_RANGE - 9:
case CLIENT_ERROR_START_RANGE - 8:
return 'CoreError::RandomDataGenerationFailure';
case CLIENT_ERROR_START_RANGE - 10:
case CLIENT_ERROR_START_RANGE - 9:
return 'CoreError::OperationForbiddenForClient';
case CLIENT_ERROR_START_RANGE - 11:
case CLIENT_ERROR_START_RANGE - 10:
return 'CoreError::Unexpected';
case CLIENT_ERROR_START_RANGE - 12:
case CLIENT_ERROR_START_RANGE - 11:
return 'CoreError::RoutingError';
case CLIENT_ERROR_START_RANGE - 13:
case CLIENT_ERROR_START_RANGE - 12:
return 'CoreError::RoutingInterfaceError';
case CLIENT_ERROR_START_RANGE - 14:
case CLIENT_ERROR_START_RANGE - 13:
return 'CoreError::UnsupportedSaltSizeForPwHash';
case CLIENT_ERROR_START_RANGE - 15:
case CLIENT_ERROR_START_RANGE - 14:
return 'CoreError::UnsuccessfulPwHash';
case CLIENT_ERROR_START_RANGE - 16:
case CLIENT_ERROR_START_RANGE - 15:
return 'CoreError::OperationAborted';
case CLIENT_ERROR_START_RANGE - 17:
case CLIENT_ERROR_START_RANGE - 16:
return 'CoreError::MpidMessagingError';
case CLIENT_ERROR_START_RANGE - 17:
return 'CoreError::GetFailure';
case CLIENT_ERROR_START_RANGE - 18:
return 'CoreError::MutationFailure';
case NFS_ERROR_START_RANGE - 1:
return 'NfsError::DirectoryAlreadyExistsWithSameName';
case NFS_ERROR_START_RANGE - 2:
Expand Down
Expand Up @@ -31,4 +31,4 @@ router.get('/dns/:serviceName/:longName/:filePath', DNS.getFile);
router.get('/dns', DNS.listLongNames);
router.get('/dns/:longName', DNS.listServices);

export { router as versionOneRouter };
export { router as router_0_4 };
27 changes: 18 additions & 9 deletions app/server/utils.js
Expand Up @@ -127,7 +127,7 @@ export var formatResponse = function(data) {
delete obj.user_metadata;
}
if (obj.hasOwnProperty('metadata') && typeof obj.metadata === 'string' && obj.metadata) {
obj.metadata = JSON.parse(obj.metadata);
obj.metadata = (obj.metadata && obj.metadata[0] === '{') ? JSON.parse(obj.metadata) : obj.metadata;
}
var formattedObj = {};
for (let key in obj) {
Expand Down Expand Up @@ -157,33 +157,40 @@ export var ResponseHandler = function(res, sessionInfo, isFileResponse) {
if (!self.sessionInfo) {
return msg;
}
self.res.set('Content-Type', 'text/plain');
return self.sessionInfo.encryptResponse(msg);
};

var generalResponse = function(err, data) {
let status = 200;
if (err) {
if (err.hasOwnProperty('errorCode')) {
err.description = errorCodeLookup(err.errorCode);
}
if (err.description && err.description.toLowerCase().indexOf('notfound') > -1) {
status = 404;
}
err = encrypt(err);
return self.res.status(500).send(err);
return self.res.status(400).send(err);
}
let status = data ? 200 : 202;
if (data) {
self.res.status(status).send(encrypt(formatResponse(data)));
} else {
self.res.sendStatus(status);
}
};

var fileReponse = function(err, data) {
var fileResponse = function(err, data) {
var status = 200;
if (err) {
status = 400;
if (err.hasOwnProperty('errorCode')) {
err.description = errorCodeLookup(err.errorCode);
}
if (err.description && err.description.toLowerCase().indexOf('notfound') > -1) {
status = 404;
}
err = encrypt(err);
return self.res.status(500).send(err);
return self.res.status(status).send(err);
}
data = formatResponse(data);
var content = new Buffer(data.content, 'base64');
Expand All @@ -197,11 +204,13 @@ export var ResponseHandler = function(res, sessionInfo, isFileResponse) {
self.res.set('file-size', data.metadata.size);
self.res.set('file-created-time', data.metadata.createdOn);
self.res.set('file-modified-time', data.metadata.modifiedOn);
self.res.set('file-metadata', data.metadata.userMetadata);
res.status(200).send(content);
if (data.metadata.userMetadata) {
self.res.set('file-metadata', data.metadata.userMetadata);
}
res.status(status).send(content);
};

self.onResponse = self.isFileResponse ? fileReponse : generalResponse;
self.onResponse = self.isFileResponse ? fileResponse : generalResponse;

return self;
};
41 changes: 37 additions & 4 deletions tasks/package.js
Expand Up @@ -2,10 +2,16 @@

var gulp = require('gulp');
var utils = require('./utils');
var gutil = require('gulp-util');
var fs = require('fs');
var os = require('os');
var childProcess = require('child_process');
var pathUtil = require('path');
var electronVersion = require(pathUtil.resolve('./node_modules/electron-prebuilt/package.json')).version;

var BINARY_NAME = 'safe_launcher';
var OUT_FOLDER = 'app_dist';

var packagerPath = pathUtil.resolve('./node_modules/.bin/electron-packager');
if (process.platform === 'win32') {
packagerPath += '.cmd';
Expand All @@ -29,23 +35,50 @@ var packageForOs = {
}
};

var onPackageCompleted = function(code) {
if (code !== 0) {
return;
}
var packagePath = pathUtil.resolve('.', OUT_FOLDER, BINARY_NAME + '-' + os.platform() + '-' + os.arch());
var versionFileName = 'version';
var filesToRemove = [ 'LICENSE', 'LICENSES.chromium.html' ];
var appVersion = require(pathUtil.resolve('./app/package.json')).version;

var versionFilePath = packagePath + versionFileName;

filesToRemove.forEach(function(fileName) {
fileName = pathUtil.resolve(packagePath, fileName);
try {
fs.unlinkSync(fileName);
} catch (e) {
if (e.code === 'ENOENT') {
gutil.log('%s file not present to be deleted', fileName);
} else {
throw e;
}
}
});
gutil.log('Updating version file');
fs.writeFileSync(versionFilePath, appVersion);
};

var packageApp = function() {
var config = packageForOs[utils.os()];
childProcess.spawn(packagerPath, [
'build',
'safe_launcher',
BINARY_NAME,
'--icon=' + config.icon,
'--platform=' + config.platform,
'--prune',
'--asar',
'--asar-unpack=' + config.unpack,
'--out=app_dist',
'--arch=x64',
'--out=' + OUT_FOLDER,
'--arch=' + os.arch(),
'--version=' + electronVersion,
'--overwrite'
], {
stdio: 'inherit'
});
}).on('exit', onPackageCompleted);
};

gulp.task('package', ['build'], packageApp);

0 comments on commit 9459541

Please sign in to comment.