♻️ Update password max length - #1447

Merged
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master
Oct 23, 2025
Merged

♻️ Update password max length#1447
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master

Conversation

@michaelAlvarino

@michaelAlvarinomichaelAlvarino commented Dec 11, 2024

Copy link
Copy Markdown
Contributor

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.

MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44

Discussion: #1448

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.
```
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
```
@michaelAlvarino
michaelAlvarino marked this pull request as ready for review December 11, 2024 03:12
@alejsdevalejsdev changed the title Update password max length♻️ Update password max lengthFeb 18, 2025
@sheep7

Copy link
Copy Markdown

I had the same issue on first time run of a plain clone of the project: I generated the passwords as recommended with the provided python code which led to the prestart container failing with the ValidationError (password - "String should have at most 40 characters").

I'd suggest to raise the limit to something around 100 characters at least, to encourage strong password best practices, such as using passphrases (a 100 bit entropy passphrase with 8 words can easily have around 70 characters).

@stevleibelt

Copy link
Copy Markdown

Hello @michaelAlvarino,

this is my inner Monk writing :-D - Is there a reason to set the password length to 45 or could it be 48 or 64? Because you can divided 48 or 64 by two^^.

@michaelAlvarino

michaelAlvarino commented Apr 21, 2025

Copy link
Copy Markdown
ContributorAuthor

This was a while ago, so I think it was because I was looking for the cutoff point at which everything worked. So no reason in particular. I'll change it to 64 128.

Further increase password length limit to address concerns around
password entropy and make it multiple of 2.

@YuriiMotovYuriiMotov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If people need this, why not?

LGTM

@michaelAlvarino

Copy link
Copy Markdown
ContributorAuthor

@YuriiMotov I needed to regenerate the client, could I get another 👍 ?

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, thanks @michaelAlvarino !

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome, thanks! 🚀

@tiangolo
tiangolo merged commit c612641 into fastapi:masterOct 23, 2025
16 checks passed
rajdavee pushed a commit to OrganyzAI/python-backend that referenced this pull request Dec 30, 2025
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
azzi2023 pushed a commit to azzi2023/organyz-python-backend that referenced this pull request Jan 9, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
BraidaFac pushed a commit to BraidaFac/insurance-broker-api that referenced this pull request Apr 27, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@michaelAlvarino@sheep7@stevleibelt@tiangolo@svlandeg@YuriiMotov@alejsdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

♻️ Update password max length - #1447

Merged
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master
Oct 23, 2025
Merged

♻️ Update password max length#1447
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master

Conversation

@michaelAlvarino

@michaelAlvarinomichaelAlvarino commented Dec 11, 2024

Copy link
Copy Markdown
Contributor

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.

MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44

Discussion: #1448

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.
```
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
```
@michaelAlvarino
michaelAlvarino marked this pull request as ready for review December 11, 2024 03:12
@alejsdevalejsdev changed the title Update password max length♻️ Update password max lengthFeb 18, 2025
@sheep7

Copy link
Copy Markdown

I had the same issue on first time run of a plain clone of the project: I generated the passwords as recommended with the provided python code which led to the prestart container failing with the ValidationError (password - "String should have at most 40 characters").

I'd suggest to raise the limit to something around 100 characters at least, to encourage strong password best practices, such as using passphrases (a 100 bit entropy passphrase with 8 words can easily have around 70 characters).

@stevleibelt

Copy link
Copy Markdown

Hello @michaelAlvarino,

this is my inner Monk writing :-D - Is there a reason to set the password length to 45 or could it be 48 or 64? Because you can divided 48 or 64 by two^^.

@michaelAlvarino

michaelAlvarino commented Apr 21, 2025

Copy link
Copy Markdown
ContributorAuthor

This was a while ago, so I think it was because I was looking for the cutoff point at which everything worked. So no reason in particular. I'll change it to 64 128.

Further increase password length limit to address concerns around
password entropy and make it multiple of 2.

