snapshot of https://github.com/ory/kratos.git (master, 2026-09-15; blobs > 131072B omitted)
Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
This commit is contained in:
48
test/e2e/profiles/code/.kratos.yml
Normal file
48
test/e2e/profiles/code/.kratos.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 5m
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
code:
|
||||
hooks:
|
||||
- hook: show_verification_ui
|
||||
- hook: session
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
after:
|
||||
code:
|
||||
hooks:
|
||||
- hook: require_verified_address
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
enabled: true
|
||||
use: code
|
||||
ui_url: http://localhost:4455/verification
|
||||
recovery:
|
||||
enabled: true
|
||||
use: code
|
||||
ui_url: http://localhost:4455/recovery
|
||||
methods:
|
||||
password:
|
||||
enabled: true
|
||||
code:
|
||||
passwordless_enabled: true
|
||||
enabled: true
|
||||
config:
|
||||
lifespan: 1h
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/code/identity.traits.schema.json
|
||||
31
test/e2e/profiles/code/identity.code.only.traits.schema.json
Normal file
31
test/e2e/profiles/code/identity.code.only.traits.schema.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"code": {
|
||||
"identifier": true,
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["email"]
|
||||
}
|
||||
}
|
||||
}
|
||||
77
test/e2e/profiles/code/identity.complex.traits.schema.json
Normal file
77
test/e2e/profiles/code/identity.complex.traits.schema.json
Normal file
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"username": {
|
||||
"type": "string",
|
||||
"title": "Your Username",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
},
|
||||
"code": {
|
||||
"identifier": true,
|
||||
"via": "email"
|
||||
}
|
||||
},
|
||||
"verification": {
|
||||
"via": "email"
|
||||
},
|
||||
"recovery": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
},
|
||||
"email2": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your Second E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"code": {
|
||||
"identifier": true,
|
||||
"via": "email"
|
||||
}
|
||||
},
|
||||
"verification": {
|
||||
"via": "email"
|
||||
},
|
||||
"recovery": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
42
test/e2e/profiles/code/identity.traits.schema.json
Normal file
42
test/e2e/profiles/code/identity.traits.schema.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"code": {
|
||||
"identifier": true,
|
||||
"via": "email"
|
||||
}
|
||||
},
|
||||
"verification": {
|
||||
"via": "email"
|
||||
},
|
||||
"recovery": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tos": {
|
||||
"type": "boolean",
|
||||
"title": "Accept Terms of Service",
|
||||
"description": "In order to sign up, you have to accept our terms of service."
|
||||
}
|
||||
},
|
||||
"required": ["email", "tos"]
|
||||
}
|
||||
}
|
||||
}
|
||||
31
test/e2e/profiles/email/.kratos.yml
Normal file
31
test/e2e/profiles/email/.kratos.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 5m
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
- hook: session
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verification
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/email/identity.traits.schema.json
|
||||
67
test/e2e/profiles/email/identity.traits.schema.json
Normal file
67
test/e2e/profiles/email/identity.traits.schema.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"code": {
|
||||
"identifier": true,
|
||||
"via": "email"
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
}
|
||||
},
|
||||
"verification": {
|
||||
"via": "email"
|
||||
},
|
||||
"recovery": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"title": "Your website",
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
},
|
||||
"tos": {
|
||||
"title": "Accept Terms of Service",
|
||||
"type": "boolean"
|
||||
},
|
||||
"age": {
|
||||
"title": "Age",
|
||||
"type": "number",
|
||||
"maximum": 300
|
||||
},
|
||||
"consent": {
|
||||
"title": "Consent",
|
||||
"type": "boolean"
|
||||
},
|
||||
"newsletter": {
|
||||
"title": "Newsletter",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email",
|
||||
"website"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
59
test/e2e/profiles/kratos.base.yml
Normal file
59
test/e2e/profiles/kratos.base.yml
Normal file
@@ -0,0 +1,59 @@
|
||||
log:
|
||||
level: trace
|
||||
leak_sensitive_values: true
|
||||
|
||||
secrets:
|
||||
cookie:
|
||||
- PLEASE-CHANGE-ME-I-AM-VERY-INSECURE
|
||||
|
||||
selfservice:
|
||||
default_browser_return_url: http://localhost:4455/
|
||||
allowed_return_urls:
|
||||
- http://localhost:4455
|
||||
- http://localhost:19006/Callback
|
||||
- exp://example.com/Callback
|
||||
- https://www.ory.sh/
|
||||
- https://example.org/
|
||||
- https://www.example.org/
|
||||
methods:
|
||||
link:
|
||||
config:
|
||||
lifespan: 1h
|
||||
code:
|
||||
config:
|
||||
lifespan: 1h
|
||||
|
||||
serve:
|
||||
public:
|
||||
base_url: http://localhost:4455/
|
||||
cors:
|
||||
enabled: true
|
||||
allowed_origins:
|
||||
- http://localhost:3000
|
||||
- http://localhost:19006
|
||||
allowed_headers:
|
||||
- Authorization
|
||||
- Content-Type
|
||||
- X-Session-Token
|
||||
admin:
|
||||
base_url: http://kratos:4434/
|
||||
|
||||
hashers:
|
||||
algorithm: argon2
|
||||
argon2:
|
||||
memory: 1KB
|
||||
iterations: 1
|
||||
parallelism: 1
|
||||
|
||||
courier:
|
||||
smtp:
|
||||
connection_uri: smtps://test:test@localhost:1025/?skip_ssl_verify=true
|
||||
|
||||
session:
|
||||
whoami:
|
||||
required_aal: aal1
|
||||
|
||||
feature_flags:
|
||||
legacy_continue_with_verification_ui: true
|
||||
legacy_require_verified_login_error: true
|
||||
legacy_oidc_registration_node_group: true
|
||||
53
test/e2e/profiles/mfa-optional/.kratos.yml
Normal file
53
test/e2e/profiles/mfa-optional/.kratos.yml
Normal file
@@ -0,0 +1,53 @@
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 5m
|
||||
required_aal: highest_available
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
- hook: session
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verify
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
methods:
|
||||
code:
|
||||
mfa_enabled: true
|
||||
totp:
|
||||
enabled: true
|
||||
config:
|
||||
issuer: issuer.ory.sh
|
||||
lookup_secret:
|
||||
enabled: true
|
||||
webauthn:
|
||||
enabled: true
|
||||
config:
|
||||
rp:
|
||||
id: localhost
|
||||
origin: http://localhost:4455
|
||||
display_name: Ory
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/mfa-optional/identity.traits.schema.json
|
||||
|
||||
session:
|
||||
whoami:
|
||||
required_aal: highest_available
|
||||
45
test/e2e/profiles/mfa-optional/identity.traits.schema.json
Normal file
45
test/e2e/profiles/mfa-optional/identity.traits.schema.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"optionalMfaEmail": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail for MFA (Optional)",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"code": {
|
||||
"identifier": true,
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["email"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
53
test/e2e/profiles/mfa/.kratos.yml
Normal file
53
test/e2e/profiles/mfa/.kratos.yml
Normal file
@@ -0,0 +1,53 @@
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 5m
|
||||
required_aal: aal1
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
- hook: session
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verify
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
methods:
|
||||
code:
|
||||
mfa_enabled: true
|
||||
totp:
|
||||
enabled: true
|
||||
config:
|
||||
issuer: issuer.ory.sh
|
||||
lookup_secret:
|
||||
enabled: true
|
||||
webauthn:
|
||||
enabled: true
|
||||
config:
|
||||
rp:
|
||||
id: localhost
|
||||
origin: http://localhost:4455
|
||||
display_name: Ory
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/mfa/identity.traits.schema.json
|
||||
|
||||
session:
|
||||
whoami:
|
||||
required_aal: aal1
|
||||
44
test/e2e/profiles/mfa/identity.traits.schema.json
Normal file
44
test/e2e/profiles/mfa/identity.traits.schema.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
},
|
||||
"code": {
|
||||
"identifier": true,
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"title": "Your website",
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email",
|
||||
"website"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
80
test/e2e/profiles/mobile/.kratos.yml
Normal file
80
test/e2e/profiles/mobile/.kratos.yml
Normal file
@@ -0,0 +1,80 @@
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
privileged_session_max_age: 5m
|
||||
required_aal: aal1
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
- hook: session
|
||||
oidc:
|
||||
hooks:
|
||||
- hook: session
|
||||
recovery:
|
||||
enabled: true
|
||||
|
||||
verification:
|
||||
enabled: false
|
||||
methods:
|
||||
totp:
|
||||
enabled: true
|
||||
config:
|
||||
issuer: issuer.ory.sh
|
||||
lookup_secret:
|
||||
enabled: true
|
||||
webauthn:
|
||||
enabled: true
|
||||
config:
|
||||
rp:
|
||||
id: localhost
|
||||
origin: http://localhost:4455
|
||||
display_name: Ory
|
||||
oidc:
|
||||
enabled: true
|
||||
config:
|
||||
providers:
|
||||
- id: hydra
|
||||
label: Ory
|
||||
provider: generic
|
||||
client_id: ${OIDC_HYDRA_CLIENT_ID}
|
||||
client_secret: ${OIDC_HYDRA_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
- id: google
|
||||
provider: generic
|
||||
client_id: ${OIDC_GOOGLE_CLIENT_ID}
|
||||
client_secret: ${OIDC_GOOGLE_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
- id: github
|
||||
provider: generic
|
||||
client_id: ${OIDC_GITHUB_CLIENT_ID}
|
||||
client_secret: ${OIDC_GITHUB_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/email/identity.traits.schema.json
|
||||
|
||||
secrets:
|
||||
cipher:
|
||||
- secret-thirty-two-character-long
|
||||
|
||||
session:
|
||||
whoami:
|
||||
required_aal: aal1
|
||||
48
test/e2e/profiles/mobile/identity.traits.schema.json
Normal file
48
test/e2e/profiles/mobile/identity.traits.schema.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
},
|
||||
"tos": {
|
||||
"title": "Accept Terms of Service",
|
||||
"type": "boolean"
|
||||
},
|
||||
"age": {
|
||||
"title": "Age",
|
||||
"type": "number",
|
||||
"maximum": 300
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email",
|
||||
"website"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
52
test/e2e/profiles/network/.kratos.yml
Normal file
52
test/e2e/profiles/network/.kratos.yml
Normal file
@@ -0,0 +1,52 @@
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 5m
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
hooks:
|
||||
- hook: web_hook
|
||||
config:
|
||||
method: GET
|
||||
url: https://www.google.com/login/hook
|
||||
body: http://192.168.178.3:4455/body
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
before:
|
||||
hooks:
|
||||
- hook: web_hook
|
||||
config:
|
||||
method: GET
|
||||
url: http://192.168.178.2:4455/login/hook
|
||||
body: file://test/e2e/profiles/network/webhook.jsonnet
|
||||
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verification
|
||||
enabled: true
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
identity:
|
||||
default_schema_id: localhost
|
||||
schemas:
|
||||
- id: localhost
|
||||
url: http://localhost/
|
||||
- id: ref
|
||||
url: file://test/e2e/profiles/network/identity.traits.schema.json
|
||||
- id: working
|
||||
url: file://test/e2e/profiles/email/identity.traits.schema.json
|
||||
|
||||
clients:
|
||||
http:
|
||||
disallow_private_ip_ranges: true
|
||||
60
test/e2e/profiles/network/identity.traits.schema.json
Normal file
60
test/e2e/profiles/network/identity.traits.schema.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
}
|
||||
},
|
||||
"verification": {
|
||||
"via": "email"
|
||||
},
|
||||
"recovery": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"$ref": "http://192.168.178.1/"
|
||||
},
|
||||
"tos": {
|
||||
"title": "Accept Terms of Service",
|
||||
"type": "boolean"
|
||||
},
|
||||
"age": {
|
||||
"title": "Age",
|
||||
"type": "number",
|
||||
"maximum": 300
|
||||
},
|
||||
"consent": {
|
||||
"title": "Consent",
|
||||
"type": "boolean"
|
||||
},
|
||||
"newsletter": {
|
||||
"title": "Newsletter",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email",
|
||||
"website"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
1
test/e2e/profiles/network/webhook.jsonnet
Normal file
1
test/e2e/profiles/network/webhook.jsonnet
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
54
test/e2e/profiles/oidc-provider-mfa/.kratos.yml
Normal file
54
test/e2e/profiles/oidc-provider-mfa/.kratos.yml
Normal file
@@ -0,0 +1,54 @@
|
||||
clients:
|
||||
http:
|
||||
disallow_private_ip_ranges: false
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 5m
|
||||
required_aal: highest_available
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
- hook: session
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verify
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
methods:
|
||||
totp:
|
||||
enabled: true
|
||||
config:
|
||||
issuer: issuer.ory.sh
|
||||
webauthn:
|
||||
enabled: true
|
||||
config:
|
||||
rp:
|
||||
id: localhost
|
||||
origin: http://localhost:4455
|
||||
display_name: Ory
|
||||
|
||||
oauth2_provider:
|
||||
url: "http://localhost:4745"
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/oidc-provider-mfa/identity.traits.schema.json
|
||||
|
||||
session:
|
||||
whoami:
|
||||
required_aal: highest_available
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"title": "Website",
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
},
|
||||
"tos": {
|
||||
"title": "Accept Terms of Service",
|
||||
"type": "boolean"
|
||||
},
|
||||
"age": {
|
||||
"title": "Age",
|
||||
"type": "number",
|
||||
"maximum": 300
|
||||
},
|
||||
"consent": {
|
||||
"title": "Consent",
|
||||
"type": "boolean"
|
||||
},
|
||||
"newsletter": {
|
||||
"title": "Newsletter",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email",
|
||||
"website"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
61
test/e2e/profiles/oidc-provider/.kratos.yml
Normal file
61
test/e2e/profiles/oidc-provider/.kratos.yml
Normal file
@@ -0,0 +1,61 @@
|
||||
clients:
|
||||
http:
|
||||
disallow_private_ip_ranges: false
|
||||
oauth2_provider:
|
||||
url: "http://localhost:4745"
|
||||
selfservice:
|
||||
methods:
|
||||
password:
|
||||
enabled: true
|
||||
code:
|
||||
enabled: true
|
||||
oidc:
|
||||
enabled: true
|
||||
config:
|
||||
providers:
|
||||
- id: google
|
||||
provider: generic
|
||||
client_id: ${OIDC_GOOGLE_CLIENT_ID}
|
||||
client_secret: ${OIDC_GOOGLE_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc-provider/hydra.jsonnet
|
||||
flows:
|
||||
settings:
|
||||
privileged_session_max_age: 5m
|
||||
ui_url: http://localhost:4455/settings
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
oidc:
|
||||
hooks:
|
||||
- hook: session
|
||||
password:
|
||||
hooks:
|
||||
- hook: session
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verify
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
enabled: true
|
||||
lifespan: 5m
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/oidc-provider/identity.traits.schema.json
|
||||
|
||||
secrets:
|
||||
cipher:
|
||||
- secret-thirty-two-character-long
|
||||
13
test/e2e/profiles/oidc-provider/hydra.jsonnet
Normal file
13
test/e2e/profiles/oidc-provider/hydra.jsonnet
Normal file
@@ -0,0 +1,13 @@
|
||||
local claims = std.extVar('claims');
|
||||
|
||||
if std.length(claims.sub) == 0 then
|
||||
error 'claim sub not set'
|
||||
else
|
||||
{
|
||||
identity: {
|
||||
traits: {
|
||||
email: claims.sub,
|
||||
[if "website" in claims then "website" else null]: claims.website
|
||||
},
|
||||
},
|
||||
}
|
||||
60
test/e2e/profiles/oidc-provider/identity.traits.schema.json
Normal file
60
test/e2e/profiles/oidc-provider/identity.traits.schema.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
}
|
||||
},
|
||||
"recovery": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"title": "Website",
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
},
|
||||
"tos": {
|
||||
"title": "Accept Terms of Service",
|
||||
"type": "boolean"
|
||||
},
|
||||
"age": {
|
||||
"title": "Age",
|
||||
"type": "number",
|
||||
"maximum": 300
|
||||
},
|
||||
"consent": {
|
||||
"title": "Consent",
|
||||
"type": "boolean"
|
||||
},
|
||||
"newsletter": {
|
||||
"title": "Newsletter",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email",
|
||||
"website"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
72
test/e2e/profiles/oidc/.kratos.yml
Normal file
72
test/e2e/profiles/oidc/.kratos.yml
Normal file
@@ -0,0 +1,72 @@
|
||||
selfservice:
|
||||
methods:
|
||||
oidc:
|
||||
enabled: true
|
||||
config:
|
||||
providers:
|
||||
- id: hydra
|
||||
label: Ory
|
||||
provider: generic
|
||||
client_id: ${OIDC_HYDRA_CLIENT_ID}
|
||||
client_secret: ${OIDC_HYDRA_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
- id: google
|
||||
provider: generic
|
||||
client_id: ${OIDC_GOOGLE_CLIENT_ID}
|
||||
client_secret: ${OIDC_GOOGLE_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
- id: github
|
||||
provider: generic
|
||||
client_id: ${OIDC_GITHUB_CLIENT_ID}
|
||||
client_secret: ${OIDC_GITHUB_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
|
||||
flows:
|
||||
settings:
|
||||
privileged_session_max_age: 5m
|
||||
ui_url: http://localhost:4455/settings
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
- hook: session
|
||||
oidc:
|
||||
hooks:
|
||||
- hook: session
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verify
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/oidc/identity.traits.schema.json
|
||||
|
||||
secrets:
|
||||
cipher:
|
||||
- secret-thirty-two-character-long
|
||||
|
||||
session:
|
||||
whoami:
|
||||
required_aal: aal1
|
||||
13
test/e2e/profiles/oidc/hydra.jsonnet
Normal file
13
test/e2e/profiles/oidc/hydra.jsonnet
Normal file
@@ -0,0 +1,13 @@
|
||||
local claims = std.extVar('claims');
|
||||
|
||||
if std.length(claims.sub) == 0 then
|
||||
error 'claim sub not set'
|
||||
else
|
||||
{
|
||||
identity: {
|
||||
traits: {
|
||||
email: claims.sub,
|
||||
[if "website" in claims then "website" else null]: claims.website
|
||||
},
|
||||
},
|
||||
}
|
||||
80
test/e2e/profiles/oidc/identity-required.traits.schema.json
Normal file
80
test/e2e/profiles/oidc/identity-required.traits.schema.json
Normal file
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
},
|
||||
"code": {
|
||||
"identifier": true,
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"title": "Website",
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
},
|
||||
"consent": {
|
||||
"title": "Consent",
|
||||
"type": "boolean"
|
||||
},
|
||||
"newsletter": {
|
||||
"title": "Newsletter",
|
||||
"type": "boolean"
|
||||
},
|
||||
"nested": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"b": {
|
||||
"title": " optional B",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirednested": {
|
||||
"title": "required nested",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"a": {
|
||||
"title": "Required A",
|
||||
"const": true
|
||||
},
|
||||
"b": {
|
||||
"title": "Required optional B",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"a"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email",
|
||||
"website",
|
||||
"requirednested",
|
||||
"consent"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
52
test/e2e/profiles/oidc/identity.traits.schema.json
Normal file
52
test/e2e/profiles/oidc/identity.traits.schema.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
},
|
||||
"code": {
|
||||
"identifier": true,
|
||||
"via": "email"
|
||||
}
|
||||
},
|
||||
"verification": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"title": "Website",
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
},
|
||||
"consent": {
|
||||
"title": "Consent",
|
||||
"type": "boolean"
|
||||
},
|
||||
"newsletter": {
|
||||
"title": "Newsletter",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": ["email", "website"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
56
test/e2e/profiles/passkey/.kratos.yml
Normal file
56
test/e2e/profiles/passkey/.kratos.yml
Normal file
@@ -0,0 +1,56 @@
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 5m
|
||||
required_aal: highest_available
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
- hook: session
|
||||
passkey:
|
||||
hooks:
|
||||
- hook: session
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verify
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
methods:
|
||||
totp:
|
||||
enabled: true
|
||||
config:
|
||||
issuer: issuer.ory.sh
|
||||
lookup_secret:
|
||||
enabled: true
|
||||
passkey:
|
||||
enabled: true
|
||||
config:
|
||||
rp:
|
||||
id: localhost
|
||||
origins:
|
||||
- http://localhost:4455
|
||||
- http://localhost:19006
|
||||
display_name: Ory
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/passkey/identity.traits.schema.json
|
||||
|
||||
session:
|
||||
whoami:
|
||||
required_aal: highest_available
|
||||
40
test/e2e/profiles/passkey/identity.traits.schema.json
Normal file
40
test/e2e/profiles/passkey/identity.traits.schema.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
},
|
||||
"passkey": {
|
||||
"display_name": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"title": "Your website",
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
}
|
||||
},
|
||||
"required": ["email"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
68
test/e2e/profiles/passwordless/.kratos.yml
Normal file
68
test/e2e/profiles/passwordless/.kratos.yml
Normal file
@@ -0,0 +1,68 @@
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 5m
|
||||
required_aal: aal1
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
- hook: session
|
||||
webauthn:
|
||||
hooks:
|
||||
- hook: session
|
||||
passkey:
|
||||
hooks:
|
||||
- hook: session
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verify
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
methods:
|
||||
totp:
|
||||
enabled: true
|
||||
config:
|
||||
issuer: issuer.ory.sh
|
||||
lookup_secret:
|
||||
enabled: true
|
||||
webauthn:
|
||||
enabled: true
|
||||
config:
|
||||
passwordless: true
|
||||
rp:
|
||||
id: localhost
|
||||
origin: http://localhost:4455
|
||||
display_name: Ory
|
||||
passkey:
|
||||
enabled: true
|
||||
config:
|
||||
rp:
|
||||
display_name: Your Application name
|
||||
# Set 'id' to the top-level domain.
|
||||
id: localhost
|
||||
# Set 'origin' to the exact URL of the page that prompts the user to use WebAuthn. You must include the scheme, host, and port.
|
||||
origins:
|
||||
- http://localhost:4455
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/passwordless/identity.traits.schema.json
|
||||
|
||||
session:
|
||||
whoami:
|
||||
required_aal: aal1
|
||||
40
test/e2e/profiles/passwordless/identity.traits.schema.json
Normal file
40
test/e2e/profiles/passwordless/identity.traits.schema.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
},
|
||||
"passkey": {
|
||||
"display_name": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"title": "Your website",
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
}
|
||||
},
|
||||
"required": ["email", "website"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
47
test/e2e/profiles/recovery-mfa/.kratos.yml
Normal file
47
test/e2e/profiles/recovery-mfa/.kratos.yml
Normal file
@@ -0,0 +1,47 @@
|
||||
selfservice:
|
||||
methods:
|
||||
password:
|
||||
enabled: true
|
||||
link:
|
||||
enabled: true
|
||||
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 1m
|
||||
required_aal: highest_available
|
||||
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
enabled: true
|
||||
lifespan: 5m
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
registration:
|
||||
ui_url: http://localhost:4455/registration
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verify
|
||||
|
||||
methods:
|
||||
totp:
|
||||
enabled: true
|
||||
config:
|
||||
issuer: issuer.ory.sh
|
||||
lookup_secret:
|
||||
enabled: true
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/recovery/identity.traits.schema.json
|
||||
|
||||
secrets:
|
||||
cipher:
|
||||
- secret-thirty-two-character-long
|
||||
36
test/e2e/profiles/recovery-mfa/identity.traits.schema.json
Normal file
36
test/e2e/profiles/recovery-mfa/identity.traits.schema.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
}
|
||||
},
|
||||
"recovery": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
38
test/e2e/profiles/recovery/.kratos.yml
Normal file
38
test/e2e/profiles/recovery/.kratos.yml
Normal file
@@ -0,0 +1,38 @@
|
||||
selfservice:
|
||||
methods:
|
||||
password:
|
||||
enabled: true
|
||||
link:
|
||||
enabled: true
|
||||
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 1m
|
||||
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
enabled: true
|
||||
lifespan: 5m
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
registration:
|
||||
ui_url: http://localhost:4455/registration
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verify
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/recovery/identity.traits.schema.json
|
||||
|
||||
secrets:
|
||||
cipher:
|
||||
- secret-thirty-two-character-long
|
||||
36
test/e2e/profiles/recovery/identity.traits.schema.json
Normal file
36
test/e2e/profiles/recovery/identity.traits.schema.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
}
|
||||
},
|
||||
"recovery": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
91
test/e2e/profiles/spa/.kratos.yml
Normal file
91
test/e2e/profiles/spa/.kratos.yml
Normal file
@@ -0,0 +1,91 @@
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
privileged_session_max_age: 5m
|
||||
ui_url: http://localhost:4455/settings
|
||||
required_aal: aal1
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
-
|
||||
hook: session
|
||||
oidc:
|
||||
hooks:
|
||||
-
|
||||
hook: session
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
enabled: true
|
||||
lifespan: 5m
|
||||
ui_url: http://localhost:4455/verify
|
||||
recovery:
|
||||
enabled: true
|
||||
lifespan: 5m
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
methods:
|
||||
oidc:
|
||||
enabled: true
|
||||
config:
|
||||
providers:
|
||||
-
|
||||
id: hydra
|
||||
label: Ory
|
||||
provider: generic
|
||||
client_id: ${OIDC_HYDRA_CLIENT_ID}
|
||||
client_secret: ${OIDC_HYDRA_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
-
|
||||
id: google
|
||||
provider: generic
|
||||
client_id: ${OIDC_GOOGLE_CLIENT_ID}
|
||||
client_secret: ${OIDC_GOOGLE_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
-
|
||||
id: github
|
||||
provider: generic
|
||||
client_id: ${OIDC_GITHUB_CLIENT_ID}
|
||||
client_secret: ${OIDC_GITHUB_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
totp:
|
||||
enabled: true
|
||||
config:
|
||||
issuer: issuer.ory.sh
|
||||
lookup_secret:
|
||||
enabled: true
|
||||
webauthn:
|
||||
enabled: true
|
||||
config:
|
||||
rp:
|
||||
id: localhost
|
||||
origin: http://localhost:4455
|
||||
display_name: Ory
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/spa/identity.traits.schema.json
|
||||
|
||||
session:
|
||||
whoami:
|
||||
required_aal: aal1
|
||||
66
test/e2e/profiles/spa/identity.traits.schema.json
Normal file
66
test/e2e/profiles/spa/identity.traits.schema.json
Normal file
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
},
|
||||
"totp": {
|
||||
"account_name": true
|
||||
}
|
||||
},
|
||||
"verification": {
|
||||
"via": "email"
|
||||
},
|
||||
"recovery": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"title": "Your website",
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
},
|
||||
"tos": {
|
||||
"title": "Accept Terms of Service",
|
||||
"type": "boolean"
|
||||
},
|
||||
"age": {
|
||||
"title": "Age",
|
||||
"type": "number",
|
||||
"maximum": 300
|
||||
},
|
||||
"consent": {
|
||||
"title": "Consent",
|
||||
"type": "boolean"
|
||||
},
|
||||
"newsletter": {
|
||||
"title": "Newsletter",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email",
|
||||
"website"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
109
test/e2e/profiles/two-steps/.kratos.yml
Normal file
109
test/e2e/profiles/two-steps/.kratos.yml
Normal file
@@ -0,0 +1,109 @@
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 5m
|
||||
required_aal: aal1
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: false
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
- hook: session
|
||||
webauthn:
|
||||
hooks:
|
||||
- hook: session
|
||||
code:
|
||||
hooks:
|
||||
- hook: session
|
||||
oidc:
|
||||
hooks:
|
||||
- hook: session
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verify
|
||||
recovery:
|
||||
enabled: true
|
||||
use: code
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
methods:
|
||||
password:
|
||||
enabled: true
|
||||
|
||||
webauthn:
|
||||
enabled: true
|
||||
config:
|
||||
passwordless: true
|
||||
rp:
|
||||
display_name: Your Application name
|
||||
# Set 'id' to the top-level domain.
|
||||
id: localhost
|
||||
# Set 'origin' to the exact URL of the page that prompts the user to use WebAuthn. You must include the scheme, host, and port.
|
||||
origin: http://localhost:4455
|
||||
|
||||
totp:
|
||||
config:
|
||||
issuer: Kratos
|
||||
enabled: true
|
||||
|
||||
lookup_secret:
|
||||
enabled: true
|
||||
|
||||
link:
|
||||
enabled: true
|
||||
|
||||
code:
|
||||
enabled: true
|
||||
passwordless_enabled: true
|
||||
config:
|
||||
lifespan: 1h
|
||||
|
||||
oidc:
|
||||
enabled: true
|
||||
config:
|
||||
providers:
|
||||
- id: hydra
|
||||
label: Ory
|
||||
provider: generic
|
||||
client_id: ${OIDC_HYDRA_CLIENT_ID}
|
||||
client_secret: ${OIDC_HYDRA_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
- id: google
|
||||
provider: generic
|
||||
client_id: ${OIDC_GOOGLE_CLIENT_ID}
|
||||
client_secret: ${OIDC_GOOGLE_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
- id: github
|
||||
provider: generic
|
||||
client_id: ${OIDC_GITHUB_CLIENT_ID}
|
||||
client_secret: ${OIDC_GITHUB_CLIENT_SECRET}
|
||||
issuer_url: http://localhost:4444/
|
||||
scope:
|
||||
- offline
|
||||
mapper_url: file://test/e2e/profiles/oidc/hydra.jsonnet
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/two-steps/identity.traits.schema.json
|
||||
|
||||
session:
|
||||
whoami:
|
||||
required_aal: aal1
|
||||
41
test/e2e/profiles/two-steps/identity.traits.schema.json
Normal file
41
test/e2e/profiles/two-steps/identity.traits.schema.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"code": {
|
||||
"identifier": true,
|
||||
"via": "email"
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"title": "Your website",
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
}
|
||||
},
|
||||
"required": ["email", "website"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
43
test/e2e/profiles/verification/.kratos.yml
Normal file
43
test/e2e/profiles/verification/.kratos.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
selfservice:
|
||||
methods:
|
||||
password:
|
||||
enabled: true
|
||||
link:
|
||||
enabled: true
|
||||
code:
|
||||
enabled: true
|
||||
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 1m
|
||||
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verification
|
||||
enabled: true
|
||||
lifespan: 5m
|
||||
use: code
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
registration:
|
||||
ui_url: http://localhost:4455/registration
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/verification/identity.traits.schema.json
|
||||
|
||||
secrets:
|
||||
cipher:
|
||||
- secret-thirty-two-character-long
|
||||
36
test/e2e/profiles/verification/identity.traits.schema.json
Normal file
36
test/e2e/profiles/verification/identity.traits.schema.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
},
|
||||
"webauthn": {
|
||||
"identifier": true
|
||||
}
|
||||
},
|
||||
"verification": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
58
test/e2e/profiles/webhooks/.kratos.yml
Normal file
58
test/e2e/profiles/webhooks/.kratos.yml
Normal file
@@ -0,0 +1,58 @@
|
||||
selfservice:
|
||||
flows:
|
||||
settings:
|
||||
ui_url: http://localhost:4455/settings
|
||||
privileged_session_max_age: 5m
|
||||
|
||||
logout:
|
||||
after:
|
||||
default_browser_return_url: http://localhost:4455/login
|
||||
|
||||
registration:
|
||||
enable_legacy_one_step: true
|
||||
ui_url: http://localhost:4455/registration
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
- hook: session
|
||||
- hook: web_hook
|
||||
config:
|
||||
url: http://127.0.0.1:4459/webhook
|
||||
method: POST
|
||||
body: file://test/e2e/profiles/webhooks/webhook_body.jsonnet
|
||||
can_interrupt: true
|
||||
auth:
|
||||
type: api_key
|
||||
config:
|
||||
name: X-Authorize-Request
|
||||
value: "1"
|
||||
in: header
|
||||
|
||||
login:
|
||||
ui_url: http://localhost:4455/login
|
||||
after:
|
||||
password:
|
||||
hooks:
|
||||
- hook: web_hook
|
||||
config:
|
||||
url: http://127.0.0.1:4459/webhook
|
||||
method: POST
|
||||
body: file://test/e2e/profiles/webhooks/webhook_body.jsonnet
|
||||
can_interrupt: true
|
||||
auth:
|
||||
type: api_key
|
||||
config:
|
||||
name: X-Authorize-Request
|
||||
value: "1"
|
||||
in: header
|
||||
error:
|
||||
ui_url: http://localhost:4455/error
|
||||
verification:
|
||||
ui_url: http://localhost:4455/verify
|
||||
recovery:
|
||||
ui_url: http://localhost:4455/recovery
|
||||
|
||||
identity:
|
||||
schemas:
|
||||
- id: default
|
||||
url: file://test/e2e/profiles/webhooks/identity.traits.schema.json
|
||||
42
test/e2e/profiles/webhooks/identity.traits.schema.json
Normal file
42
test/e2e/profiles/webhooks/identity.traits.schema.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"traits": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"format": "email",
|
||||
"title": "Your E-Mail",
|
||||
"minLength": 3,
|
||||
"ory.sh/kratos": {
|
||||
"credentials": {
|
||||
"password": {
|
||||
"identifier": true
|
||||
}
|
||||
},
|
||||
"verification": {
|
||||
"via": "email"
|
||||
},
|
||||
"recovery": {
|
||||
"via": "email"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"website": {
|
||||
"title": "Your website",
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"minLength": 10
|
||||
},
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
8
test/e2e/profiles/webhooks/webhook_body.jsonnet
Normal file
8
test/e2e/profiles/webhooks/webhook_body.jsonnet
Normal file
@@ -0,0 +1,8 @@
|
||||
function(ctx) {
|
||||
identity_id: if std.objectHas(ctx, "identity") then ctx.identity.id else null,
|
||||
email: if std.objectHas(ctx, "identity") then ctx.identity.traits.email else null,
|
||||
flow_id: ctx.flow.id,
|
||||
flow_type: ctx.flow.type,
|
||||
identity: if std.objectHas(ctx, "identity") then ctx.identity else null,
|
||||
ctx: ctx
|
||||
}
|
||||
Reference in New Issue
Block a user