n20-common-lib 2.2.44 → 2.2.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n20-common-lib",
3
- "version": "2.2.44",
3
+ "version": "2.2.46",
4
4
  "private": false,
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -81,7 +81,7 @@
81
81
  "html-webpack-tags-plugin": "^2.0.17",
82
82
  "jszip": "^3.10.0",
83
83
  "lodash": "^4.17.21",
84
- "md2vue-loader": "git+https://gitee.com/bable2000/md2vue-loader.git",
84
+ "md2vue-loader": "file:./md2vue-loader",
85
85
  "mockjs": "^1.1.0",
86
86
  "node-sass": "6.0.0",
87
87
  "nstc-get-i18n": "^0.0.3",
@@ -99,7 +99,7 @@
99
99
  <el-dropdown-item command="changePassword" divided>{{ '修改密码' | $lc }}</el-dropdown-item>
100
100
  <el-dropdown-item v-if="customOpt.mydeal" command="myDeal" divided>{{ '我的交易' | $lc }}</el-dropdown-item>
101
101
  <el-dropdown-item v-if="customOpt.switchuser" command="switchUser" divided>{{
102
- '切换用户' | $lc
102
+ '身份切换' | $lc
103
103
  }}</el-dropdown-item>
104
104
  <el-dropdown-item v-if="customOpt.agency" command="myAgency" divided>
105
105
  <div class="flex-box flex-v">
@@ -159,7 +159,7 @@
159
159
  <el-popover ref="noticePop" trigger="click" width="400" @after-enter="$refs.noticeContent.show()">
160
160
  <noticePop ref="noticeContent" :notice-num="noticeNum" :affiche-num="afficheNum" />
161
161
  </el-popover>
162
- <el-dialog :visible.sync="scV" :title="'切换用户' | $lc" append-to-body width="600px">
162
+ <el-dialog :visible.sync="scV" :title="'身份切换' | $lc" append-to-body width="600px">
163
163
  <switchUser :visible.sync="scV" :user-no="userNo" />
164
164
  </el-dialog>
165
165
  </div>
@@ -221,7 +221,7 @@
221
221
  <el-popover v-if="!noticeDrw" ref="noticePop" trigger="click" width="400" @after-enter="$refs.noticeContent.show()">
222
222
  <noticePop ref="noticeContent" :notice-num="noticeNum" :affiche-num="afficheNum" />
223
223
  </el-popover>
224
- <el-dialog :visible.sync="scV" :title="'切换用户' | $lc" append-to-body width="600px">
224
+ <el-dialog :visible.sync="scV" :title="'身份切换' | $lc" append-to-body width="600px">
225
225
  <switchUser :visible.sync="scV" :user-no="userNo" />
226
226
  </el-dialog>
227
227
  </div>
@@ -33,5 +33,10 @@ export default {
33
33
  name: '信安国密软签',
34
34
  type: 'NetSM3',
35
35
  supplier: 'NetSM3'
36
+ },
37
+ cfcaSign: {
38
+ name: 'CFCA',
39
+ type: 'cfcaSign',
40
+ supplier: 'cfca'
36
41
  }
37
42
  }
