authelia/internal/commands/rsa.go

80 lines
1.8 KiB
Go

package commands
import (
"log"
"os"
"path"
"github.com/spf13/cobra"
"github.com/authelia/authelia/internal/utils"
)
var rsaTargetDirectory string
func init() {
RSAGenerateCmd.PersistentFlags().StringVar(&rsaTargetDirectory, "dir", "", "Target directory where the keypair will be stored")
RSACmd.AddCommand(RSAGenerateCmd)
}
func generateRSAKeypair(cmd *cobra.Command, args []string) {
privateKey, publicKey := utils.GenerateRsaKeyPair(2048)
keyPath := path.Join(rsaTargetDirectory, "key.pem")
keyOut, err := os.OpenFile(keyPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
log.Fatalf("Failed to open %s for writing: %v", keyPath, err)
return
}
_, err = keyOut.WriteString(utils.ExportRsaPrivateKeyAsPemStr(privateKey))
if err != nil {
log.Fatalf("Unable to write private key: %v", err)
return
}
if err := keyOut.Close(); err != nil {
log.Fatalf("Unable to close private key file: %v", err)
return
}
keyPath = path.Join(rsaTargetDirectory, "key.pub")
keyOut, err = os.OpenFile(keyPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
log.Fatalf("Failed to open %s for writing: %v", keyPath, err)
return
}
publicPem, err := utils.ExportRsaPublicKeyAsPemStr(publicKey)
if err != nil {
log.Fatalf("Unable to marshal public key: %v", err)
}
_, err = keyOut.WriteString(publicPem)
if err != nil {
log.Fatalf("Unable to write private key: %v", err)
return
}
if err := keyOut.Close(); err != nil {
log.Fatalf("Unable to close public key file: %v", err)
return
}
}
// RSACmd RSA helper command.
var RSACmd = &cobra.Command{
Use: "rsa",
Short: "Commands related to rsa keypair generation",
}
// RSAGenerateCmd certificate generation command.
var RSAGenerateCmd = &cobra.Command{
Use: "generate",
Short: "Generate a RSA keypair",
Run: generateRSAKeypair,
}