Skip to content

Commit f0116ff

Browse files
authored
WPB-15551 Domain Registration Team Feature (wireapp#4429)
1 parent bc8fb05 commit f0116ff

File tree

25 files changed

+226
-73
lines changed

25 files changed

+226
-73
lines changed

cassandra-schema.cql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1153,6 +1153,8 @@ CREATE TABLE galley_test.team_features (
11531153
conference_calling_one_to_one int,
11541154
conference_calling_status int,
11551155
digital_signatures int,
1156+
domain_registration_lock_status int,
1157+
domain_registration_status int,
11561158
enforce_file_download_location text,
11571159
enforce_file_download_location_lock_status int,
11581160
enforce_file_download_location_status int,

changelog.d/2-features/WPB-15551

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Team feature config for domain registration

charts/galley/templates/configmap.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,5 +162,9 @@ data:
162162
limitedEventFanout:
163163
{{- toYaml .settings.featureFlags.limitedEventFanout | nindent 10 }}
164164
{{- end }}
165+
{{- if .settings.featureFlags.domainRegistration }}
166+
domainRegistration:
167+
{{- toYaml .settings.featureFlags.domainRegistration | nindent 10 }}
168+
{{- end }}
165169
{{- end }}
166170
{{- end }}

charts/galley/values.yaml

Lines changed: 73 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ resources:
1717
memory: "500Mi"
1818
# This is not supported for production use, only here for testing:
1919
# preStop:
20-
# exec:
20+
# exec:
2121
# command: ["sh", "-c", "curl http://acme.example"]
2222
config:
2323
logLevel: Info
@@ -26,13 +26,13 @@ config:
2626
cassandra:
2727
host: aws-cassandra
2828
replicaCount: 3
29-
# To enable TLS provide a CA:
30-
# tlsCa: <CA in PEM format (can be self-signed)>
31-
#
32-
# Or refer to an existing secret (containing the CA):
33-
# tlsCaSecretRef:
34-
# name: <secret-name>
35-
# key: <ca-attribute>
29+
# To enable TLS provide a CA:
30+
# tlsCa: <CA in PEM format (can be self-signed)>
31+
#
32+
# Or refer to an existing secret (containing the CA):
33+
# tlsCaSecretRef:
34+
# name: <secret-name>
35+
# key: <ca-attribute>
3636
enableFederation: false # keep in sync with background-worker, brig and cargohold charts' config.enableFederation as well as wire-server chart's tags.federation
3737
# Not used if enableFederation is false
3838
rabbitmq:
@@ -66,7 +66,7 @@ config:
6666
multiIngress: null
6767
# Disable one ore more API versions. Please make sure the configuration value is the same in all these charts:
6868
# brig, cannon, cargohold, galley, gundeck, proxy, spar.
69-
disabledAPIVersions: [ development ]
69+
disabledAPIVersions: [development]
7070
# The lifetime of a conversation guest link in seconds. Must be a value 0 < x <= 31536000 (365 days)
7171
# Default is 31536000 (365 days) if not set
7272
guestLinkTTLSeconds: 31536000
@@ -80,7 +80,7 @@ config:
8080
# To disable proteus for new federated conversations:
8181
# federationProtocols: ["mls"]
8282

83-
featureFlags: # see #RefConfigOptions in `/docs/reference` (https://github.com/wireapp/wire-server/)
83+
featureFlags: # see #RefConfigOptions in `/docs/reference` (https://github.com/wireapp/wire-server/)
8484
appLock:
8585
defaults:
8686
config:
@@ -160,6 +160,10 @@ config:
160160
limitedEventFanout:
161161
defaults:
162162
status: disabled
163+
domainRegistration:
164+
defaults:
165+
status: disabled
166+
lockStatus: locked
163167

164168
aws:
165169
region: "eu-west-1"
@@ -183,7 +187,8 @@ podSecurityContext:
183187
seccompProfile:
184188
type: RuntimeDefault
185189
tests:
186-
config: {}
190+
config:
191+
{}
187192
# uploadXml:
188193
# baseUrl: s3://bucket/path/
189194

@@ -193,62 +198,62 @@ tests:
193198

194199
# These "secrets" are only used in tests and are therefore safe to be stored unencrypted
195200
providerPrivateKey: |
196-
-----BEGIN RSA PRIVATE KEY-----
197-
MIIEpAIBAAKCAQEAu+Kg/PHHU3atXrUbKnw0G06FliXcNt3lMwl2os5twEDcPPFw
198-
/feGiAKymxp+7JqZDrseS5D9THGrW+OQRIPHWvUBdiLfGrZqJO223DB6D8K2Su/o
199-
dmnjZJ2z23rhXoEArTplu+Dg9K+c2LVeXTKVVPOaOzgtAB21XKRiQ4ermqgi3/nj
200-
r03rXyq/qNkuNd6tNcg+HAfGxfGvvCSYBfiSbUKr/BeArYRcjzr/h5m1In6fG/if
201-
9GEI6m8dxHT9JbY53wiksowy6ajCuqskIFg87X883H+LA/d6X5CTiPv1VMxXdBUi
202-
GPuC9IT/6CNQ1/LFt0P37ax58+LGYlaFo7lanQIDAQABAoIBAQC0doVy7zgpLsBv
203-
Sz0AnbPe1pjxEwRlntRbJSfSULySALqJvs5s4adSVGUBHX3z/LousAP1SRpCppuU
204-
8wrLBFgjQVlaAzyQB84EEl+lNtrG8Jrvd2es9R/4sJDkqy50+yuPN5wnzWPFIjhg
205-
3jP5CHDu29y0LMzsY5yjkzDe9B0bueXEZVU+guRjhpwHHKOFeAr9J9bugFUwgeAr
206-
jF0TztzFAb0fsUNPiQAho1J5PyjSVgItaPfAPv/p30ROG+rz+Rd5NSSvBC5F+yOo
207-
azb84zzwCg/knAfIz7SOMRrmBh2qhGZFZ8gXdq65UaYv+cpT/qo28mpAT2vOkyeD
208-
aPZp0ysBAoGBAOQROoDipe/5BTHBcXYuUE1qa4RIj3wgql5I8igXr4K6ppYBmaOg
209-
DL2rrnqD86chv0P4l/XOomKFwYhVGXtqRkeYnk6mQXwNVkgqcGbY5PSNyMg5+ekq
210-
jSOOPHGzzTWKzYuUDUpB/Lf6jbTv8fq2GYW3ZYiqQ/xiugOvglZrTE7NAoGBANLl
211-
irjByfxAWGhzCrDx0x5MBpsetadI9wUA8u1BDdymsRg73FDn3z7NipVUAMDXMGVj
212-
lqbCRlHESO2yP4GaPEA4FM+MbTZSuhAYV+SY07mEPLHF64/nJas83Zp91r5rhaqJ
213-
L9rWCl3KJ5OUnr3YizCnHIW72FxjwtpjxHJLupsRAoGAGIbhy8qUHeKh9F/hW9xP
214-
NoQjW+6Rv7+jktA1eqpRbbW1BJzXcQldVWiJMxPNuEOg1iZ98SlvvTi1P3wnaWZc
215-
eIapP7wRfs3QYaJuxCC/Pq2g0ieqALFazGAXkALOJtvujvw1Ea9XBlIjuzmyxEuh
216-
Iwg+Gxx0g0f6yTquwax4YGECgYEAnpAK3qKFNO1ECzQDo8oNy0ep59MNDPtlDhQK
217-
katJus5xdCD9oq7TQKrVOTTxZAvmzTQ1PqfuqueDVYOhD9Zg2n/P1cRlEGTek99Z
218-
pfvppB/yak6+r3FA9yBKFS/r1zuMQg3nNweav62QV/tz5pT7AdeDMGFtaPlwtTYx
219-
qyWY5aECgYBPySbPccNj+xxQzxcti2y/UXjC04RgOA/Hm1D0exa0vBqS9uxlOdG8
220-
F47rKenpBrslvdfTVsCDB1xyP2ebWVzp6EqMycw6OLPxgo3fBfZ4pi6P+rByh0Cc
221-
Lhfh+ET0CPnKCxtop3lUrn4ZvqchS0j3J+M0pDuqoWF5hfKxFhkEIw==
222-
-----END RSA PRIVATE KEY-----
201+
-----BEGIN RSA PRIVATE KEY-----
202+
MIIEpAIBAAKCAQEAu+Kg/PHHU3atXrUbKnw0G06FliXcNt3lMwl2os5twEDcPPFw
203+
/feGiAKymxp+7JqZDrseS5D9THGrW+OQRIPHWvUBdiLfGrZqJO223DB6D8K2Su/o
204+
dmnjZJ2z23rhXoEArTplu+Dg9K+c2LVeXTKVVPOaOzgtAB21XKRiQ4ermqgi3/nj
205+
r03rXyq/qNkuNd6tNcg+HAfGxfGvvCSYBfiSbUKr/BeArYRcjzr/h5m1In6fG/if
206+
9GEI6m8dxHT9JbY53wiksowy6ajCuqskIFg87X883H+LA/d6X5CTiPv1VMxXdBUi
207+
GPuC9IT/6CNQ1/LFt0P37ax58+LGYlaFo7lanQIDAQABAoIBAQC0doVy7zgpLsBv
208+
Sz0AnbPe1pjxEwRlntRbJSfSULySALqJvs5s4adSVGUBHX3z/LousAP1SRpCppuU
209+
8wrLBFgjQVlaAzyQB84EEl+lNtrG8Jrvd2es9R/4sJDkqy50+yuPN5wnzWPFIjhg
210+
3jP5CHDu29y0LMzsY5yjkzDe9B0bueXEZVU+guRjhpwHHKOFeAr9J9bugFUwgeAr
211+
jF0TztzFAb0fsUNPiQAho1J5PyjSVgItaPfAPv/p30ROG+rz+Rd5NSSvBC5F+yOo
212+
azb84zzwCg/knAfIz7SOMRrmBh2qhGZFZ8gXdq65UaYv+cpT/qo28mpAT2vOkyeD
213+
aPZp0ysBAoGBAOQROoDipe/5BTHBcXYuUE1qa4RIj3wgql5I8igXr4K6ppYBmaOg
214+
DL2rrnqD86chv0P4l/XOomKFwYhVGXtqRkeYnk6mQXwNVkgqcGbY5PSNyMg5+ekq
215+
jSOOPHGzzTWKzYuUDUpB/Lf6jbTv8fq2GYW3ZYiqQ/xiugOvglZrTE7NAoGBANLl
216+
irjByfxAWGhzCrDx0x5MBpsetadI9wUA8u1BDdymsRg73FDn3z7NipVUAMDXMGVj
217+
lqbCRlHESO2yP4GaPEA4FM+MbTZSuhAYV+SY07mEPLHF64/nJas83Zp91r5rhaqJ
218+
L9rWCl3KJ5OUnr3YizCnHIW72FxjwtpjxHJLupsRAoGAGIbhy8qUHeKh9F/hW9xP
219+
NoQjW+6Rv7+jktA1eqpRbbW1BJzXcQldVWiJMxPNuEOg1iZ98SlvvTi1P3wnaWZc
220+
eIapP7wRfs3QYaJuxCC/Pq2g0ieqALFazGAXkALOJtvujvw1Ea9XBlIjuzmyxEuh
221+
Iwg+Gxx0g0f6yTquwax4YGECgYEAnpAK3qKFNO1ECzQDo8oNy0ep59MNDPtlDhQK
222+
katJus5xdCD9oq7TQKrVOTTxZAvmzTQ1PqfuqueDVYOhD9Zg2n/P1cRlEGTek99Z
223+
pfvppB/yak6+r3FA9yBKFS/r1zuMQg3nNweav62QV/tz5pT7AdeDMGFtaPlwtTYx
224+
qyWY5aECgYBPySbPccNj+xxQzxcti2y/UXjC04RgOA/Hm1D0exa0vBqS9uxlOdG8
225+
F47rKenpBrslvdfTVsCDB1xyP2ebWVzp6EqMycw6OLPxgo3fBfZ4pi6P+rByh0Cc
226+
Lhfh+ET0CPnKCxtop3lUrn4ZvqchS0j3J+M0pDuqoWF5hfKxFhkEIw==
227+
-----END RSA PRIVATE KEY-----
223228
providerPublicKey: |
224-
-----BEGIN PUBLIC KEY-----
225-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu+Kg/PHHU3atXrUbKnw0
226-
G06FliXcNt3lMwl2os5twEDcPPFw/feGiAKymxp+7JqZDrseS5D9THGrW+OQRIPH
227-
WvUBdiLfGrZqJO223DB6D8K2Su/odmnjZJ2z23rhXoEArTplu+Dg9K+c2LVeXTKV
228-
VPOaOzgtAB21XKRiQ4ermqgi3/njr03rXyq/qNkuNd6tNcg+HAfGxfGvvCSYBfiS
229-
bUKr/BeArYRcjzr/h5m1In6fG/if9GEI6m8dxHT9JbY53wiksowy6ajCuqskIFg8
230-
7X883H+LA/d6X5CTiPv1VMxXdBUiGPuC9IT/6CNQ1/LFt0P37ax58+LGYlaFo7la
231-
nQIDAQAB
232-
-----END PUBLIC KEY-----
229+
-----BEGIN PUBLIC KEY-----
230+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu+Kg/PHHU3atXrUbKnw0
231+
G06FliXcNt3lMwl2os5twEDcPPFw/feGiAKymxp+7JqZDrseS5D9THGrW+OQRIPH
232+
WvUBdiLfGrZqJO223DB6D8K2Su/odmnjZJ2z23rhXoEArTplu+Dg9K+c2LVeXTKV
233+
VPOaOzgtAB21XKRiQ4ermqgi3/njr03rXyq/qNkuNd6tNcg+HAfGxfGvvCSYBfiS
234+
bUKr/BeArYRcjzr/h5m1In6fG/if9GEI6m8dxHT9JbY53wiksowy6ajCuqskIFg8
235+
7X883H+LA/d6X5CTiPv1VMxXdBUiGPuC9IT/6CNQ1/LFt0P37ax58+LGYlaFo7la
236+
nQIDAQAB
237+
-----END PUBLIC KEY-----
233238
providerPublicCert: |
234-
-----BEGIN CERTIFICATE-----
235-
MIIDdjCCAl4CCQCm0AiwERR/qjANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJE
236-
RTEPMA0GA1UECAwGQmVybGluMQ8wDQYDVQQHDAZCZXJsaW4xGDAWBgNVBAoMD1dp
237-
cmUgU3dpc3MgR21iSDERMA8GA1UEAwwId2lyZS5jb20xHzAdBgkqhkiG9w0BCQEW
238-
EGJhY2tlbmRAd2lyZS5jb20wHhcNMTYwODA0MTMxNDQyWhcNMzYwNzMwMTMxNDQy
239-
WjB9MQswCQYDVQQGEwJERTEPMA0GA1UECAwGQmVybGluMQ8wDQYDVQQHDAZCZXJs
240-
aW4xGDAWBgNVBAoMD1dpcmUgU3dpc3MgR21iSDERMA8GA1UEAwwId2lyZS5jb20x
241-
HzAdBgkqhkiG9w0BCQEWEGJhY2tlbmRAd2lyZS5jb20wggEiMA0GCSqGSIb3DQEB
242-
AQUAA4IBDwAwggEKAoIBAQC74qD88cdTdq1etRsqfDQbToWWJdw23eUzCXaizm3A
243-
QNw88XD994aIArKbGn7smpkOux5LkP1Mcatb45BEg8da9QF2It8atmok7bbcMHoP
244-
wrZK7+h2aeNknbPbeuFegQCtOmW74OD0r5zYtV5dMpVU85o7OC0AHbVcpGJDh6ua
245-
qCLf+eOvTetfKr+o2S413q01yD4cB8bF8a+8JJgF+JJtQqv8F4CthFyPOv+HmbUi
246-
fp8b+J/0YQjqbx3EdP0ltjnfCKSyjDLpqMK6qyQgWDztfzzcf4sD93pfkJOI+/VU
247-
zFd0FSIY+4L0hP/oI1DX8sW3Q/ftrHnz4sZiVoWjuVqdAgMBAAEwDQYJKoZIhvcN
248-
AQELBQADggEBAEuwlHElIGR56KVC1dJiw238mDGjMfQzSP76Wi4zWS6/zZwJUuog
249-
BkC+vacfju8UAMvL+vdqkjOVUHor84/2wuq0qn91AjOITD7tRAZB+XLXxsikKv/v
250-
OXE3A/lCiNi882NegPyXAfFPp/71CIiTQZps1eQkAvhD5t5WiFYPESxDlvEJrHFY
251-
XP4+pp8fL8YPS7iZNIq+z+P8yVIw+B/Hs0ht7wFIYN0xACbU8m9+Rs08JMoT16c+
252-
hZMuK3BWD3fzkQVfW0yMwz6fWRXB483ZmekGkgndOTDoJQMdJXZxHpI3t2FcxQYj
253-
T45GXxRd18neXtuYa/OoAw9UQFDN5XfXN0g=
254-
-----END CERTIFICATE-----
239+
-----BEGIN CERTIFICATE-----
240+
MIIDdjCCAl4CCQCm0AiwERR/qjANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJE
241+
RTEPMA0GA1UECAwGQmVybGluMQ8wDQYDVQQHDAZCZXJsaW4xGDAWBgNVBAoMD1dp
242+
cmUgU3dpc3MgR21iSDERMA8GA1UEAwwId2lyZS5jb20xHzAdBgkqhkiG9w0BCQEW
243+
EGJhY2tlbmRAd2lyZS5jb20wHhcNMTYwODA0MTMxNDQyWhcNMzYwNzMwMTMxNDQy
244+
WjB9MQswCQYDVQQGEwJERTEPMA0GA1UECAwGQmVybGluMQ8wDQYDVQQHDAZCZXJs
245+
aW4xGDAWBgNVBAoMD1dpcmUgU3dpc3MgR21iSDERMA8GA1UEAwwId2lyZS5jb20x
246+
HzAdBgkqhkiG9w0BCQEWEGJhY2tlbmRAd2lyZS5jb20wggEiMA0GCSqGSIb3DQEB
247+
AQUAA4IBDwAwggEKAoIBAQC74qD88cdTdq1etRsqfDQbToWWJdw23eUzCXaizm3A
248+
QNw88XD994aIArKbGn7smpkOux5LkP1Mcatb45BEg8da9QF2It8atmok7bbcMHoP
249+
wrZK7+h2aeNknbPbeuFegQCtOmW74OD0r5zYtV5dMpVU85o7OC0AHbVcpGJDh6ua
250+
qCLf+eOvTetfKr+o2S413q01yD4cB8bF8a+8JJgF+JJtQqv8F4CthFyPOv+HmbUi
251+
fp8b+J/0YQjqbx3EdP0ltjnfCKSyjDLpqMK6qyQgWDztfzzcf4sD93pfkJOI+/VU
252+
zFd0FSIY+4L0hP/oI1DX8sW3Q/ftrHnz4sZiVoWjuVqdAgMBAAEwDQYJKoZIhvcN
253+
AQELBQADggEBAEuwlHElIGR56KVC1dJiw238mDGjMfQzSP76Wi4zWS6/zZwJUuog
254+
BkC+vacfju8UAMvL+vdqkjOVUHor84/2wuq0qn91AjOITD7tRAZB+XLXxsikKv/v
255+
OXE3A/lCiNi882NegPyXAfFPp/71CIiTQZps1eQkAvhD5t5WiFYPESxDlvEJrHFY
256+
XP4+pp8fL8YPS7iZNIq+z+P8yVIw+B/Hs0ht7wFIYN0xACbU8m9+Rs08JMoT16c+
257+
hZMuK3BWD3fzkQVfW0yMwz6fWRXB483ZmekGkgndOTDoJQMdJXZxHpI3t2FcxQYj
258+
T45GXxRd18neXtuYa/OoAw9UQFDN5XfXN0g=
259+
-----END CERTIFICATE-----

docs/src/developer/reference/config-options.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,18 @@ limitedEventFanout:
518518
status: disabled
519519
```
520520

521+
### Domain Registration
522+
523+
This feature flag is per default disabled and locked. It can be set by `ibis` via the internal API and it is not meant to be configured via team management.
524+
525+
```yaml
526+
# galley.yaml
527+
domainRegistration:
528+
defaults:
529+
status: disabled
530+
lockStatus: locked
531+
```
532+
521533
## Settings in brig
522534

523535
Some features (as of the time of writing this: only

hack/helm_vars/wire-server/values.yaml.gotmpl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,10 @@ galley:
327327
limitedEventFanout:
328328
defaults:
329329
status: disabled
330+
domainRegistration:
331+
defaults:
332+
status: disabled
333+
lockStatus: locked
330334
journal:
331335
endpoint: http://fake-aws-sqs:4568
332336
queueName: integration-team-events.fifo

integration/integration.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ library
132132
Test.FeatureFlags.ClassifiedDomains
133133
Test.FeatureFlags.ConferenceCalling
134134
Test.FeatureFlags.DigitalSignatures
135+
Test.FeatureFlags.DomainRegistration
135136
Test.FeatureFlags.EnforceFileDownloadLocation
136137
Test.FeatureFlags.FileSharing
137138
Test.FeatureFlags.GuestLinks
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
module Test.FeatureFlags.DomainRegistration where
2+
3+
import qualified API.GalleyInternal as Internal
4+
import SetupHelpers
5+
import Test.FeatureFlags.Util
6+
import Testlib.Prelude
7+
8+
testPatchDomainRegistration :: (HasCallStack) => App ()
9+
testPatchDomainRegistration = checkPatch OwnDomain "domainRegistration" enabled
10+
11+
testDomainRegistrationInternal :: (HasCallStack) => App ()
12+
testDomainRegistrationInternal = do
13+
(alice, tid, _) <- createTeam OwnDomain 0
14+
Internal.setTeamFeatureLockStatus alice tid "domainRegistration" "unlocked"
15+
withWebSocket alice $ \ws -> do
16+
setFlag InternalAPI ws tid "domainRegistration" enabled
17+
setFlag InternalAPI ws tid "domainRegistration" disabled

integration/test/Test/FeatureFlags/Util.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ defAllFeatures =
135135
[ "enforcedDownloadLocation" .= "downloads"
136136
]
137137
],
138-
"limitedEventFanout" .= disabled
138+
"limitedEventFanout" .= disabled,
139+
"domainRegistration" .= disabledLocked
139140
]
140141

141142
hasExplicitLockStatus :: String -> Bool
@@ -146,6 +147,7 @@ hasExplicitLockStatus "guestLinks" = True
146147
hasExplicitLockStatus "sndFactorPasswordChallenge" = True
147148
hasExplicitLockStatus "outlookCalIntegration" = True
148149
hasExplicitLockStatus "enforceFileDownloadLocation" = True
150+
hasExplicitLockStatus "domainRegistration" = True
149151
hasExplicitLockStatus _ = False
150152

151153
checkFeature :: (HasCallStack, MakesValue user, MakesValue tid) => String -> user -> tid -> Value -> App ()

libs/galley-types/src/Galley/Types/Teams.hs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,13 @@ newtype instance FeatureDefaults LimitedEventFanoutConfig
266266
deriving (FromJSON) via Defaults (Feature LimitedEventFanoutConfig)
267267
deriving (ParseFeatureDefaults) via OptionalField LimitedEventFanoutConfig
268268

269+
newtype instance FeatureDefaults DomainRegistrationConfig
270+
= DomainRegistrationConfigDefaults (LockableFeature DomainRegistrationConfig)
271+
deriving stock (Eq, Show)
272+
deriving newtype (Default, GetFeatureDefaults)
273+
deriving (FromJSON) via Defaults (LockableFeature DomainRegistrationConfig)
274+
deriving (ParseFeatureDefaults) via OptionalField DomainRegistrationConfig
275+
269276
featureKey :: forall cfg. (IsFeatureConfig cfg) => Key.Key
270277
featureKey = Key.fromText $ featureName @cfg
271278

0 commit comments

Comments
 (0)