@@ -0,0 +1,518 @@
1
+ /* eslint-disable no-useless-escape */
2
+ /* eslint-disable no-redeclare */
3
+ /* eslint-disable eqeqeq */
4
+ import { Message } from 'element-ui'
5
+ const chrome = window.chrome
6
+
7
+ nmCryptokit.chromeExtension = 'hdnlhmckkfofnfnjjpcbmnmfbcjjhpig'
8
+ nmCryptokit.edgeExtension = 'afifobadnhlfflniehieipibalnafkkj'
9
+ nmCryptokit.productID = 'com.cfca.cryptokit.hbjtcw'
10
+
11
+ nmCryptokit.extensionName = nmCryptokit.productID + '.extension'
12
+ nmCryptokit.reqEventName = nmCryptokit.productID + '.request'
13
+ nmCryptokit.respEventName = nmCryptokit.productID + '.response'
14
+
15
+ nmCryptokit.Browser = {
16
+ IE: 'Internet Explorer',
17
+ Edge: 'Edge',
18
+ Edg: 'Edge(Chromium)',
19
+ Chrome: 'Chrome',
20
+ Safari: 'Safari',
21
+ Firefox: 'Firefox'
22
+ }
23
+
24
+ function GenerateRandomId() {
25
+ var charstring = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
26
+ var maxPos = charstring.length
27
+ var randomId = ''
28
+ for (let i = 0; i < 10; i++) {
29
+ randomId += charstring.charAt(Math.floor(Math.random() * maxPos))
30
+ }
31
+ return randomId
32
+ }
33
+
34
+ function nmCryptokit(browser) {
35
+ this.browser = browser
36
+ }
37
+
38
+ // Encapsulate Chrome sendMessage callback to Promise
39
+ nmCryptokit.SendMessageforChrome = function (request) {
40
+ return new Promise(function (resolve, reject) {
41
+ chrome.runtime.sendMessage(nmCryptokit.chromeExtension, request, function (response) {
42
+ if (response) {
43
+ if (response.errorcode == 0) {
44
+ resolve(response)
45
+ } else {
46
+ reject(response)
47
+ }
48
+ } else {
49
+ var result = {}
50
+ result.errorcode = 1
51
+ result.result = chrome.runtime.lastError.message
52
+ reject(result)
53
+ }
54
+ })
55
+ })
56
+ }
57
+
58
+ // Encapsulate Chrome sendMessage callback to Promise
59
+ nmCryptokit.SendMessageforEdge = function (request) {
60
+ return new Promise(function (resolve, reject) {
61
+ chrome.runtime.sendMessage(nmCryptokit.edgeExtension, request, function (response) {
62
+ if (response) {
63
+ if (response.errorcode == 0) {
64
+ resolve(response)
65
+ } else {
66
+ reject(response)
67
+ }
68
+ } else {
69
+ var result = {}
70
+ result.errorcode = 1
71
+ result.result = chrome.runtime.lastError.message
72
+ reject(result)
73
+ }
74
+ })
75
+ })
76
+ }
77
+
78
+ // Encapsulate Edge&Firefox event to Promise
79
+ nmCryptokit.SendMessagebyEvent = function (request) {
80
+ var event = new CustomEvent(nmCryptokit.reqEventName, { detail: request })
81
+ document.dispatchEvent(event)
82
+
83
+ return new Promise(function (resolve, reject) {
84
+ var responseEventName = nmCryptokit.respEventName
85
+ if (request.funcInfo != undefined && request.funcInfo.randomId != undefined)
86
+ responseEventName += '.' + request.funcInfo.randomId
87
+
88
+ document.addEventListener(
89
+ responseEventName,
90
+ function CallBack(e) {
91
+ document.removeEventListener(e.type, CallBack)
92
+ var eJson = JSON.parse(e.detail)
93
+ if (eJson != null && eJson.errorcode == 0) {
94
+ resolve(eJson)
95
+ } else {
96
+ reject(eJson)
97
+ }
98
+ },
99
+ false
100
+ )
101
+ })
102
+ }
103
+
104
+ nmCryptokit.SendMessage = function (browser, requestJSON) {
105
+ if (nmCryptokit.Browser.Chrome == browser) {
106
+ return nmCryptokit.SendMessageforChrome(requestJSON)
107
+ } else if (nmCryptokit.Browser.Edg == browser) {
108
+ return nmCryptokit.SendMessageforEdge(requestJSON)
109
+ } else {
110
+ return nmCryptokit.SendMessagebyEvent(requestJSON)
111
+ }
112
+ }
113
+
114
+ nmCryptokit.checkExtension = function (browser) {
115
+ return new Promise(function (resolve, reject) {
116
+ var result = {}
117
+ if (nmCryptokit.Browser.Chrome == browser || nmCryptokit.Browser.Edg == browser) {
118
+ // chrome.runtime.sendMessage() could check extension existence.
119
+ if (chrome.runtime) {
120
+ resolve(browser)
121
+ } else {
122
+ result.errorcode = 2
123
+ result.result = 'Extension does not exist!'
124
+ reject(result)
125
+ }
126
+ } else if (nmCryptokit.Browser.Edge == browser || nmCryptokit.Browser.Firefox == browser) {
127
+ if (document.getElementById(nmCryptokit.extensionName)) {
128
+ resolve(browser)
129
+ } else {
130
+ result.errorcode = 2
131
+ result.result = 'Extension does not exist!'
132
+ reject(result)
133
+ }
134
+ } else {
135
+ result.errorcode = 3
136
+ result.result = 'Only support Chrome/Edge/Firefox'
137
+ reject(result)
138
+ }
139
+ })
140
+ }
141
+
142
+ nmCryptokit.prototype.init = function () {
143
+ var browser = this.browser
144
+ var that = this
145
+
146
+ return nmCryptokit
147
+ .checkExtension(browser)
148
+ .then(function (browser) {
149
+ var request = {}
150
+ request.action = 'connect'
151
+ request.host = nmCryptokit.productID
152
+ return nmCryptokit.SendMessage(browser, request)
153
+ })
154
+ .then(function () {
155
+ var request = {}
156
+ var funcInfo = {}
157
+ var randomId = GenerateRandomId()
158
+
159
+ funcInfo.function = 'GetLastErrorDesc'
160
+ funcInfo.params = null
161
+ funcInfo.randomId = randomId
162
+
163
+ request.action = 'invoke'
164
+ request.funcInfo = funcInfo
165
+
166
+ return nmCryptokit.SendMessage(that.browser, request)
167
+ })
168
+ }
169
+
170
+ nmCryptokit.prototype.uninit = function () {
171
+ var request = {}
172
+ request.action = 'disconnect'
173
+ request.host = nmCryptokit.productID
174
+
175
+ return nmCryptokit.SendMessage(this.browser, request)
176
+ }
177
+
178
+ nmCryptokit.prototype.getExtensionVersion = function () {
179
+ var request = {}
180
+ var funcInfo = {}
181
+
182
+ funcInfo.function = 'getExtensionVersion'
183
+ funcInfo.params = null
184
+ request.action = 'getExtensionVersion'
185
+ request.funcInfo = funcInfo
186
+
187
+ return nmCryptokit.SendMessage(this.browser, request)
188
+ }
189
+
190
+ nmCryptokit.prototype.getHostVersion = function () {
191
+ var request = {}
192
+ var funcInfo = {}
193
+ var randomId = GenerateRandomId()
194
+
195
+ funcInfo.function = 'GetVersion'
196
+ funcInfo.params = null
197
+ funcInfo.randomId = randomId
198
+
199
+ request.action = 'invoke'
200
+ request.funcInfo = funcInfo
201
+
202
+ return nmCryptokit.SendMessage(this.browser, request)
203
+ }
204
+
205
+ nmCryptokit.prototype.SelectCertificate = function (
206
+ bstrSubjectDNFilter,
207
+ bstrIssuerDNFilter,
208
+ bstrSerialNumFilter,
209
+ bstrCSPNameList
210
+ ) {
211
+ var request = {}
212
+ var funcInfo = {}
213
+ var paramArr = []
214
+ var randomId = GenerateRandomId()
215
+
216
+ paramArr.push(bstrSubjectDNFilter)
217
+ paramArr.push(bstrIssuerDNFilter)
218
+ paramArr.push(bstrSerialNumFilter)
219
+ paramArr.push(bstrCSPNameList)
220
+
221
+ funcInfo.function = 'SelectCertificate'
222
+ funcInfo.params = paramArr
223
+ funcInfo.randomId = randomId
224
+
225
+ request.action = 'invoke'
226
+ request.funcInfo = funcInfo
227
+
228
+ return nmCryptokit.SendMessage(this.browser, request)
229
+ }
230
+
231
+ nmCryptokit.prototype.GetSignCertInfo = function (bstrInfoType) {
232
+ var request = {}
233
+ var funcInfo = {}
234
+ var paramArr = []
235
+ var randomId = GenerateRandomId()
236
+
237
+ paramArr.push(bstrInfoType)
238
+
239
+ funcInfo.function = 'getSignCertInfo'
240
+ funcInfo.params = paramArr
241
+ funcInfo.randomId = randomId
242
+
243
+ request.action = 'invoke'
244
+ request.funcInfo = funcInfo
245
+
246
+ return nmCryptokit.SendMessage(this.browser, request)
247
+ }
248
+
249
+ nmCryptokit.prototype.SignMsgPKCS7 = function (bstrSourceData, bstrHashAlg, bWithSourceData) {
250
+ var request = {}
251
+ var funcInfo = {}
252
+ var paramArr = []
253
+ var randomId = GenerateRandomId()
254
+
255
+ paramArr.push(bstrSourceData)
256
+ paramArr.push(bstrHashAlg)
257
+ paramArr.push(bWithSourceData)
258
+
259
+ funcInfo.function = 'SignMsgPKCS7'
260
+ funcInfo.params = paramArr
261
+ funcInfo.randomId = randomId
262
+
263
+ request.action = 'invoke'
264
+ request.funcInfo = funcInfo
265
+
266
+ return nmCryptokit.SendMessage(this.browser, request)
267
+ }
268
+
269
+ nmCryptokit.prototype.SignHashMsgPKCS7Detached = function (bstrSourceData, bstrHashAlg) {
270
+ var request = {}
271
+ var funcInfo = {}
272
+ var paramArr = []
273
+ var randomId = GenerateRandomId()
274
+
275
+ paramArr.push(bstrSourceData)
276
+ paramArr.push(bstrHashAlg)
277
+
278
+ funcInfo.function = 'SignHashMsgPKCS7Detached'
279
+ funcInfo.params = paramArr
280
+ funcInfo.randomId = randomId
281
+
282
+ request.action = 'invoke'
283
+ request.funcInfo = funcInfo
284
+
285
+ return nmCryptokit.SendMessage(this.browser, request)
286
+ }
287
+
288
+ nmCryptokit.prototype.SignMsgPKCS1 = function (bstrSourceData, bstrHashAlg) {
289
+ var request = {}
290
+ var funcInfo = {}
291
+ var paramArr = []
292
+ var randomId = GenerateRandomId()
293
+
294
+ paramArr.push(bstrSourceData)
295
+ paramArr.push(bstrHashAlg)
296
+
297
+ funcInfo.function = 'SignMsgPKCS1'
298
+ funcInfo.params = paramArr
299
+ funcInfo.randomId = randomId
300
+
301
+ request.action = 'invoke'
302
+ request.funcInfo = funcInfo
303
+
304
+ return nmCryptokit.SendMessage(this.browser, request)
305
+ }
306
+
307
+ nmCryptokit.prototype.GetVersion = function () {
308
+ var request = {}
309
+ var funcInfo = {}
310
+ var randomId = GenerateRandomId()
311
+
312
+ funcInfo.function = 'GetVersion'
313
+ funcInfo.params = null
314
+ funcInfo.randomId = randomId
315
+
316
+ request.action = 'invoke'
317
+ request.funcInfo = funcInfo
318
+
319
+ return nmCryptokit.SendMessage(this.browser, request)
320
+ }
321
+
322
+ nmCryptokit.prototype.GetLastErrorDesc = function () {
323
+ var request = {}
324
+ var funcInfo = {}
325
+ var randomId = GenerateRandomId()
326
+
327
+ funcInfo.function = 'GetLastErrorDesc'
328
+ funcInfo.params = null
329
+ funcInfo.randomId = randomId
330
+
331
+ request.action = 'invoke'
332
+ request.funcInfo = funcInfo
333
+
334
+ return nmCryptokit.SendMessage(this.browser, request)
335
+ }
336
+
337
+ var CryptoKit
338
+
339
+ function BrowserInfo() {
340
+ var res = {
341
+ name: '',
342
+ version: ''
343
+ }
344
+ var reg
345
+ var userAgent = self.navigator.userAgent
346
+
347
+ if ((reg = /edge\/([\d\.]+)/i.exec(userAgent))) {
348
+ res.name = 'Edge'
349
+ res.version = reg[1]
350
+ } else if ((reg = /edg\/([\d\.]+)/i.exec(userAgent))) {
351
+ res.name = 'Edge(Chromium)'
352
+ res.version = reg[1]
353
+ } else if (/msie/i.test(userAgent)) {
354
+ res.name = 'Internet Explorer'
355
+ res.version = /msie ([\d\.]+)/i.exec(userAgent)[1]
356
+ } else if (/Trident/i.test(userAgent)) {
357
+ res.name = 'Internet Explorer'
358
+ res.version = /rv:([\d\.]+)/i.exec(userAgent)[1]
359
+ } else if (/chrome/i.test(userAgent)) {
360
+ res.name = 'Chrome'
361
+ res.version = /chrome\/([\d\.]+)/i.exec(userAgent)[1]
362
+ } else if (/safari/i.test(userAgent)) {
363
+ res.name = 'Safari'
364
+ res.version = /version\/([\d\.]+)/i.exec(userAgent)[1]
365
+ } else if (/firefox/i.test(userAgent)) {
366
+ res.name = 'Firefox'
367
+ res.version = /firefox\/([\d\.]+)/i.exec(userAgent)[1]
368
+ }
369
+ return res
370
+ }
371
+
372
+ function compareVersion(version1, version2) {
373
+ var v1Arr = version1.split('.')
374
+ var v2Arr = version2.split('.')
375
+ var len = Math.min(v1Arr.length, v2Arr.length)
376
+ for (var i = 0; i < len; i++) {
377
+ if (parseInt(v1Arr[i], 10) > parseInt(v2Arr[i], 10)) return 1
378
+
379
+ if (parseInt(v1Arr[i], 10) < parseInt(v2Arr[i], 10)) return -1
380
+ }
381
+
382
+ if (len < v1Arr.length) {
383
+ for (var j = len; j < v1Arr.length; j++) {
384
+ if (parseInt(v1Arr[j], 10) != 0) return 1
385
+ }
386
+ }
387
+
388
+ if (len < v2Arr.length) {
389
+ for (var j = len; j < v2Arr.length; j++) {
390
+ if (parseInt(v2Arr[j], 10) != 0) return -1
391
+ }
392
+ }
393
+
394
+ return 0
395
+ }
396
+
397
+ function getDN() {
398
+ let dn
399
+ let userInfo = JSON.parse(sessionStorage.getItem('userInfo'))
400
+ if (userInfo && userInfo.dn) {
401
+ dn = userInfo.dn
402
+ }
403
+ return dn
404
+ }
405
+
406
+ /* 给对象或字符串签名 */
407
+ export const getSign = async (plain, dn) => {
408
+ let errMsg
409
+ let plainText
410
+
411
+ if (dn === undefined) {
412
+ dn = getDN()
413
+ }
414
+ if (!dn) {
415
+ errMsg = '签名参数DN错误!'
416
+ Message.error(errMsg)
417
+ return Promise.reject(errMsg)
418
+ }
419
+
420
+ try {
421
+ var browser = BrowserInfo()
422
+
423
+ var hostVer
424
+ var extensionVer
425
+ var chromeExtensionVer = '3.2.0.1'
426
+ var edgeExtensionVer = '3.4.0.1'
427
+ var firefoxExtensionVer = '3.2.0.1'
428
+
429
+ if (
430
+ browser.name == 'Edge(Chromium)' ||
431
+ (browser.name == 'Chrome' && parseInt(browser.version) > 41) ||
432
+ (browser.name == 'Firefox' && parseInt(browser.version) > 52)
433
+ ) {
434
+ // eslint-disable-next-line new-cap
435
+ CryptoKit = new nmCryptokit(browser.name)
436
+ await CryptoKit.init()
437
+ const vRes = await CryptoKit.getExtensionVersion()
438
+ extensionVer = vRes.result
439
+ const hostVerRes = await CryptoKit.getHostVersion()
440
+ hostVer = hostVerRes.result
441
+ if (
442
+ (browser.name == 'Edge(Chromium)' && compareVersion(extensionVer, edgeExtensionVer) < 0) ||
443
+ (browser.name == 'Chrome' && compareVersion(extensionVer, chromeExtensionVer) < 0) ||
444
+ (browser.name == 'Firefox' && compareVersion(extensionVer, firefoxExtensionVer) < 0)
445
+ ) {
446
+ errMsg = '签名助手未正确安装!'
447
+ Message.error(errMsg)
448
+ return Promise.reject(errMsg)
449
+ } else if (compareVersion(hostVer, '3.4.0.1') < 0) {
450
+ errMsg = '签名助手未正确安装!'
451
+ Message.error(errMsg)
452
+ return Promise.reject(errMsg)
453
+ }
454
+ } else {
455
+ errMsg = '不支持的浏览器!'
456
+ Message.error(errMsg)
457
+ return Promise.reject(errMsg)
458
+ }
459
+ } catch (ex) {
460
+ console.log(ex)
461
+ errMsg = '签名助手初始化失败!'
462
+ Message.error(errMsg)
463
+ return Promise.reject(errMsg)
464
+ }
465
+ // var cspList = "CFCA CSP v3.0||CFCA Ulan CSP v4.0||Uyee CSP v6.0 (Enterprise)"
466
+ // try {
467
+ // await CryptoKit.setSM2CSPList(cspList)
468
+ // } catch (ex) {
469
+ // console.log(ex)
470
+ // errMsg = '没有检测到Ukey!'
471
+ // Message.error(errMsg)
472
+ // return Promise.reject(errMsg)
473
+ // }
474
+
475
+ if (typeof plain === 'object') {
476
+ plainText = JSON.stringify(plain)
477
+ } else {
478
+ plainText = plain
479
+ }
480
+
481
+ try {
482
+ var subjectDNFilter = ''
483
+ var issuerDNFilter = ''
484
+ var serialNumFilter = ''
485
+ var cspNameLists = 'CFCA CSP v3.0||CFCA Ulan CSP v4.0||Uyee CSP v6.0 (Enterprise)'
486
+ const certRes = await CryptoKit.SelectCertificate(subjectDNFilter, issuerDNFilter, serialNumFilter, cspNameLists)
487
+ if (!certRes.result) {
488
+ errMsg = '没有检测到证书!'
489
+ Message.error(errMsg)
490
+ return Promise.reject(errMsg)
491
+ }
492
+ } catch (ex) {
493
+ console.log(ex)
494
+ errMsg = '检测证书出错!' + ex
495
+ Message.error(errMsg)
496
+ return Promise.reject(errMsg)
497
+ }
498
+ try {
499
+ var certDNRes = await CryptoKit.GetSignCertInfo('SubjectDN')
500
+ var certDN = certDNRes.result
501
+ //比对DN
502
+ if (certDN != dn) {
503
+ errMsg = '证书不匹配!'
504
+ Message.error(errMsg)
505
+ return Promise.reject(errMsg)
506
+ }
507
+ //签名
508
+ var selectedAlg = 'SHA-256' //SHA-256,SHA-1
509
+ var IsWithSource = true //true是Attach,false是Detach
510
+ const signRes = await CryptoKit.SignMsgPKCS7(plainText, selectedAlg, IsWithSource)
511
+ return Promise.resolve(signRes.result)
512
+ } catch (ex) {
513
+ console.log(ex)
514
+ errMsg = '证书签名出错!' + ex
515
+ Message.error(errMsg)
516
+ return Promise.reject(errMsg)
517
+ }
518
+ }
@@ -77,6 +77,16 @@ export async function getSign(p1, p2, p3) {
77
77
  })
78
78
  }
79
79
  )
80
+ } else if (signType === 'cfcaSign' /* CFCA */) {
81
+ importG('CFCA', () => import(/*webpackChunkName: "CFCA"*/ './cfca/index.js')).then(({ getSign }) => {
82
+ getSign(p1, p2, p3)
83
+ .then((sign) => {
84
+ resolve(sign)
85
+ })
86
+ .catch(() => {
87
+ reject()
88
+ })
89
+ })
80
90
  }
81
91
  })
82
92