{-# LANGUAGE OverloadedStrings #-}
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 ::
String ->
[Text] ->
[Text] ->
Rule
ruleAddNewUserToGroups lbl nonRegisteredUsernames groupNames =
matchIf
lbl
( \event@UserCreate {} -> do
return (userCreate_username event `elem` nonRegisteredUsernames)
)
( \event@UserCreate {} -> do
mapM_
( \groupName ->
addUserToGroup' groupName Reporter (userCreate_user_id event)
)
groupNames
)
ruleAddMembers ::
String ->
[Text] ->
[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
)