-
-
Notifications
You must be signed in to change notification settings - Fork 113
/
action_generate_self_tls_certificate.go
51 lines (39 loc) · 1.66 KB
/
action_generate_self_tls_certificate.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
package resource
import (
"github.com/artpar/api2go"
"github.com/jmoiron/sqlx"
log "github.com/sirupsen/logrus"
)
type selfTlsCertificateGenerateActionPerformer struct {
responseAttrs map[string]interface{}
cruds map[string]*DbResource
configStore *ConfigStore
encryptionSecret []byte
certificateManager *CertificateManager
}
func (d *selfTlsCertificateGenerateActionPerformer) Name() string {
return "self.tls.generate"
}
func (d *selfTlsCertificateGenerateActionPerformer) DoAction(request Outcome, inFieldMap map[string]interface{}, transaction *sqlx.Tx) (api2go.Responder, []ActionResponse, []error) {
certificateSubject := inFieldMap["certificate"].(map[string]interface{})
log.Printf("Generate certificate for: %v", certificateSubject)
hostname := certificateSubject["hostname"].(string)
_, certPem, _, _, _, err := d.certificateManager.GetTLSConfig(hostname, true)
if err != nil {
return nil, []ActionResponse{}, []error{err}
}
log.Printf("Cert generated: %v ", certPem)
return nil, []ActionResponse{
NewActionResponse("client.notify", NewClientNotification("message", "Certificate generated for "+hostname, "Success")),
}, nil
}
func NewSelfTlsCertificateGenerateActionPerformer(cruds map[string]*DbResource, configStore *ConfigStore, certificateManager *CertificateManager) (ActionPerformerInterface, error) {
encryptionSecret, _ := configStore.GetConfigValueFor("encryption.secret", "backend")
handler := selfTlsCertificateGenerateActionPerformer{
cruds: cruds,
encryptionSecret: []byte(encryptionSecret),
configStore: configStore,
certificateManager: certificateManager,
}
return &handler, nil
}