Livio Spring
991a56341b
fix: role claims mapping ( #5601 )
...
* fix: role claims mapping
* update oidc pkg
* update oidc pkg
2023-04-04 12:36:39 +00:00
Silvan
e688954308
feat: role claims for service user tokens ( #5577 )
...
tokens of service users can now contain role claims by requesting them through scopes
2023-04-03 14:26:51 +02:00
Tim Möhlmann
25c3c17986
chore: upgrade to oidc v2 release ( #5437 )
...
* chore: upgrade to oidc v2 release
* fix tests
* fix build errors after rebase
* pin oidc v2.1.0
* pin oidc v2.1.1 (include bugfix)
* pin oidc v2.1.2 (include bugfix)
* pin oidc v2.2.1 (bugfix)
include fix zitadel/oidc#349
* fix: refresh token handling
* simplify cognitive complexity
* fix: handle error
---------
Co-authored-by: Livio Spring <livio.a@gmail.com>
2023-03-28 11:28:56 +00:00
Livio Spring
4ca50e0802
fix: check for empty applicationID on assertRoles ( #5509 )
...
* fix: check for empty applicationID on assertRoles
* remove unintended added file
2023-03-21 08:59:44 +01:00
Elio Bischof
e00cc187fa
fix: make user creation errors helpful ( #5382 )
...
* fix: make user creation errors helpful
* fix linting and unit testing errors
* fix linting
* make zitadel config reusable
* fix human validations
* translate ssr errors
* make zitadel config reusable
* cover more translations for ssr
* handle email validation message centrally
* fix unit tests
* fix linting
* align signatures
* use more precise wording
* handle phone validation message centrally
* fix: return specific profile errors
* docs: edit comments
* fix unit tests
---------
Co-authored-by: Silvan <silvan.reusser@gmail.com>
2023-03-14 19:20:38 +00:00
Silvan
eb4f7c5d7c
fix(auth): update user grants before check ( #5406 )
2023-03-13 08:03:49 +01:00
Silvan
20e4f1ce57
feat(actions): add fields to complement token flow ( #5336 )
...
* deprecated `ctx.v1.userinfo`-field in "pre userinfo creation" trigger in favour of `ctx.v1.claims`. The trigger now behaves the same as "pre access token creation"
* added `ctx.v1.claims` to "complement tokens" flow
* added `ctx.v1.grants` to "complement tokens" flow
* document `ctx.v1.getUser()` in "complement tokens" flow
* feat(actions): add getUser() and grant
* map user grants
* map claims
* feat(actions): claims in complement token ctx
* docs(actions): add new fields of complement token
* docs(actions): additions to complement token
* docs(actions): correct field names
2023-03-08 15:26:28 +01:00
Silvan
e38abdcdf3
perf: query data AS OF SYSTEM TIME
( #5231 )
...
Queries the data in the storage layser at the timestamp when the call hit the API layer
2023-02-27 22:36:43 +01:00
Elio Bischof
681541f41b
feat: add quotas ( #4779 )
...
adds possibilities to cap authenticated requests and execution seconds of actions on a defined intervall
2023-02-15 02:52:11 +01:00
Livio Spring
8ef13d77e7
fix(actions): check for nil pointer on set claims in access_token ( #5172 )
2023-02-09 06:27:39 +00:00
Stefan Benz
3616b6b028
feat(api): allow specifying access_token type (opaque/JWT) for service users ( #5150 )
...
Add functionality to configure the access token type on the service accounts to provide the oidc library with the necessary information to create the right type of access token.
2023-02-08 08:06:34 +00:00
Stefan Benz
e2fdd3f077
feat: support client_credentials for service users ( #5134 )
...
Request an access_token for service users with OAuth 2.0 Client Credentials Grant. Added functionality to generate and remove a secret on service users.
2023-01-31 19:52:47 +00:00
Silvan
f3e6f3b23b
feat: remove org ( #4148 )
...
* feat(command): remove org
* refactor: imports, unused code, error handling
* reduce org removed in action
* add org deletion to projections
* add org removal to projections
* add org removal to projections
* org removed projection
* lint import
* projections
* fix: table names in tests
* fix: table names in tests
* logging
* add org state
* fix(domain): add Owner removed to object details
* feat(ListQuery): add with owner removed
* fix(org-delete): add bool to functions to select with owner removed
* fix(org-delete): add bools to user grants with events to determine if dependencies lost owner
* fix(org-delete): add unit tests for owner removed and org removed events
* fix(org-delete): add handling of org remove for grants and members
* fix(org-delete): correction of unit tests for owner removed
* fix(org-delete): update projections, unit tests and get functions
* fix(org-delete): add change date to authnkeys and owner removed to org metadata
* fix(org-delete): include owner removed for login names
* fix(org-delete): some column fixes in projections and build for queries with owner removed
* indexes
* fix(org-delete): include review changes
* fix(org-delete): change user projection name after merge
* fix(org-delete): include review changes for project grant where no project owner is necessary
* fix(org-delete): include auth and adminapi tables with owner removed information
* fix(org-delete): cleanup username and orgdomain uniqueconstraints when org is removed
* fix(org-delete): add permissions for org.remove
* remove unnecessary unique constraints
* fix column order in primary keys
* fix(org-delete): include review changes
* fix(org-delete): add owner removed indexes and chang setup step to create tables
* fix(org-delete): move PK order of instance_id and change added user_grant from review
* fix(org-delete): no params for prepareUserQuery
* change to step 6
* merge main
* fix(org-delete): OldUserName rename to private
* fix linting
* cleanup
* fix: remove org test
* create prerelease
* chore: delete org-delete as prerelease
Co-authored-by: Stefan Benz <stefan@caos.ch>
Co-authored-by: Livio Spring <livio.a@gmail.com>
Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com>
Co-authored-by: Stefan Benz <46600784+stebenz@users.noreply.github.com>
2022-11-30 17:01:17 +01:00
Stefan Benz
c2a5b785fb
feat: instance remove ( #4345 )
...
* feat(instance): add remove instance event with projections cleanup
* fix(instance): corrected used id to clean up projections
* fix merge
* fix: correct unit test projection names
* fix: current sequence of lists and query for ensuring keypair based projections
Co-authored-by: Livio Spring <livio.a@gmail.com>
Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com>
2022-10-20 14:36:52 +02:00
Silvan
43fb3fd1a6
feat(actions): add token customization flow and extend functionally with modules ( #4337 )
...
* fix: potential memory leak
* feat(actions): possibility to parse json
feat(actions): possibility to perform http calls
* add query call
* feat(api): list flow and trigger types
fix(api): switch flow and trigger types to dynamic objects
* fix(translations): add action translations
* use `domain.FlowType`
* localizers
* localization
* trigger types
* options on `query.Action`
* add functions for actions
* feat: management api: add list flow and trigger (#4352 )
* console changes
* cleanup
* fix: wrong localization
Co-authored-by: Max Peintner <max@caos.ch>
* id token works
* check if claims not nil
* feat(actions): metadata api
* refactor(actions): modules
* fix: allow prerelease
* fix: test
* feat(actions): deny list for http hosts
* feat(actions): deny list for http hosts
* refactor: actions
* fix: different error ids
* fix: rename statusCode to status
* Actions objects as options (#4418 )
* fix: rename statusCode to status
* fix(actions): objects as options
* fix(actions): objects as options
* fix(actions): set fields
* add http client to old actions
* fix(actions): add log module
* fix(actions): add user to context where possible
* fix(actions): add user to ctx in external authorization/pre creation
* fix(actions): query correct flow in claims
* test: actions
* fix(id-generator): panic if no machine id
* tests
* maybe this?
* fix linting
* refactor: improve code
* fix: metadata and usergrant usage in actions
* fix: appendUserGrant
* fix: allowedToFail and timeout in action execution
* fix: allowed to fail in token complement flow
* docs: add action log claim
* Update defaults.yaml
* fix log claim
* remove prerelease build
Co-authored-by: Max Peintner <max@caos.ch>
Co-authored-by: Livio Spring <livio.a@gmail.com>
2022-10-06 14:23:59 +02:00
Livio Spring
bffb10a4b4
feat: allow domain discovery for unknown usernames ( #4484 )
...
* fix: wait for projection initialization to be done
* feat: allow domain discovery for unknown usernames
* fix linting
* Update console/src/assets/i18n/de.json
Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com>
* Update console/src/assets/i18n/en.json
Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com>
* Update console/src/assets/i18n/it.json
Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com>
* Update console/src/assets/i18n/fr.json
Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com>
* fix zh i18n text
* fix projection table name
Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com>
2022-10-06 13:30:14 +02:00
Stefan Benz
2957407b5b
fix: correct oidcsettings management ( #4413 )
...
* fix(oidcsettings): corrected projection, unittests and added the add endpoint
* fix(oidcsettings): corrected default handling and instance setup
* fix: set oidc settings correctly in console
* cleanup
* e2e test
* improve e2e test
* lint e2e
Co-authored-by: Livio Spring <livio.a@gmail.com>
Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com>
2022-09-27 12:53:49 +02:00
Livio Spring
7dfa1925cc
feat: restrict login to specific org by id (scope) ( #4294 )
...
* feat: add new org scope
* change default of UserLoginMustBeDomain to false
* return resource owner claims
* fix: use email style for first user
* fix: ensure email style for default users (backwards compatibility)
* change to external domain (as it was before UserLoginMustBeDomain change)
* update e2e tests to use email style usernames
* document new scope
* lint e2e
Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com>
2022-09-23 12:08:10 +00:00
Silvan
84b20bc4e1
fix(auth): always get token by id and user id ( #4371 )
...
Co-authored-by: Florian Forster <florian@zitadel.com>
2022-09-15 12:59:40 +00:00
Silvan
b9795b5c57
fix(amr): add pwd because password is wrong ( #4284 )
...
* fix(amr): add pwd because password is wrong
* docs: deprecation notice
* docs: nicer wording
* Update docs/docs/apis/openidoauth/claims.md
Co-authored-by: Livio Spring <livio.a@gmail.com>
Co-authored-by: Livio Spring <livio.a@gmail.com>
2022-08-31 08:16:31 +00:00
Livio Spring
dcac08b1d5
fix: caching of assets (correct headers and versioned avatar and variables.css url) ( #4118 )
...
* fix: caching of assets (correct headers and versioned avatar url)
* serve variables.css versioned and extend shared max age of assets
* fix TestCommandSide_AddHumanAvatar
* refactor: const types
* refactor: return values
Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com>
Co-authored-by: adlerhurst <silvan.reusser@gmail.com>
2022-08-16 05:04:36 +00:00
Livio Spring
c15577c1f9
fix: use default redirect uri when not passed on end_session endpoint ( #4054 )
...
* fix: use default redirect uri when not passed on end_session endpoint
* instance state
2022-07-27 09:49:16 +02:00
Livio Spring
ccde49b323
feat: extend claims of introspection response ( #4018 )
...
* feat: extend claims of introspection response
* update oidc lib
2022-07-25 09:38:15 +02:00
Silvan
dd2f31683c
fix(query): realtime data on defined requests ( #3726 )
...
* feat: directly specify factors on addCustomLoginPolicy and return on LoginPolicy responses
* fix proto
* update login policy
* feat: directly specify idp on addCustomLoginPolicy and return on LoginPolicy responses
* fix: tests
* fix(projection): trigger bulk
* refactor: clean projection pkg
* instance should bulk
* fix(query): should trigger bulk on id calls
* tests
* build prerelease
* fix: add shouldTriggerBulk
* fix: test
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
Co-authored-by: Max Peintner <max@caos.ch>
2022-06-14 07:51:00 +02:00
Livio Spring
a377f2816c
feat: return instance domains on list instances, fix: login policy and avatar url in oidc responses ( #3785 )
...
* feat: return instance domains on list instances
* fix: filter login policy idps correctly
* remove debug
* fix: absolute avatar url in oidc responses
2022-06-08 13:46:24 +02:00
Livio Spring
5e4b38d69b
fix: improve oidc issuer / endpoints ( #3753 )
...
* fix: improve oidc issuer / endpoints
* docs: update endpoints
2022-06-07 10:04:51 +02:00
Livio Amstutz
3a63fb765a
fix: cleanup some todos ( #3642 )
...
* cleanup todo
* fix: some todos
2022-05-16 16:35:49 +02:00
Livio Amstutz
06a1b52adf
fix: improve interceptor handling ( #3578 )
...
* fix: improve interceptor handling
* fix: improve interceptor handling
Co-authored-by: Florian Forster <florian@caos.ch>
2022-05-02 15:26:54 +00:00
Florian Forster
fa9f581d56
chore(v2): move to new org ( #3499 )
...
* chore: move to new org
* logging
* fix: org rename caos -> zitadel
Co-authored-by: adlerhurst <silvan.reusser@gmail.com>
2022-04-26 23:01:45 +00:00
Livio Amstutz
75ec73ca4a
feat: dynamic issuer ( #3481 )
...
* feat: dynamic issuer
* dynamic domain handling
* key rotation durations
* feat: dynamic issuer
* make webauthn displayname dynamic
2022-04-25 10:01:17 +02:00
Livio Amstutz
1305c14e49
feat: handle instanceID in projections ( #3442 )
...
* feat: handle instanceID in projections
* rename functions
* fix key lock
* fix import
2022-04-19 08:26:12 +02:00
Livio Amstutz
b949b8fc65
chore(deps): update oidc to 1.2.0 ( #3363 )
...
* chore(deps): update oidc to 1.2.0
* add comment
2022-04-05 07:22:00 +00:00
Fabi
c740ee5d81
feat: Instance commands ( #3385 )
...
* fix: add events for domain
* fix: add/remove domain command side
* fix: add/remove domain command side
* fix: add/remove domain query side
* fix: create instance
* fix: merge v2
* fix: instance domain
* fix: instance domain
* fix: instance domain
* fix: instance domain
* fix: remove domain.IAMID from writemodels
* fix: remove domain.IAMID from writemodels
* fix: remove domain.IAMID from writemodels
* fix: remove domain.IAMID from writemodels
* fix: remove domain.IAMID from writemodels
* fix: remove domain.IAMID from writemodels
* fix: remove domain.IAMID from writemodels
* fix: remove domain.IAMID from writemodels
* fix: remove domain.IAMID from writemodels
* fix: remove domain.IAMID from api
* fix: remove domain.IAMID
* fix: remove domain.IAMID
* fix: add instance domain queries
* fix: fix after merge
* Update auth_request.go
* fix keypair
* remove unused code
* feat: read instance id from context
* feat: remove unused code
* feat: use instance id from context
* some fixes
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
2022-04-05 05:58:09 +00:00
Livio Amstutz
87560157c1
fix: change to repository event types and removed unused code ( #3386 )
...
* fix: change to repository event types and removed unused code
* some fixes
* remove unused code
2022-03-31 11:36:26 +02:00
Livio Amstutz
958362e6c9
feat: handle instance from context ( #3382 )
...
* commander
* commander
* selber!
* move to packages
* fix(errors): implement Is interface
* test: command
* test: commands
* add init steps
* setup tenant
* add default step yaml
* possibility to set password
* merge v2 into v2-commander
* fix: rename iam command side to instance
* fix: rename iam command side to instance
* fix: rename iam command side to instance
* fix: rename iam command side to instance
* fix: search query builder can filter events in memory
* fix: filters for add member
* fix(setup): add `ExternalSecure` to config
* chore: name iam to instance
* fix: matching
* remove unsued func
* base url
* base url
* test(command): filter funcs
* test: commands
* fix: rename orgiampolicy to domain policy
* start from init
* commands
* config
* fix indexes and add constraints
* fixes
* fix: merge conflicts
* fix: protos
* fix: md files
* setup
* add deprecated org iam policy again
* typo
* fix search query
* fix filter
* Apply suggestions from code review
* remove custom org from org setup
* add todos for verification
* change apps creation
* simplify package structure
* fix error
* move preparation helper for tests
* fix unique constraints
* fix config mapping in setup
* fix error handling in encryption_keys.go
* fix projection config
* fix query from old views to projection
* fix setup of mgmt api
* set iam project and fix instance projection
* fix tokens view
* fix steps.yaml and defaults.yaml
* fix projections
* change instance context to interface
* instance interceptors and additional events in setup
* cleanup
* tests for interceptors
* fix label policy
* add todo
* single api endpoint in environment.json
Co-authored-by: adlerhurst <silvan.reusser@gmail.com>
Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
2022-03-29 11:53:19 +02:00
Silvan
c5b99274d7
feat(cli): setup ( #3267 )
...
* commander
* commander
* selber!
* move to packages
* fix(errors): implement Is interface
* test: command
* test: commands
* add init steps
* setup tenant
* add default step yaml
* possibility to set password
* merge v2 into v2-commander
* fix: rename iam command side to instance
* fix: rename iam command side to instance
* fix: rename iam command side to instance
* fix: rename iam command side to instance
* fix: search query builder can filter events in memory
* fix: filters for add member
* fix(setup): add `ExternalSecure` to config
* chore: name iam to instance
* fix: matching
* remove unsued func
* base url
* base url
* test(command): filter funcs
* test: commands
* fix: rename orgiampolicy to domain policy
* start from init
* commands
* config
* fix indexes and add constraints
* fixes
* fix: merge conflicts
* fix: protos
* fix: md files
* setup
* add deprecated org iam policy again
* typo
* fix search query
* fix filter
* Apply suggestions from code review
* remove custom org from org setup
* add todos for verification
* change apps creation
* simplify package structure
* fix error
* move preparation helper for tests
* fix unique constraints
* fix config mapping in setup
* fix error handling in encryption_keys.go
* fix projection config
* fix query from old views to projection
* fix setup of mgmt api
* set iam project and fix instance projection
* imports
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
2022-03-28 10:05:09 +02:00
Livio Amstutz
504fe5b761
cherry pick changes from main ( #3371 )
...
* feat: remove exif data from uploaded images (#3221 )
* feat: remove exif tags from images
* feat: remove exif data
* feat: remove exif
* fix: add preferredLoginName to user grant response (#3271 )
* chore: log webauthn parse error (#3272 )
* log error
* log error
* feat: Help link in privacy policy
* fix: convert correct detail data on organization (#3279 )
* fix: handle empty editor users
* fix: add some missing translations (#3291 )
* fix: org policy translations
* fix: metadata event types translation
* fix: translations
* fix: filter resource owner correctly on project grant members (#3281 )
* fix: filter resource owner correctly on project grant members
* fix: filter resource owner correctly on project grant members
* fix: add orgIDs to zitadel permissions request
Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
* fix: get IAM memberships correctly in MyZitadelPermissions (#3309 )
* fix: correct login names on auth and notification users (#3349 )
* fix: correct login names on auth and notification users
* fix: migration
* fix: handle resource owner in action flows (#3361 )
* fix merge
* fix: exchange exif library (#3366 )
* fix: exchange exif library
* ignore tiffs
* requested fixes
* feat: Help link in privacy policy
Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com>
Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
2022-03-24 14:00:24 +01:00
Livio Amstutz
56b916a2b0
feat: projections auto create their tables ( #3324 )
...
* begin init checks for projections
* first projection checks
* debug notification providers with query fixes
* more projections and first index
* more projections
* more projections
* finish projections
* fix tests (remove db name)
* create tables in setup
* fix logging / error handling
* add tenant to views
* rename tenant to instance_id
* add instance_id to all projections
* add instance_id to all queries
* correct instance_id on projections
* add instance_id to failed_events
* use separate context for instance
* implement features projection
* implement features projection
* remove unique constraint from setup when migration failed
* add error to failed setup event
* add instance_id to primary keys
* fix IAM projection
* remove old migrations folder
* fix keysFromYAML test
2022-03-23 09:02:39 +01:00
Livio Amstutz
5463244376
feat: encryption keys in database ( #3265 )
...
* enable overwrite of adminUser fields in defaults.yaml
* create schema and table
* cli: create keys
* cli: create keys
* read encryptionkey from db
* merge v2
* file names
* cleanup defaults.yaml
* remove custom errors
* load encryptionKeys on start
* cleanup
* fix merge
* update system defaults
* fix error message
2022-03-14 07:55:09 +01:00
Livio Amstutz
389eb4a27a
feat: run on a single port ( #3163 )
...
* start v2
* start
* run
* some cleanup
* remove v2 pkg again
* simplify
* webauthn
* remove unused config
* fix login path in Dockerfile
* fix asset_generator.go
* health handler
* fix grpc web
* refactor
* merge
* build new main.go
* run new main.go
* update logging pkg
* fix error msg
* update logging
* cleanup
* cleanup
* go mod tidy
* change localDevMode
* fix customEndpoints
* update logging
* comments
* change local flag to external configs
* fix location generated go code
* fix
Co-authored-by: fforootd <florian@caos.ch>
2022-02-14 17:22:30 +01:00
Livio Amstutz
699fdaf68e
feat: add personal access tokens for service users ( #2974 )
...
* feat: add machine tokens
* fix test
* rename to pat
* fix merge and tests
* fix scopes
* fix migration version
* fix test
* Update internal/repository/user/personal_access_token.go
Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com>
Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com>
2022-02-08 09:37:28 +01:00
Livio Amstutz
990be687c0
fix: handle first key rotation on newly created instance ( #3118 )
2022-01-28 08:24:34 +00:00
Livio Amstutz
e99b7f4972
fix: move activity log to queries and remove old code ( #3096 )
...
* move changes to queries and remove old code
* fix changes query
* remove unused code
* fix sorting
* fix sorting
* refactor and remove old code
* remove accidental go.mod replace
* add missing file
* remove listDetail from ChangesResponse
2022-01-26 10:16:33 +01:00
Livio Amstutz
52da2354a3
fix: set gender correctly in userinfo ( #3112 )
2022-01-25 16:00:38 +01:00
Livio Amstutz
44d78df4d4
feat: user query ( #3075 )
...
* user queries
* user query
* user query
* user tests
* remove old code
* user metadata
* cleanup
* fix merge
* cleanup
* cleanup
* fixes
2022-01-20 14:40:25 +00:00
Livio Amstutz
9ab566fdeb
fix(query): keys ( #2755 )
...
* fix: add keys to projections
* change to multiple tables
* query keys
* query keys
* fix race condition
* fix timer reset
* begin tests
* tests
* remove migration
* only send to keyChannel if not nil
2022-01-12 13:22:04 +01:00
Livio Amstutz
57368d151b
fix: assert roles when using refresh token ( #2868 )
2021-12-17 16:11:18 +01:00
Livio Amstutz
ae840f364c
fix(queries): authn keys ( #2820 )
...
* begin authn keys
* single table for state change
* add key type
* begin authn keys query
* query
* tests
* fix merge
* remove wrong migration version
* improve filter
* Update projection.go
* cleanup
2021-12-14 10:57:20 +01:00
Livio Amstutz
2f7d8ca557
fix: client secret verification (for introspection) ( #2825 )
...
* fix: client secret verification (for introspection)
* revert change for ProjectIDAndOriginsByClientID
2021-12-10 09:25:17 +00:00
Silvan
3473156c7e
fix(app): move queries to query package ( #2612 )
...
* fix: move queries to query package
* fix(auth): switch project role requests to query pkg
* refactor: delete unused project role code
* remove repo
* implement sql queries
* fix(database): oidc config change type to int2
* fix(queries): implement app queries
* refactor: simplify code
* fix: correct app query
* Update app.go
* fix token check
* fix mock
* test: app prepares
* test: oidc compliance
* test: OIDCOriginAllowList
* fix: converter
* resolve unsupported oidc version
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
2021-11-26 07:57:05 +01:00