OSDN Git Service

copy chain sdk code to dashboard
[bytom/bytom-dashboard.git] / src / sdk / util.js
1 const x509SubjectAttributes = {
2   C: {array: true},
3   O: {array: true},
4   OU: {array: true},
5   L: {array: true},
6   ST: {array: true},
7   STREET: {array: true},
8   POSTALCODE: {array: true},
9   SERIALNUMBER: {array: false},
10   CN: {array: false},
11 }
12
13 const sanitizeX509GuardData = guardData => {
14   const keys = Object.keys(guardData)
15   if (keys.length !== 1 || keys[0].toLowerCase() !== 'subject') {
16     throw new Error('X509 guard data must contain exactly one key, "subject"')
17   }
18
19   const newSubject = {}
20   const oldSubject = guardData[keys[0]]
21   for (let k in oldSubject) {
22     const attrib = x509SubjectAttributes[k.toUpperCase()]
23     if (!attrib) {
24       throw new Error(`X509 guard data contains invalid subject attribute: ${k}`)
25     }
26
27     let v = oldSubject[k]
28     if (!attrib.array && Array.isArray(v)) {
29       throw new Error(`X509 guard data contains invalid array for attribute ${k}: ${v.toString()}`)
30     } else if (attrib.array && !Array.isArray(v)) {
31       newSubject[k] = [v]
32     } else {
33       newSubject[k] = v
34     }
35   }
36
37   return {subject: newSubject}
38 }
39
40 module.exports = {
41   sanitizeX509GuardData,
42 }