Quellcode durchsuchen

Add random_characters alias format

Will Browning vor 4 Jahren
Ursprung
Commit
660bf1817a

+ 8 - 1
app/Http/Controllers/Api/AliasController.php

@@ -57,9 +57,16 @@ class AliasController extends Controller
                 'extension' => $extension ?? null
                 'extension' => $extension ?? null
             ];
             ];
         } else {
         } else {
-            if ($request->input('format', 'uuid') === 'random_words') {
+            if ($request->input('format', 'random_characters') === 'random_words') {
                 $localPart = user()->generateRandomWordLocalPart();
                 $localPart = user()->generateRandomWordLocalPart();
 
 
+                $data = [
+                    'email' => $localPart . '@' . $request->domain,
+                    'local_part' => $localPart,
+                ];
+            } elseif ($request->input('format', 'random_characters') === 'random_characters') {
+                $localPart = user()->generateRandomCharacterLocalPart(8);
+
                 $data = [
                 $data = [
                     'email' => $localPart . '@' . $request->domain,
                     'email' => $localPart . '@' . $request->domain,
                     'local_part' => $localPart,
                     'local_part' => $localPart,

+ 2 - 2
app/Http/Requests/StoreAliasRequest.php

@@ -32,7 +32,7 @@ class StoreAliasRequest extends FormRequest
                 Rule::in($this->user()->domainOptions())
                 Rule::in($this->user()->domainOptions())
             ],
             ],
             'description' => 'nullable|max:100',
             'description' => 'nullable|max:100',
-            'format' => 'nullable|in:uuid,random_words,custom'
+            'format' => 'nullable|in:random_characters,uuid,random_words,custom'
         ];
         ];
     }
     }
 
 
@@ -47,7 +47,7 @@ class StoreAliasRequest extends FormRequest
             }),
             }),
             new ValidAliasLocalPart
             new ValidAliasLocalPart
         ], function () {
         ], function () {
-            $format = $this->validationData()['format'] ?? 'uuid';
+            $format = $this->validationData()['format'] ?? 'random_characters';
             return $format === 'custom';
             return $format === 'custom';
         });
         });
     }
     }

+ 1 - 1
app/Http/Requests/UpdateDefaultAliasFormatRequest.php

@@ -27,7 +27,7 @@ class UpdateDefaultAliasFormatRequest extends FormRequest
             'format' => [
             'format' => [
                 'required',
                 'required',
                 'string',
                 'string',
-                'in:uuid,random_words,custom'
+                'in:random_characters,uuid,random_words,custom'
             ]
             ]
         ];
         ];
     }
     }

+ 14 - 0
app/Models/User.php

@@ -363,6 +363,20 @@ class User extends Authenticatable implements MustVerifyEmail
             ->implode('.').mt_rand(0, 999);
             ->implode('.').mt_rand(0, 999);
     }
     }
 
 
+    public function generateRandomCharacterLocalPart(int $length) : string
+    {
+        $alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
+
+        $str = '';
+
+        for ($i = 0; $i < $length; $i++) {
+            $index = random_int(0, 35);
+            $str .= $alphabet[$index];
+        }
+
+        return $str;
+    }
+
     public function domainOptions()
     public function domainOptions()
     {
     {
         $customDomains = $this->verifiedDomains()->pluck('domain')->toArray();
         $customDomains = $this->verifiedDomains()->pluck('domain')->toArray();

+ 6 - 2
resources/js/pages/Aliases.vue

@@ -828,8 +828,12 @@ export default {
       generateAliasDomain: this.defaultAliasDomain ? this.defaultAliasDomain : this.domain,
       generateAliasDomain: this.defaultAliasDomain ? this.defaultAliasDomain : this.domain,
       generateAliasLocalPart: '',
       generateAliasLocalPart: '',
       generateAliasDescription: '',
       generateAliasDescription: '',
-      generateAliasFormat: this.defaultAliasFormat ? this.defaultAliasFormat : 'uuid',
+      generateAliasFormat: this.defaultAliasFormat ? this.defaultAliasFormat : 'random_characters',
       aliasFormatOptions: [
       aliasFormatOptions: [
+        {
+          value: 'random_characters',
+          label: 'Random Characters',
+        },
         {
         {
           value: 'uuid',
           value: 'uuid',
           label: 'UUID',
           label: 'UUID',
@@ -909,7 +913,7 @@ export default {
     }
     }
   },
   },
   watch: {
   watch: {
-    showAliases(value) {
+    showAliases() {
       this.updateAliases()
       this.updateAliases()
     },
     },
   },
   },

+ 1 - 0
resources/views/settings/show.blade.php

@@ -210,6 +210,7 @@
 
 
                         <div class="block relative w-full">
                         <div class="block relative w-full">
                             <select id="default-alias-format" class="block appearance-none w-full text-grey-700 bg-grey-100 p-3 pr-8 rounded shadow focus:ring" name="format" required>
                             <select id="default-alias-format" class="block appearance-none w-full text-grey-700 bg-grey-100 p-3 pr-8 rounded shadow focus:ring" name="format" required>
+                                <option value="random_characters" {{ $user->default_alias_format === 'random_characters' ? 'selected' : '' }}>Random Characters</option>
                                 <option value="uuid" {{ $user->default_alias_format === 'uuid' ? 'selected' : '' }}>UUID</option>
                                 <option value="uuid" {{ $user->default_alias_format === 'uuid' ? 'selected' : '' }}>UUID</option>
                                 <option value="random_words" {{ $user->default_alias_format === 'random_words' ? 'selected' : '' }}>Random Words</option>
                                 <option value="random_words" {{ $user->default_alias_format === 'random_words' ? 'selected' : '' }}>Random Words</option>
                                 <option value="custom" {{ $user->default_alias_format === 'custom' ? 'selected' : '' }}>Custom</option>
                                 <option value="custom" {{ $user->default_alias_format === 'custom' ? 'selected' : '' }}>Custom</option>

+ 15 - 0
tests/Feature/Api/AliasesTest.php

@@ -102,6 +102,21 @@ class AliasesTest extends TestCase
             'local_part' => 'not-required-for-shared-alias'
             'local_part' => 'not-required-for-shared-alias'
         ]);
         ]);
 
 
+        $response->assertStatus(201);
+        $this->assertCount(1, $this->user->aliases);
+        $this->assertEquals($this->user->aliases[0]->local_part, $response->getData()->data->local_part);
+    }
+
+    /** @test */
+    public function user_can_generate_new_uuid_alias()
+    {
+        $response = $this->json('POST', '/api/v1/aliases', [
+            'domain' => 'anonaddy.me',
+            'format' => 'uuid',
+            'description' => 'the description',
+            'local_part' => 'not-required-for-shared-alias'
+        ]);
+
         $response->assertStatus(201);
         $response->assertStatus(201);
         $this->assertCount(1, $this->user->aliases);
         $this->assertCount(1, $this->user->aliases);
         $this->assertEquals($this->user->aliases[0]->id, $response->getData()->data->local_part);
         $this->assertEquals($this->user->aliases[0]->id, $response->getData()->data->local_part);