mirror of
https://github.com/turbot/steampipe.git
synced 2026-02-01 06:01:22 -05:00
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
package utils
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/rsa"
|
|
"crypto/x509"
|
|
"encoding/pem"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
)
|
|
|
|
func ParseCertificateInLocation(location string) (*x509.Certificate, error) {
|
|
LogTime("db_local.parseCertificateInLocation start")
|
|
defer LogTime("db_local.parseCertificateInLocation end")
|
|
|
|
rootCertRaw, err := os.ReadFile(location)
|
|
if err != nil {
|
|
// if we can't read the certificate, then there's a problem with permissions
|
|
return nil, err
|
|
}
|
|
// decode the pem blocks
|
|
rootPemBlock, _ := pem.Decode(rootCertRaw)
|
|
if rootPemBlock == nil {
|
|
return nil, fmt.Errorf("could not decode PEM blocks from certificate at %s", location)
|
|
}
|
|
// parse the PEM Blocks to Certificates
|
|
return x509.ParseCertificate(rootPemBlock.Bytes)
|
|
}
|
|
|
|
func WriteCertificate(path string, certificate []byte) error {
|
|
return writeAsPEM(path, "CERTIFICATE", certificate)
|
|
}
|
|
|
|
func WritePrivateKey(path string, key *rsa.PrivateKey) error {
|
|
return writeAsPEM(path, "RSA PRIVATE KEY", x509.MarshalPKCS1PrivateKey(key))
|
|
}
|
|
|
|
func writeAsPEM(location string, pemType string, b []byte) error {
|
|
pemData := new(bytes.Buffer)
|
|
err := pem.Encode(pemData, &pem.Block{
|
|
Type: pemType,
|
|
Bytes: b,
|
|
})
|
|
if err != nil {
|
|
log.Println("[INFO] Failed to encode to PEM")
|
|
return err
|
|
}
|
|
if err := os.WriteFile(location, pemData.Bytes(), 0600); err != nil {
|
|
log.Println("[INFO] Failed to save pem at", location)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|