UNPKG

5.66 kBJavaScriptView Raw
1const rp = require('request-promise');
2const utils = require('utility');
3const configFile = require('./config');
4const Configstore = require('configstore');
5const conf = new Configstore(configFile.CONFIG_STORE_FILENAME);
6const fse = require('fs-extra');
7const path = require('path');
8
9const config = function (key, value) {
10 if (key == null || value == null) {
11 console.log('Missing parameters. must be config [key] [value]');
12 return;
13 }
14 conf.set(key, value);
15 // console.log('config success');
16};
17
18/**
19 * 获得友户通单点登录票据
20 *
21 * @param {*} { username, password } 用户名、密码
22 * @returns {JSON} {success,ticket,body}
23 */
24const getYhtTicket = async function ({ username, password }) {
25 let formData = {
26 username: username,
27 shaPassword: utils.sha1(password),
28 md5Password: utils.md5(password),
29 tenantCode: 'default',
30 tenantid: -1,
31 lt: '',
32 execution: '',
33 _eventId: 'submit',
34 tokeninfo: null,
35 isAutoLogin: 0,
36 randomvalue: 1557123285843,
37 validateCode: '',
38 validateKey: 1557123285000
39 }
40 // 构建登录友户通目的为了获得ticket
41 let options = {
42 url: configFile.YHT_LOGIN_BY_DEVELOP_URL,
43 headers: {
44 'User-Agent': configFile.DEVELOP_HTTP_HEADER_UA
45 },
46 jar: true,
47 method: 'post',
48 form: formData
49 };
50 conf.set('username', username);
51 conf.set('shaPassword', utils.sha1(password));
52 conf.set('md5Password', utils.md5(password));
53
54 let resultJSON = {};
55 let yht_ticket_data = await rp(options);
56 let result = yht_ticket_data.indexOf('?ticket=');
57 if (result !== -1) {
58 console.log('友户通取票成功');
59 // 取票
60 let ticket = yht_ticket_data.split('?ticket=')[1].split('";')[0];
61 resultJSON['success'] = true;
62 // 写票
63 resultJSON['ticket'] = ticket;
64 conf.set('ticket', ticket);
65 // 返回原始body
66 resultJSON['body'] = yht_ticket_data;
67 } else {
68 resultJSON['success'] = false;
69 conf.delete('username');
70 console.log("取票失败,清除用户本地登录信息,此时创建工程将会读取本地工程或页面模板!");
71 }
72 return resultJSON;
73}
74
75/**
76 * 开发者中心验票
77 *
78 * @param {*} { ticket } 票据
79 * @returns {JSON} {success,body}
80 */
81const getValidateTicketDevelop = async function ({ ticket }) {
82 let options = {
83 url: configFile.DEVELOP_TICKET,
84 qs: {
85 ticket
86 },
87 jar: true,
88 method: 'get',
89 headers: {
90 'Upgrade-Insecure-Requests': 1,
91 'User-Agent': configFile.DEVELOP_HTTP_HEADER_UA,
92 'Referer': configFile.DEVELOP_HTTP_HEADER_REFERER
93 },
94 }
95 let resultJSON = {};
96 let yht_validate_ticket_data = await rp(options);
97 let result = yht_validate_ticket_data.indexOf('/fe/fe-portal/index.html');
98 if (result !== -1) {
99 console.log('开发者中心验票授权成功');
100 resultJSON['success'] = true;
101 resultJSON['body'] = yht_validate_ticket_data;
102 } else {
103 resultJSON['success'] = false;
104 conf.delete('username');
105 return utils.reportError("验票失败,清除用户本地登录信息,此时创建工程将会读取本地工程或页面模板!");
106 }
107 // 读取完整的Cookies
108 await rp(options, function (err, res, body) {
109 if (body.indexOf('/fe/fe-portal/index.html') !== -1) {
110 let devcookie = res.request.req.getHeader('cookie');
111 conf.set('cookie', devcookie);
112 // console.log(devcookie);
113 }
114 });
115 return resultJSON;
116}
117
118const send = async function (options) {
119 let opts = {
120 jar: true,
121 method: 'get',
122 headers: {
123 'cookie': conf.get('cookie'),
124 'Upgrade-Insecure-Requests': 1,
125 'User-Agent': configFile.DEVELOP_HTTP_HEADER_UA,
126 'Referer': configFile.DEVELOP_HTTP_HEADER_REFERER
127 }
128 }
129 opts = { ...opts, ...options };
130 let result = await rp(opts)
131 .catch(function (err) {
132 console.log("请求失败,请重新登录了!");
133 return utils.reportError("或清除用户信息,取本地模板!");
134 });
135 //console.log(result)
136 return result;
137}
138
139const download = async function (options, callback, filename) {
140 let opts = {
141 method: 'get',
142 headers: {
143 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
144 'Accept-Encoding': 'gzip, deflate',
145 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
146 'Connection': 'keep-alive',
147 'Cookie': conf.get('cookie'),
148 'Upgrade-Insecure-Requests': 1,
149 'User-Agent': configFile.DEVELOP_HTTP_HEADER_UA,
150 'Referer': configFile.DEVELOP_HTTP_HEADER_REFERER
151 }
152 }
153 opts = { ...opts, ...options };
154 // 获得文件夹路径
155 let fileFolder = path.dirname(filename);
156 // 创建文件夹
157 fse.ensureDirSync(fileFolder);
158 // 开始下载无需返回
159 return await rp(opts).pipe(fse.createWriteStream(filename)).on('close', callback);
160}
161/**
162 * 清除用户信息 xyc
163 */
164const clearUserInfo = function (){
165 conf.delete('username');
166 console.log("用户信息清除完毕!");
167}
168exports.config = config;
169exports.getYhtTicket = getYhtTicket;
170exports.getValidateTicketDevelop = getValidateTicketDevelop;
171exports.send = send;
172exports.download = download;
173exports.clearUserInfo = clearUserInfo;
\No newline at end of file