UNPKG

@sassoftware/viya-serverjs

Version:

Easy to use app server for SAS Viya applications

203 lines (196 loc) 6.69 kB
"use strict"; require("core-js/stable"); require("regenerator-runtime/runtime"); var _fs = _interopRequireDefault(require("fs")); var _iService = _interopRequireDefault(require("./iService")); var _config = _interopRequireDefault(require("./config")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } /* * ------------------------------------------------------------------------------------ * * Copyright (c) SAS Institute Inc. * * Licensed under the Apache License, Version 2.0 (the 'License'); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an 'AS IS' BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * limitations under the License. * ---------------------------------------------------------------------------------------- * */ var debug = require("debug")("startup"); module.exports = function core(uTable, useDefault, serverMode, customize, swaggerfcn) { var argv = require("yargs").argv; var env = argv.env == null ? null : argv.env; var appenv = argv.appenv == null ? null : argv.appenv; var docker = argv.docker == null ? null : argv.docker; //process.env.SERVERMODE = serverMode !== null ? "api" : "app"; if (useDefault == null) { useDefault = true; } console.log("Initialization started ============================================================"); console.log("version: 2, Build Date: ", Date()); console.log("\nCommand Line Configuration:\n Dockerfile: ".concat(docker, "\n env file : ").concat(env, "\n appenv : ").concat(appenv, "\n customize : ").concat(customize != null, "\n ")); iapp(null, env, docker, uTable, useDefault, serverMode, customize); }; function iapp(appSrc, rafEnv, dockerFile, uTable, useDefault, serverMode, customize) { var asset = setup(rafEnv, dockerFile); if (appSrc == null) { appSrc = process.env.APPENV == null ? null : process.env.APPENV; } if (appSrc != null) { console.log("appSrc", "+".concat(appSrc, "+")); createPayload(appSrc, function (err, r) { if (err) { console.log(err); console.log("createPayload failed"); process.exit(1); } else { (0, _iService["default"])(uTable, useDefault, asset, r, serverMode, customize); } }); } else { var appEnv = getAllEnv({}); (0, _iService["default"])(uTable, useDefault, asset, appEnv, serverMode, customize); } } function setup(rafEnv, dockerFile) { (0, _config["default"])(rafEnv, dockerFile); var asset = process.env.APPLOC === "." ? process.cwd() : process.env.APPLOC; process.env.APPASSET = asset; return asset; } function createPayload(srcName, cb) { var src = _fs["default"].readFileSync(srcName, "utf8"); if (src === null) { cb("Error: ".concat(srcName, " was not found. ")); } try { // console.log(src); var f = new Function(src); console.log("".concat(srcName, " compile completed")); var r = f(); f = null; var ar = getAllEnv(r); cb(null, ar); } catch (err) { console.log("".concat(srcName, " compile failed")); cb(err); } } function getAllEnv(userData) { var env; var l = null; var host = trimit("VIYA_SERVER"); if (host === 'none' || host == null) { console.log('Note: setting host to null'); host = null; } /* if (process.env.AUTHTYPE != null) { process.env.AUTHFLOW = process.env.AUTHTYPE; } */ var authflow = trimit("AUTHFLOW"); if (authflow === "authorization_code" || authflow === "code") { authflow = "server"; } if (authflow === null) { host = null; } if (host === null) { authflow = null; console.log('Note: setting authflow to null'); } process.env.AUTHFLOW = authflow; // let redirect = (process.env.REDIRECT != null) ? process.env.REDIRECT : null; var redirect = trimit("REDIRECT"); var clientID = trimit("CLIENTID"); // eslint-disable-next-line no-unused-vars var clientSecret = trimit("CLIENTSECRET"); var keepAlive = trimit("KEEPALIVE"); var appName = trimit("APPNAME"); var ns = trimit("NAMESPACE"); var nsHost = trimit("NSHOST"); l = { authflow: authflow, redirect: redirect, host: host, clientID: clientID, appName: appName, keepAlive: null, useToken: process.env.USETOKEN, ns: ns, nsHost: nsHost }; if (authflow === "server" || authflow === "implicit") { if (authflow === "implicit") { if (redirect === null) { redirect = "".concat(appName, "/callback"); process.env.REDIRECT = "callback"; } else { if (redirect !== null && redirect.indexOf("/") !== 0) { redirect = redirect.indexOf("http") != -1 ? redirect : "".concat(process.env.APPNAME, "/").concat(redirect); } } l.redirect = redirect; } if (authflow === "server" && keepAlive === "YES") { var protocol = process.env.HTTPS === "true" ? "https://" : "http://"; l.keepAlive = "".concat(protocol).concat(process.env.APPHOST, ":").concat(process.env.APPPORT, "/").concat(appName, "/keepAlive"); l.keepAlive = l.keepAlive.replace(/0.0.0.0/, "localhost"); } if (process.env.TIMERS != null) { l.timers = process.env.TIMERS; } } // allow for no authtype l = { authType: authflow, redirect: redirect, host: host, clientID: clientID, appName: appName, keepAlive: null, useToken: process.env.USETOKEN, ns: ns, nsHost: nsHost }; // pick up the app env's - replacement for appenv.js // appenv.js still supported for backward compatibility for (var key in process.env) { debug(key); if (key.indexOf("APPENV_") === 0) { var k = key.substring(7); var v = process.env[key]; if (v != null && v.trim().length > 0) { if (v.startsWith('$')) { v = process.env[v.substring(1)]; } userData[k] = v != null ? v.trim() : null; } else { userData[k] = null; } } } env = { LOGONPAYLOAD: l, APPENV: userData }; console.log("Final APPENV configuration for the server"); console.log(JSON.stringify(env, null, 4)); console.log(Date()); return env; } function trimit(e) { var a = process.env[e]; if (a == null) { return null; } a = a.trim(); return a.length === 0 ? null : a; }