@YuriiMotovYuriiMotov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If people need this, why not?

LGTM

@michaelAlvarino

Copy link
Copy Markdown
ContributorAuthor

@YuriiMotov I needed to regenerate the client, could I get another 👍 ?

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, thanks @michaelAlvarino !

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome, thanks! 🚀

@tiangolo
tiangolo merged commit c612641 into fastapi:masterOct 23, 2025
16 checks passed
rajdavee pushed a commit to OrganyzAI/python-backend that referenced this pull request Dec 30, 2025
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
azzi2023 pushed a commit to azzi2023/organyz-python-backend that referenced this pull request Jan 9, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
BraidaFac pushed a commit to BraidaFac/insurance-broker-api that referenced this pull request Apr 27, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@michaelAlvarino@sheep7@stevleibelt@tiangolo@svlandeg@YuriiMotov@alejsdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

♻️ Update password max length - #1447

Merged
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master
Oct 23, 2025
Merged

♻️ Update password max length#1447
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master

Conversation

@michaelAlvarino

@michaelAlvarinomichaelAlvarino commented Dec 11, 2024

Copy link
Copy Markdown
Contributor

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.

MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44

Discussion: #1448

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.
```
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
```
@michaelAlvarino
michaelAlvarino marked this pull request as ready for review December 11, 2024 03:12
@alejsdevalejsdev changed the title Update password max length♻️ Update password max lengthFeb 18, 2025
@sheep7

Copy link
Copy Markdown

I had the same issue on first time run of a plain clone of the project: I generated the passwords as recommended with the provided python code which led to the prestart container failing with the ValidationError (password - "String should have at most 40 characters").

I'd suggest to raise the limit to something around 100 characters at least, to encourage strong password best practices, such as using passphrases (a 100 bit entropy passphrase with 8 words can easily have around 70 characters).

@stevleibelt

Copy link
Copy Markdown

Hello @michaelAlvarino,

this is my inner Monk writing :-D - Is there a reason to set the password length to 45 or could it be 48 or 64? Because you can divided 48 or 64 by two^^.

@michaelAlvarino

michaelAlvarino commented Apr 21, 2025

Copy link
Copy Markdown
ContributorAuthor

This was a while ago, so I think it was because I was looking for the cutoff point at which everything worked. So no reason in particular. I'll change it to 64 128.

Further increase password length limit to address concerns around
password entropy and make it multiple of 2.

@YuriiMotovYuriiMotov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If people need this, why not?

LGTM

@michaelAlvarino

Copy link
Copy Markdown
ContributorAuthor

@YuriiMotov I needed to regenerate the client, could I get another 👍 ?

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, thanks @michaelAlvarino !

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome, thanks! 🚀

@tiangolo
tiangolo merged commit c612641 into fastapi:masterOct 23, 2025
16 checks passed
rajdavee pushed a commit to OrganyzAI/python-backend that referenced this pull request Dec 30, 2025
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
azzi2023 pushed a commit to azzi2023/organyz-python-backend that referenced this pull request Jan 9, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
BraidaFac pushed a commit to BraidaFac/insurance-broker-api that referenced this pull request Apr 27, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@michaelAlvarino@sheep7@stevleibelt@tiangolo@svlandeg@YuriiMotov@alejsdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

♻️ Update password max length - #1447

Merged
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master
Oct 23, 2025
Merged

♻️ Update password max length#1447
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master

Conversation

@michaelAlvarino

@michaelAlvarinomichaelAlvarino commented Dec 11, 2024

Copy link
Copy Markdown
Contributor

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.

MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44

Discussion: #1448

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.
```
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
```
@michaelAlvarino
michaelAlvarino marked this pull request as ready for review December 11, 2024 03:12
@alejsdevalejsdev changed the title Update password max length♻️ Update password max lengthFeb 18, 2025
@sheep7

Copy link
Copy Markdown

