    module Propellor.Property.Group where

    import Propellor.Base
    import Propellor.Property.User (hasGroup)

    type GID = Int

    exists :: Group -> Maybe GID -> Property UnixLike
    exists :: Group -> Maybe GID -> Property UnixLike
    exists (Group group' :: String
    group') mgid :: Maybe GID
    mgid = IO Bool -> UncheckedProperty UnixLike -> Property UnixLike
    forall (p :: * -> *) i (m :: * -> *).
    (Checkable p i, LiftPropellor m) =>
    m Bool -> p i -> Property i
    check IO Bool
    test (String -> [String] -> UncheckedProperty UnixLike
    cmdProperty "addgroup" (Maybe GID -> [String]
    forall a. Show a => Maybe a -> [String]
    args Maybe GID
    mgid))
    	Property UnixLike -> String -> Property UnixLike
    forall p. IsProp p => p -> String -> p
    `describe` [String] -> String
    unwords ["group", String
    group']
      where
    	groupFile :: String
    groupFile = "/etc/group"
    	test :: IO Bool
    test = Bool -> Bool
    not (Bool -> Bool) -> (String -> Bool) -> String -> Bool
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . String -> [String] -> Bool
    forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
    elem String
    group' ([String] -> Bool) -> (String -> [String]) -> String -> Bool
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . String -> [String]
    words (String -> Bool) -> IO String -> IO Bool
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> String -> [String] -> IO String
    readProcess "cut" ["-d:", "-f1", String
    groupFile]
    	args :: Maybe a -> [String]
    args Nothing = [String
    group']
    	args (Just gid :: a
    gid) = ["--gid", a -> String
    forall a. Show a => a -> String
    show a
    gid, String
    group']

    hasUser :: Group -> User -> Property DebianLike
    hasUser :: Group -> User -> Property DebianLike
    hasUser = (User -> Group -> Property DebianLike)
    -> Group -> User -> Property DebianLike
    forall a b c. (a -> b -> c) -> b -> a -> c
    flip User -> Group -> Property DebianLike
    hasGroup