mirror of
https://github.com/aljazceru/signal-cli-rest-api.git
synced 2025-12-19 15:44:28 +01:00
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:
@@ -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) {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user