Commit Graph

4563 Commits

Author SHA1 Message Date
02c34d547f Fix redis connection (#7956)
## Context
bull-mq connection was not working as intended, the connection parameter
was ignored and was falling back to localhost.
This PR should fix the issue by instantiating a IORedis client following
bullmq documentation https://docs.bullmq.io/guide/connections
I also changed cache-storage module to use IORedis client as well to be
more consistent even though it was not necessary there. We could move
that instantiation to a factory class in the future.

## Test
start server + worker with correct port and wrong port with
cache-storage-type memory/redis and queue-type sync/bull-mq
2024-10-22 14:40:18 +00:00
18cfe79b80 bug fix webhook response not sending data to tinybird (#7952)
Solves https://github.com/twentyhq/private-issues/issues/118

**TLDR**

Fix webhook response not sending data to tinybird when the url is not a
link.

**Changes in Tinybird:**

- Add column Success to webhook payload (boolean)
- Changed the parameter WebhookIdRequest to WebhookId in the
getWebhooksResponse api point.
- Those changes can be seen in the tinybird workspace
twenty_analytics_playground

**In order to test**

1. Set ANALYTICS_ENABLED to true
2. Set TINYBIRD_INGEST_TOKEN to your token from the workspace
twenty_analytics_playground
3. Set TINYBIRD_GENERATE_JWT_TOKEN to the admin kwt token from the
workspace twenty_analytics_playground
4. Set TINYBIRD_WORKSPACE_UUID to the UUID of
twenty_analytics_playground
5. Create a Webhook in twenty and set wich events it needs to track
6. Run twenty-worker in order to make the webhooks work.
7. Do your tasks in order to populate the data
8. Look at your webhooks in settings>api and webhooks> your webhook and
the statistics should be displayed
2024-10-22 15:48:11 +02:00
f0a2d38471 Improve search algorithm (#7955)
We were previously checking for matching with each search term
independently. Ex searching for "felix malfait" we were searching for
correspondances with "felix" and "malfait".
As a result record A with name "Marie-Claude Mala" and email
"ma.lala@email.com" had a biggest search score than record B "Felix
Malfait" with email felix@email.com for search "felix ma":
for record A we had 0 match with felix and 3 matches with "ma" ("marie",
"mala", "ma")
for record B we had 1 match with felix and 1 match with "ma" (with
"malfait").

So we want to give more weight to a row that would combine matches with
both terms, considering "felix malfait" altogether.
2024-10-22 15:47:16 +02:00
e767f16dbe 7415 serverless functions update environment variables in a dedicated tab in settings functions not a env file (#7939)
![image](https://github.com/user-attachments/assets/0ef9551d-d867-479e-9a76-faee6930bc0a)

![image](https://github.com/user-attachments/assets/a7aac417-4dd8-401f-8d5b-5b72f31710f6)

![image](https://github.com/user-attachments/assets/16c98e52-a2db-4ed3-b5d2-77745b4d2918)

![image](https://github.com/user-attachments/assets/847d23d6-8a58-4d8f-aff1-4f8a81862964)
2024-10-22 14:51:03 +02:00
7fc844ea8f feat: Side quest tweet fav completed (#7944)
![image](https://github.com/user-attachments/assets/26e7b781-afbe-467f-864f-bf04058a5b2d)
2024-10-22 14:24:16 +02:00
2aa870d6ac feat: Side quest Gif Magic completed (#7946)
![supermeme_14h47_52](https://github.com/user-attachments/assets/e7788a89-722c-4046-ae5d-c2a738daa433)
2024-10-22 14:23:52 +02:00
6e9774dac2 feat: Side quest meme magic completed (#7945)
![image](https://github.com/user-attachments/assets/615094b3-3d6b-40dc-a986-5e725201c47c)
2024-10-22 14:23:31 +02:00
006104c548 feat: Side quest Tweet compeleted (#7943)
![image](https://github.com/user-attachments/assets/9903f9b2-4a45-4a88-a50b-ca398aa556dd)

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
2024-10-22 14:22:06 +02:00
07cdeeb595 Like & Re-Tweet oss.gg Launch Tweet #7947 (#7950)
Point: 50 Points
Task: Like & Re-Tweet oss.gg Launch Tweet
Attachement:
![retweet oss
gg](https://github.com/user-attachments/assets/6c7619be-707b-49ff-991d-15225e503b4b)

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2024-10-22 14:20:11 +02:00
afb246558e Update 2-write-blog-post-about-20.md (#7941)
Update oss-gg block post list for
https://github.com/twentyhq/twenty/pull/7938
2024-10-22 10:55:07 +02:00
6133a72cf6 Migrate to twenty-ui utilities/screen-size (#7836)
This PR was created by [GitStart](https://gitstart.com/) to address the
requirements from this ticket:
[TWNTY-7540](https://clients.gitstart.com/twenty/5449/tickets/TWNTY-7540).

 --- 

### Description

Move `utilities/screen-size` to the `twenty-ui` package

### Demo

The `useScreenSize` was used to render the mobile nav for example on the
landing page.

It still renders properly


![](https://assets-service.gitstart.com/4814/018fa684-c192-455d-a38b-3b212fdb3c1a.png)

###### Fixes [#7540](https://github.com/twentyhq/twenty/issues/7540)

###### Dev QA

- [x] `utilities/screen-size` should be moved to the `twenty-ui` folder

- [x] The mobile nav should still show on the landing page

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-22 10:34:42 +02:00
dfcf3ef879 Migrate to twenty-ui - layout/animated-placeholder (#7794)
This PR was created by [GitStart](https://gitstart.com/) to address the
requirements from this ticket:
[TWNTY-7531](https://clients.gitstart.com/twenty/5449/tickets/TWNTY-7531).

 --- 

### Description

- Migrate the `animated-placeholder` to `twenty-ui` and update all
imports.\
  \
  Fixes twentyhq/private-issues#87

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-22 10:28:09 +02:00
bf0a059751 [Server Integration tests] Enrich integration GraphQL API tests #3 (#7931)
This PR was created by [GitStart](https://gitstart.com/) to address the
requirements from this ticket:
[TWNTY-7526](https://clients.gitstart.com/twenty/5449/tickets/TWNTY-7526).

 --- 

### Description

NoteTargets and MessageThreads are special cases because they do not
have a notable property that we could use in "update" the test cases,\
for NoteTargets we are using the personId, testing the relation, but for
MessageThreads we are using updatedAt. To test the relations for
MessageThreads\
we would need to update another object (Message) because the relation is
ONE_TO_MANY, updating another object in a test that would update the
current tested object sounds incorrect.\
In the NoteTargets, we can update the NoteTarget object because the
relation is MANY_TO_ONE\
for some tests we need an account ID, we are using Tim's account for all
the tests (the token in jest-integration.config.ts), so we are using a
constant to use the account ID

### Refs

#7526

### Demo


![](https://assets-service.gitstart.com/28455/7f1c520e-78e4-43c3-aa89-f6fc09e0a056.png)

---------

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
2024-10-22 10:17:10 +02:00
c6bc09c5a2 [oss.gg]: hubspot to twenty contact data migration script (750 points) (migration-script) (#7937)
HubSpot to Twenty CRM Contact Migration Script

Script's github repo:
https://github.com/FaheemOnHub/twenty-crm-hubspot-script

This Node.js script facilitates migrating contacts from HubSpot CRM to
Twenty CRM. The user has the option to either check for duplicates in
the Twenty CRM before migrating or directly migrate all contacts without
checking.

Video Proof added in oss-gg's twenty-dev-challenges
2024-10-22 10:13:02 +02:00
b45511c955 Migrate to twenty-ui - navigation/breadcrumb (#7793)
### Description

- Move breadcrumb components to `twenty-ui`    \
  \
  \
  Fixes  #7534

---------

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-21 21:53:43 +02:00
25010174f0 Adjust the line height and expand the maximum height of the plac… (#7764)
fixes: #7757

## What does this PR do?

We increased the line height from md to lg and the max height of the
placeholder subtitle text from 2.4 to 2.8 to ensure that letters are no
longer slightly cut off in the placeholder in Functions.



![twenty-placeholder-text](https://github.com/user-attachments/assets/1cfed3c4-6bae-4200-9516-4e1295da170a)

## How should this be tested?

  1. Log in
  2. Go to Settings
  3. Toggle "Advanced" settings
  4. Go to Functions

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-21 21:47:17 +02:00
34ef2d3d6d Left Padding removed in Settings Page Tabs (#7730)
Fix:  #7100 

The `TabList` component, located in
[Tablist](packages/twenty-front/src/modules/ui/layout/tab/components/TabList.tsx),
wraps the Tabs and defines the padding, and is used in multiple places.
The left padding for the Emails and Calendars sections of the Accounts
in Settings has been removed ( list appear when there are multiple
connected accounts ). However, the padding on the Record detail page
remains unchanged.

To address this, prop of css styles is added to `Tablist`, allowing for
the padding of the `TabList` component to be adjusted as required.

Additional styles can also be applied as per requirements individually
for Emails and Calendar section.


<img width="722" alt="Screenshot 2024-10-16 at 5 06 26 AM"
src="https://github.com/user-attachments/assets/3c7648ac-e2a6-4871-b58b-d25b008a06f0">
<img width="789" alt="Screenshot 2024-10-16 at 5 49 18 AM"
src="https://github.com/user-attachments/assets/a6e61b4d-0245-4744-ae87-86fe01a6bc43">
<img width="725" alt="Screenshot 2024-10-16 at 6 22 30 AM"
src="https://github.com/user-attachments/assets/e6a19095-3ee4-431f-ba19-1182552a5c8d">

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-21 21:42:37 +02:00
5e2df81211 fix: hidden settings menu affects settings layout (#7769)
This PR fixes #6746

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-21 21:28:01 +02:00
4407b1aaa2 Minor page header fix (#7927)
<img width="1420" alt="Screenshot 2024-10-22 at 00 03 03"
src="https://github.com/user-attachments/assets/c8841991-9c0a-41fd-8fc5-f789c4a94398">

<img width="1512" alt="Screenshot 2024-10-22 at 00 04 33"
src="https://github.com/user-attachments/assets/a9bbbad9-5cc3-4019-8928-d25d02d0bda9">
2024-10-21 20:48:12 +02:00
0f0a7966b1 feat(sso): allow to use OIDC and SAML (#7246)
## What it does
### Backend
- [x] Add a mutation to create OIDC and SAML configuration
- [x] Add a mutation to delete an SSO config
- [x] Add a feature flag to toggle SSO
- [x] Add a mutation to activate/deactivate an SSO config
- [x] Add a mutation to delete an SSO config
- [x] Add strategy to use OIDC or SAML
- [ ] Improve error management

### Frontend
- [x] Add section "security" in settings
- [x] Add page to list SSO configurations
- [x] Add page and forms to create OIDC or SAML configuration
- [x] Add field to "connect with SSO" in the signin/signup process
- [x] Trigger auth when a user switch to a workspace with SSO enable
- [x] Add an option on the security page to activate/deactivate the
global invitation link
- [ ] Add new Icons for SSO Identity Providers (okta, Auth0, Azure,
Microsoft)

---------

Co-authored-by: Félix Malfait <felix@twenty.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-21 20:07:08 +02:00
11c3f1c399 fix: width in PageHeader comp (#7866)
Fixes: #7864 


This fix prevents layout issues caused by invalid CSS and ensures that
the PageHeader component works correctly when no width prop is passed.

![Screenshot from 2024-10-20
00-03-39](https://github.com/user-attachments/assets/68340256-c756-4a56-9028-9aed32caf68e)

Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-21 18:40:32 +02:00
5416773951 Fix Storybook Configuration for Windows Development Environment (#7904)
#### Description
This PR resolves issue #7903 regarding the Storybook configuration for
Windows development environments. Previously, the configuration script
generated forward slashes instead of backslashes, leading to errors when
running the command `npx nx run twenty-front:storybook:serve:dev
--configuration=modules` on Windows systems.

#### Changes Made
- Updated the Storybook configuration to ensure that backslashes are
used in file paths for Windows environments, preventing command
execution errors.

#### How to Test
1. **Run Storybook Command**:
   - On a Windows machine, execute the command:
     ```
     npx nx run twenty-front:storybook:serve:dev --configuration=modules
     ```
- Ensure that the command runs successfully without any path-related
errors.

2. **Verify Configuration**:
- Check the Storybook configuration files to confirm that paths are
using backslashes where applicable.
- Test the same command on non-Windows environments to verify that there
are no regressions.

#### Related Issue
- Fixes #7903
2024-10-21 18:28:31 +02:00
4578674e30 fix(website): enable // in token form URL input (#7923)
Fixes: #7861
2024-10-21 18:24:24 +02:00
1466d44b57 fix: Make the entire advanced mode toggle container clickable (#7761)
In this PR:

- Use a real `<input type="checkbox" />` element in the `<Toggle />`
component
- Create an `accessibility` module in the `twenty-ui` package
- Export the `VISIBILITY_HIDDEN` CSS object to hide visually any element
- Export a `<VisibilityHidden />` component from the `twenty-ui` package
to add visually hidden textual information easily
- Export a `<VisibilityHiddenInput />` component to create custom form
control components easily
- Use a `<label>` element for the "Advanced:" text; it will naturally
toggle the advanced settings

Fixes #7756

---------

Co-authored-by: Devessier <baptiste@devessier.fr>
2024-10-21 18:22:10 +02:00
1a0b387282 Add the role=button to search (#7594)
In this PR:

- Let the `<NavigationDrawerItem />` component render a `<button>` by
default instead of a `<div>`
- Replace `<div>` by `<span>` inside the `<NavigationDrawerItem />` as
`<button>` and `<a>` HTML elements only accept [_phrasing
content_](https://developer.mozilla.org/en-US/docs/Web/HTML/Content_categories#phrasing_content).
- Fix layout issue: the keyboard icon wasn't put on the right of the
button, I put it back

Fixes #7575

---------

Co-authored-by: Devessier <baptiste@devessier.fr>
2024-10-21 18:21:08 +02:00
7b10bfa7d2 Add filter on array and jsonb field types (#7839)
This PR was created by [GitStart](https://gitstart.com/) to address the
requirements from this ticket:
[TWNTY-6784](https://clients.gitstart.com/twenty/5449/tickets/TWNTY-6784).
This ticket was imported from:
[TWNTY-6784](https://github.com/twentyhq/twenty/issues/6784)

 --- 

### Description

- Add filter on array and jsonb field types
- We did not implement the contains any filter for arrays on the
frontend because we would need to change the UI design since this should
be an array of values, and now we have only one input

### Demo


<https://www.loom.com/share/0facf752b63f4120b5d4ea4ee9772d35?sid=d7bde469-e6a9-4298-a637-d81d40695a86>

Fixes #6784

---------

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
Co-authored-by: Weiko <corentin@twenty.com>
2024-10-21 18:11:02 +02:00
3f2751ef6c [oss.gg] write-blog-post-about-20 (750 points) (#7922)
![image](https://github.com/user-attachments/assets/3de0b8a6-1c2e-40ae-a82b-ad6d2c21f84c)
2024-10-21 18:10:18 +02:00
0e9d2708d4 [oss.gg] write-selfthost-guide-blog-post (750 points) (#7924)
![image](https://github.com/user-attachments/assets/c1817eb5-8ffa-466e-8385-1644decf48a0)
2024-10-21 18:08:36 +02:00
373926b895 Secure connexion between TinyBird and webhookResponseGraph (#7913)
TLDR:
Secure connexion between tinybird and twenty using jwt when accessing
datasource from tinybird.

Solves:
https://github.com/twentyhq/private-issues/issues/73


In order to test:

1. Set ANALYTICS_ENABLED to true
2. Set TINYBIRD_JWT_TOKEN to the ADMIN token from the workspace
twenty_analytics_playground
3. Set TINYBIRD_JWT_TOKEN to the datasource or your admin token from the
workspace twenty_analytics_playground
4. Create a Webhook in twenty and set wich events it needs to track
5. Run twenty-worker in order to make the webhooks work.
6. Do your tasks in order to populate the data
7. Enter to settings> webhook>your webhook and the statistics section
should be displayed.

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-21 17:42:52 +02:00
edf4ae084b Add simplify-search-vector-expression to upgrade 0-32 command (#7925)
## Context
Moving this command to the global command runner for 0.32 upgrade. This
should fix searchVector expression introduced in 0.31 to later handle
soft-deleted + search filter properly.

## Test
```
git co v0.31.0
-- reset DB
git co c--add-simplify-search-vector-expression-to-upgrade-0-32
-- migrate typeorm
-- upgrade 0.32 command
```

search is working and expression is correctly set. Soft deleted records
are not shown as before but it's now possible to override that behavior
via filters.

cc @ijreilly
2024-10-21 17:23:50 +02:00
4bd8945519 [oss.gg] design-new-logo-twenty (#7917)
![image](https://github.com/user-attachments/assets/9b1fd757-1fd5-402d-ab6d-9389d738d97f)
2024-10-21 16:23:30 +02:00
9aed944da9 [oss.gg] design-promotional-poster (300 points) (#7919)
![image](https://github.com/user-attachments/assets/763c57a3-4dd1-4882-a989-d6df3f00269f)
2024-10-21 16:18:12 +02:00
1f5d9bd69e [🕹️] quest-wizard (300 points) (#7921)
![image](https://github.com/user-attachments/assets/56fa4f09-fa11-41ae-9198-dbd92c0596fd)

![image](https://github.com/user-attachments/assets/543a1f8f-b196-4b3b-be2d-7ced9dd9e0e0)

![image](https://github.com/user-attachments/assets/5d13b4a3-1f40-4e1b-a368-fe95c49cbb2c)

![image](https://github.com/user-attachments/assets/936457e6-d18c-444f-a853-162b75b9b807)

![image](https://github.com/user-attachments/assets/c48e4b5e-30a6-404b-bea3-7633a499c69b)
2024-10-21 16:08:26 +02:00
b87c7d4a0c [FIX] install node version before corepack enable (#7809)
FIX #7696

This correctly installs the recommended node version before enabling
corepack.

![Screenshot 2024-10-14
142628](https://github.com/user-attachments/assets/674f28d5-8d1b-40fc-aaae-4195c14ea350)

Thanks!
2024-10-21 16:07:14 +02:00
28c99cbc64 fix: use <button> tag for buttons (#7797)
## What does this PR do?
This PR updates div with button tag for buttons

Fixes #7577 

![Screenshot 2024-10-17
210955](https://github.com/user-attachments/assets/54a0c0e9-93ed-4730-a738-bf486f1f58c8)
2024-10-21 12:32:19 +00:00
784770dfe8 Disable Github runners front CIs 2024-10-21 14:23:57 +02:00
40152d3b92 7665 handle the select all case inside the action menu (#7742)
Closes #7665 
- Handle select all
- Handle Filters

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2024-10-21 14:22:03 +02:00
eaab2d0dd2 Fix CI not running on main 2024-10-21 13:32:54 +02:00
2f72e22ff9 Fix CI not running on main 2024-10-21 13:19:35 +02:00
a5b2b3522f Updated image to correct typo (#7907)
Fixes https://github.com/twentyhq/twenty/issues/7899
2024-10-21 12:25:25 +02:00
e7eeb3b820 Add Workflow Run show page (#7719)
In this PR:

- Display a workflow version visualizer for the version of the workflow
the run was executed on.
- Display the output of the run as code.


https://github.com/user-attachments/assets/d617300a-bff4-4328-a35c-291dc86d81cf
2024-10-21 12:04:44 +02:00
b914182b78 Update workflows to optimize CI processes (#7828)
This Pull Request addresses the need to optimize our Continuous
Integration (CI) workflows for Playwright tests and release processes.
The changes implemented aim to reduce unnecessary resource usage by
conditionally executing jobs based on relevant file changes and
Implement https://github.com/tj-actions/changed-files step

## Changes logs
- Updated `ci-test-docker-compose.yaml , ci-chrome-extension.yaml ` to
check for changed files before running tests.
- Updated `ci-front.yaml , ci-utils.yaml , ci-website.yaml ,
ci-server.yaml` to check for changed files before running tests.
- Enhanced `playwright.yml` to skip unnecessary tests based on file
changes.
2024-10-21 12:02:14 +02:00
fc6748de0a Add modal to confirm workflow draft version overriding (#7758)
In this PR:

- Allow the `<ConfirmationModal />` to take additional buttons to
display between the cancel and the confirm buttons.
- Create a modal that's displayed when the user tries wants to use a
workflow version as draft while a draft version already exists. The
displayed modal contains a link to the current draft version and a
button to confirm the overriding of the current draft version.

A demo:


https://github.com/user-attachments/assets/6349f418-1b11-45b3-9f5e-061ca74c2966

Closes twentyhq/private-issues#114
2024-10-21 11:51:54 +02:00
f3ec6a759f OSS.GG Content creation challenge (#7859)
I have the content creation challenge of twenty I have published a
detailed Youtube walkthrough to Twenty Dashboard and Created a Blog on
Hashnode about Twenty Crm with step by step guide to use Twenty.

Below are the task links
1. Create a YouTube Video about Twenty showcasing a specific way to use
Twenty effectively. Points: 750
[Watch here](https://youtu.be/KuAycGuW698?si=TyKGVyrydLzof2RI)

2. Write a blog post about sharing your experience using Twenty in a
detailed format on any platform. Points: 750
[Click
here](https://k5lo7h.hashnode.dev/twenty-crm-a-fresh-start-for-modern-businesses)

Total Points - 1500
2024-10-21 08:41:19 +02:00
ae1d53aa29 Write-a-blog-post-about-Twenty (#7902)
What side quest are you solving: Write a blog post about Twenty

Description: Shared my experience using Twenty in a detailed blog post

Points: 750

Proof: 

link :
https://open.substack.com/pub/rajeevdewangan/p/our-experience-using-twenty-an-open?r=4lly3x&utm_campaign=post&utm_medium=web&showWelcomeOnShare=true
![Screenshot 2024-10-21
103524](https://github.com/user-attachments/assets/9475c262-8c5e-4a74-b2c7-e690e72daba4)
2024-10-21 08:37:00 +02:00
d6810c3b42 fix: Custom fields lacks empty tag (#7777)
This PR fixes this issue #7250

---------

Co-authored-by: Félix Malfait <felix@twenty.com>
2024-10-21 08:33:59 +02:00
cc4b060932 Typos in docs (#7898) 2024-10-20 23:09:28 +02:00
35bb1a82ba side quest: Like & Re-Tweet oss.gg Launch Tweet (#7877)
Description:
Liked & Tweeted @twentycrm on X

Points:
50

Proof:
Link: https://x.com/mkprasad_821/status/1847886807314120762

<img width="1369" alt="Screenshot 2024-10-20 at 11 56 54 AM"
src="https://github.com/user-attachments/assets/e17daa69-6920-4641-8282-4aa98f48762a">

---------

Co-authored-by: Apple <apple@Apples-MacBook-Pro.local>
2024-10-20 20:28:06 +02:00
f27b1169a1 meme-magic #7875 created (#7878)
Completed the sidequest of meme magic

Co-authored-by: Charles Bochet <charlesBochet@users.noreply.github.com>
2024-10-20 20:27:53 +02:00
a09c5280ee oss.gg - Side quest meme magic completed (#7879)
![image](https://github.com/user-attachments/assets/c2d52346-4fdb-49de-8b70-e3a1da3a7521)

---------

Co-authored-by: Charles Bochet <charlesBochet@users.noreply.github.com>
2024-10-20 20:26:17 +02:00