n20-common-lib 2.4.0 → 2.4.1
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 +1 -1
- package/src/plugins/.DS_Store +0 -0
- package/src/plugins/Sign/sign.js +128 -141
package/package.json
CHANGED
package/src/plugins/.DS_Store
CHANGED
|
Binary file
|
package/src/plugins/Sign/sign.js
CHANGED
|
@@ -1,141 +1,128 @@
|
|
|
1
|
-
// Attached方式签名
|
|
2
|
-
import { IWSAgent } from './InfosecNetSignCNGAgent.min.js'
|
|
3
|
-
import { Message, Notification } from 'element-ui'
|
|
4
|
-
const {
|
|
5
|
-
IWSASetTimeOut,
|
|
6
|
-
IWSAAttachedSign,
|
|
7
|
-
IWSAAttachedVerify,
|
|
8
|
-
IWSASendAvailable,
|
|
9
|
-
IWSAGetAvailable,
|
|
10
|
-
IWSAGetAllCertsListInfoByCertDN
|
|
11
|
-
} = new IWSAgent()
|
|
12
|
-
IWSASetTimeOut(6000)
|
|
13
|
-
|
|
14
|
-
function getDN() {
|
|
15
|
-
let dn
|
|
16
|
-
let userInfo = JSON.parse(sessionStorage.getItem('userInfo'))
|
|
17
|
-
if (userInfo && userInfo.dn) {
|
|
18
|
-
dn = userInfo.dn
|
|
19
|
-
}
|
|
20
|
-
return dn
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/* 检测本地签名端口是否可用 */
|
|
24
|
-
export function availableSign(fn, url) {
|
|
25
|
-
url || (url = '/portal/NetSignCNG-v2.1.152.2.exe')
|
|
26
|
-
// 查找已经打开的签名端口
|
|
27
|
-
let available = IWSAGetAvailable()
|
|
28
|
-
if (available) {
|
|
29
|
-
fn && fn(available)
|
|
30
|
-
} else {
|
|
31
|
-
// 如果没有,再刺探一遍 (异步请求,需等待)
|
|
32
|
-
IWSASendAvailable()
|
|
33
|
-
setTimeout(() => {
|
|
34
|
-
available = IWSAGetAvailable()
|
|
35
|
-
fn && fn(available)
|
|
36
|
-
|
|
37
|
-
if (!available) {
|
|
38
|
-
Notification({
|
|
39
|
-
title: '提示',
|
|
40
|
-
dangerouslyUseHTMLString: true,
|
|
41
|
-
message: `<div>检测到您的电脑中没有安装签名助手,为了不影响使用请使用管理员权限<a class="color-primary" href="${url}" download>下载安装</a>NetSignCNG签名助手</div>`,
|
|
42
|
-
duration: 5000
|
|
43
|
-
})
|
|
44
|
-
}
|
|
45
|
-
}, 300)
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/* 签名解签 */
|
|
50
|
-
export function verifySign(signedMsg) {
|
|
51
|
-
let plainText
|
|
52
|
-
IWSAAttachedVerify('1', signedMsg, (errorCode, PlainText, SigncertDN) => {
|
|
53
|
-
if (errorCode === 0 || errorCode === '0') {
|
|
54
|
-
plainText = PlainText
|
|
55
|
-
} else {
|
|
56
|
-
Message.error('签名解签失败!')
|
|
57
|
-
}
|
|
58
|
-
})
|
|
59
|
-
return plainText
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/* 给对象或字符串签名 */
|
|
63
|
-
export function getSign(plain, dn) {
|
|
64
|
-
if (dn === undefined) {
|
|
65
|
-
dn = getDN()
|
|
66
|
-
}
|
|
67
|
-
if (!dn) {
|
|
68
|
-
Message.error('签名参数DN错误!')
|
|
69
|
-
return false
|
|
70
|
-
}
|
|
71
|
-
let plainText = ''
|
|
72
|
-
if (typeof plain === 'object') {
|
|
73
|
-
plainText = JSON.stringify(plain)
|
|
74
|
-
} else {
|
|
75
|
-
plainText = plain
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
let
|
|
79
|
-
IWSAGetAllCertsListInfoByCertDN('', 'Sign', parseCA(dn), 0, (dnList) => {
|
|
80
|
-
|
|
81
|
-
})
|
|
82
|
-
if
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
let
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
let
|
|
116
|
-
let
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (!
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
let isIn = false
|
|
130
|
-
dnList.find((C) => {
|
|
131
|
-
let dnAttrsArr = C.certDN.split(',').map((c) => c.trim())
|
|
132
|
-
if (dnAttrsArr.every((dnAttr) => userDnAttrsArr.includes(dnAttr))) {
|
|
133
|
-
return (isIn = true)
|
|
134
|
-
}
|
|
135
|
-
})
|
|
136
|
-
if (!isIn) {
|
|
137
|
-
checkRes = 'checkRes'
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
return checkRes
|
|
141
|
-
}
|
|
1
|
+
// Attached方式签名
|
|
2
|
+
import { IWSAgent } from './InfosecNetSignCNGAgent.min.js'
|
|
3
|
+
import { Message, Notification } from 'element-ui'
|
|
4
|
+
const {
|
|
5
|
+
IWSASetTimeOut,
|
|
6
|
+
IWSAAttachedSign,
|
|
7
|
+
IWSAAttachedVerify,
|
|
8
|
+
IWSASendAvailable,
|
|
9
|
+
IWSAGetAvailable,
|
|
10
|
+
IWSAGetAllCertsListInfoByCertDN
|
|
11
|
+
} = new IWSAgent()
|
|
12
|
+
IWSASetTimeOut(6000)
|
|
13
|
+
|
|
14
|
+
function getDN() {
|
|
15
|
+
let dn
|
|
16
|
+
let userInfo = JSON.parse(sessionStorage.getItem('userInfo'))
|
|
17
|
+
if (userInfo && userInfo.dn) {
|
|
18
|
+
dn = userInfo.dn
|
|
19
|
+
}
|
|
20
|
+
return dn
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* 检测本地签名端口是否可用 */
|
|
24
|
+
export function availableSign(fn, url) {
|
|
25
|
+
url || (url = '/portal/NetSignCNG-v2.1.152.2.exe')
|
|
26
|
+
// 查找已经打开的签名端口
|
|
27
|
+
let available = IWSAGetAvailable()
|
|
28
|
+
if (available) {
|
|
29
|
+
fn && fn(available)
|
|
30
|
+
} else {
|
|
31
|
+
// 如果没有,再刺探一遍 (异步请求,需等待)
|
|
32
|
+
IWSASendAvailable()
|
|
33
|
+
setTimeout(() => {
|
|
34
|
+
available = IWSAGetAvailable()
|
|
35
|
+
fn && fn(available)
|
|
36
|
+
|
|
37
|
+
if (!available) {
|
|
38
|
+
Notification({
|
|
39
|
+
title: '提示',
|
|
40
|
+
dangerouslyUseHTMLString: true,
|
|
41
|
+
message: `<div>检测到您的电脑中没有安装签名助手,为了不影响使用请使用管理员权限<a class="color-primary" href="${url}" download>下载安装</a>NetSignCNG签名助手</div>`,
|
|
42
|
+
duration: 5000
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
}, 300)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* 签名解签 */
|
|
50
|
+
export function verifySign(signedMsg) {
|
|
51
|
+
let plainText
|
|
52
|
+
IWSAAttachedVerify('1', signedMsg, (errorCode, PlainText, SigncertDN) => {
|
|
53
|
+
if (errorCode === 0 || errorCode === '0') {
|
|
54
|
+
plainText = PlainText
|
|
55
|
+
} else {
|
|
56
|
+
Message.error('签名解签失败!')
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
return plainText
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* 给对象或字符串签名 */
|
|
63
|
+
export function getSign(plain, dn) {
|
|
64
|
+
if (dn === undefined) {
|
|
65
|
+
dn = getDN()
|
|
66
|
+
}
|
|
67
|
+
if (!dn) {
|
|
68
|
+
Message.error('签名参数DN错误!')
|
|
69
|
+
return false
|
|
70
|
+
}
|
|
71
|
+
let plainText = ''
|
|
72
|
+
if (typeof plain === 'object') {
|
|
73
|
+
plainText = JSON.stringify(plain)
|
|
74
|
+
} else {
|
|
75
|
+
plainText = plain
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
let index
|
|
79
|
+
IWSAGetAllCertsListInfoByCertDN('', 'Sign', parseCA(dn), 0, (dnList) => {
|
|
80
|
+
index = verifyDn(dnList, dn)
|
|
81
|
+
})
|
|
82
|
+
if(index==-1){
|
|
83
|
+
Message.warning('没有匹配到证书!')
|
|
84
|
+
return ''
|
|
85
|
+
}
|
|
86
|
+
let answer = undefined
|
|
87
|
+
IWSAAttachedSign('1', plainText, index, 'SHA1', (errorCode, signedData) => {
|
|
88
|
+
if (errorCode === 0 || errorCode === '0') {
|
|
89
|
+
answer = signedData
|
|
90
|
+
} else {
|
|
91
|
+
Message.error('签名失败!')
|
|
92
|
+
}
|
|
93
|
+
})
|
|
94
|
+
return answer
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function parseCA(dn) {
|
|
98
|
+
const mark = /^CN=/
|
|
99
|
+
let cn = ''
|
|
100
|
+
if (dn == null) return cn
|
|
101
|
+
|
|
102
|
+
let booked = dn.split(',')
|
|
103
|
+
let dnC = booked.find((b) => mark.test(b))
|
|
104
|
+
dnC && (cn = dnC.replace(mark, ''))
|
|
105
|
+
return cn
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function verifyDn(dnList, dn) {
|
|
109
|
+
if (dnList.length === 0) return 'dnListEmpty'
|
|
110
|
+
if (!dnList) return 'Empty'
|
|
111
|
+
if (!dn) return 'dnIsEmpty'
|
|
112
|
+
|
|
113
|
+
let userDnAttrsArr = dn.split(',').map((c) => c.trim())
|
|
114
|
+
|
|
115
|
+
let isIn = false
|
|
116
|
+
let index=0;
|
|
117
|
+
dnList.find((C,i) => {
|
|
118
|
+
let dnAttrsArr = C.certDN.split(',').map((c) => c.trim())
|
|
119
|
+
if (dnAttrsArr.every((dnAttr) => userDnAttrsArr.includes(dnAttr))) {
|
|
120
|
+
index = i;
|
|
121
|
+
return (isIn = true)
|
|
122
|
+
}
|
|
123
|
+
})
|
|
124
|
+
if (!isIn) {
|
|
125
|
+
index = -1
|
|
126
|
+
}
|
|
127
|
+
return index
|
|
128
|
+
}
|