about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAnsh <anshnanda10@gmail.com>2023-05-04 22:27:05 -0700
committerGitHub <noreply@github.com>2023-05-05 00:27:05 -0500
commitf28405f9283fe326abb1403f1eb0f3b1dfb61211 (patch)
tree30f153bbfd79d4698076582c3b0cac8c07dae093 /src
parent8d78e8581c7d24e2c3f4d96c5217914297542b7b (diff)
downloadvoidsky-f28405f9283fe326abb1403f1eb0f3b1dfb61211.tar.zst
sanitize app passwords name (#589)
Diffstat (limited to 'src')
-rw-r--r--src/view/com/modals/AddAppPasswords.tsx42
1 files changed, 38 insertions, 4 deletions
diff --git a/src/view/com/modals/AddAppPasswords.tsx b/src/view/com/modals/AddAppPasswords.tsx
index 58b53586b..2af9967a7 100644
--- a/src/view/com/modals/AddAppPasswords.tsx
+++ b/src/view/com/modals/AddAppPasswords.tsx
@@ -72,6 +72,19 @@ export function Component({}: {}) {
   }, [store])
 
   const createAppPassword = async () => {
+    // if name is all whitespace, we don't allow it
+    if (!name || !name.trim()) {
+      Toast.show(
+        'Please enter a name for your app password. All spaces is not allowed.',
+      )
+      return
+    }
+    // if name is too short (under 4 chars), we don't allow it
+    if (name.length < 4) {
+      Toast.show('App Password names must be at least 4 characters long.')
+      return
+    }
+
     try {
       const newPassword = await store.me.createAppPassword(name)
       if (newPassword) {
@@ -86,13 +99,27 @@ export function Component({}: {}) {
     }
   }
 
+  const _onChangeText = (text: string) => {
+    // sanitize input
+    // we only all alphanumeric characters, spaces, dashes, and underscores
+    // if the user enters anything else, we ignore it and shake the input container
+    // also, it cannot start with a space
+    if (text.match(/^[a-zA-Z0-9-_ ]*$/)) {
+      setName(text)
+    } else {
+      Toast.show(
+        'App Password names can only contain letters, numbers, spaces, dashes, and underscores.',
+      )
+    }
+  }
+
   return (
     <View style={[styles.container, pal.view]} testID="addAppPasswordsModal">
       <View>
         {!appPassword ? (
           <Text type="lg" style={[pal.text]}>
-            Please enter a unique name for this App Password. We have generated
-            a random name for you.
+            Please enter a unique name for this App Password or use our randomly
+            generated one.
           </Text>
         ) : (
           <Text type="lg" style={[pal.text]}>
@@ -106,7 +133,7 @@ export function Component({}: {}) {
           <View style={[pal.btn, styles.textInputWrapper]}>
             <TextInput
               style={[styles.input, pal.text]}
-              onChangeText={setName}
+              onChangeText={_onChangeText}
               value={name}
               placeholder="Enter a name for this App Password"
               placeholderTextColor={pal.colors.textLight}
@@ -114,6 +141,7 @@ export function Component({}: {}) {
               autoComplete="off"
               autoCapitalize="none"
               autoFocus={true}
+              maxLength={32}
               selectTextOnFocus={true}
               multiline={true} // need this to be true otherwise selectTextOnFocus doesn't work
               numberOfLines={1} // hack for multiline so only one line shows (android)
@@ -154,7 +182,13 @@ export function Component({}: {}) {
           For security reasons, you won't be able to view this again. If you
           lose this password, you'll need to generate a new one.
         </Text>
-      ) : null}
+      ) : (
+        <Text type="xs" style={[pal.textLight, s.mb10, s.mt2]}>
+          Only contain letters, numbers, spaces, dashes, and underscores
+          allowed. Must be at least 4 characters long, but no more than 32
+          characters long.
+        </Text>
+      )}
       <View style={styles.btnContainer}>
         <Button
           type="primary"