UNPKG

5.81 kBJavaScriptView Raw
1/*
2
3 ----------------------------------------------------------------------------
4 | qewd-up: Rapid QEWD API Development |
5 | |
6 | Copyright (c) 2018-19 M/Gateway Developments Ltd, |
7 | Redhill, Surrey UK. |
8 | All rights reserved. |
9 | |
10 | http://www.mgateway.com |
11 | Email: rtweed@mgateway.com |
12 | |
13 | |
14 | Licensed under the Apache License, Version 2.0 (the "License"); |
15 | you may not use this file except in compliance with the License. |
16 | You may obtain a copy of the License at |
17 | |
18 | http://www.apache.org/licenses/LICENSE-2.0 |
19 | |
20 | Unless required by applicable law or agreed to in writing, software |
21 | distributed under the License is distributed on an "AS IS" BASIS, |
22 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
23 | See the License for the specific language governing permissions and |
24 | limitations under the License. |
25 ----------------------------------------------------------------------------
26
27 4 July 2019
28
29*/
30
31console.log('running up/qewdAppHandler.js in process ' + process.pid);
32
33var createDocStoreEvents = require('./createDocStoreEvents');
34var handleDocStoreEvents = require('./handleDocStoreEvents');
35
36var fs = require('fs');
37
38function getDirectories(path) {
39 return fs.readdirSync(path).filter(function(file) {
40 return fs.statSync(path + '/' + file).isDirectory();
41 });
42}
43
44function use_microservice(message, send) {
45 //console.log('&& use_microservice handler: message = ' + JSON.stringify(message, null, 2));
46 if (!message.request.headers) {
47 message.request.headers = {
48 authorization: 'Bearer ' + message.token
49 };
50 }
51 var original_app = message.ewd_application;
52 var _this = this;
53
54 this.microServiceRouter.call(this, message.request, function(responseObj) {
55 //console.log('*** response from microservice: ' + JSON.stringify(responseObj, null, 2));
56 responseObj.type = message.original_type;
57
58 console.log('type switched to ' + responseObj.type);
59
60 // change JWT application back to original
61
62 var msg = {
63 type: 'ewd-jwt-updateExpiry',
64 params: {
65 jwt: responseObj.message.token,
66 application: original_app
67 }
68 };
69
70 _this.handleMessage(msg, function(newJWTObj) {
71 responseObj.message.token = newJWTObj.message.jwt;
72 send (responseObj);
73 });
74 });
75 return true; // response to client will be handled by callback above
76}
77
78module.exports = function(appPath) {
79 var handlers = {};
80 var workerResponseHandlers = {
81 use_microservice: use_microservice
82 };
83
84 var handlerList = getDirectories(appPath);
85 handlerList.forEach(function(name) {
86 var handlerPath = appPath + '/' + name;
87 handlers[name] = require(handlerPath);
88 var onResponsePath = handlerPath + '/onResponse.js';
89 console.log('onResponsePath = ' + onResponsePath);
90 if (fs.existsSync(onResponsePath)) {
91 console.log('workerResponseHandler loaded');
92 workerResponseHandlers[name] = require(onResponsePath);
93 }
94 });
95
96 var docStoreEvents;
97 var rootPath = '/opt/qewd/mapped/';
98 if (process.env.qewd_service_name) {
99 rootPath = process.cwd() + '/' + process.env.qewd_service_name + '/';
100 }
101 if (process.env.mode && process.env.microservice) {
102 rootPath = process.cwd() + '/' + process.env.microservice + '/';
103 }
104 var docStoreEventsPath = rootPath + 'docStoreEvents/events.json';
105 if (fs.existsSync(docStoreEventsPath)) {
106 docStoreEvents = createDocStoreEvents(docStoreEventsPath, rootPath);
107 //console.log('** docStoreEvents: ' + JSON.stringify(docStoreEvents, null, 2));
108 }
109
110 var handlerModule = {
111 handlers: handlers,
112 workerResponseHandlers: workerResponseHandlers
113 };
114
115 var onLoadPath = appPath + '/onLoad.js';
116 console.log('onLoadPath = ' + onLoadPath);
117
118 var docStoreEventsFn = function() {};
119 if (docStoreEvents) {
120 docStoreEventsFn = function() {
121 handleDocStoreEvents.call(this, docStoreEvents);
122 };
123 }
124
125 var onLoadFn = function() {};
126 if (fs.existsSync(onLoadPath)) {
127 onLoadFn = require(onLoadPath);
128 }
129
130 handlerModule.init = function() {
131 docStoreEventsFn.call(this);
132 onLoadFn.call(this);
133 };
134
135 var beforeHandlerPath = appPath + '/beforeHandler.js';
136 console.log('beforeHandlerPath = ' + beforeHandlerPath);
137 if (fs.existsSync(beforeHandlerPath)) {
138 handlerModule.beforeHandler = require(beforeHandlerPath);
139 }
140
141 var servicesAllowedPath = appPath + '/servicesAllowed.json';
142 console.log('servicesAllowedPath = ' + servicesAllowedPath);
143 if (fs.existsSync(servicesAllowedPath)) {
144 try {
145 handlerModule.servicesAllowed = require(servicesAllowedPath);
146 console.log('servicesAllowed loaded: ' + JSON.stringify(handlerModule.servicesAllowed, null, 2));
147 }
148 catch(err) {
149 console.log('Unable to load ' + servicesAllowedPath);
150 }
151 }
152
153 return handlerModule;
154};
155