From 5af52ef47aadd7bc309e62aafec4c7f7e520884a Mon Sep 17 00:00:00 2001 From: Oskar Hahn Date: Wed, 8 Jan 2025 10:44:37 +0100 Subject: [PATCH 1/7] Update deps and meta (#1108) --- go.mod | 12 ++++++------ go.sum | 12 ++++++++++++ meta | 2 +- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 44f0404e..18c987ac 100644 --- a/go.mod +++ b/go.mod @@ -3,19 +3,19 @@ module github.com/OpenSlides/openslides-autoupdate-service go 1.23 require ( - github.com/alecthomas/kong v1.4.0 + github.com/alecthomas/kong v1.6.1 github.com/goccy/go-yaml v1.14.3 github.com/golang-jwt/jwt/v4 v4.5.1 github.com/gomodule/redigo v1.9.2 - github.com/jackc/pgx/v5 v5.7.1 + github.com/jackc/pgx/v5 v5.7.2 github.com/klauspost/compress v1.17.11 github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1 github.com/ory/dockertest/v3 v3.11.0 github.com/ostcar/topic v0.4.1 github.com/stretchr/testify v1.9.0 github.com/zeebo/xxh3 v1.0.2 - golang.org/x/sync v0.9.0 - golang.org/x/sys v0.27.0 + golang.org/x/sync v0.10.0 + golang.org/x/sys v0.29.0 ) require ( @@ -50,8 +50,8 @@ require ( github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect - golang.org/x/crypto v0.29.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/crypto v0.32.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index c6063b43..0db44396 100644 --- a/go.sum +++ b/go.sum @@ -12,6 +12,8 @@ github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8v github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/kong v1.4.0 h1:UL7tzGMnnY0YRMMvJyITIRX1EpO6RbBRZDNcCevy3HA= github.com/alecthomas/kong v1.4.0/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU= +github.com/alecthomas/kong v1.6.1 h1:/7bVimARU3uxPD0hbryPE8qWrS3Oz3kPQoxA/H2NKG8= +github.com/alecthomas/kong v1.6.1/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU= github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= @@ -53,6 +55,8 @@ github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7Ulw github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= github.com/jackc/pgx/v5 v5.7.1 h1:x7SYsPBYDkHDksogeSmZZ5xzThcTgRz++I5E+ePFUcs= github.com/jackc/pgx/v5 v5.7.1/go.mod h1:e7O26IywZZ+naJtWWos6i6fvWK+29etgITqrqHLfoZA= +github.com/jackc/pgx/v5 v5.7.2 h1:mLoDLV6sonKlvjIEsV56SkWNCnuNv531l94GaIzO+XI= +github.com/jackc/pgx/v5 v5.7.2/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -117,6 +121,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -128,6 +134,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -135,10 +143,14 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= diff --git a/meta b/meta index d9be2d45..b9142ab6 160000 --- a/meta +++ b/meta @@ -1 +1 @@ -Subproject commit d9be2d45673f01eea4587fc831bf0b7e42b48a88 +Subproject commit b9142ab6de7f4b6e4482f1588d3beb2750466256 From fee085417b38ca282c313c40f525045c5ab952f1 Mon Sep 17 00:00:00 2001 From: Oskar Hahn Date: Wed, 8 Jan 2025 10:58:33 +0100 Subject: [PATCH 2/7] Update Deps (#1110) --- go.mod | 2 +- go.sum | 16 ++-------------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 18c987ac..37a4f016 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.23 require ( github.com/alecthomas/kong v1.6.1 - github.com/goccy/go-yaml v1.14.3 + github.com/goccy/go-yaml v1.15.13 github.com/golang-jwt/jwt/v4 v4.5.1 github.com/gomodule/redigo v1.9.2 github.com/jackc/pgx/v5 v5.7.2 diff --git a/go.sum b/go.sum index 0db44396..8bfcbbee 100644 --- a/go.sum +++ b/go.sum @@ -10,8 +10,6 @@ github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEV github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= -github.com/alecthomas/kong v1.4.0 h1:UL7tzGMnnY0YRMMvJyITIRX1EpO6RbBRZDNcCevy3HA= -github.com/alecthomas/kong v1.4.0/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU= github.com/alecthomas/kong v1.6.1 h1:/7bVimARU3uxPD0hbryPE8qWrS3Oz3kPQoxA/H2NKG8= github.com/alecthomas/kong v1.6.1/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU= github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= @@ -35,8 +33,8 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= -github.com/goccy/go-yaml v1.14.3 h1:8tVD+aqqPLWisSEhM+6wWoiURWXCx6BwaTKS6ZeITgM= -github.com/goccy/go-yaml v1.14.3/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/goccy/go-yaml v1.15.13 h1:Xd87Yddmr2rC1SLLTm2MNDcTjeO/GYo0JGiww6gSTDg= +github.com/goccy/go-yaml v1.15.13/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= @@ -53,8 +51,6 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.7.1 h1:x7SYsPBYDkHDksogeSmZZ5xzThcTgRz++I5E+ePFUcs= -github.com/jackc/pgx/v5 v5.7.1/go.mod h1:e7O26IywZZ+naJtWWos6i6fvWK+29etgITqrqHLfoZA= github.com/jackc/pgx/v5 v5.7.2 h1:mLoDLV6sonKlvjIEsV56SkWNCnuNv531l94GaIzO+XI= github.com/jackc/pgx/v5 v5.7.2/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= @@ -119,8 +115,6 @@ github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaD golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -132,8 +126,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -141,14 +133,10 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= From fa162522d3501fd56b98705d5820e857bbf9e60f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 10:01:26 +0000 Subject: [PATCH 3/7] Bump golang from 1.23.3-alpine to 1.23.4-alpine (#1092) Bumps golang from 1.23.3-alpine to 1.23.4-alpine. --- updated-dependencies: - dependency-name: golang dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Oskar Hahn --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ebbb5704..d4f09121 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.23.3-alpine as base +FROM golang:1.23.4-alpine as base WORKDIR /root RUN apk add git From d94cbbc37f4b3bedbcb80dfbd17e459d6f094304 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 10:05:25 +0000 Subject: [PATCH 4/7] Bump github.com/stretchr/testify from 1.9.0 to 1.10.0 (#1084) Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.9.0 to 1.10.0. - [Release notes](https://github.com/stretchr/testify/releases) - [Commits](https://github.com/stretchr/testify/compare/v1.9.0...v1.10.0) --- updated-dependencies: - dependency-name: github.com/stretchr/testify dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Oskar Hahn --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 37a4f016..ce4f6c7c 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1 github.com/ory/dockertest/v3 v3.11.0 github.com/ostcar/topic v0.4.1 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 github.com/zeebo/xxh3 v1.0.2 golang.org/x/sync v0.10.0 golang.org/x/sys v0.29.0 diff --git a/go.sum b/go.sum index 8bfcbbee..f353cfc6 100644 --- a/go.sum +++ b/go.sum @@ -97,8 +97,8 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= From 9b346ebea33a4cf5298c3714b0e831524458b050 Mon Sep 17 00:00:00 2001 From: Oskar Hahn Date: Thu, 9 Jan 2025 20:46:15 +0100 Subject: [PATCH 5/7] Change restrictor for superadmin and orga admin (#1053) * Change restrictor for superadmin and orga admin - The super admin has to go throw the restrictor - The orga admin and superadmin are automaticly admin in every meeting, giving them all permissions in all meetings --- internal/restrict/collection/collection.go | 12 - internal/restrict/collection/gender.go | 2 + internal/restrict/collection/group.go | 16 + internal/restrict/collection/group_test.go | 16 + internal/restrict/collection/mediafile.go | 2 - internal/restrict/collection/meeting.go | 22 +- internal/restrict/collection/meeting_test.go | 48 +- internal/restrict/collection/meeting_user.go | 23 + .../restrict/collection/meeting_user_test.go | 24 + internal/restrict/collection/mock_test.go | 4 +- internal/restrict/collection/personal_note.go | 7 - .../restrict/collection/personal_note_test.go | 17 - internal/restrict/collection/tag.go | 16 + internal/restrict/collection/tag_test.go | 15 + internal/restrict/collection/user.go | 10 +- internal/restrict/collection/user_test.go | 14 - internal/restrict/field_def.go | 18 +- internal/restrict/perm/perm.go | 19 +- internal/restrict/restrict.go | 67 +- meta | 2 +- pkg/datastore/dskey/gen_collection_fields.go | 1049 +++++++++-------- 21 files changed, 720 insertions(+), 683 deletions(-) diff --git a/internal/restrict/collection/collection.go b/internal/restrict/collection/collection.go index 5f392b53..f3494dfe 100644 --- a/internal/restrict/collection/collection.go +++ b/internal/restrict/collection/collection.go @@ -146,18 +146,6 @@ func (r *restrictCache) Modes(mode string) FieldRestricter { } } -func (r *restrictCache) SuperAdmin(mode string) FieldRestricter { - type superRestricter interface { - SuperAdmin(mode string) FieldRestricter - } - - if sr, ok := r.Restricter.(superRestricter); ok { - return sr.SuperAdmin(mode) - } - - return nil -} - var collectionMap = map[string]Restricter{ ActionWorker{}.Name(): ActionWorker{}, AgendaItem{}.Name(): AgendaItem{}, diff --git a/internal/restrict/collection/gender.go b/internal/restrict/collection/gender.go index d98b08ab..d6fa5bdc 100644 --- a/internal/restrict/collection/gender.go +++ b/internal/restrict/collection/gender.go @@ -7,6 +7,8 @@ import ( ) // Gender handles permission for action_worker. +// +// Everyone can see all genders. type Gender struct{} // Name returns the collection name. diff --git a/internal/restrict/collection/group.go b/internal/restrict/collection/group.go index 79a927a1..30f41454 100644 --- a/internal/restrict/collection/group.go +++ b/internal/restrict/collection/group.go @@ -4,12 +4,14 @@ import ( "context" "fmt" + "github.com/OpenSlides/openslides-autoupdate-service/internal/restrict/perm" "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dsfetch" ) // Group handels restrictions of the collection group. // // The user can see a group, if the user can see the group's meeting. +// Organization managers can see all groups. // // Mode A: The user can see the group. type Group struct{} @@ -39,6 +41,20 @@ func (g Group) Modes(mode string) FieldRestricter { } func (g Group) see(ctx context.Context, ds *dsfetch.Fetch, groupIDs ...int) ([]int, error) { + requestUser, err := perm.RequestUserFromContext(ctx) + if err != nil { + return nil, fmt.Errorf("getting request user: %w", err) + } + + isOrgaManager, err := perm.HasOrganizationManagementLevel(ctx, ds, requestUser, perm.OMLCanManageOrganization) + if err != nil { + return nil, fmt.Errorf("checking for superadmin: %w", err) + } + + if isOrgaManager { + return groupIDs, nil + } + return eachMeeting(ctx, ds, g, groupIDs, func(meetingID int, ids []int) ([]int, error) { canSee, err := Collection(ctx, Meeting{}.Name()).Modes("B")(ctx, ds, meetingID) if err != nil { diff --git a/internal/restrict/collection/group_test.go b/internal/restrict/collection/group_test.go index bc7c7ca6..3e5d3432 100644 --- a/internal/restrict/collection/group_test.go +++ b/internal/restrict/collection/group_test.go @@ -49,7 +49,23 @@ func TestGroupModeA(t *testing.T) { group_ids: [1] committee_id: 2 user/5/meeting_user_ids: [50] + `, + withRequestUser(5), + ) + testCase( + "Organization Manager in locked meeting", + t, + g.Modes("A"), + true, + `--- + group/1: + meeting_id: 30 + meeting/30: + group_ids: [1] + committee_id: 2 + locked_from_inside: true + user/5/organization_management_level: can_manage_organization `, withRequestUser(5), ) diff --git a/internal/restrict/collection/mediafile.go b/internal/restrict/collection/mediafile.go index dc84a803..cb6befaf 100644 --- a/internal/restrict/collection/mediafile.go +++ b/internal/restrict/collection/mediafile.go @@ -36,7 +36,6 @@ func (m Mediafile) MeetingID(ctx context.Context, ds *dsfetch.Fetch, id int) (in collection, rawID, found := strings.Cut(genericOwnerID, "/") if !found { - // TODO LAST ERROR return 0, false, fmt.Errorf("invalid ownerID: %s", genericOwnerID) } @@ -46,7 +45,6 @@ func (m Mediafile) MeetingID(ctx context.Context, ds *dsfetch.Fetch, id int) (in ownerID, err := strconv.Atoi(rawID) if err != nil { - // TODO LAST ERROR return 0, false, fmt.Errorf("invalid id part of ownerID: %s", genericOwnerID) } diff --git a/internal/restrict/collection/meeting.go b/internal/restrict/collection/meeting.go index 4ea09fc3..0ad43be0 100644 --- a/internal/restrict/collection/meeting.go +++ b/internal/restrict/collection/meeting.go @@ -22,7 +22,7 @@ import ( // If `meeting/locked_from_inside` is set, only users in the meeting can see it. // If the user is locked out (meeting_user/locked_out) he can not see the meeting. // -// Mode A: Always visible to everyone. +// Mode A: The user can see the meeting or is organization manager or higher. // // Mode B: The user can see the meeting. // @@ -47,7 +47,7 @@ func (m Meeting) MeetingID(ctx context.Context, ds *dsfetch.Fetch, id int) (int, func (m Meeting) Modes(mode string) FieldRestricter { switch mode { case "A": - return Allways + return m.modeA case "B": return m.see case "C": @@ -185,6 +185,24 @@ LOOP_MEETINGS: return allowed, nil } +func (m Meeting) modeA(ctx context.Context, ds *dsfetch.Fetch, meetingIDs ...int) ([]int, error) { + requestUser, err := perm.RequestUserFromContext(ctx) + if err != nil { + return nil, fmt.Errorf("getting request user: %w", err) + } + + isOrgaManager, err := perm.HasOrganizationManagementLevel(ctx, ds, requestUser, perm.OMLCanManageOrganization) + if err != nil { + return nil, fmt.Errorf("checking for superadmin: %w", err) + } + + if isOrgaManager { + return meetingIDs, nil + } + + return Collection(ctx, m.Name()).Modes("B")(ctx, ds, meetingIDs...) +} + func (m Meeting) modeC(ctx context.Context, ds *dsfetch.Fetch, meetingIDs ...int) ([]int, error) { allowed, err := eachCondition(meetingIDs, func(meetingID int) (bool, error) { perms, err := perm.FromContext(ctx, meetingID) diff --git a/internal/restrict/collection/meeting_test.go b/internal/restrict/collection/meeting_test.go index e9ac4550..78f1bc70 100644 --- a/internal/restrict/collection/meeting_test.go +++ b/internal/restrict/collection/meeting_test.go @@ -8,14 +8,30 @@ import ( ) func TestMeetingModeA(t *testing.T) { - var m collection.Meeting + m := collection.Meeting{}.Modes("A") testCase( - "without perms", + "locked meeting, orga manager", t, - m.Modes("A"), + m, true, - "meeting/30/id: 30", + ` + user/1/organization_management_level: can_manage_organization + meeting/30/locked_from_inside: true + `, + withElementID(30), + ) + + testCase( + "locked meeting, user manager", + t, + m, + false, + ` + user/1/organization_management_level: can_manage_users + meeting/30/locked_from_inside: true + `, + withElementID(30), ) } @@ -83,10 +99,10 @@ func TestMeetingModeB(t *testing.T) { meeting/30: enable_anonymous: true group_ids: [7] - + group/7/meeting_user_ids: [10] meeting_user/10: - user_id: 1 + user_id: 1 locked_out: true meeting_id: 30 @@ -104,7 +120,7 @@ func TestMeetingModeB(t *testing.T) { meeting/30: group_ids: [7] committee_id: 2 - + group/7/meeting_user_ids: [10] meeting_user/10: user_id: 1 @@ -123,10 +139,10 @@ func TestMeetingModeB(t *testing.T) { meeting/30: group_ids: [7] committee_id: 2 - + group/7/meeting_user_ids: [10] meeting_user/10: - user_id: 1 + user_id: 1 locked_out: true meeting_id: 30 @@ -163,7 +179,7 @@ func TestMeetingModeB(t *testing.T) { group/7/meeting_user_ids: [10] meeting_user/10: - user_id: 1 + user_id: 1 locked_out: true meeting_id: 30 `, @@ -210,13 +226,14 @@ func TestMeetingModeB(t *testing.T) { ) testCase( - "CML can manage organization", + "OML can manage organization", t, m.Modes("B"), true, `--- user/1/organization_management_level: can_manage_organization - meeting/30/id: 30 + meeting/30: + committee_id: 4 `, withElementID(30), ) @@ -231,10 +248,10 @@ func TestMeetingModeB(t *testing.T) { meeting/30: enable_anonymous: true group_ids: [7] - + group/7/meeting_user_ids: [10] meeting_user/10: - user_id: 1 + user_id: 1 locked_out: true meeting_id: 30 @@ -289,7 +306,7 @@ func TestMeetingModeB(t *testing.T) { meeting/30: locked_from_inside: true enable_anonymous: true - + `, withElementID(30), withRequestUser(0), @@ -368,5 +385,4 @@ func TestMeetingModeE(t *testing.T) { `, withElementID(30), ) - } diff --git a/internal/restrict/collection/meeting_user.go b/internal/restrict/collection/meeting_user.go index a5b74d1f..f013f0dd 100644 --- a/internal/restrict/collection/meeting_user.go +++ b/internal/restrict/collection/meeting_user.go @@ -30,6 +30,8 @@ import ( // // Mode B: The request user is the related user. // +// Mode C: The request user can see the meeting_user or is Organization Manager or higher. +// // Mode D: Y can see these fields if // - the request user has the OML can_manage_users or higher or // - the request user has user.can_manage in the meeting. @@ -62,6 +64,9 @@ func (m MeetingUser) Modes(mode string) FieldRestricter { case "B": return m.modeB + case "C": + return m.modeC + case "D": return m.modeD @@ -270,6 +275,24 @@ func (MeetingUser) modeB(ctx context.Context, ds *dsfetch.Fetch, meetingUserIDs }) } +func (m MeetingUser) modeC(ctx context.Context, ds *dsfetch.Fetch, meetingUserIDs ...int) ([]int, error) { + requestUser, err := perm.RequestUserFromContext(ctx) + if err != nil { + return nil, fmt.Errorf("getting request user: %w", err) + } + + isOrgaManager, err := perm.HasOrganizationManagementLevel(ctx, ds, requestUser, perm.OMLCanManageOrganization) + if err != nil { + return nil, fmt.Errorf("checking for superadmin: %w", err) + } + + if isOrgaManager { + return meetingUserIDs, nil + } + + return Collection(ctx, m.Name()).Modes("A")(ctx, ds, meetingUserIDs...) +} + func (m MeetingUser) modeD(ctx context.Context, ds *dsfetch.Fetch, meetingUserIDs ...int) ([]int, error) { requestUser, err := perm.RequestUserFromContext(ctx) if err != nil { diff --git a/internal/restrict/collection/meeting_user_test.go b/internal/restrict/collection/meeting_user_test.go index ab031c74..9698bd92 100644 --- a/internal/restrict/collection/meeting_user_test.go +++ b/internal/restrict/collection/meeting_user_test.go @@ -119,6 +119,30 @@ func TestMeetingUserModeB(t *testing.T) { ) } +func TestMeetingUserModeC(t *testing.T) { + f := collection.MeetingUser{}.Modes("C") + + testCase( + "locked meeting, orga manager", + t, + f, + true, + ` + user/1/organization_management_level: can_manage_organization + meeting/30: + locked_from_inside: true + enable_anonymous: false + + user/2/id: 2 + + meeting_user/20: + user_id: 2 + meeting_id: 30 + `, + withElementID(20), + ) +} + func TestMeetingUserModeD(t *testing.T) { f := collection.MeetingUser{}.Modes("D") diff --git a/internal/restrict/collection/mock_test.go b/internal/restrict/collection/mock_test.go index debd9a02..3432d1ef 100644 --- a/internal/restrict/collection/mock_test.go +++ b/internal/restrict/collection/mock_test.go @@ -42,7 +42,7 @@ func testCase(name string, t *testing.T, f collection.FieldRestricter, expect bo td.data[dskey.MustKey("organization/1/id")] = []byte("1") if td.requestUserID != 0 { - userIDKey, err := dskey.FromString(fmt.Sprintf("user/%d/id", td.requestUserID)) + userIDKey, err := dskey.FromString("user/%d/id", td.requestUserID) if err != nil { t.Fatalf("invalid key %v", fmt.Sprintf("user/%d/id", td.requestUserID)) } @@ -67,7 +67,7 @@ func testCaseMulti(name string, t *testing.T, f collection.FieldRestricter, ids, o(&td) } - userIDKey := dskey.MustKey(fmt.Sprintf("user/%d/id", td.requestUserID)) + userIDKey := dskey.MustKey("user/%d/id", td.requestUserID) td.data[userIDKey] = []byte(strconv.Itoa(td.requestUserID)) diff --git a/internal/restrict/collection/personal_note.go b/internal/restrict/collection/personal_note.go index 7659b7cd..bc38ebfa 100644 --- a/internal/restrict/collection/personal_note.go +++ b/internal/restrict/collection/personal_note.go @@ -13,8 +13,6 @@ import ( // // The user can see a personal node, if personal_note/user_id is the same as the id of the requested user. // -// The superadmin can not see personal_notes from other users. -// // Mode A: The user can see the personal note. type PersonalNote struct{} @@ -66,8 +64,3 @@ func (p PersonalNote) see(ctx context.Context, ds *dsfetch.Fetch, personalNoteID return nil, nil }) } - -// SuperAdmin restricts the super admin. -func (p PersonalNote) SuperAdmin(mode string) FieldRestricter { - return p.Modes(mode) -} diff --git a/internal/restrict/collection/personal_note_test.go b/internal/restrict/collection/personal_note_test.go index bb1368e5..3a865494 100644 --- a/internal/restrict/collection/personal_note_test.go +++ b/internal/restrict/collection/personal_note_test.go @@ -47,20 +47,3 @@ func TestPersonalNoteModeA(t *testing.T) { withRequestUser(2), ) } - -func TestPersonalNoteSuperAdminModeA(t *testing.T) { - var p collection.PersonalNote - ds := `--- - personal_note/1/meeting_user_id: 5 - meeting_user/5/user_id: 2 - ` - - testCase( - "Other note", - t, - p.SuperAdmin("A"), - false, - ds, - withRequestUser(2), - ) -} diff --git a/internal/restrict/collection/tag.go b/internal/restrict/collection/tag.go index 6928d32c..5688c874 100644 --- a/internal/restrict/collection/tag.go +++ b/internal/restrict/collection/tag.go @@ -4,12 +4,14 @@ import ( "context" "fmt" + "github.com/OpenSlides/openslides-autoupdate-service/internal/restrict/perm" "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dsfetch" ) // Tag handels the restrictions for the tag collection. // // The user can see a tag, if the user can see the tag's meeting. +// Organization Managers or higher can see all tags. // // Mode A: The user can see the tag. type Tag struct{} @@ -39,6 +41,20 @@ func (t Tag) Modes(mode string) FieldRestricter { } func (t Tag) see(ctx context.Context, ds *dsfetch.Fetch, tagIDs ...int) ([]int, error) { + requestUser, err := perm.RequestUserFromContext(ctx) + if err != nil { + return nil, fmt.Errorf("getting request user: %w", err) + } + + isOrgaAdmin, err := perm.HasOrganizationManagementLevel(ctx, ds, requestUser, perm.OMLCanManageOrganization) + if err != nil { + return nil, fmt.Errorf("checking for superadmin: %w", err) + } + + if isOrgaAdmin { + return tagIDs, nil + } + return eachMeeting(ctx, ds, t, tagIDs, func(meetingID int, ids []int) ([]int, error) { canSee, err := Collection(ctx, Meeting{}.Name()).Modes("B")(ctx, ds, meetingID) if err != nil { diff --git a/internal/restrict/collection/tag_test.go b/internal/restrict/collection/tag_test.go index 658066e2..d5b5487e 100644 --- a/internal/restrict/collection/tag_test.go +++ b/internal/restrict/collection/tag_test.go @@ -34,4 +34,19 @@ func TestTagModeA(t *testing.T) { committee_id: 300 `, ) + + testCase( + "Organization Manager in locked meeting", + t, + f, + true, + `--- + tag/1/meeting_id: 5 + meeting/5: + committee_id: 300 + locked_from_inside: true + user/5/organization_management_level: can_manage_organization + `, + withRequestUser(5), + ) } diff --git a/internal/restrict/collection/user.go b/internal/restrict/collection/user.go index ba877d28..552c5eb0 100644 --- a/internal/restrict/collection/user.go +++ b/internal/restrict/collection/user.go @@ -43,7 +43,7 @@ import ( // // Mode F: Y has the OML can_manage_users or higher. // -// Mode G: No one. Not even the superadmin. +// Mode G: No one. // // Mode H: The fields can be seen if one of the following conditions is true: // - Any of the conditions in D or @@ -82,14 +82,6 @@ func (u User) Modes(mode string) FieldRestricter { return nil } -// SuperAdmin restricts the super admin. -func (User) SuperAdmin(mode string) FieldRestricter { - if mode == "G" { - return never - } - return Allways -} - func (u User) see(ctx context.Context, ds *dsfetch.Fetch, userIDs ...int) ([]int, error) { requestUserID, err := perm.RequestUserFromContext(ctx) if err != nil { diff --git a/internal/restrict/collection/user_test.go b/internal/restrict/collection/user_test.go index f8ccb5d3..38697af2 100644 --- a/internal/restrict/collection/user_test.go +++ b/internal/restrict/collection/user_test.go @@ -988,20 +988,6 @@ func TestUserModeG(t *testing.T) { ) } -func TestUserSuperAdminModeG(t *testing.T) { - var u collection.User - - testCase( - "Superadmin", - t, - u.SuperAdmin("G"), - false, - ``, - withRequestUser(1), - withElementID(2), - ) -} - func TestUserModeH(t *testing.T) { var u collection.User f := u.Modes("H") diff --git a/internal/restrict/field_def.go b/internal/restrict/field_def.go index 8a55c0e8..b074a266 100644 --- a/internal/restrict/field_def.go +++ b/internal/restrict/field_def.go @@ -527,16 +527,22 @@ var restrictionModes = map[string]string{ "mediafile/token": "A", // meeting + "meeting/admin_group_id": "A", + "meeting/committee_id": "A", "meeting/enable_anonymous": "A", + "meeting/end_time": "A", "meeting/external_id": "A", "meeting/forwarded_motion_ids": "A", "meeting/id": "A", "meeting/is_active_in_organization_id": "A", "meeting/is_archived_in_organization_id": "A", "meeting/language": "A", + "meeting/location": "A", + "meeting/meeting_user_ids": "A", "meeting/motion_ids": "A", "meeting/name": "A", - "meeting/admin_group_id": "B", + "meeting/start_time": "A", + "meeting/tag_ids": "A", "meeting/agenda_enable_numbering": "B", "meeting/agenda_item_creation": "B", "meeting/agenda_item_ids": "B", @@ -564,7 +570,6 @@ var restrictionModes = map[string]string{ "meeting/assignments_export_title": "B", "meeting/chat_group_ids": "B", "meeting/chat_message_ids": "B", - "meeting/committee_id": "B", "meeting/custom_translations": "B", "meeting/default_group_id": "B", "meeting/default_meeting_for_committee_id": "B", @@ -583,7 +588,6 @@ var restrictionModes = map[string]string{ "meeting/default_projector_poll_ids": "B", "meeting/default_projector_topic_ids": "B", "meeting/description": "B", - "meeting/end_time": "B", "meeting/export_csv_encoding": "B", "meeting/export_csv_separator": "B", "meeting/export_pdf_fontsize": "B", @@ -625,7 +629,6 @@ var restrictionModes = map[string]string{ "meeting/list_of_speakers_show_amount_of_speakers_on_slide": "B", "meeting/list_of_speakers_show_first_contribution": "B", "meeting/list_of_speakers_speaker_note_for_everyone": "B", - "meeting/location": "B", "meeting/locked_from_inside": "B", "meeting/logo_pdf_ballot_paper_id": "B", "meeting/logo_pdf_footer_l_id": "B", @@ -637,7 +640,6 @@ var restrictionModes = map[string]string{ "meeting/logo_web_header_id": "B", "meeting/mediafile_ids": "B", "meeting/meeting_mediafile_ids": "B", - "meeting/meeting_user_ids": "B", "meeting/motion_block_ids": "B", "meeting/motion_category_ids": "B", "meeting/motion_change_recommendation_ids": "B", @@ -715,10 +717,8 @@ var restrictionModes = map[string]string{ "meeting/projector_message_ids": "B", "meeting/reference_projector_id": "B", "meeting/speaker_ids": "B", - "meeting/start_time": "B", "meeting/structure_level_ids": "B", "meeting/structure_level_list_of_speakers_ids": "B", - "meeting/tag_ids": "B", "meeting/template_for_organization_id": "B", "meeting/topic_ids": "B", "meeting/topic_poll_default_group_ids": "B", @@ -796,7 +796,6 @@ var restrictionModes = map[string]string{ "meeting_user/chat_message_ids": "A", "meeting_user/group_ids": "A", "meeting_user/id": "A", - "meeting_user/meeting_id": "A", "meeting_user/motion_editor_ids": "A", "meeting_user/motion_submitter_ids": "A", "meeting_user/motion_working_group_speaker_ids": "A", @@ -804,11 +803,12 @@ var restrictionModes = map[string]string{ "meeting_user/speaker_ids": "A", "meeting_user/structure_level_ids": "A", "meeting_user/supported_motion_ids": "A", - "meeting_user/user_id": "A", "meeting_user/vote_delegated_to_id": "A", "meeting_user/vote_delegations_from_ids": "A", "meeting_user/vote_weight": "A", "meeting_user/personal_note_ids": "B", + "meeting_user/meeting_id": "C", + "meeting_user/user_id": "C", "meeting_user/comment": "D", "meeting_user/locked_out": "E", diff --git a/internal/restrict/perm/perm.go b/internal/restrict/perm/perm.go index 4ba7b8ee..d5c2a4d9 100644 --- a/internal/restrict/perm/perm.go +++ b/internal/restrict/perm/perm.go @@ -4,6 +4,7 @@ package perm import ( "context" + "errors" "fmt" "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dsfetch" @@ -24,12 +25,22 @@ func New(ctx context.Context, ds *dsfetch.Fetch, userID, meetingID int) (*Permis return newPublicAccess(ctx, ds, meetingID) } - isSuperAdmin, err := HasOrganizationManagementLevel(ctx, ds, userID, OMLSuperadmin) + lockedMeeting, err := ds.Meeting_LockedFromInside(meetingID).Value(ctx) if err != nil { - return nil, fmt.Errorf("getting organization management level: %w", err) + var errDoesNotExist dsfetch.DoesNotExistError + if !errors.As(err, &errDoesNotExist) { + return nil, fmt.Errorf("check if meeting is locked: %w", err) + } } - if isSuperAdmin { - return &Permission{admin: true}, nil + + if !lockedMeeting { + isOrgaAdmin, err := HasOrganizationManagementLevel(ctx, ds, userID, OMLCanManageOrganization) + if err != nil { + return nil, fmt.Errorf("getting organization management level: %w", err) + } + if isOrgaAdmin { + return &Permission{admin: true}, nil + } } meetingUserIDs, err := ds.User_MeetingUserIDs(userID).Value(ctx) diff --git a/internal/restrict/restrict.go b/internal/restrict/restrict.go index 5be880d6..edb7b611 100644 --- a/internal/restrict/restrict.go +++ b/internal/restrict/restrict.go @@ -5,7 +5,6 @@ package restrict import ( "context" "encoding/json" - "errors" "fmt" "sort" "strconv" @@ -54,7 +53,7 @@ func (r restricter) Get(ctx context.Context, keys ...dskey.Key) (map[dskey.Key][ } start := time.Now() - times, err := restrict(ctx, r.getter, r.uid, data) + times, err := restrict(ctx, r.getter, data) if err != nil { return nil, fmt.Errorf("restricting data: %w", err) } @@ -74,26 +73,9 @@ func (r restricter) Get(ctx context.Context, keys ...dskey.Key) (map[dskey.Key][ // restrict changes the keys and values in data for the user with the given user // id. -func restrict(ctx context.Context, getter flow.Getter, uid int, data map[dskey.Key][]byte) (map[string]timeCount, error) { +func restrict(ctx context.Context, getter flow.Getter, data map[dskey.Key][]byte) (map[string]timeCount, error) { ds := dsfetch.New(getter) - isSuperAdmin, err := perm.HasOrganizationManagementLevel(ctx, ds, uid, perm.OMLSuperadmin) - if err != nil { - var errDoesNotExist dsfetch.DoesNotExistError - if errors.As(err, &errDoesNotExist) || dskey.Key(errDoesNotExist).Collection() == "user" { - // TODO LAST ERROR - return nil, fmt.Errorf("request user %d does not exist", uid) - } - return nil, fmt.Errorf("checking for superadmin: %w", err) - } - - if isSuperAdmin { - if err := restrictSuperAdmin(ctx, getter, data); err != nil { - return nil, fmt.Errorf("restrict as superadmin: %w", err) - } - return nil, nil - } - // Get all required collections with there ids. restrictModeIDs := make(map[collection.CM]set.Set[int]) for key := range data { @@ -163,51 +145,6 @@ func restrict(ctx context.Context, getter flow.Getter, uid int, data map[dskey.K return times, nil } -func restrictSuperAdmin(ctx context.Context, getter flow.Getter, data map[dskey.Key][]byte) error { - ds := dsfetch.New(getter) - - for key := range data { - if data[key] == nil { - continue - } - - restricter := collection.Collection(ctx, key.Collection()) - if restricter == nil { - // Superadmins can see unknown collections. - continue - } - - type superRestricter interface { - SuperAdmin(mode string) collection.FieldRestricter - } - sr, ok := restricter.(superRestricter) - if !ok { - continue - } - - restrictionMode, err := restrictModeName(key.Collection(), key.Field()) - if err != nil { - return fmt.Errorf("getting restriction Mode for %s: %w", key, err) - } - - modefunc := sr.SuperAdmin(restrictionMode) - if modefunc == nil { - // Do not restrict unknown fields that are not implemented. - continue - } - - allowed, err := modefunc(ctx, ds, key.ID()) - if err != nil { - return fmt.Errorf("calling mode func: %w", err) - } - - if len(allowed) == 0 { - data[key] = nil - } - } - return nil -} - // groupKeysByCollection groups all the keys in data by there collection. func groupKeysByCollection(key dskey.Key, value []byte, restrictModeIDs map[collection.CM]set.Set[int]) error { restrictionMode, err := restrictModeName(key.Collection(), key.Field()) diff --git a/meta b/meta index b9142ab6..1f14e4cd 160000 --- a/meta +++ b/meta @@ -1 +1 @@ -Subproject commit b9142ab6de7f4b6e4482f1588d3beb2750466256 +Subproject commit 1f14e4cdd649112d326ceb1ff53ba0af69d6f602 diff --git a/pkg/datastore/dskey/gen_collection_fields.go b/pkg/datastore/dskey/gen_collection_fields.go index abc6e106..535dda8c 100644 --- a/pkg/datastore/dskey/gen_collection_fields.go +++ b/pkg/datastore/dskey/gen_collection_fields.go @@ -409,6 +409,7 @@ var collectionFields = [...]collectionField{ {"meeting_mediafile", "used_as_logo_web_header_in_meeting_id"}, {"meeting_user", "A"}, {"meeting_user", "B"}, + {"meeting_user", "C"}, {"meeting_user", "D"}, {"meeting_user", "E"}, {"meeting_user", "about_me"}, @@ -1748,1052 +1749,1054 @@ func collectionFieldToID(cf string) int { return 405 case "meeting_user/B": return 406 - case "meeting_user/D": + case "meeting_user/C": return 407 - case "meeting_user/E": + case "meeting_user/D": return 408 - case "meeting_user/about_me": + case "meeting_user/E": return 409 - case "meeting_user/assignment_candidate_ids": + case "meeting_user/about_me": return 410 - case "meeting_user/chat_message_ids": + case "meeting_user/assignment_candidate_ids": return 411 - case "meeting_user/comment": + case "meeting_user/chat_message_ids": return 412 - case "meeting_user/group_ids": + case "meeting_user/comment": return 413 - case "meeting_user/id": + case "meeting_user/group_ids": return 414 - case "meeting_user/locked_out": + case "meeting_user/id": return 415 - case "meeting_user/meeting_id": + case "meeting_user/locked_out": return 416 - case "meeting_user/motion_editor_ids": + case "meeting_user/meeting_id": return 417 - case "meeting_user/motion_submitter_ids": + case "meeting_user/motion_editor_ids": return 418 - case "meeting_user/motion_working_group_speaker_ids": + case "meeting_user/motion_submitter_ids": return 419 - case "meeting_user/number": + case "meeting_user/motion_working_group_speaker_ids": return 420 - case "meeting_user/personal_note_ids": + case "meeting_user/number": return 421 - case "meeting_user/speaker_ids": + case "meeting_user/personal_note_ids": return 422 - case "meeting_user/structure_level_ids": + case "meeting_user/speaker_ids": return 423 - case "meeting_user/supported_motion_ids": + case "meeting_user/structure_level_ids": return 424 - case "meeting_user/user_id": + case "meeting_user/supported_motion_ids": return 425 - case "meeting_user/vote_delegated_to_id": + case "meeting_user/user_id": return 426 - case "meeting_user/vote_delegations_from_ids": + case "meeting_user/vote_delegated_to_id": return 427 - case "meeting_user/vote_weight": + case "meeting_user/vote_delegations_from_ids": return 428 - case "motion/A": + case "meeting_user/vote_weight": return 429 - case "motion/B": + case "motion/A": return 430 - case "motion/C": + case "motion/B": return 431 - case "motion/D": + case "motion/C": return 432 - case "motion/E": + case "motion/D": return 433 - case "motion/additional_submitter": + case "motion/E": return 434 - case "motion/agenda_item_id": + case "motion/additional_submitter": return 435 - case "motion/all_derived_motion_ids": + case "motion/agenda_item_id": return 436 - case "motion/all_origin_ids": + case "motion/all_derived_motion_ids": return 437 - case "motion/amendment_ids": + case "motion/all_origin_ids": return 438 - case "motion/amendment_paragraphs": + case "motion/amendment_ids": return 439 - case "motion/attachment_meeting_mediafile_ids": + case "motion/amendment_paragraphs": return 440 - case "motion/block_id": + case "motion/attachment_meeting_mediafile_ids": return 441 - case "motion/category_id": + case "motion/block_id": return 442 - case "motion/category_weight": + case "motion/category_id": return 443 - case "motion/change_recommendation_ids": + case "motion/category_weight": return 444 - case "motion/comment_ids": + case "motion/change_recommendation_ids": return 445 - case "motion/created": + case "motion/comment_ids": return 446 - case "motion/derived_motion_ids": + case "motion/created": return 447 - case "motion/editor_ids": + case "motion/derived_motion_ids": return 448 - case "motion/forwarded": + case "motion/editor_ids": return 449 - case "motion/id": + case "motion/forwarded": return 450 - case "motion/identical_motion_ids": + case "motion/id": return 451 - case "motion/last_modified": + case "motion/identical_motion_ids": return 452 - case "motion/lead_motion_id": + case "motion/last_modified": return 453 - case "motion/list_of_speakers_id": + case "motion/lead_motion_id": return 454 - case "motion/meeting_id": + case "motion/list_of_speakers_id": return 455 - case "motion/modified_final_version": + case "motion/meeting_id": return 456 - case "motion/number": + case "motion/modified_final_version": return 457 - case "motion/number_value": + case "motion/number": return 458 - case "motion/option_ids": + case "motion/number_value": return 459 - case "motion/origin_id": + case "motion/option_ids": return 460 - case "motion/origin_meeting_id": + case "motion/origin_id": return 461 - case "motion/personal_note_ids": + case "motion/origin_meeting_id": return 462 - case "motion/poll_ids": + case "motion/personal_note_ids": return 463 - case "motion/projection_ids": + case "motion/poll_ids": return 464 - case "motion/reason": + case "motion/projection_ids": return 465 - case "motion/recommendation_extension": + case "motion/reason": return 466 - case "motion/recommendation_extension_reference_ids": + case "motion/recommendation_extension": return 467 - case "motion/recommendation_id": + case "motion/recommendation_extension_reference_ids": return 468 - case "motion/referenced_in_motion_recommendation_extension_ids": + case "motion/recommendation_id": return 469 - case "motion/referenced_in_motion_state_extension_ids": + case "motion/referenced_in_motion_recommendation_extension_ids": return 470 - case "motion/sequential_number": + case "motion/referenced_in_motion_state_extension_ids": return 471 - case "motion/sort_child_ids": + case "motion/sequential_number": return 472 - case "motion/sort_parent_id": + case "motion/sort_child_ids": return 473 - case "motion/sort_weight": + case "motion/sort_parent_id": return 474 - case "motion/start_line_number": + case "motion/sort_weight": return 475 - case "motion/state_extension": + case "motion/start_line_number": return 476 - case "motion/state_extension_reference_ids": + case "motion/state_extension": return 477 - case "motion/state_id": + case "motion/state_extension_reference_ids": return 478 - case "motion/submitter_ids": + case "motion/state_id": return 479 - case "motion/supporter_meeting_user_ids": + case "motion/submitter_ids": return 480 - case "motion/tag_ids": + case "motion/supporter_meeting_user_ids": return 481 - case "motion/text": + case "motion/tag_ids": return 482 - case "motion/text_hash": + case "motion/text": return 483 - case "motion/title": + case "motion/text_hash": return 484 - case "motion/workflow_timestamp": + case "motion/title": return 485 - case "motion/working_group_speaker_ids": + case "motion/workflow_timestamp": return 486 - case "motion_block/A": + case "motion/working_group_speaker_ids": return 487 - case "motion_block/agenda_item_id": + case "motion_block/A": return 488 - case "motion_block/id": + case "motion_block/agenda_item_id": return 489 - case "motion_block/internal": + case "motion_block/id": return 490 - case "motion_block/list_of_speakers_id": + case "motion_block/internal": return 491 - case "motion_block/meeting_id": + case "motion_block/list_of_speakers_id": return 492 - case "motion_block/motion_ids": + case "motion_block/meeting_id": return 493 - case "motion_block/projection_ids": + case "motion_block/motion_ids": return 494 - case "motion_block/sequential_number": + case "motion_block/projection_ids": return 495 - case "motion_block/title": + case "motion_block/sequential_number": return 496 - case "motion_category/A": + case "motion_block/title": return 497 - case "motion_category/child_ids": + case "motion_category/A": return 498 - case "motion_category/id": + case "motion_category/child_ids": return 499 - case "motion_category/level": + case "motion_category/id": return 500 - case "motion_category/meeting_id": + case "motion_category/level": return 501 - case "motion_category/motion_ids": + case "motion_category/meeting_id": return 502 - case "motion_category/name": + case "motion_category/motion_ids": return 503 - case "motion_category/parent_id": + case "motion_category/name": return 504 - case "motion_category/prefix": + case "motion_category/parent_id": return 505 - case "motion_category/sequential_number": + case "motion_category/prefix": return 506 - case "motion_category/weight": + case "motion_category/sequential_number": return 507 - case "motion_change_recommendation/A": + case "motion_category/weight": return 508 - case "motion_change_recommendation/creation_time": + case "motion_change_recommendation/A": return 509 - case "motion_change_recommendation/id": + case "motion_change_recommendation/creation_time": return 510 - case "motion_change_recommendation/internal": + case "motion_change_recommendation/id": return 511 - case "motion_change_recommendation/line_from": + case "motion_change_recommendation/internal": return 512 - case "motion_change_recommendation/line_to": + case "motion_change_recommendation/line_from": return 513 - case "motion_change_recommendation/meeting_id": + case "motion_change_recommendation/line_to": return 514 - case "motion_change_recommendation/motion_id": + case "motion_change_recommendation/meeting_id": return 515 - case "motion_change_recommendation/other_description": + case "motion_change_recommendation/motion_id": return 516 - case "motion_change_recommendation/rejected": + case "motion_change_recommendation/other_description": return 517 - case "motion_change_recommendation/text": + case "motion_change_recommendation/rejected": return 518 - case "motion_change_recommendation/type": + case "motion_change_recommendation/text": return 519 - case "motion_comment/A": + case "motion_change_recommendation/type": return 520 - case "motion_comment/comment": + case "motion_comment/A": return 521 - case "motion_comment/id": + case "motion_comment/comment": return 522 - case "motion_comment/meeting_id": + case "motion_comment/id": return 523 - case "motion_comment/motion_id": + case "motion_comment/meeting_id": return 524 - case "motion_comment/section_id": + case "motion_comment/motion_id": return 525 - case "motion_comment_section/A": + case "motion_comment/section_id": return 526 - case "motion_comment_section/comment_ids": + case "motion_comment_section/A": return 527 - case "motion_comment_section/id": + case "motion_comment_section/comment_ids": return 528 - case "motion_comment_section/meeting_id": + case "motion_comment_section/id": return 529 - case "motion_comment_section/name": + case "motion_comment_section/meeting_id": return 530 - case "motion_comment_section/read_group_ids": + case "motion_comment_section/name": return 531 - case "motion_comment_section/sequential_number": + case "motion_comment_section/read_group_ids": return 532 - case "motion_comment_section/submitter_can_write": + case "motion_comment_section/sequential_number": return 533 - case "motion_comment_section/weight": + case "motion_comment_section/submitter_can_write": return 534 - case "motion_comment_section/write_group_ids": + case "motion_comment_section/weight": return 535 - case "motion_editor/A": + case "motion_comment_section/write_group_ids": return 536 - case "motion_editor/id": + case "motion_editor/A": return 537 - case "motion_editor/meeting_id": + case "motion_editor/id": return 538 - case "motion_editor/meeting_user_id": + case "motion_editor/meeting_id": return 539 - case "motion_editor/motion_id": + case "motion_editor/meeting_user_id": return 540 - case "motion_editor/weight": + case "motion_editor/motion_id": return 541 - case "motion_state/A": + case "motion_editor/weight": return 542 - case "motion_state/allow_create_poll": + case "motion_state/A": return 543 - case "motion_state/allow_motion_forwarding": + case "motion_state/allow_create_poll": return 544 - case "motion_state/allow_submitter_edit": + case "motion_state/allow_motion_forwarding": return 545 - case "motion_state/allow_support": + case "motion_state/allow_submitter_edit": return 546 - case "motion_state/css_class": + case "motion_state/allow_support": return 547 - case "motion_state/first_state_of_workflow_id": + case "motion_state/css_class": return 548 - case "motion_state/id": + case "motion_state/first_state_of_workflow_id": return 549 - case "motion_state/is_internal": + case "motion_state/id": return 550 - case "motion_state/meeting_id": + case "motion_state/is_internal": return 551 - case "motion_state/merge_amendment_into_final": + case "motion_state/meeting_id": return 552 - case "motion_state/motion_ids": + case "motion_state/merge_amendment_into_final": return 553 - case "motion_state/motion_recommendation_ids": + case "motion_state/motion_ids": return 554 - case "motion_state/name": + case "motion_state/motion_recommendation_ids": return 555 - case "motion_state/next_state_ids": + case "motion_state/name": return 556 - case "motion_state/previous_state_ids": + case "motion_state/next_state_ids": return 557 - case "motion_state/recommendation_label": + case "motion_state/previous_state_ids": return 558 - case "motion_state/restrictions": + case "motion_state/recommendation_label": return 559 - case "motion_state/set_number": + case "motion_state/restrictions": return 560 - case "motion_state/set_workflow_timestamp": + case "motion_state/set_number": return 561 - case "motion_state/show_recommendation_extension_field": + case "motion_state/set_workflow_timestamp": return 562 - case "motion_state/show_state_extension_field": + case "motion_state/show_recommendation_extension_field": return 563 - case "motion_state/submitter_withdraw_back_ids": + case "motion_state/show_state_extension_field": return 564 - case "motion_state/submitter_withdraw_state_id": + case "motion_state/submitter_withdraw_back_ids": return 565 - case "motion_state/weight": + case "motion_state/submitter_withdraw_state_id": return 566 - case "motion_state/workflow_id": + case "motion_state/weight": return 567 - case "motion_submitter/A": + case "motion_state/workflow_id": return 568 - case "motion_submitter/id": + case "motion_submitter/A": return 569 - case "motion_submitter/meeting_id": + case "motion_submitter/id": return 570 - case "motion_submitter/meeting_user_id": + case "motion_submitter/meeting_id": return 571 - case "motion_submitter/motion_id": + case "motion_submitter/meeting_user_id": return 572 - case "motion_submitter/weight": + case "motion_submitter/motion_id": return 573 - case "motion_workflow/A": + case "motion_submitter/weight": return 574 - case "motion_workflow/default_amendment_workflow_meeting_id": + case "motion_workflow/A": return 575 - case "motion_workflow/default_workflow_meeting_id": + case "motion_workflow/default_amendment_workflow_meeting_id": return 576 - case "motion_workflow/first_state_id": + case "motion_workflow/default_workflow_meeting_id": return 577 - case "motion_workflow/id": + case "motion_workflow/first_state_id": return 578 - case "motion_workflow/meeting_id": + case "motion_workflow/id": return 579 - case "motion_workflow/name": + case "motion_workflow/meeting_id": return 580 - case "motion_workflow/sequential_number": + case "motion_workflow/name": return 581 - case "motion_workflow/state_ids": + case "motion_workflow/sequential_number": return 582 - case "motion_working_group_speaker/A": + case "motion_workflow/state_ids": return 583 - case "motion_working_group_speaker/id": + case "motion_working_group_speaker/A": return 584 - case "motion_working_group_speaker/meeting_id": + case "motion_working_group_speaker/id": return 585 - case "motion_working_group_speaker/meeting_user_id": + case "motion_working_group_speaker/meeting_id": return 586 - case "motion_working_group_speaker/motion_id": + case "motion_working_group_speaker/meeting_user_id": return 587 - case "motion_working_group_speaker/weight": + case "motion_working_group_speaker/motion_id": return 588 - case "option/A": + case "motion_working_group_speaker/weight": return 589 - case "option/B": + case "option/A": return 590 - case "option/abstain": + case "option/B": return 591 - case "option/content_object_id": + case "option/abstain": return 592 - case "option/id": + case "option/content_object_id": return 593 - case "option/meeting_id": + case "option/id": return 594 - case "option/no": + case "option/meeting_id": return 595 - case "option/poll_id": + case "option/no": return 596 - case "option/text": + case "option/poll_id": return 597 - case "option/used_as_global_option_in_poll_id": + case "option/text": return 598 - case "option/vote_ids": + case "option/used_as_global_option_in_poll_id": return 599 - case "option/weight": + case "option/vote_ids": return 600 - case "option/yes": + case "option/weight": return 601 - case "organization/A": + case "option/yes": return 602 - case "organization/B": + case "organization/A": return 603 - case "organization/C": + case "organization/B": return 604 - case "organization/D": + case "organization/C": return 605 - case "organization/E": + case "organization/D": return 606 - case "organization/active_meeting_ids": + case "organization/E": return 607 - case "organization/archived_meeting_ids": + case "organization/active_meeting_ids": return 608 - case "organization/committee_ids": + case "organization/archived_meeting_ids": return 609 - case "organization/default_language": + case "organization/committee_ids": return 610 - case "organization/description": + case "organization/default_language": return 611 - case "organization/enable_anonymous": + case "organization/description": return 612 - case "organization/enable_chat": + case "organization/enable_anonymous": return 613 - case "organization/enable_electronic_voting": + case "organization/enable_chat": return 614 - case "organization/gender_ids": + case "organization/enable_electronic_voting": return 615 - case "organization/id": + case "organization/gender_ids": return 616 - case "organization/legal_notice": + case "organization/id": return 617 - case "organization/limit_of_meetings": + case "organization/legal_notice": return 618 - case "organization/limit_of_users": + case "organization/limit_of_meetings": return 619 - case "organization/login_text": + case "organization/limit_of_users": return 620 - case "organization/mediafile_ids": + case "organization/login_text": return 621 - case "organization/name": + case "organization/mediafile_ids": return 622 - case "organization/organization_tag_ids": + case "organization/name": return 623 - case "organization/privacy_policy": + case "organization/organization_tag_ids": return 624 - case "organization/published_mediafile_ids": + case "organization/privacy_policy": return 625 - case "organization/require_duplicate_from": + case "organization/published_mediafile_ids": return 626 - case "organization/reset_password_verbose_errors": + case "organization/require_duplicate_from": return 627 - case "organization/saml_attr_mapping": + case "organization/reset_password_verbose_errors": return 628 - case "organization/saml_enabled": + case "organization/saml_attr_mapping": return 629 - case "organization/saml_login_button_text": + case "organization/saml_enabled": return 630 - case "organization/saml_metadata_idp": + case "organization/saml_login_button_text": return 631 - case "organization/saml_metadata_sp": + case "organization/saml_metadata_idp": return 632 - case "organization/saml_private_key": + case "organization/saml_metadata_sp": return 633 - case "organization/template_meeting_ids": + case "organization/saml_private_key": return 634 - case "organization/theme_id": + case "organization/template_meeting_ids": return 635 - case "organization/theme_ids": + case "organization/theme_id": return 636 - case "organization/url": + case "organization/theme_ids": return 637 - case "organization/user_ids": + case "organization/url": return 638 - case "organization/users_email_body": + case "organization/user_ids": return 639 - case "organization/users_email_replyto": + case "organization/users_email_body": return 640 - case "organization/users_email_sender": + case "organization/users_email_replyto": return 641 - case "organization/users_email_subject": + case "organization/users_email_sender": return 642 - case "organization/vote_decrypt_public_main_key": + case "organization/users_email_subject": return 643 - case "organization_tag/A": + case "organization/vote_decrypt_public_main_key": return 644 - case "organization_tag/color": + case "organization_tag/A": return 645 - case "organization_tag/id": + case "organization_tag/color": return 646 - case "organization_tag/name": + case "organization_tag/id": return 647 - case "organization_tag/organization_id": + case "organization_tag/name": return 648 - case "organization_tag/tagged_ids": + case "organization_tag/organization_id": return 649 - case "personal_note/A": + case "organization_tag/tagged_ids": return 650 - case "personal_note/content_object_id": + case "personal_note/A": return 651 - case "personal_note/id": + case "personal_note/content_object_id": return 652 - case "personal_note/meeting_id": + case "personal_note/id": return 653 - case "personal_note/meeting_user_id": + case "personal_note/meeting_id": return 654 - case "personal_note/note": + case "personal_note/meeting_user_id": return 655 - case "personal_note/star": + case "personal_note/note": return 656 - case "point_of_order_category/A": + case "personal_note/star": return 657 - case "point_of_order_category/id": + case "point_of_order_category/A": return 658 - case "point_of_order_category/meeting_id": + case "point_of_order_category/id": return 659 - case "point_of_order_category/rank": + case "point_of_order_category/meeting_id": return 660 - case "point_of_order_category/speaker_ids": + case "point_of_order_category/rank": return 661 - case "point_of_order_category/text": + case "point_of_order_category/speaker_ids": return 662 - case "poll/A": + case "point_of_order_category/text": return 663 - case "poll/B": + case "poll/A": return 664 - case "poll/C": + case "poll/B": return 665 - case "poll/D": + case "poll/C": return 666 - case "poll/backend": + case "poll/D": return 667 - case "poll/content_object_id": + case "poll/backend": return 668 - case "poll/crypt_key": + case "poll/content_object_id": return 669 - case "poll/crypt_signature": + case "poll/crypt_key": return 670 - case "poll/description": + case "poll/crypt_signature": return 671 - case "poll/entitled_group_ids": + case "poll/description": return 672 - case "poll/entitled_users_at_stop": + case "poll/entitled_group_ids": return 673 - case "poll/global_abstain": + case "poll/entitled_users_at_stop": return 674 - case "poll/global_no": + case "poll/global_abstain": return 675 - case "poll/global_option_id": + case "poll/global_no": return 676 - case "poll/global_yes": + case "poll/global_option_id": return 677 - case "poll/id": + case "poll/global_yes": return 678 - case "poll/is_pseudoanonymized": + case "poll/id": return 679 - case "poll/max_votes_amount": + case "poll/is_pseudoanonymized": return 680 - case "poll/max_votes_per_option": + case "poll/max_votes_amount": return 681 - case "poll/meeting_id": + case "poll/max_votes_per_option": return 682 - case "poll/min_votes_amount": + case "poll/meeting_id": return 683 - case "poll/onehundred_percent_base": + case "poll/min_votes_amount": return 684 - case "poll/option_ids": + case "poll/onehundred_percent_base": return 685 - case "poll/pollmethod": + case "poll/option_ids": return 686 - case "poll/projection_ids": + case "poll/pollmethod": return 687 - case "poll/sequential_number": + case "poll/projection_ids": return 688 - case "poll/state": + case "poll/sequential_number": return 689 - case "poll/title": + case "poll/state": return 690 - case "poll/type": + case "poll/title": return 691 - case "poll/vote_count": + case "poll/type": return 692 - case "poll/voted_ids": + case "poll/vote_count": return 693 - case "poll/votes_raw": + case "poll/voted_ids": return 694 - case "poll/votes_signature": + case "poll/votes_raw": return 695 - case "poll/votescast": + case "poll/votes_signature": return 696 - case "poll/votesinvalid": + case "poll/votescast": return 697 - case "poll/votesvalid": + case "poll/votesinvalid": return 698 - case "poll_candidate/A": + case "poll/votesvalid": return 699 - case "poll_candidate/id": + case "poll_candidate/A": return 700 - case "poll_candidate/meeting_id": + case "poll_candidate/id": return 701 - case "poll_candidate/poll_candidate_list_id": + case "poll_candidate/meeting_id": return 702 - case "poll_candidate/user_id": + case "poll_candidate/poll_candidate_list_id": return 703 - case "poll_candidate/weight": + case "poll_candidate/user_id": return 704 - case "poll_candidate_list/A": + case "poll_candidate/weight": return 705 - case "poll_candidate_list/id": + case "poll_candidate_list/A": return 706 - case "poll_candidate_list/meeting_id": + case "poll_candidate_list/id": return 707 - case "poll_candidate_list/option_id": + case "poll_candidate_list/meeting_id": return 708 - case "poll_candidate_list/poll_candidate_ids": + case "poll_candidate_list/option_id": return 709 - case "projection/A": + case "poll_candidate_list/poll_candidate_ids": return 710 - case "projection/content": + case "projection/A": return 711 - case "projection/content_object_id": + case "projection/content": return 712 - case "projection/current_projector_id": + case "projection/content_object_id": return 713 - case "projection/history_projector_id": + case "projection/current_projector_id": return 714 - case "projection/id": + case "projection/history_projector_id": return 715 - case "projection/meeting_id": + case "projection/id": return 716 - case "projection/options": + case "projection/meeting_id": return 717 - case "projection/preview_projector_id": + case "projection/options": return 718 - case "projection/stable": + case "projection/preview_projector_id": return 719 - case "projection/type": + case "projection/stable": return 720 - case "projection/weight": + case "projection/type": return 721 - case "projector/A": + case "projection/weight": return 722 - case "projector/aspect_ratio_denominator": + case "projector/A": return 723 - case "projector/aspect_ratio_numerator": + case "projector/aspect_ratio_denominator": return 724 - case "projector/background_color": + case "projector/aspect_ratio_numerator": return 725 - case "projector/chyron_background_color": + case "projector/background_color": return 726 - case "projector/chyron_background_color_2": + case "projector/chyron_background_color": return 727 - case "projector/chyron_font_color": + case "projector/chyron_background_color_2": return 728 - case "projector/chyron_font_color_2": + case "projector/chyron_font_color": return 729 - case "projector/color": + case "projector/chyron_font_color_2": return 730 - case "projector/current_projection_ids": + case "projector/color": return 731 - case "projector/header_background_color": + case "projector/current_projection_ids": return 732 - case "projector/header_font_color": + case "projector/header_background_color": return 733 - case "projector/header_h1_color": + case "projector/header_font_color": return 734 - case "projector/history_projection_ids": + case "projector/header_h1_color": return 735 - case "projector/id": + case "projector/history_projection_ids": return 736 - case "projector/is_internal": + case "projector/id": return 737 - case "projector/meeting_id": + case "projector/is_internal": return 738 - case "projector/name": + case "projector/meeting_id": return 739 - case "projector/preview_projection_ids": + case "projector/name": return 740 - case "projector/scale": + case "projector/preview_projection_ids": return 741 - case "projector/scroll": + case "projector/scale": return 742 - case "projector/sequential_number": + case "projector/scroll": return 743 - case "projector/show_clock": + case "projector/sequential_number": return 744 - case "projector/show_header_footer": + case "projector/show_clock": return 745 - case "projector/show_logo": + case "projector/show_header_footer": return 746 - case "projector/show_title": + case "projector/show_logo": return 747 - case "projector/used_as_default_projector_for_agenda_item_list_in_meeting_id": + case "projector/show_title": return 748 - case "projector/used_as_default_projector_for_amendment_in_meeting_id": + case "projector/used_as_default_projector_for_agenda_item_list_in_meeting_id": return 749 - case "projector/used_as_default_projector_for_assignment_in_meeting_id": + case "projector/used_as_default_projector_for_amendment_in_meeting_id": return 750 - case "projector/used_as_default_projector_for_assignment_poll_in_meeting_id": + case "projector/used_as_default_projector_for_assignment_in_meeting_id": return 751 - case "projector/used_as_default_projector_for_countdown_in_meeting_id": + case "projector/used_as_default_projector_for_assignment_poll_in_meeting_id": return 752 - case "projector/used_as_default_projector_for_current_list_of_speakers_in_meeting_id": + case "projector/used_as_default_projector_for_countdown_in_meeting_id": return 753 - case "projector/used_as_default_projector_for_list_of_speakers_in_meeting_id": + case "projector/used_as_default_projector_for_current_list_of_speakers_in_meeting_id": return 754 - case "projector/used_as_default_projector_for_mediafile_in_meeting_id": + case "projector/used_as_default_projector_for_list_of_speakers_in_meeting_id": return 755 - case "projector/used_as_default_projector_for_message_in_meeting_id": + case "projector/used_as_default_projector_for_mediafile_in_meeting_id": return 756 - case "projector/used_as_default_projector_for_motion_block_in_meeting_id": + case "projector/used_as_default_projector_for_message_in_meeting_id": return 757 - case "projector/used_as_default_projector_for_motion_in_meeting_id": + case "projector/used_as_default_projector_for_motion_block_in_meeting_id": return 758 - case "projector/used_as_default_projector_for_motion_poll_in_meeting_id": + case "projector/used_as_default_projector_for_motion_in_meeting_id": return 759 - case "projector/used_as_default_projector_for_poll_in_meeting_id": + case "projector/used_as_default_projector_for_motion_poll_in_meeting_id": return 760 - case "projector/used_as_default_projector_for_topic_in_meeting_id": + case "projector/used_as_default_projector_for_poll_in_meeting_id": return 761 - case "projector/used_as_reference_projector_meeting_id": + case "projector/used_as_default_projector_for_topic_in_meeting_id": return 762 - case "projector/width": + case "projector/used_as_reference_projector_meeting_id": return 763 - case "projector_countdown/A": + case "projector/width": return 764 - case "projector_countdown/countdown_time": + case "projector_countdown/A": return 765 - case "projector_countdown/default_time": + case "projector_countdown/countdown_time": return 766 - case "projector_countdown/description": + case "projector_countdown/default_time": return 767 - case "projector_countdown/id": + case "projector_countdown/description": return 768 - case "projector_countdown/meeting_id": + case "projector_countdown/id": return 769 - case "projector_countdown/projection_ids": + case "projector_countdown/meeting_id": return 770 - case "projector_countdown/running": + case "projector_countdown/projection_ids": return 771 - case "projector_countdown/title": + case "projector_countdown/running": return 772 - case "projector_countdown/used_as_list_of_speakers_countdown_meeting_id": + case "projector_countdown/title": return 773 - case "projector_countdown/used_as_poll_countdown_meeting_id": + case "projector_countdown/used_as_list_of_speakers_countdown_meeting_id": return 774 - case "projector_message/A": + case "projector_countdown/used_as_poll_countdown_meeting_id": return 775 - case "projector_message/id": + case "projector_message/A": return 776 - case "projector_message/meeting_id": + case "projector_message/id": return 777 - case "projector_message/message": + case "projector_message/meeting_id": return 778 - case "projector_message/projection_ids": + case "projector_message/message": return 779 - case "speaker/A": + case "projector_message/projection_ids": return 780 - case "speaker/begin_time": + case "speaker/A": return 781 - case "speaker/end_time": + case "speaker/begin_time": return 782 - case "speaker/id": + case "speaker/end_time": return 783 - case "speaker/list_of_speakers_id": + case "speaker/id": return 784 - case "speaker/meeting_id": + case "speaker/list_of_speakers_id": return 785 - case "speaker/meeting_user_id": + case "speaker/meeting_id": return 786 - case "speaker/note": + case "speaker/meeting_user_id": return 787 - case "speaker/pause_time": + case "speaker/note": return 788 - case "speaker/point_of_order": + case "speaker/pause_time": return 789 - case "speaker/point_of_order_category_id": + case "speaker/point_of_order": return 790 - case "speaker/speech_state": + case "speaker/point_of_order_category_id": return 791 - case "speaker/structure_level_list_of_speakers_id": + case "speaker/speech_state": return 792 - case "speaker/total_pause": + case "speaker/structure_level_list_of_speakers_id": return 793 - case "speaker/unpause_time": + case "speaker/total_pause": return 794 - case "speaker/weight": + case "speaker/unpause_time": return 795 - case "structure_level/A": + case "speaker/weight": return 796 - case "structure_level/color": + case "structure_level/A": return 797 - case "structure_level/default_time": + case "structure_level/color": return 798 - case "structure_level/id": + case "structure_level/default_time": return 799 - case "structure_level/meeting_id": + case "structure_level/id": return 800 - case "structure_level/meeting_user_ids": + case "structure_level/meeting_id": return 801 - case "structure_level/name": + case "structure_level/meeting_user_ids": return 802 - case "structure_level/structure_level_list_of_speakers_ids": + case "structure_level/name": return 803 - case "structure_level_list_of_speakers/A": + case "structure_level/structure_level_list_of_speakers_ids": return 804 - case "structure_level_list_of_speakers/additional_time": + case "structure_level_list_of_speakers/A": return 805 - case "structure_level_list_of_speakers/current_start_time": + case "structure_level_list_of_speakers/additional_time": return 806 - case "structure_level_list_of_speakers/id": + case "structure_level_list_of_speakers/current_start_time": return 807 - case "structure_level_list_of_speakers/initial_time": + case "structure_level_list_of_speakers/id": return 808 - case "structure_level_list_of_speakers/list_of_speakers_id": + case "structure_level_list_of_speakers/initial_time": return 809 - case "structure_level_list_of_speakers/meeting_id": + case "structure_level_list_of_speakers/list_of_speakers_id": return 810 - case "structure_level_list_of_speakers/remaining_time": + case "structure_level_list_of_speakers/meeting_id": return 811 - case "structure_level_list_of_speakers/speaker_ids": + case "structure_level_list_of_speakers/remaining_time": return 812 - case "structure_level_list_of_speakers/structure_level_id": + case "structure_level_list_of_speakers/speaker_ids": return 813 - case "tag/A": + case "structure_level_list_of_speakers/structure_level_id": return 814 - case "tag/id": + case "tag/A": return 815 - case "tag/meeting_id": + case "tag/id": return 816 - case "tag/name": + case "tag/meeting_id": return 817 - case "tag/tagged_ids": + case "tag/name": return 818 - case "theme/A": + case "tag/tagged_ids": return 819 - case "theme/abstain": + case "theme/A": return 820 - case "theme/accent_100": + case "theme/abstain": return 821 - case "theme/accent_200": + case "theme/accent_100": return 822 - case "theme/accent_300": + case "theme/accent_200": return 823 - case "theme/accent_400": + case "theme/accent_300": return 824 - case "theme/accent_50": + case "theme/accent_400": return 825 - case "theme/accent_500": + case "theme/accent_50": return 826 - case "theme/accent_600": + case "theme/accent_500": return 827 - case "theme/accent_700": + case "theme/accent_600": return 828 - case "theme/accent_800": + case "theme/accent_700": return 829 - case "theme/accent_900": + case "theme/accent_800": return 830 - case "theme/accent_a100": + case "theme/accent_900": return 831 - case "theme/accent_a200": + case "theme/accent_a100": return 832 - case "theme/accent_a400": + case "theme/accent_a200": return 833 - case "theme/accent_a700": + case "theme/accent_a400": return 834 - case "theme/headbar": + case "theme/accent_a700": return 835 - case "theme/id": + case "theme/headbar": return 836 - case "theme/name": + case "theme/id": return 837 - case "theme/no": + case "theme/name": return 838 - case "theme/organization_id": + case "theme/no": return 839 - case "theme/primary_100": + case "theme/organization_id": return 840 - case "theme/primary_200": + case "theme/primary_100": return 841 - case "theme/primary_300": + case "theme/primary_200": return 842 - case "theme/primary_400": + case "theme/primary_300": return 843 - case "theme/primary_50": + case "theme/primary_400": return 844 - case "theme/primary_500": + case "theme/primary_50": return 845 - case "theme/primary_600": + case "theme/primary_500": return 846 - case "theme/primary_700": + case "theme/primary_600": return 847 - case "theme/primary_800": + case "theme/primary_700": return 848 - case "theme/primary_900": + case "theme/primary_800": return 849 - case "theme/primary_a100": + case "theme/primary_900": return 850 - case "theme/primary_a200": + case "theme/primary_a100": return 851 - case "theme/primary_a400": + case "theme/primary_a200": return 852 - case "theme/primary_a700": + case "theme/primary_a400": return 853 - case "theme/theme_for_organization_id": + case "theme/primary_a700": return 854 - case "theme/warn_100": + case "theme/theme_for_organization_id": return 855 - case "theme/warn_200": + case "theme/warn_100": return 856 - case "theme/warn_300": + case "theme/warn_200": return 857 - case "theme/warn_400": + case "theme/warn_300": return 858 - case "theme/warn_50": + case "theme/warn_400": return 859 - case "theme/warn_500": + case "theme/warn_50": return 860 - case "theme/warn_600": + case "theme/warn_500": return 861 - case "theme/warn_700": + case "theme/warn_600": return 862 - case "theme/warn_800": + case "theme/warn_700": return 863 - case "theme/warn_900": + case "theme/warn_800": return 864 - case "theme/warn_a100": + case "theme/warn_900": return 865 - case "theme/warn_a200": + case "theme/warn_a100": return 866 - case "theme/warn_a400": + case "theme/warn_a200": return 867 - case "theme/warn_a700": + case "theme/warn_a400": return 868 - case "theme/yes": + case "theme/warn_a700": return 869 - case "topic/A": + case "theme/yes": return 870 - case "topic/agenda_item_id": + case "topic/A": return 871 - case "topic/attachment_meeting_mediafile_ids": + case "topic/agenda_item_id": return 872 - case "topic/id": + case "topic/attachment_meeting_mediafile_ids": return 873 - case "topic/list_of_speakers_id": + case "topic/id": return 874 - case "topic/meeting_id": + case "topic/list_of_speakers_id": return 875 - case "topic/poll_ids": + case "topic/meeting_id": return 876 - case "topic/projection_ids": + case "topic/poll_ids": return 877 - case "topic/sequential_number": + case "topic/projection_ids": return 878 - case "topic/text": + case "topic/sequential_number": return 879 - case "topic/title": + case "topic/text": return 880 - case "user/A": + case "topic/title": return 881 - case "user/B": + case "user/A": return 882 - case "user/D": + case "user/B": return 883 - case "user/E": + case "user/D": return 884 - case "user/F": + case "user/E": return 885 - case "user/G": + case "user/F": return 886 - case "user/H": + case "user/G": return 887 - case "user/can_change_own_password": + case "user/H": return 888 - case "user/committee_ids": + case "user/can_change_own_password": return 889 - case "user/committee_management_ids": + case "user/committee_ids": return 890 - case "user/default_password": + case "user/committee_management_ids": return 891 - case "user/default_vote_weight": + case "user/default_password": return 892 - case "user/delegated_vote_ids": + case "user/default_vote_weight": return 893 - case "user/email": + case "user/delegated_vote_ids": return 894 - case "user/first_name": + case "user/email": return 895 - case "user/forwarding_committee_ids": + case "user/first_name": return 896 - case "user/gender_id": + case "user/forwarding_committee_ids": return 897 - case "user/id": + case "user/gender_id": return 898 - case "user/is_active": + case "user/id": return 899 - case "user/is_demo_user": + case "user/is_active": return 900 - case "user/is_physical_person": + case "user/is_demo_user": return 901 - case "user/is_present_in_meeting_ids": + case "user/is_physical_person": return 902 - case "user/last_email_sent": + case "user/is_present_in_meeting_ids": return 903 - case "user/last_login": + case "user/last_email_sent": return 904 - case "user/last_name": + case "user/last_login": return 905 - case "user/meeting_ids": + case "user/last_name": return 906 - case "user/meeting_user_ids": + case "user/meeting_ids": return 907 - case "user/member_number": + case "user/meeting_user_ids": return 908 - case "user/option_ids": + case "user/member_number": return 909 - case "user/organization_id": + case "user/option_ids": return 910 - case "user/organization_management_level": + case "user/organization_id": return 911 - case "user/password": + case "user/organization_management_level": return 912 - case "user/poll_candidate_ids": + case "user/password": return 913 - case "user/poll_voted_ids": + case "user/poll_candidate_ids": return 914 - case "user/pronoun": + case "user/poll_voted_ids": return 915 - case "user/saml_id": + case "user/pronoun": return 916 - case "user/title": + case "user/saml_id": return 917 - case "user/username": + case "user/title": return 918 - case "user/vote_ids": + case "user/username": return 919 - case "vote/A": + case "user/vote_ids": return 920 - case "vote/B": + case "vote/A": return 921 - case "vote/delegated_user_id": + case "vote/B": return 922 - case "vote/id": + case "vote/delegated_user_id": return 923 - case "vote/meeting_id": + case "vote/id": return 924 - case "vote/option_id": + case "vote/meeting_id": return 925 - case "vote/user_id": + case "vote/option_id": return 926 - case "vote/user_token": + case "vote/user_id": return 927 - case "vote/value": + case "vote/user_token": return 928 - case "vote/weight": + case "vote/value": return 929 + case "vote/weight": + return 930 default: return -1 } From 83503171d0abd374ae8438ddf2560a5c87c1bc07 Mon Sep 17 00:00:00 2001 From: "openslides-automation[bot]" <125256978+openslides-automation[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 22:57:17 +0100 Subject: [PATCH 6/7] Update meta repository (#1112) Co-authored-by: ostcar <977937+ostcar@users.noreply.github.com> --- meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta b/meta index 1f14e4cd..0ea5c14a 160000 --- a/meta +++ b/meta @@ -1 +1 @@ -Subproject commit 1f14e4cdd649112d326ceb1ff53ba0af69d6f602 +Subproject commit 0ea5c14a7a3371d49244b8dd909c9395c2a7c5c6 From 66f2e4f941e33ba0b314b464c35ac63fac293204 Mon Sep 17 00:00:00 2001 From: "openslides-automation[bot]" <125256978+openslides-automation[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 10:13:03 +0100 Subject: [PATCH 7/7] Update meta repository (#1113) --- internal/restrict/field_def.go | 6 +++--- meta | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/restrict/field_def.go b/internal/restrict/field_def.go index b074a266..eab0e16e 100644 --- a/internal/restrict/field_def.go +++ b/internal/restrict/field_def.go @@ -538,11 +538,13 @@ var restrictionModes = map[string]string{ "meeting/is_archived_in_organization_id": "A", "meeting/language": "A", "meeting/location": "A", + "meeting/locked_from_inside": "A", "meeting/meeting_user_ids": "A", "meeting/motion_ids": "A", "meeting/name": "A", "meeting/start_time": "A", "meeting/tag_ids": "A", + "meeting/user_ids": "A", "meeting/agenda_enable_numbering": "B", "meeting/agenda_item_creation": "B", "meeting/agenda_item_ids": "B", @@ -629,7 +631,6 @@ var restrictionModes = map[string]string{ "meeting/list_of_speakers_show_amount_of_speakers_on_slide": "B", "meeting/list_of_speakers_show_first_contribution": "B", "meeting/list_of_speakers_speaker_note_for_everyone": "B", - "meeting/locked_from_inside": "B", "meeting/logo_pdf_ballot_paper_id": "B", "meeting/logo_pdf_footer_l_id": "B", "meeting/logo_pdf_footer_r_id": "B", @@ -722,7 +723,6 @@ var restrictionModes = map[string]string{ "meeting/template_for_organization_id": "B", "meeting/topic_ids": "B", "meeting/topic_poll_default_group_ids": "B", - "meeting/user_ids": "B", "meeting/users_allow_self_set_present": "B", "meeting/users_email_body": "B", "meeting/users_email_replyto": "B", @@ -1004,6 +1004,7 @@ var restrictionModes = map[string]string{ "organization/login_text": "A", "organization/mediafile_ids": "A", "organization/name": "A", + "organization/organization_tag_ids": "A", "organization/privacy_policy": "A", "organization/require_duplicate_from": "A", "organization/saml_enabled": "A", @@ -1020,7 +1021,6 @@ var restrictionModes = map[string]string{ "organization/archived_meeting_ids": "B", "organization/committee_ids": "B", "organization/enable_electronic_voting": "B", - "organization/organization_tag_ids": "B", "organization/reset_password_verbose_errors": "B", "organization/limit_of_meetings": "C", "organization/limit_of_users": "C", diff --git a/meta b/meta index 0ea5c14a..5f29880d 160000 --- a/meta +++ b/meta @@ -1 +1 @@ -Subproject commit 0ea5c14a7a3371d49244b8dd909c9395c2a7c5c6 +Subproject commit 5f29880d49d0e9d5eb6729d9410bd1fd61f2b696