I had the same issue on first time run of a plain clone of the project: I generated the passwords as recommended with the provided python code which led to the prestart container failing with the ValidationError (password - "String should have at most 40 characters").

I'd suggest to raise the limit to something around 100 characters at least, to encourage strong password best practices, such as using passphrases (a 100 bit entropy passphrase with 8 words can easily have around 70 characters).

@stevleibelt

Copy link
Copy Markdown

Hello @michaelAlvarino,

this is my inner Monk writing :-D - Is there a reason to set the password length to 45 or could it be 48 or 64? Because you can divided 48 or 64 by two^^.

@michaelAlvarino

michaelAlvarino commented Apr 21, 2025

Copy link
Copy Markdown
ContributorAuthor

This was a while ago, so I think it was because I was looking for the cutoff point at which everything worked. So no reason in particular. I'll change it to 64 128.

Further increase password length limit to address concerns around
password entropy and make it multiple of 2.

@YuriiMotovYuriiMotov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If people need this, why not?

LGTM

@michaelAlvarino

Copy link
Copy Markdown
ContributorAuthor

@YuriiMotov I needed to regenerate the client, could I get another 👍 ?

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, thanks @michaelAlvarino !

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome, thanks! 🚀

@tiangolo
tiangolo merged commit c612641 into fastapi:masterOct 23, 2025
16 checks passed
rajdavee pushed a commit to OrganyzAI/python-backend that referenced this pull request Dec 30, 2025
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
azzi2023 pushed a commit to azzi2023/organyz-python-backend that referenced this pull request Jan 9, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
BraidaFac pushed a commit to BraidaFac/insurance-broker-api that referenced this pull request Apr 27, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@michaelAlvarino@sheep7@stevleibelt@tiangolo@svlandeg@YuriiMotov@alejsdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

♻️ Update password max length - #1447

Merged
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master
Oct 23, 2025
Merged

♻️ Update password max length#1447
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master

Conversation

@michaelAlvarino

@michaelAlvarinomichaelAlvarino commented Dec 11, 2024

Copy link
Copy Markdown
Contributor

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.

MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44

Discussion: #1448

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.
```
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
```
@michaelAlvarino
michaelAlvarino marked this pull request as ready for review December 11, 2024 03:12
@alejsdevalejsdev changed the title Update password max length♻️ Update password max lengthFeb 18, 2025
@sheep7

Copy link
Copy Markdown

I had the same issue on first time run of a plain clone of the project: I generated the passwords as recommended with the provided python code which led to the prestart container failing with the ValidationError (password - "String should have at most 40 characters").

I'd suggest to raise the limit to something around 100 characters at least, to encourage strong password best practices, such as using passphrases (a 100 bit entropy passphrase with 8 words can easily have around 70 characters).

@stevleibelt

Copy link
Copy Markdown

Hello @michaelAlvarino,

this is my inner Monk writing :-D - Is there a reason to set the password length to 45 or could it be 48 or 64? Because you can divided 48 or 64 by two^^.

@michaelAlvarino

michaelAlvarino commented Apr 21, 2025

Copy link
Copy Markdown
ContributorAuthor

This was a while ago, so I think it was because I was looking for the cutoff point at which everything worked. So no reason in particular. I'll change it to 64 128.

Further increase password length limit to address concerns around
password entropy and make it multiple of 2.

@YuriiMotovYuriiMotov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If people need this, why not?

LGTM

@michaelAlvarino

Copy link
Copy Markdown
ContributorAuthor

@YuriiMotov I needed to regenerate the client, could I get another 👍 ?

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, thanks @michaelAlvarino !

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome, thanks! 🚀

@tiangolo
tiangolo merged commit c612641 into fastapi:masterOct 23, 2025
16 checks passed
rajdavee pushed a commit to OrganyzAI/python-backend that referenced this pull request Dec 30, 2025
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
azzi2023 pushed a commit to azzi2023/organyz-python-backend that referenced this pull request Jan 9, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
BraidaFac pushed a commit to BraidaFac/insurance-broker-api that referenced this pull request Apr 27, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@michaelAlvarino@sheep7@stevleibelt@tiangolo@svlandeg@YuriiMotov@alejsdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

