diff --git a/controllers/controlGroups.go b/controllers/controlGroups.go index 487380f..560a9cd 100644 --- a/controllers/controlGroups.go +++ b/controllers/controlGroups.go @@ -30,5 +30,50 @@ func GetGroups(c *gin.Context) { } func AddGroup(c *gin.Context) { + var input AddGroupInput + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + if len(input.GroupName) == 0 { + c.JSON(http.StatusBadRequest, gin.H{"error": "no group name specified"}) + return + } + + if input.LdapGroup && len(input.LdapDn) == 0 { + c.JSON(http.StatusBadRequest, gin.H{"error": "ldapGroup is true but no ldapDn specified"}) + return + } + + g := models.Group{} + g.GroupName = input.GroupName + g.LdapGroup = input.LdapGroup + g.LdapDn = input.LdapDn + g.Admin = input.Admin + + // Check if role already exists + testGroup, _ := models.GroupGetByName(g.GroupName) + log.Printf("AddGroup checking if group '%s' already exists\n", g.GroupName) + + if (models.Group{} == testGroup) { + log.Printf("AddGroup confirmed no existing group name\n") + } else { + errorString := fmt.Sprintf("attempt to register conflicting groupname '%s'", g.GroupName) + log.Printf("Register error : '%s'\n", errorString) + c.JSON(http.StatusBadRequest, gin.H{"error": errorString}) + return + } + + _, err := g.GroupAdd() + + if err != nil { + errString := fmt.Sprintf("error creating group : '%s'", err) + log.Printf("AddGroup %s\n", errString) + c.JSON(http.StatusBadRequest, gin.H{"error": errString}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "group creation success"}) } diff --git a/main.go b/main.go index a6f03a1..f05b035 100644 --- a/main.go +++ b/main.go @@ -252,10 +252,10 @@ func main() { // Group functions for admin adminOnly.GET("/groups", controllers.GetGroups) - adminOnly.GET("/group/add", controllers.AddGroup) + adminOnly.POST("/group/add", controllers.AddGroup) // TODO - //adminOnly.GET("/group/update", controllers.UpdateGroup) - //adminOnly.GET("/group/delete", controllers.DeleteGroup) + //adminOnly.POST("/group/update", controllers.UpdateGroup) + //adminOnly.POST("/group/delete", controllers.DeleteGroup) // Other functions for admin adminOnly.POST("/unlock", controllers.Unlock)