gitlab-haskell-0.2.3: src/GitLab/SystemHooks/Rules.hs
{-# LANGUAGE OverloadedStrings #-}
-- |
-- Module : GitLab.SystemHooks.Rules
-- Description : Common GitLab system hook rules
-- Copyright : (c) Rob Stewart, Heriot-Watt University, 2020
-- License : BSD3
-- Maintainer : robstewart57@gmail.com
-- Stability : stable
module GitLab.SystemHooks.Rules (ruleAddMembers, ruleAddNewUserToGroups) where
import Control.Monad
import Data.Text
import GitLab.API.Groups
import GitLab.API.Members
import GitLab.API.Projects
import GitLab.API.Users
import GitLab.SystemHooks.Types
import GitLab.Types
ruleAddNewUserToGroups ::
-- | rule label
String ->
-- | list of (non registered) usernames
[Text] ->
-- | list of groups to add new user to
[Text] ->
Rule
ruleAddNewUserToGroups lbl nonRegisteredUsernames groupNames =
matchIf
lbl
( \event@UserCreate {} -> do
return (userCreate_username event `elem` nonRegisteredUsernames)
)
( \event@UserCreate {} -> do
mapM_
( \groupName ->
-- will return value of type `Left Status` if user already
-- member of the group, `void` silently ignores any outcome.
addUserToGroup' groupName Reporter (userCreate_user_id event)
)
groupNames
)
ruleAddMembers ::
-- | rule label
String ->
-- | project names to match on
[Text] ->
-- | user names to add as member of matched project
[Text] ->
Rule
ruleAddMembers label projectNames userNames =
matchIf
label
( \event@ProjectCreate {} -> do
request <- searchProjectId (projectCreate_project_id event)
case request of
Left _ -> return False
Right Nothing -> return False
Right (Just prj) ->
return
( project_path prj
`elem` projectNames
)
)
( \event@ProjectCreate {} -> do
mapM_
( \userName -> do
request <- searchUser userName
case request of
Nothing -> return ()
Just foundUser ->
void $
addMemberToProject'
(projectCreate_project_id event)
Reporter
(user_id foundUser)
)
userNames
)