content: module Puppet.Language.NativeTypes.SshSecure
    ( nativeSshSecure,
    )
  where
  
  import Puppet.Language.NativeTypes.Helpers
  
  nativeSshSecure :: (NativeTypeName, NativeTypeMethods)
  nativeSshSecure = ("ssh_authorized_key_secure", nativetypemethods parameterfunctions (userOrTarget >=> keyIfPresent))
  
  -- Autorequires: If Puppet is managing the user or user that owns a file, the file resource will autorequire them. If Puppet is managing any parent directories of a file, the file resource will autorequire them.
  parameterfunctions :: [(Text, [Text -> NativeTypeValidate])]
  parameterfunctions =
    [ ("type", [string, defaultvalue "ssh-rsa", values ["rsa", "dsa", "ssh-rsa", "ssh-dss"]]),
      ("key", [string]),
      ("user", [string]),
      ("ensure", [defaultvalue "present", string, values ["present", "absent", "role"]]),
      ("target", [string]),
      ("options", [rarray, strings])
    ]
  
  userOrTarget :: NativeTypeValidate
  userOrTarget res =
    case (res ^. rattributes & has (ix "user"), res ^. rattributes & has (ix "target")) of
      (False, False) -> Left "Parameters user or target are mandatory"
      _ -> Right res
  
  keyIfPresent :: NativeTypeValidate
  keyIfPresent res =
    case (res ^. rattributes . at "key", res ^. rattributes . at "ensure") of
      (Just _, Just "present") -> Right res
      (_, Just "absent") -> Right res
      _ -> Left "Parameter key is mandatory when the resource is present"
  