diff options
author | Fulup Ar Foll <fulup@iot.bzh> | 2015-12-16 17:15:43 +0100 |
---|---|---|
committer | Fulup Ar Foll <fulup@iot.bzh> | 2015-12-16 17:15:43 +0100 |
commit | 475508baa9f0b21087eb85048d51af342aa09692 (patch) | |
tree | f3e944401efc59c68110f54fcea7f569e928a42f /afb-client/app/Backend | |
parent | f7e443f996dceb928a047d06e45f59579f1fbc0e (diff) |
Add the app!!!
Diffstat (limited to 'afb-client/app/Backend')
-rw-r--r-- | afb-client/app/Backend/RestApis/PostMockApi.js | 37 | ||||
-rw-r--r-- | afb-client/app/Backend/RestApis/TokenMockApi.js | 114 | ||||
-rw-r--r-- | afb-client/app/Backend/RestApis/_all.js | 29 | ||||
-rw-r--r-- | afb-client/app/Backend/server.js | 58 |
4 files changed, 238 insertions, 0 deletions
diff --git a/afb-client/app/Backend/RestApis/PostMockApi.js b/afb-client/app/Backend/RestApis/PostMockApi.js new file mode 100644 index 0000000..6299f39 --- /dev/null +++ b/afb-client/app/Backend/RestApis/PostMockApi.js @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2015 "IoT.bzh" + * Author "Fulup Ar Foll" + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +var fs = require('fs'); +var multer = require('multer'); + +function NewApi(handle, prefix) { + var self=this; + handle.trace (this,1, "Mock PostApi url=%s", prefix +'/ping'); + var upload = multer({ dest: '/tmp/uploads/' }); + + handle.app.post(prefix +'/upload', upload.single('avatar'), function (req, res) { + handle.trace (self, 1, "%s/upload file=", prefix, req.file.originalname); + var upload = multer({ dest: '/tmp/uploads/' }); + + res.send({"jtype": "TEST_message", "status": "success", "info": "done"}); + }); + +} + +// Export Class +module.exports = NewApi;
\ No newline at end of file diff --git a/afb-client/app/Backend/RestApis/TokenMockApi.js b/afb-client/app/Backend/RestApis/TokenMockApi.js new file mode 100644 index 0000000..74b565a --- /dev/null +++ b/afb-client/app/Backend/RestApis/TokenMockApi.js @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2015 "IoT.bzh" + * Author "Fulup Ar Foll" + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/* ---------------------------------------------------------------------- + * This module simulate Application Framework Binder + * + * /api/afbs/create + * /api/afbs/check?token=123456789 + * /api/afbs/refresh?token=123456789-xxxxx + * /api/afbs/reset?123456789-xxxxx + * + * Note: this MOCK api does not handle any session login. It only returns + * a fake valid or false message depending on call order. + * Its goal is to get a quick way to check you HTML5 client rendering & behaviour. + * + * When you're happy with you HTML5 client OnePageApp check it with afb-daemon + * ----------------------------------------------------------------------*/ + + +function NewApi(handle, prefix) { + var scope=this; // I hate JavaScript + scope.connected=false; + + // Simulate Client Context Session Creation + handle.app.post(prefix +'/create', function (req, res) { + handle.trace (scope, 1, "%s/create body=%s", prefix, req.body.action); + var okResponse= '{ "jtype": "AJB_reply"' + + ', "request": { "prefix": "afbs", "api": "create", "uuid": "e4ef5e66-xxxx", "token": "123456789-xxxxx", "status": "processed" }'+ + ', "response": { "token": "Token was refreshed" }'+ + '}'; + + var fxResponse= '{ "jtype": "AJB_reply" ' + + ', "request": { "prefix": "afbs", "api": "create", "status": "fail", "info": "AFB_SESSION_REFRESH Not Initial Token Chain" }'+ + '}'; + + if (scope.connected) res.status(401).send(fxResponse); + else { + res.send(okResponse); + scope.connected=true; + } + }); + + + // Simulate Client Context Check + handle.app.post(prefix +'/check', function (req, res) { + handle.trace (scope, 1, "%s/check query=%s", prefix, req.query.token); + var okResponse= '{"jtype":"AJB_reply"'+ + ',"request":{"prefix":"afbs","api":"check", "status":"processed"}'+ + ',"response":{"isvalid":true}'+ + '}'; + + var fxResponse= '{"jtype":"AJB_reply",'+ + '"request":{"prefix":"afbs","api":"check","status":"empty","info":"AFB_SESSION_CHECK Not a Valid Active Token"}'+ + '}'; + + if (!scope.connected) res.status(401).send(fxResponse); + else res.send(okResponse); + }); + + // Simulate Client Context Check + handle.app.post(prefix +'/refresh', function (req, res) { + handle.trace (scope, 1, "%s/refresh query=%s", prefix, req.query.token); + var okResponse= '{"jtype":"AJB_reply"'+ + ',"request":{"prefix":"afbs","api":"refresh","uuid": "e4ef5e66-xxxx", "token": "123456789-xxxxx","status":"processed"}'+ + ',"response":{"isvalid":true}'+ + '}'; + + var fxResponse= '{"jtype":"AJB_reply",'+ + '"request":{"prefix":"afbs","api":"refresh","status":"empty","info":"AFB_SESSION_REFRESH Not a Valid Active Token"}'+ + '}'; + + if (!scope.connected) res.status(401).send(fxResponse); + else res.send(okResponse); + }); + + // Simulate Client Context Session Closing + handle.app.post(prefix +'/reset', function (req, res) { + handle.trace (scope, 1, "%s/reset query=%s", prefix, req.query.token); + var okResponse= '{"jtype":"AJB_reply"'+ + ',"request":{"prefix":"afbs","api":"reset","uuid": "e4ef5e66-xxxx","status":"processed"}'+ + ',"response":{"uuid":"b028b883-8b47-4c6d-9c6e-e79b9e2b81b9"}'+ + '}'; + + var fxResponse= '{"jtype":"AJB_reply",'+ + '"request":{"prefix":"afbs","api":"reset","status":"empty","info":"AFB_SESSION_CLOSE Not a Valid Access Token"}'+ + '}'; + + if (!scope.connected) res.status(401).send(fxResponse); + else { + res.send(okResponse); + scope.connected=false; + } + }); + + +} + +// Export Class +module.exports = NewApi;
\ No newline at end of file diff --git a/afb-client/app/Backend/RestApis/_all.js b/afb-client/app/Backend/RestApis/_all.js new file mode 100644 index 0000000..aacf19e --- /dev/null +++ b/afb-client/app/Backend/RestApis/_all.js @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2015 "IoT.bzh" + * Author "Fulup Ar Foll" + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +PostMockApi = require ('./PostMockApi'); +TokenMockApi = require ('./TokenMockApi'); + +// Include here every application APIs routes modules. +function Initialise (handle) { + + this.sample= new TokenMockApi (handle, config.APIBASE + 'token'); + this.sample= new PostMockApi (handle, config.APIBASE + 'post'); +} + +module.exports = Initialise; + diff --git a/afb-client/app/Backend/server.js b/afb-client/app/Backend/server.js new file mode 100644 index 0000000..11c5486 --- /dev/null +++ b/afb-client/app/Backend/server.js @@ -0,0 +1,58 @@ +var config = require('../etc/_Config'); +var trace = require('../etc/_Trace'); +var RestAPI = require('./RestApis/_all'); +var fs = require('fs'); + +var express = require('express'); +var session = require('express-session'); +var bodyParser = require('body-parser'); +var methodOverride = require('method-override'); + +// instanciate express HTTP server +var app = express(); + +// chose dev or prod rootdir +var staticdir = 'dist.dev'; +if (process.env.MODE) staticdir = process.env.MODE === 'prod' ? 'dist.prod' : 'dist.dev'; +else staticdir = config.MODE === 'prod' ? 'dist.prod' : 'dist.dev'; + +var rootdir = __dirname + '/../../' + staticdir; +if (!fs.existsSync(rootdir)) { + console.log("### HOOPS Rootdir not found rootdir=%s\n", rootdir); + process.exit(); +} + +// get all data/stuff of the body (POST) parameters +app.use(bodyParser.json()); // parse application/json +app.use(methodOverride('X-HTTP-Method-Override')); // override with the X-HTTP-Method-Override header in the request. simulate DELETE/PUT + +// This handle should contain enough for application logic +var serverHandle = { + app : app, // Express server + config: config, + trace: config.DBG_LVL > 0 ? trace : function(){/*empty function */} +}; + +// set the static files location /public/img will be /img for users +app.use(express.static(rootdir)); + +// Load Mock APIs +var apirest = new RestAPI(serverHandle); + +app.get(config.URLBASE, function (req, res) { + console.log ("Angular OPA %s", req.originalUrl); + res.sendfile(config.URLBASE +"index.html", {root: rootdir}); +}); + +// rewrite requested URL to include Angular hashPrompt and set session flag for RestAPI +app.get(config.URLBASE + '*', function(req, res) { + // Warning redirect should be under exact "/opa/#!page" or a redirect to home will be done + var redirect=config.URLBASE + '#!' + req.originalUrl.substring(config.URLBASE.length); + res.redirect(redirect); + console.log ("Redirect to: ", redirect); +}); + + +// start app =============================================== +app.listen(config.EXPRESS_PORT, config.EXPRESS_HOST); +console.log('Server Listening http://%s:%d (rootdir=%s)', config.EXPRESS_HOST, config.EXPRESS_PORT, rootdir);
\ No newline at end of file |