mirror of
https://github.com/Start9Labs/registry.git
synced 2026-03-26 10:21:51 +00:00
62 lines
1.6 KiB
Haskell
62 lines
1.6 KiB
Haskell
{-# LANGUAGE QuasiQuotes #-}
|
|
module Lib.Ssl where
|
|
|
|
import Startlude
|
|
|
|
import Data.String.Interpolate.IsString
|
|
import System.Directory
|
|
import System.FilePath
|
|
import System.Process
|
|
|
|
import Constants
|
|
|
|
-- openssl genrsa -out key.pem 2048
|
|
-- openssl req -new -key key.pem -out certificate.csr
|
|
-- openssl x509 -req -in certificate.csr -signkey key.pem -out certificate.pem
|
|
|
|
sslBaseLocation :: FilePath
|
|
sslBaseLocation = configPath </> "ssl"
|
|
|
|
sslKeyLocation :: FilePath
|
|
sslKeyLocation = sslBaseLocation </> "key.pem"
|
|
|
|
sslCsrLocation :: FilePath
|
|
sslCsrLocation = sslBaseLocation </> "certificate.csr"
|
|
|
|
sslCertLocation :: FilePath
|
|
sslCertLocation = sslBaseLocation </> "certificate.pem"
|
|
|
|
checkForSslCert :: IO Bool
|
|
checkForSslCert =
|
|
doesPathExist sslKeyLocation <&&> doesPathExist sslCertLocation
|
|
|
|
generateSslKey :: IO ExitCode
|
|
generateSslKey = rawSystem "openssl" ["genrsa", "-out", sslKeyLocation, "2048"]
|
|
|
|
generateSslCert :: Text -> IO ExitCode
|
|
generateSslCert name = rawSystem
|
|
"openssl"
|
|
["req", "-new", "-key", sslKeyLocation, "-out", sslCsrLocation, "-subj", [i|/CN=#{name}.local|]]
|
|
|
|
selfSignSslCert :: IO ExitCode
|
|
selfSignSslCert = rawSystem
|
|
"openssl"
|
|
[ "x509"
|
|
, "-req"
|
|
, "-in"
|
|
, sslCsrLocation
|
|
, "-signkey"
|
|
, sslKeyLocation
|
|
, "-out"
|
|
, sslCertLocation
|
|
]
|
|
|
|
setupSsl :: IO ()
|
|
setupSsl = do
|
|
exists <- checkForSslCert
|
|
unless exists $ do
|
|
void $ system $ "mkdir -p " <> sslBaseLocation
|
|
void generateSslKey
|
|
void $ generateSslCert getRegistryHostname
|
|
void selfSignSslCert
|