extended create groups endpoint

* added possibility to specify the description, the add group & edit
  group permissions and the group link state.

see #148
This commit is contained in:
Bernhard B
2021-07-10 19:51:37 +02:00
parent 99b9d6163a
commit 5dc663e80e
5 changed files with 140 additions and 0 deletions

View File

@@ -40,9 +40,17 @@ type GroupEntry struct {
InviteLink string `json:"invite_link"`
}
type GroupPermissions struct {
AddMembers string `json:"add_members" enums:"every-member,only-admins"`
EditGroup string `json:"edit_group" enums:"every-member,only-admins"`
}
type CreateGroupRequest struct {
Name string `json:"name"`
Members []string `json:"members"`
Description string `json:"description"`
Permissions GroupPermissions `json:"permissions"`
GroupLinkState string `json:"group_link" enums:"enabled,enabled-with-approval,disabled"`
}
type LoggingConfiguration struct {
@@ -667,9 +675,40 @@ func (a *Api) CreateGroup(c *gin.Context) {
return
}
if req.Permissions.AddMembers != "" && !utils.StringInSlice(req.Permissions.AddMembers, []string{"every-member", "only-admins"}) {
c.JSON(400, gin.H{"error": "Invalid add members permission provided - only 'every-member' and 'only-admins' allowed!"})
return
}
if req.Permissions.EditGroup != "" && !utils.StringInSlice(req.Permissions.EditGroup, []string{"every-member", "only-admins"}) {
c.JSON(400, gin.H{"error": "Invalid edit group permissions provided - only 'every-member' and 'only-admins' allowed!"})
return
}
if req.GroupLinkState != "" && !utils.StringInSlice(req.GroupLinkState, []string{"enabled", "enabled-with-approval", "disabled"}) {
c.JSON(400, gin.H{"error": "Invalid group link provided - only 'enabled', 'enabled-with-approval' and 'disabled' allowed!" })
return
}
cmd := []string{"--config", a.signalCliConfig, "-u", number, "updateGroup", "-n", req.Name, "-m"}
cmd = append(cmd, req.Members...)
if req.Permissions.AddMembers != "" {
cmd = append(cmd, []string{"--set-permission-add-member", req.Permissions.AddMembers}...)
}
if req.Permissions.EditGroup != "" {
cmd = append(cmd, []string{"--set-permission-edit-details", req.Permissions.EditGroup}...)
}
if req.GroupLinkState != "" {
cmd = append(cmd, []string{"--link", req.GroupLinkState}...)
}
if req.Description != "" {
cmd = append(cmd, []string{"--description", req.Description}...)
}
out, err := runSignalCli(true, cmd, "")
if err != nil {
if strings.Contains(err.Error(), signalCliV2GroupError) {

View File

@@ -944,6 +944,17 @@ var doc = `{
"api.CreateGroupRequest": {
"type": "object",
"properties": {
"description": {
"type": "string"
},
"group_link": {
"type": "string",
"enum": [
"enabled",
"enabled-with-approval",
"disabled"
]
},
"members": {
"type": "array",
"items": {
@@ -952,6 +963,10 @@ var doc = `{
},
"name": {
"type": "string"
},
"permissions": {
"type": "object",
"$ref": "#/definitions/api.GroupPermissions"
}
}
},
@@ -1009,6 +1024,25 @@ var doc = `{
}
}
},
"api.GroupPermissions": {
"type": "object",
"properties": {
"add_members": {
"type": "string",
"enum": [
"every-member",
"only-admins"
]
},
"edit_group": {
"type": "string",
"enum": [
"every-member",
"only-admins"
]
}
}
},
"api.IdentityEntry": {
"type": "object",
"properties": {

View File

@@ -929,6 +929,17 @@
"api.CreateGroupRequest": {
"type": "object",
"properties": {
"description": {
"type": "string"
},
"group_link": {
"type": "string",
"enum": [
"enabled",
"enabled-with-approval",
"disabled"
]
},
"members": {
"type": "array",
"items": {
@@ -937,6 +948,10 @@
},
"name": {
"type": "string"
},
"permissions": {
"type": "object",
"$ref": "#/definitions/api.GroupPermissions"
}
}
},
@@ -994,6 +1009,25 @@
}
}
},
"api.GroupPermissions": {
"type": "object",
"properties": {
"add_members": {
"type": "string",
"enum": [
"every-member",
"only-admins"
]
},
"edit_group": {
"type": "string",
"enum": [
"every-member",
"only-admins"
]
}
}
},
"api.IdentityEntry": {
"type": "object",
"properties": {

View File

@@ -17,12 +17,23 @@ definitions:
type: object
api.CreateGroupRequest:
properties:
description:
type: string
group_link:
enum:
- enabled
- enabled-with-approval
- disabled
type: string
members:
items:
type: string
type: array
name:
type: string
permissions:
$ref: '#/definitions/api.GroupPermissions'
type: object
type: object
api.CreateGroupResponse:
properties:
@@ -59,6 +70,19 @@ definitions:
type: string
type: array
type: object
api.GroupPermissions:
properties:
add_members:
enum:
- every-member
- only-admins
type: string
edit_group:
enum:
- every-member
- only-admins
type: string
type: object
api.IdentityEntry:
properties:
added:

View File

@@ -22,3 +22,12 @@ func GetIntEnv(key string, defaultVal int) (int, error) {
}
return defaultVal, nil
}
func StringInSlice(a string, list []string) bool {
for _, b := range list {
if b == a {
return true
}
}
return false
}