♻️ Update password max length - #1447

Merged
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master
Oct 23, 2025
Merged

♻️ Update password max length#1447
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master

Conversation

@michaelAlvarino

@michaelAlvarinomichaelAlvarino commented Dec 11, 2024

Copy link
Copy Markdown
Contributor

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.

MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44

Discussion: #1448

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.
```
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
```
@michaelAlvarino
michaelAlvarino marked this pull request as ready for review December 11, 2024 03:12
@alejsdevalejsdev changed the title Update password max length♻️ Update password max lengthFeb 18, 2025
@sheep7

Copy link
Copy Markdown

I had the same issue on first time run of a plain clone of the project: I generated the passwords as recommended with the provided python code which led to the prestart container failing with the ValidationError (password - "String should have at most 40 characters").

I'd suggest to raise the limit to something around 100 characters at least, to encourage strong password best practices, such as using passphrases (a 100 bit entropy passphrase with 8 words can easily have around 70 characters).

@stevleibelt

Copy link
Copy Markdown

Hello @michaelAlvarino,

this is my inner Monk writing :-D - Is there a reason to set the password length to 45 or could it be 48 or 64? Because you can divided 48 or 64 by two^^.

@michaelAlvarino

michaelAlvarino commented Apr 21, 2025

Copy link
Copy Markdown
ContributorAuthor

This was a while ago, so I think it was because I was looking for the cutoff point at which everything worked. So no reason in particular. I'll change it to 64 128.

Further increase password length limit to address concerns around
password entropy and make it multiple of 2.

@YuriiMotovYuriiMotov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If people need this, why not?

LGTM

@michaelAlvarino

Copy link
Copy Markdown
ContributorAuthor

@YuriiMotov I needed to regenerate the client, could I get another 👍 ?

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, thanks @michaelAlvarino !

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome, thanks! 🚀

@tiangolo
tiangolo merged commit c612641 into fastapi:masterOct 23, 2025
16 checks passed
rajdavee pushed a commit to OrganyzAI/python-backend that referenced this pull request Dec 30, 2025
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
azzi2023 pushed a commit to azzi2023/organyz-python-backend that referenced this pull request Jan 9, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
BraidaFac pushed a commit to BraidaFac/insurance-broker-api that referenced this pull request Apr 27, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@michaelAlvarino@sheep7@stevleibelt@tiangolo@svlandeg@YuriiMotov@alejsdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

♻️ Update password max length - #1447

Merged
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master
Oct 23, 2025
Merged

♻️ Update password max length#1447
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master

Conversation

@michaelAlvarino

@michaelAlvarinomichaelAlvarino commented Dec 11, 2024

Copy link
Copy Markdown
Contributor

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.

MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44

Discussion: #1448

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.
```
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
```
@michaelAlvarino
michaelAlvarino marked this pull request as ready for review December 11, 2024 03:12
@alejsdevalejsdev changed the title Update password max length♻️ Update password max lengthFeb 18, 2025
@sheep7

Copy link
Copy Markdown

I had the same issue on first time run of a plain clone of the project: I generated the passwords as recommended with the provided python code which led to the prestart container failing with the ValidationError (password - "String should have at most 40 characters").

I'd suggest to raise the limit to something around 100 characters at least, to encourage strong password best practices, such as using passphrases (a 100 bit entropy passphrase with 8 words can easily have around 70 characters).

@stevleibelt

Copy link
Copy Markdown

Hello @michaelAlvarino,

this is my inner Monk writing :-D - Is there a reason to set the password length to 45 or could it be 48 or 64? Because you can divided 48 or 64 by two^^.

@michaelAlvarino

michaelAlvarino commented Apr 21, 2025

Copy link
Copy Markdown
ContributorAuthor

