|
1 | 1 | (function () { |
2 | 2 | "use strict"; |
3 | 3 |
|
4 | | - const express = require('express'), |
5 | | - parseRpcParams = require('../services/parse-rpc-params'), |
| 4 | + const bodyParser = require('body-parser'), |
| 5 | + express = require('express'), |
| 6 | + parseRpcRequest = require('../services/parse-rpc-request'), |
| 7 | + parseNotifyParams = require('../services/parse-notify-params'), |
| 8 | + pleaseNotify = require('../services/please-notify'), |
| 9 | + ping = require('../services/ping'), |
6 | 10 | router = new express.Router(), |
7 | | - rpcReturnSuccess = require('../services/rpc-return-success'); |
| 11 | + rpcReturnSuccess = require('../services/rpc-return-success'), |
| 12 | + rpcReturnFault = require('../services/rpc-return-fault'), |
| 13 | + textParser = bodyParser.text({ type: '*/xml'}); |
8 | 14 |
|
9 | | - function processResponse(req, res, result) { |
| 15 | + function processResponse(req, res, xmlString) { |
10 | 16 | switch (req.accepts('xml')) { |
11 | 17 | case 'xml': |
12 | 18 | res.set('Content-Type', 'text/xml'); |
13 | | - res.send(rpcReturnSuccess()); |
| 19 | + res.send(xmlString); |
14 | 20 | break; |
15 | 21 | default: |
16 | 22 | res.status(406).send('Not Acceptable'); |
17 | 23 | break; |
18 | 24 | } |
19 | 25 | } |
20 | 26 |
|
21 | | - router.post('/', function (req, res) { |
22 | | - const params = parseRpcParams(req); |
23 | | - console.dir(params); |
24 | | - processResponse(req, res, params); |
| 27 | + function handleError(req, res, err) { |
| 28 | + console.error(err); |
| 29 | + processResponse(req, res, rpcReturnFault(1, err.message)); |
| 30 | + } |
| 31 | + |
| 32 | + router.post('/', textParser, function (req, res) { |
| 33 | + parseRpcRequest(req) |
| 34 | + .then(request => { |
| 35 | + switch (request.methodName) { |
| 36 | + case 'rssCloud.pleaseNotify': |
| 37 | + const params = parseNotifyParams.rpc(req, request.params); |
| 38 | + pleaseNotify( |
| 39 | + params.notifyProcedure, |
| 40 | + params.apiurl, |
| 41 | + params.protocol, |
| 42 | + params.urlList, |
| 43 | + params.diffDomain |
| 44 | + ) |
| 45 | + .then(result => processResponse(req, res, rpcReturnSuccess(result.success, result.msg))) |
| 46 | + .catch(err => handleError(req, res, err)); |
| 47 | + break; |
| 48 | + case 'rssCloud.ping': |
| 49 | + ping(request.params[0]) |
| 50 | + .then(result => processResponse(req, res, rpcReturnSuccess(result.success, result.msg))) |
| 51 | + .catch(err => handleError(req, res, err)); |
| 52 | + break; |
| 53 | + default: |
| 54 | + handleError( |
| 55 | + req, |
| 56 | + res, |
| 57 | + new Error(`Can't make the call because "${request.methodName}" is not defined.`) |
| 58 | + ) |
| 59 | + } |
| 60 | + }) |
| 61 | + .catch(err => handleError(req, res, err)); |
25 | 62 | }); |
26 | 63 |
|
27 | 64 | module.exports = router; |
|
0 commit comments