Commit Graph

18069 Commits

Author SHA1 Message Date
Princi Vershwal
21085d0732
🐛 Handled BOM character for Unicode encoded file uploads (#17104)
fixes https://github.com/TryGhost/Ghost/issues/16917
refs https://github.com/TryGhost/Ghost/issues/16917#issuecomment-1602984601

Co-authored-by: Princi Vershwal <princi.vershwal@Princis-MacBook-Pro.local>
2023-06-23 08:31:16 +02:00
renovate[bot]
c0d32080b7 Update dependency semver to v7.5.3 2023-06-23 07:08:38 +02:00
Simon Backx
9035a87e50 Updated @tryghost/kg-default-nodes and @tryghost/kg-lexical-html-renderer
no issue
2023-06-22 17:07:44 +02:00
Sanne de Vries
f2d35c6a9a
Updated admin darkmode background color to be consistent with global … (#17101)
…colors

No ref
2023-06-22 16:35:03 +02:00
Daniel Lockyer
2c067aa1bb Fixed hack to kill Ghost after boot in tests
- in the migration tests we need to boot Ghost and then kill it
  afterwards
- because there was no easy way to do this, the workflow waits for 20s
  and then kills the last process ID
- aside from being a terrible idea, it means we're also just arbitrarily
  waiting for 20s, which burns time when it takes shorter to boot Ghost
- this commit implements an environment variable that will kill the
  server once it has run the whole boot process, and then fixes the
  workflow to use that
2023-06-22 15:32:48 +02:00
Simon Backx
8d6fb51908 Added Playwright tests to comments-ui
refs https://github.com/TryGhost/Team/issues/3504

Not complete yet, but contains the basic structure and a few tests that work and should run in CI.
2023-06-22 15:06:13 +02:00
Simon Backx
ab86e0d901 Removed Sentry and unused data options from comments-ui
refs https://github.com/TryGhost/Team/issues/3504

- Sentry was never setup and we don't use it
- Styles have been moved to inline JS styles (no separate css file generated)
- App version was never used
- Improved current script tag detection
2023-06-22 15:06:13 +02:00
Sanne de Vries
64518d2ad4
Updated signup card frontend styles for contained split layout (#17078)
Refs https://github.com/TryGhost/Team/issues/3459
2023-06-22 12:41:45 +02:00
renovate[bot]
e723365cd5 Update storybook monorepo to v7.0.23 2023-06-22 12:31:42 +02:00
Jono M
9a569b1d1f
Updated AdminX form inputs to be controlled instead of uncontrolled (#17090)
refs https://github.com/TryGhost/Team/issues/3349
2023-06-22 20:44:29 +12:00
Ghost CI
caadf7235c Merged v5.52.3 into main 2023-06-21 15:37:59 +00:00
Ghost CI
b7cad4e8fb v5.52.3 2023-06-21 15:37:57 +00:00
Michael Barrett
db0081ccaf
🐛 Fixed revision save reverting newly published post to draft (#17083)
fixes https://github.com/TryGhost/Ghost/issues/17076

When a post is saved `_revisionSaveTask` gets queued to execute 10
minutes from the save. When a post is published via the publish modal
`_revisionSaveTask` does not get dequeued. When `_revisionSaveTask` gets
executed at the 10 minute mark it is assumed that it is ok to save a
revision, which will cause the post to be reverted back to a draft. This
change enforces another check during the task exection to ensure that it
is in fact still ok to save a revision (in case anything has changed in
the 10 minutes since the task queued, i.e the post being published)
2023-06-21 17:08:39 +02:00
Simon Backx
e94bdd57ae Updated posts exporter comment tests
fixes https://github.com/TryGhost/Team/issues/3505

I've investigated this, but luckily this is expected behaviour, and was just an error previously in the test:
- The `feedback_more_like_this` and `feedback_less_like_this` columns are only hidden if there is no newsletter with feedback enabled, or if member features are disabled.
- Having a post which is a draft, should not change the visible columns, only global settings should change the comments (so the format is consistent).
- Instead of that, the columns should be null, which means it will be visible but empty.
2023-06-21 16:57:54 +02:00
Michael Barrett
934ec415fc
🐛 Fixed revision save reverting newly published post to draft (#17083)
fixes https://github.com/TryGhost/Ghost/issues/17076

When a post is saved `_revisionSaveTask` gets queued to execute 10
minutes from the save. When a post is published via the publish modal
`_revisionSaveTask` does not get dequeued. When `_revisionSaveTask` gets
executed at the 10 minute mark it is assumed that it is ok to save a
revision, which will cause the post to be reverted back to a draft. This
change enforces another check during the task exection to ensure that it
is in fact still ok to save a revision (in case anything has changed in
the 10 minutes since the task queued, i.e the post being published)
2023-06-21 15:12:19 +01:00
Jono Mingard
dd1d2f8d4d Added simple search bar to AdminX settings
refs https://github.com/TryGhost/Team/issues/3349
2023-06-21 22:11:55 +10:00
Ronald Langeveld
543f3750a7
🐛 Fixed draft pages not saving on forced revisions (#17081)
closes https://github.com/TryGhost/Team/issues/3493

- Fixed pages not saving on force revision. As a side effect, it broke
admin navigation as it doesn't manage to create a new revision upon going back to the pages list.
- This was simply caused by a missing option in the API endpoint config.

---

<!-- Leave the line below if you'd like GitHub Copilot to generate a
summary from your commit -->
<!--
copilot:summary
-->
### <samp>🤖 Generated by Copilot at b646916</samp>

This change enables the `pages` endpoint to handle page revisions by
adding the `save_revision` permission. This is part of a pull request
that adds page versioning and restoring functionality to Ghost.
2023-06-21 13:32:18 +02:00
Hannah Wolfe
3a58b6402a Update dependency eslint-plugin-ghost to v3.2.0
refs: https://github.com/TryGhost/Toolbox/issues/595

- Adds custom rules for node assert
- Enforces assert/strict as an error
2023-06-21 10:34:37 +01:00
Hannah Wolfe
6161f94910
Updated to use assert/strict everywhere (#17047)
refs: https://github.com/TryGhost/Toolbox/issues/595

We're rolling out new rules around the node assert library, the first of which is enforcing the use of assert/strict. This means we don't need to use the strict version of methods, as the standard version will work that way by default.

This caught some gotchas in our existing usage of assert where the lack of strict mode had unexpected results:
- Url matching needs to be done on `url.href` see aa58b354a4
- Null and undefined are not the same thing,  there were a few cases of this being confused
- Particularly questionable changes in [PostExporter tests](c1a468744b) tracked [here](https://github.com/TryGhost/Team/issues/3505).
- A typo see eaac9c293a

Moving forward, using assert strict should help us to catch unexpected behaviour, particularly around nulls and undefineds during implementation.
2023-06-21 09:56:59 +01:00
Simon Backx
0c28cebfd4 Updated rate limiting snapshot for updated copy
refs https://ghost.slack.com/archives/C02G9E68C/p1687303342271029
2023-06-21 10:36:53 +02:00
sudachi12
366050a87d
Added Japanese translations (#17050)
refs https://github.com/TryGhost/Team/issues/2795
2023-06-21 09:09:02 +02:00
brienjohn
4f5f58078d
Updated Traditional Chinese translations (#16996)
refs https://github.com/TryGhost/Team/issues/2795
2023-06-21 08:30:43 +02:00
renovate[bot]
e3c9af380c Update dependency @storybook/testing-library to v0.2.0 2023-06-21 08:12:26 +02:00
Ghost CI
5dadaea515 Merged v5.52.2 into main 2023-06-21 03:32:58 +00:00
Ghost CI
18a0e173fb v5.52.2 2023-06-21 03:32:56 +00:00
Chris Raible
2568c5898a
🐛 Fixed post scheduling for sites with transferred ownership (#17075)
refs TryGhost/Ghost#3494

- By default, the post scheduler runs as user_id = 1, which is the
original owner of the site
- If ownership has been transferred to a different user, it's possible
that there is no user with id = 1
- In this case, the scheduler would fail to publish a post, because
updating the post using user_id = 1 failed a foreign key constraint in
the post_revisions table
- This commit fixes the issue by checking if the contextUser exists, and
if not, replacing it with the current owner of the site
2023-06-20 19:51:13 -07:00
renovate[bot]
385ad2688b Update dependency @sinonjs/fake-timers to v11 2023-06-20 15:48:01 +02:00
renovate[bot]
476d7900d0 Update dependency @types/jsonwebtoken to v9 2023-06-20 15:46:04 +02:00
renovate[bot]
b1bcc2cb2d Update dependency luxon to v3 2023-06-20 15:22:54 +02:00
renovate[bot]
9d81dd5a80 Update metascraper to v5.34.7 2023-06-20 15:22:40 +02:00
Daniel Lockyer
5c4ef092b6 Updated vitest to v0.32
refs https://github.com/TryGhost/Ghost/pull/16949
refs https://github.com/vitest-dev/vitest/releases/tag/v0.32.0

- contains a switch from `@vitest/coverage-c8` to `@vitest/coverage-v8`
  as this is now required in 0.32
2023-06-20 14:54:04 +02:00
Daniel Lockyer
c1d2f250ce Updated translation files
- contains some changes produced by i18next-parser
2023-06-20 14:54:04 +02:00
Ronald Langeveld
bd348dc297
🎨 Improved copy on page & post revisions (#17068)
no issue

Updates the labels of the post history components to reflect the type of
content (post or page).
It modifies the `restore-revision`, `gh-post-settings-menu`, and
`modal-post-history` components.
2023-06-20 14:52:51 +02:00
renovate[bot]
7f3cd9c674 Update dependency tough-cookie to v4.1.3 2023-06-20 12:45:13 +00:00
renovate[bot]
6623572c5b Update dependency socket.io to v4.6.2 2023-06-20 14:40:10 +02:00
Simon Backx
fd2ef61b3c 🎨 Improved copy on too many login attempts
fixes https://github.com/TryGhost/Team/issues/2391
2023-06-20 14:32:04 +02:00
Yovko Lambrev
49931d05e7
Updated Bulgarian translations (#16991)
refs https://github.com/TryGhost/Team/issues/2795
2023-06-20 14:22:38 +02:00
renovate[bot]
d919a9024f Update dependency @extractus/oembed-extractor to v3.1.10 2023-06-20 12:18:09 +00:00
renovate[bot]
e81070762d Update dependency gscan to v4.37.0 2023-06-20 14:04:43 +02:00
Kasun Jayarathna
0241e28d1c
Updated Sinhalese translations (#17064)
refs https://github.com/TryGhost/Team/issues/2795
2023-06-20 14:04:25 +02:00
Kasun Jayarathna
9be5d6a4b2
Updated Sinhalese translations (#17060)
refs https://github.com/TryGhost/Team/issues/2795
2023-06-20 14:04:00 +02:00
Jono Mingard
384b468cbb Improved naming in AdminX dirty state handling
refs https://github.com/TryGhost/Team/issues/3349
2023-06-20 19:59:47 +10:00
Jono Mingard
5a6421c8bb Updated add navigation button to validate the new item
refs https://github.com/TryGhost/Team/issues/3433
2023-06-20 19:58:27 +10:00
Kasun Jayarathna
0b0c36a7fb
Updated Sinhalese translations (#17063)
refs https://github.com/TryGhost/Team/issues/2795
2023-06-20 11:01:55 +02:00
Kasun Jayarathna
93f9e1dfce
Updated Sinhalese translations (#17062)
refs https://github.com/TryGhost/Team/issues/2795
2023-06-20 10:57:09 +02:00
Duy
13fb5c2e31
Updated Vietnamese translations (#17053)
refs https://github.com/TryGhost/Team/issues/2795
2023-06-20 09:31:01 +02:00
Daniel Lockyer
d4c5fe2f46
Merged v5.52.1 into main 2023-06-20 08:58:53 +02:00
Ghost CI
69fddf8abe v5.52.1 2023-06-20 06:54:10 +00:00
renovate[bot]
ea3ab6beb6 Update dependency @vitejs/plugin-react to v4.0.1 2023-06-20 08:09:23 +02:00
Jono Mingard
f084fbd025 Added dirty state navigation blocking to AdminX settings
refs https://github.com/TryGhost/Team/issues/3349
2023-06-20 12:58:44 +10:00
Jono Mingard
4fd0473f1b Updated URL editing to not automatically force everything to URLs
refs https://github.com/TryGhost/Team/issues/3433
2023-06-20 12:01:34 +10:00
Fabien 'egg' O'Carroll
41cbc40353
Moved collections initialisation behind labs flag (#17057)
We ran into an issue where the large `published:true` query was
affecting the boot time of large sites which had knock-on effects with
availability.
2023-06-19 16:40:15 +02:00
Kevin Ansfield
2e3d2e1121
Fixed "Beta feedback" not showing in beta editor when feature flag is switched off
no issue

- even when the editor beta is turned off, any post created in the beta will still open in the beta editor
- the "beta feedback" text in the bottom right was disabled when the beta flag was disabled which meant it was difficult to tell when you were using the beta editor vs the original editor
2023-06-19 15:24:11 +01:00
Kevin Ansfield
f5c78221a6
Fixed "Beta feedback" not showing in beta editor when feature flag is switched off
no issue

- even when the editor beta is turned off, any post created in the beta will still open in the beta editor
- the "beta feedback" text in the bottom right was disabled when the beta flag was disabled which meant it was difficult to tell when you were using the beta editor vs the original editor
2023-06-19 15:22:22 +01:00
Kevin Ansfield
3070e505f5
🐛 Fixed beta editor causing left-aligned images in some themes
closes https://github.com/TryGhost/Team/issues/3499

- bumps `@tryghost/kg-default-nodes` and `@tryghost/kg-lexical-html-renderer` to fix missing `kg-image` class on the `<img>` element of rendered image cards
2023-06-19 14:20:40 +01:00
Kevin Ansfield
5d9dd893b3
🐛 Fixed beta editor HTML cards auto-closing tags when rendering
closes https://github.com/TryGhost/Team/issues/3462
refs a49f296c08

- bumps `@tryghost/kg-default-nodes` and `@tryghost/kg-lexical-html-renderer` with support for "raw" html values in rendered card output
2023-06-19 14:39:51 +02:00
Duy
b7bdd1f401
Updated Vietnamese translations (#17051)
refs https://github.com/TryGhost/Team/issues/2795
2023-06-19 13:51:12 +02:00
Duy
e85845f914
Updated Vietnamese translations (#17052)
refs https://github.com/TryGhost/Team/issues/2795
2023-06-19 13:50:36 +02:00
Kevin Ansfield
bdd8302484
🐛 Fixed beta editor HTML cards auto-closing tags when rendering
closes https://github.com/TryGhost/Team/issues/3462
refs a49f296c08

- bumps `@tryghost/kg-default-nodes` and `@tryghost/kg-lexical-html-renderer` with support for "raw" html values in rendered card output
2023-06-19 11:13:06 +01:00
Naz
7d4b278a83
Fixed slug-based navigation in collections UI
refs https://github.com/TryGhost/Team/issues/3169

- When navigating through collections slugs did not display correctly returning "undefined" in the navigation. It was easier to fix the bug than working around it.
2023-06-19 17:07:50 +07:00
Daniel Lockyer
2173fd9ef9 Moved signup-form to apps/ folder
refs https://github.com/TryGhost/Toolbox/issues/594

- we're moving all the standalone apps to a separate folder to keep them
  out of the core code and easier to find
2023-06-19 09:43:33 +02:00
Naz
8d9d9de8d4
Added basic UI for collection posts
refs https://github.com/TryGhost/Team/issues/3169

- Added a lits to a collection view showing which posts belong to a collection.
2023-06-19 14:38:01 +07:00
ErminMerdanovic
1a868e08ef
Updated German translations (#17045)
refs https://github.com/TryGhost/Team/issues/2795
2023-06-19 08:19:54 +02:00
renovate[bot]
14c22a9b6f Update storybook monorepo to v7.0.22 2023-06-19 07:34:10 +02:00
Jono Mingard
5331cc90e2 Added errors and improved behaviour of the navigation editor
refs https://github.com/TryGhost/Team/issues/3432
2023-06-19 16:48:42 +12:00
Rishabh
fce6b52bbd Released Admin-x-settings v0.0.8 2023-06-18 18:48:06 +05:30
Ghost CI
5b2ba79cef v5.52.0 2023-06-16 15:02:41 +00:00
Ghost CI
6a3af5b406 🎨 Updated Casper to v5.4.11 2023-06-16 15:02:41 +00:00
Simon Backx
9774dc7a51 Released @tryghost/signup-form v0.1.2 2023-06-16 16:01:09 +02:00
Simon Backx
f13c8c4af2 🐛 Fixed signup form text wrapping after submitting
no issue
2023-06-16 15:57:51 +02:00
Peter Zimon
78aa31973c Updated installed theme list
refs. https://github.com/TryGhost/Team/issues/3432
2023-06-16 15:44:02 +02:00
Sag
dfd69f9cf7 Bumped Lexical dependencies
no issue
2023-06-16 15:23:20 +02:00
Fabien 'egg' O'Carroll
a1dae99245
Enabled errors for our error rules in eslint (#17041)
Yo dawg, I heard you like errors?

This fixes the last issues we had with incorrect error usage and updates
eslint to longer allow them through!
2023-06-16 14:50:06 +02:00
Michael Barrett
721d7202a0
Added truncation to custom theme setting description (#17044)
no issue

Added truncation to custom theme setting description to prevent overly
long custom setting descriptions from diminishing the settings UX
2023-06-16 13:14:43 +01:00
Daniel Lockyer
f3894d5898 Moved Portal to apps/
refs https://github.com/TryGhost/Toolbox/issues/594

- we're moving all the standalone apps to a separate folder to keep them
  out of the core code and easier to find
2023-06-16 13:37:58 +02:00
Rishabh
eeabce2473 Fixed official theme image assets not loading in adminX
refs https://github.com/TryGhost/Team/issues/3432

The admin assets url are modified by ember build process by adding cache busting, so the original urls can't be used directly in adminX. This change passes the image assets from ember admin, causing the right image urls to be passed to adminX and for loading images.
2023-06-16 17:06:22 +05:30
Ronald Langeveld
77e3b3e947
🐛 Fixed page revision returning empty array on update and restore (#17042)
closes https://github.com/TryGhost/Team/issues/3491

- the `PostRevisionModel` had a `belongsTo` relation to Post which resulted in the Page model returning an empty array in the `post_revisions` property.
- Simply removing it fixed it. refs https://ghost.slack.com/archives/C02G9E68C/p1686912389383579?thread_ts=1686909240.034419&cid=C02G9E68C
2023-06-16 13:24:02 +02:00
Daniel Lockyer
99aeb73ecc Optimized DB reset during tests
refs https://github.com/TryGhost/Toolbox/issues/592

- it turns out that `TRUNCATE` in CI takes ~300ms for all tables, but
  `DELETE FROM` takes ~30ms
- whilst truncating is generally known to be faster, I believe it's only
  faster on large tables
- this saves 90% of the time it takes to reset the DB in MySQL
2023-06-16 13:15:17 +02:00
Peter Zimon
0f9417456a Added optional confirmation for modals in AdminX
refs. https://github.com/TryGhost/Team/issues/3432
2023-06-16 12:35:27 +02:00
Peter Zimon
f4e015d2c5 Added back button to theme preview in AdminX
refs. https://github.com/TryGhost/Team/issues/3432
2023-06-16 12:35:27 +02:00
Naz
09264261b7 Added ability to fetch posts by collection
closes https://github.com/TryGhost/Team/issues/3423

- For convenience we need a way to fetch posts that belong to a certain collection. This change adds support for `collection` query parameter: `/?collection=` which can be either an id or slug of the collections we are trying to fetch.
- When posts are fetched by collection we ignore any filters passed along in query parameters as collection is a "filter" by it's very nature.
2023-06-16 17:28:12 +07:00
Daniel Lockyer
b5d3066116
Removed eslint-plugin-react dependency from signup-form
refs 997cd3687e

- the `eslint-config-react-app` dependency already covers all necessary rules from `eslint-plugin-react`
  and using it separately causes conflicts across projects in eslint config
- thanks for the commit message @rishabhgrg :)
2023-06-16 11:53:40 +02:00
Rishabh
997cd3687e Removed eslint-plugin-react from AdminX
The `eslint-config-react-app` already covers all necessary rules from `eslint-plugin-react` and using it separately causes conflicts across projects in eslint config
2023-06-16 15:21:19 +05:30
Naz
25e0cb12c0
Added "getBySlug" method to Collections Service
refs https://github.com/TryGhost/Team/issues/3423

- This is a convenience method that should allow fetching collections by their slug. It is a great developer experience for in case when fetching built-in collections like "featured" and "index", so can avoid an extra call to find the collection and it's ide one wants to use.
2023-06-16 16:31:50 +07:00
renovate[bot]
e9595d9a4b Update dependency ember-cli-dependency-checker to v3.3.2 2023-06-16 10:15:56 +02:00
renovate[bot]
3aa0c7018d Update dependency i18next to v23 2023-06-16 10:15:18 +02:00
renovate[bot]
6ad1e5be68 Update dependency @ember/test-helpers to v2.9.4 2023-06-16 10:03:40 +02:00
renovate[bot]
c1d90df181 Update dependency @playwright/test to v1.35.1 2023-06-16 10:03:32 +02:00
renovate[bot]
d6664b70fd Update dependency semver to v7.5.2 2023-06-16 09:56:57 +02:00
Naz
1d214361ad
Refactored posts browsing to posts service
refs https://github.com/TryGhost/Team/issues/3423

- This refactor allow for smaller and cleaner change that's coming up when dealing with `?collection=` query parameter
2023-06-16 14:52:55 +07:00
Ronald Langeveld
cfbc97b033
🐛 Fixed revisions relation not linked to Posts api (#17037)
no issue

This was a bit of an oversight from our feature built at the retreat. We
didn't take revisions into account for pages at all, but luckily it made
revisions without issues regardless.
It just wasn't accessible and users weren't able to restore via ADMIN
because the API didn't serve them at all.

This wires up the revisions relation to be served by the API so we can
retrieve it in Admin.
2023-06-16 09:49:12 +02:00
Daniel Lockyer
02eadc32d3
Switched to only enabling retries in CI
refs https://ghost.slack.com/archives/C02G9E68C/p1686841987067309?thread_ts=1686761234.035659&cid=C02G9E68C

- enabling retries has helped reduce the number of flaky tests we see,
  but it means it's causing issues with local development and snapshots
- this moves the retry config to the CI specific commands so we don't
  have retries enabled locally
- also deduped test:base and test:single
2023-06-16 09:47:03 +02:00
Fabien "egg" O'Carroll
0d7f98f4d1 Supported adding/removing post to collection via Posts API
We've got some fairly simple diffing logic here to update the collections which
a post is in, the bulk of the changes here are to support the return of a DTO
rather than Bookshelf Model. This also helps improve the architecture because
we are step closer to removing infrastructure concerns (HTTP Response Headers)
from the business logic layer.

For now there is a crappy EventString which can be passed back to the
controller which can then handle any HTTP related concerns, although long term
these should be actual events like PostPublished or PostUpdated.
2023-06-16 09:28:19 +02:00
Fabien "egg" O'Carroll
f3f9e5a2f3 Moved serialisation of formats into the serialiser-layer
This prepares us to return a DTO rather than BookshelfModel to the serialiser
layer. When passing a BookshelfModel, the serialisation layer uses the model to
read from when building computed properties. By stripping values out in the
toJSON method it means that the DTO will be missing them and the computed
properties won't be able to be calculated. Instead we return ALL values to the
serialisation layer, and then strip out the ones that weren't requested in the
"clean" step.

This also inadvertently fixes the issue with `reading_time` requiring the
`html` field to be requested, we can now request just `reading_time`, as well
as have it included by default.
2023-06-16 09:17:47 +02:00
Fabien "egg" O'Carroll
41716a06ae Fixed mutation of shared state for matcher
This can cause bugs due to the matcher constraints changing in each test
2023-06-16 09:17:47 +02:00
Fabien "egg" O'Carroll
53eea00d21 Fixed check for god_mode param
Rather than require the string 'true', we allow any value to be passed, this
works with any parsing of params into booleans.
2023-06-16 09:17:47 +02:00
Fabien "egg" O'Carroll
229875d67d Bumbed @tryghost/admin-api-schema to latest version
This includes the changes necessary to allow the `collection` property to be
passed on posts
2023-06-16 09:17:47 +02:00
Jono Mingard
c71d245b1d Show descriptions from theme settings if set
refs https://github.com/TryGhost/Team/issues/3354
2023-06-16 15:43:48 +12:00
Peter Zimon
005a488eed Changed button color in nav settings in AdminX
refs. https://github.com/TryGhost/Team/issues/3432
2023-06-15 20:46:51 +02:00
Peter Zimon
5bfbd5a7a0 Refined navigation design in AdminX
refs. https://github.com/TryGhost/Team/issues/3432
2023-06-15 20:42:33 +02:00