This was a while ago, so I think it was because I was looking for the cutoff point at which everything worked. So no reason in particular. I'll change it to 64 128.

Further increase password length limit to address concerns around
password entropy and make it multiple of 2.

@YuriiMotovYuriiMotov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If people need this, why not?

LGTM

@michaelAlvarino

Copy link
Copy Markdown
ContributorAuthor

@YuriiMotov I needed to regenerate the client, could I get another 👍 ?

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, thanks @michaelAlvarino !

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome, thanks! 🚀

@tiangolo
tiangolo merged commit c612641 into fastapi:masterOct 23, 2025
16 checks passed
rajdavee pushed a commit to OrganyzAI/python-backend that referenced this pull request Dec 30, 2025
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
azzi2023 pushed a commit to azzi2023/organyz-python-backend that referenced this pull request Jan 9, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
BraidaFac pushed a commit to BraidaFac/insurance-broker-api that referenced this pull request Apr 27, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@michaelAlvarino@sheep7@stevleibelt@tiangolo@svlandeg@YuriiMotov@alejsdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

♻️ Update password max length - #1447

Merged
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master
Oct 23, 2025
Merged

♻️ Update password max length#1447
tiangolo merged 6 commits into
fastapi:masterfrom
michaelAlvarino:master

Conversation

@michaelAlvarino

@michaelAlvarinomichaelAlvarino commented Dec 11, 2024

Copy link
Copy Markdown
Contributor

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.

MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44

Discussion: #1448

On my machine, the command provided to generate a password (using
python3 specifically), results in a 44 character string, while the
maximum allowable character length in the model is 40, causing a
conflict. This PR updates the max_legnth for all password model
definitions.
```
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
MacBook-Pro-3:full-stack-fastapi-template michaelalvarino$ python3 -c "import secrets; print(secrets.token_urlsafe(32))" | wc -c
44
```
@michaelAlvarino
michaelAlvarino marked this pull request as ready for review December 11, 2024 03:12
@alejsdevalejsdev changed the title Update password max length♻️ Update password max lengthFeb 18, 2025
@sheep7

Copy link
Copy Markdown

I had the same issue on first time run of a plain clone of the project: I generated the passwords as recommended with the provided python code which led to the prestart container failing with the ValidationError (password - "String should have at most 40 characters").

I'd suggest to raise the limit to something around 100 characters at least, to encourage strong password best practices, such as using passphrases (a 100 bit entropy passphrase with 8 words can easily have around 70 characters).

@stevleibelt

Copy link
Copy Markdown

Hello @michaelAlvarino,

this is my inner Monk writing :-D - Is there a reason to set the password length to 45 or could it be 48 or 64? Because you can divided 48 or 64 by two^^.

@michaelAlvarino

michaelAlvarino commented Apr 21, 2025

Copy link
Copy Markdown
ContributorAuthor

This was a while ago, so I think it was because I was looking for the cutoff point at which everything worked. So no reason in particular. I'll change it to 64 128.

Further increase password length limit to address concerns around
password entropy and make it multiple of 2.

@YuriiMotovYuriiMotov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If people need this, why not?

LGTM

@michaelAlvarino

Copy link
Copy Markdown
ContributorAuthor

@YuriiMotov I needed to regenerate the client, could I get another 👍 ?

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, thanks @michaelAlvarino !

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome, thanks! 🚀

@tiangolo
tiangolo merged commit c612641 into fastapi:masterOct 23, 2025
16 checks passed
rajdavee pushed a commit to OrganyzAI/python-backend that referenced this pull request Dec 30, 2025
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
azzi2023 pushed a commit to azzi2023/organyz-python-backend that referenced this pull request Jan 9, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
BraidaFac pushed a commit to BraidaFac/insurance-broker-api that referenced this pull request Apr 27, 2026
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@michaelAlvarino@sheep7@stevleibelt@tiangolo@svlandeg@YuriiMotov@alejsdev