UNPKG

@webex/webex-server

Version:

.

199 lines (191 loc) • 6.49 kB
"use strict"; var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); _Object$defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _apply = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/apply")); var _fs = _interopRequireDefault(require("fs")); var _util = _interopRequireDefault(require("util")); var _bodyParser = _interopRequireDefault(require("body-parser")); var _express = _interopRequireDefault(require("express")); var _expressValidator = _interopRequireDefault(require("express-validator")); var _expressSession = _interopRequireDefault(require("express-session")); var _lodash = require("lodash"); var _webex = _interopRequireDefault(require("./webex")); var _memoryStore = _interopRequireDefault(require("./memory-store")); /*! * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file. */ /* eslint-disable camelcase */ /* eslint-disable no-console */ // express induces more callbacks than usual /* eslint-disable max-nested-callbacks */ // eslint-disable-next-line var router = _express.default.Router(); var _default = exports.default = router; router.use(_bodyParser.default.json()); router.use((0, _expressValidator.default)()); router.use((0, _expressSession.default)({ resave: true, saveUninitialized: true, secret: 'keyboardcat', store: new _memoryStore.default() })); /** * Return the details for a given session * @type {Function} */ router.get('/session', function (req, res) { var webex = req.session.webex; if (!webex) { res.status(404).end(); return; } res.status(200).send({ webex: webex.serialize() }).end(); }); /** * Initialize a webex instance, connect it to mercury, and set a session cookie. * @type {Function} */ router.put('/session', function (req, res, next) { req.checkBody('clientId').notEmpty(); req.checkBody('clientSecret').notEmpty(); req.checkBody('redirectUri').notEmpty(); req.checkBody('scope').notEmpty(); req.checkBody('user').notEmpty(); req.checkBody('user.token').notEmpty(); req.checkBody('user.token.access_token').notEmpty(); req.checkBody('user.token.token_type').notEmpty(); req.checkBody('user.token.expires_in').notEmpty(); req.getValidationResult().then(function (result) { if (!result.isEmpty()) { console.info(result.array()); res.status(400).send("".concat(result.array()[0].param, " is missing")); return; } var webex = new _webex.default({ credentials: req.body.user.token, config: { credentials: { client_id: req.body.clientId, client_secret: req.body.clientSecret, redirect_uri: req.body.redirectUri, scope: req.body.scope } } }); req.session.webex = webex; webex.internal.mercury.connect().then(function () { return res.status(200).send({ webex: webex }).end(); }).catch(function (err) { console.error(err); next(err); }); }); }); /** * Disconnect a webex instance and unregister its device */ router.delete('/session', function (req, res, next) { var webex = req.session.webex; if (!webex) { res.status(404).send({ err: 'no webex instance found for session' }).end(); return; } webex.internal.mercury.disconnect().then(function () { req.session.destroy(function (err) { if (err) { next(err); return; } res.status(204).end(); }); }).catch(function (err) { req.session.destroy(function (err2) { if (err2) { next(err2); return; } next(err); }); }); }); router.post('/session/invoke/internal/conversation/share', function (req, res) { console.info('invoke conversation share called'); var webex = req.session.webex; if (!webex) { console.info('invoke: No session found - did you forget to hit /session?'); res.status(404).send({ message: 'No session found - did you forget to hit /session?' }).end(); return; } var share = webex.internal.conversation.makeShare(req.body[0]); req.body[1].files.forEach(function (fileJson) { var file = _fs.default.readFileSync(fileJson.path); // eslint-disable-line no-sync file.name = fileJson.displayName; share.add(file); }); console.info('invoke: invoking "conversation.share" with arguments\n', _util.default.inspect(req.body)); webex.internal.conversation.share(req.body[0], share).then(function (result) { res.status(200).send(result).end(); }).catch(function (reason) { console.log(reason); res.status(400).send({ message: 'An error occured while processing your request', error: reason.toString(), upstreamStatusCode: reason.statusCode, upstreamResponse: reason.body }).end(); }); }); /** * Invoke an sdk method. */ router.post(/^\/session\/invoke\/.*/, function (req, res) { console.info('invoke called'); var webex = req.session.webex; if (!webex) { console.info('invoke: No session found - did you forget to hit /session?'); res.status(404).send({ message: 'No session found - did you forget to hit /session?' }).end(); return; } var invokePath = req.url.substr(req.url.indexOf('invoke') + 7); var keypath = invokePath.split('/'); var method = (0, _lodash.get)(webex, keypath.join('.')); console.info(111, method, keypath); var methodName = keypath.pop(); console.info(222, methodName); var context = (0, _lodash.get)(webex, keypath.join('.')); if (!context) { context = webex; } console.info(333, context); var label = "webex.".concat(keypath.join('.'), ".").concat(methodName, "()"); console.info("invoke: invoking \"".concat(label, "\" with arguments\n"), _util.default.inspect(req.body)); (0, _apply.default)(method, context, req.body).then(function (result) { console.info("invoke: successfully invoked \"".concat(label, "\"")); res.status(200).send(result).end(); }).catch(function (reason) { console.error({ req: req, err: reason }, "invoke: \"".concat(label, "\" failed with error")); res.status(502).send({ message: 'An error occured while processing your request', error: reason.toString(), upstreamStatusCode: reason.statusCode, upstreamResponse: reason.body }).end(); }); }); //# sourceMappingURL=session.js.map