about summary refs log tree commit diff
path: root/src/lib/strings
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2025-01-10 17:57:10 +0000
committerGitHub <noreply@github.com>2025-01-10 17:57:10 +0000
commita7da6462865558c7d3766628f4cd8eabd93b68f9 (patch)
tree0883ea6d544bcf0a196b0d17e613210490edce53 /src/lib/strings
parentd79c66af8ac20771c6de08bfc3b9fa953669764a (diff)
downloadvoidsky-a7da6462865558c7d3766628f4cd8eabd93b68f9.tar.zst
[ELI5] Validate too long handles in signup (#7422)
* validate too long handles in signup

* make change handle screen generic
Diffstat (limited to 'src/lib/strings')
-rw-r--r--src/lib/strings/handles.ts12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/lib/strings/handles.ts b/src/lib/strings/handles.ts
index 90786ac3f..bf329a869 100644
--- a/src/lib/strings/handles.ts
+++ b/src/lib/strings/handles.ts
@@ -19,6 +19,10 @@ export function createFullHandle(name: string, domain: string): string {
   return `${name}.${domain}`
 }
 
+export function maxServiceHandleLength(domain: string): number {
+  return 30 - `.${(domain || '').replace(/^[.]+/, '')}`.length
+}
+
 export function isInvalidHandle(handle: string): boolean {
   return handle === 'handle.invalid'
 }
@@ -38,7 +42,11 @@ export interface IsValidHandle {
 }
 
 // More checks from https://github.com/bluesky-social/atproto/blob/main/packages/pds/src/handle/index.ts#L72
-export function validateHandle(str: string, userDomain: string): IsValidHandle {
+export function validateHandle(
+  str: string,
+  userDomain: string,
+  isServiceHandle?: boolean,
+): IsValidHandle {
   const fullHandle = createFullHandle(str, userDomain)
 
   const results = {
@@ -46,7 +54,7 @@ export function validateHandle(str: string, userDomain: string): IsValidHandle {
       !str || (VALIDATE_REGEX.test(fullHandle) && !str.includes('.')),
     hyphenStartOrEnd: !str.startsWith('-') && !str.endsWith('-'),
     frontLength: str.length >= 3,
-    totalLength: fullHandle.length <= 253,
+    totalLength: fullHandle.length <= (isServiceHandle ? 30 : 253),
   }
 
   return {