From 967a0d82dd84a2adfabe702d8ca030d30f8079b5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 12 Apr 2014 21:43:30 -0400 Subject: propellor spin --- Propellor/Property/Ssh.hs | 20 +++++++++++--------- Propellor/Types.hs | 3 ++- 2 files changed, 13 insertions(+), 10 deletions(-) (limited to 'Propellor') diff --git a/Propellor/Property/Ssh.hs b/Propellor/Property/Ssh.hs index 42809359..51649fd9 100644 --- a/Propellor/Property/Ssh.hs +++ b/Propellor/Property/Ssh.hs @@ -66,22 +66,24 @@ uniqueHostKeys = flagFile prop "/etc/ssh/.unique_host_keys" ["configure"] -- | Sets up a user with a ssh private key from the site's privdata. --- --- The ssh public key (.pub) is not installed. Ssh does not use it. keyImported :: SshKeyType -> UserName -> Property -keyImported keytype user = Property desc install +keyImported keytype user = propertyList desc + [ Property desc (install (SshPubKey keytype user) ".pub") + , Property desc (install (SshPrivKey keytype user) "") + ] where desc = user ++ " has ssh key" - install = do - f <- liftIO keyfile + install p ext = do + f <- liftIO $ keyfile ext ifM (liftIO $ doesFileExist f) ( noChange - , withPrivData (SshKey keytype user) $ \key -> makeChange $ + , withPrivData p $ \key -> makeChange $ writeFileProtected f key ) - keyfile = do + keyfile ext = do home <- homeDirectory <$> getUserEntryForName user - return $ home ".ssh" "id_" ++ - case keytype of + return $ home ".ssh" "id_" + ++ case keytype of SshRsa -> "rsa" SshDsa -> "dsa" + ++ ext diff --git a/Propellor/Types.hs b/Propellor/Types.hs index a30b183c..86c56a28 100644 --- a/Propellor/Types.hs +++ b/Propellor/Types.hs @@ -164,7 +164,8 @@ data CmdLine -- It's fine to add new fields. data PrivDataField = DockerAuthentication - | SshKey SshKeyType UserName + | SshPubKey SshKeyType UserName + | SshPrivKey SshKeyType UserName | Password UserName | PrivFile FilePath | GpgKey GpgKeyId -- cgit v1.2.3