-
Notifications
You must be signed in to change notification settings - Fork 33
/
certificate_infodata.go
64 lines (52 loc) · 1.86 KB
/
certificate_infodata.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// SPDX-FileCopyrightText: 2020 SAP SE or an SAP affiliate company and Gardener contributors.
//
// SPDX-License-Identifier: Apache-2.0
package certificates
import (
"encoding/json"
"fmt"
)
// CertificateDataType is the type used to denote an CertificateJSONData structure in the ShootState
const CertificateDataType = TypeVersion("certificate")
// CertificateJSONData is the json representation of CertificateInfoData used to store Certificate metadata in the ShootState
type CertificateJSONData struct {
PrivateKey []byte `json:"privateKey"`
Certificate []byte `json:"certificate"`
}
// UnmarshalCert unmarshals an CertificateJSONData into a CertificateInfoData.
func UnmarshalCert(bytes []byte) (InfoData, error) {
if bytes == nil {
return nil, fmt.Errorf("no data given")
}
data := &CertificateJSONData{}
err := json.Unmarshal(bytes, data)
if err != nil {
return nil, err
}
return NewCertificateInfoData(data.PrivateKey, data.Certificate), nil
}
// CertificateInfoData holds a certificate's private key data and certificate data.
type CertificateInfoData struct {
PrivateKey []byte
Certificate []byte
}
// TypeVersion implements InfoData
func (c *CertificateInfoData) TypeVersion() TypeVersion {
return CertificateDataType
}
// Marshal implements InfoData
func (c *CertificateInfoData) Marshal() ([]byte, error) {
return json.Marshal(&CertificateJSONData{c.PrivateKey, c.Certificate})
}
// NewCertificateInfoData creates a new CertificateInfoData struct
func NewCertificateInfoData(privateKey, certificate []byte) *CertificateInfoData {
return &CertificateInfoData{privateKey, certificate}
}
var types = map[TypeVersion]Unmarshaller{
CertificateDataType: UnmarshalCert,
PrivateKeyDataType: UnmarshalPrivateKey,
}
// GetUnmarshaller returns an Unmarshaller for the given typeName.
func GetUnmarshaller(typeName TypeVersion) Unmarshaller {
return types[typeName]
}