@@ -32,9 +32,13 @@ func (p *Provider) Name() string {
3232
3333func (p * Provider ) DynamicFields () []* dynamicfields.DynamicField {
3434 return []* dynamicfields.DynamicField {
35- & publicKeyField ,
36- & privateKeyField ,
37- & certificationChainField ,
35+ & uploadModeField ,
36+ & publicKeyTextField ,
37+ & privateKeyTextField ,
38+ & certificationChainTextField ,
39+ & publicKeyFileField ,
40+ & privateKeyFileField ,
41+ & certificationChainFileField ,
3842 }
3943}
4044
@@ -48,24 +52,34 @@ func (p *Provider) Issue(_ context.Context, request *certificate.IssueRequest) (
4852 }
4953
5054 params := request .Parameters
51- privateKeyStr , _ := params [privateKeyField .ID ].(string )
52- publicKeyStr , _ := request .Parameters [publicKeyField .ID ].(string )
53-
54- chainStr , chainPresent := request .Parameters [certificationChainField .ID ].(string )
55+ fileUploadMode := params [uploadModeField .ID ] == fileUploadModeID
56+
57+ var privateKeyStr , publicKeyStr , chainStr string
58+ var chainPresent bool
59+
60+ if fileUploadMode {
61+ privateKeyStr , _ = params [privateKeyFileField .ID ].(string )
62+ publicKeyStr , _ = params [publicKeyFileField .ID ].(string )
63+ chainStr , chainPresent = params [certificationChainFileField .ID ].(string )
64+ } else {
65+ privateKeyStr , _ = params [privateKeyTextField .ID ].(string )
66+ publicKeyStr , _ = params [publicKeyTextField .ID ].(string )
67+ chainStr , chainPresent = params [certificationChainTextField .ID ].(string )
68+ }
5569
56- privateKey , err := parsePrivateKey (privateKeyStr )
70+ privateKey , err := parsePrivateKey (privateKeyStr , fileUploadMode )
5771 if err != nil {
5872 return nil , coreerror .New ("Invalid private key" , true )
5973 }
6074
61- publicKey , err := parseCertificate (publicKeyStr )
75+ publicKey , err := parseCertificate (publicKeyStr , fileUploadMode )
6276 if err != nil {
6377 return nil , coreerror .New ("Invalid public key" , true )
6478 }
6579
6680 var chain []* x509.Certificate
6781 if chainPresent && chainStr != "" {
68- chain , err = parseCertificateChain (chainStr )
82+ chain , err = parseCertificateChain (chainStr , fileUploadMode )
6983 if err != nil {
7084 return nil , coreerror .New ("Invalid certification chain" , true )
7185 }
@@ -91,8 +105,8 @@ func (p *Provider) Renew(_ context.Context, cert *certificate.Certificate) (*cer
91105 return cert , nil
92106}
93107
94- func parsePrivateKey (key string ) ([]byte , error ) {
95- decodedKey , err := base64 . StdEncoding . DecodeString (key )
108+ func parsePrivateKey (key string , base64Encoded bool ) ([]byte , error ) {
109+ decodedKey , err := stringToByteArray (key , base64Encoded )
96110 if err != nil {
97111 return nil , coreerror .New ("Failed to decode key" , true )
98112 }
@@ -105,8 +119,8 @@ func parsePrivateKey(key string) ([]byte, error) {
105119 return block .Bytes , nil
106120}
107121
108- func parseCertificate (cert string ) (* x509.Certificate , error ) {
109- decodedCert , err := base64 . StdEncoding . DecodeString (cert )
122+ func parseCertificate (cert string , base64Encoded bool ) (* x509.Certificate , error ) {
123+ decodedCert , err := stringToByteArray (cert , base64Encoded )
110124 if err != nil {
111125 return nil , coreerror .New ("Failed to decode certificate" , true )
112126 }
@@ -119,8 +133,8 @@ func parseCertificate(cert string) (*x509.Certificate, error) {
119133 return x509 .ParseCertificate (block .Bytes )
120134}
121135
122- func parseCertificateChain (chain string ) ([]* x509.Certificate , error ) {
123- decodedChain , err := base64 . StdEncoding . DecodeString (chain )
136+ func parseCertificateChain (chain string , base64Encoded bool ) ([]* x509.Certificate , error ) {
137+ decodedChain , err := stringToByteArray (chain , base64Encoded )
124138 if err != nil {
125139 return nil , coreerror .New ("Failed to decode chain" , true )
126140 }
@@ -132,7 +146,7 @@ func parseCertificateChain(chain string) ([]*x509.Certificate, error) {
132146 }
133147
134148 cert += "-----END CERTIFICATE-----"
135- parsedCert , err := parseCertificate (cert )
149+ parsedCert , err := parseCertificate (cert , false )
136150 if err != nil {
137151 return nil , err
138152 }
@@ -151,3 +165,11 @@ func encodeChain(chain []*x509.Certificate) []string {
151165
152166 return encodedChain
153167}
168+
169+ func stringToByteArray (value string , base64Encoded bool ) ([]byte , error ) {
170+ if base64Encoded {
171+ return base64 .StdEncoding .DecodeString (value )
172+ }
173+
174+ return []byte (value ), nil
175+ }
0 commit comments