فهرست منبع

Added option to select default alias format

Will 5 سال پیش
والد
کامیت
3e5673d8f5

+ 2 - 1
app/Http/Controllers/Api/DomainOptionController.php

@@ -10,7 +10,8 @@ class DomainOptionController extends Controller
     {
         return response()->json([
             'data' => user()->domainOptions(),
-            'defaultAliasDomain' => user()->default_alias_domain
+            'defaultAliasDomain' => user()->default_alias_domain,
+            'defaultAliasFormat' => user()->default_alias_format
         ]);
     }
 }

+ 16 - 0
app/Http/Controllers/DefaultAliasController.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Http\Requests\UpdateDefaultAliasFormatRequest;
+
+class DefaultAliasFormatController extends Controller
+{
+    public function update(UpdateDefaultAliasFormatRequest $request)
+    {
+        user()->default_alias_format = $request->format;
+        user()->save();
+
+        return back()->with(['status' => 'Default Alias Format Updated Successfully']);
+    }
+}

+ 2 - 1
app/Http/Controllers/ShowAliasController.php

@@ -16,7 +16,8 @@ class ShowAliasController extends Controller
             'domain' => user()->username.'.'.config('anonaddy.domain'),
             'bandwidthMb' => user()->bandwidth_mb,
             'domainOptions' => user()->domainOptions(),
-            'defaultAliasDomain' => user()->default_alias_domain
+            'defaultAliasDomain' => user()->default_alias_domain,
+            'defaultAliasFormat' => user()->default_alias_format
         ]);
     }
 }

+ 34 - 0
app/Http/Requests/UpdateDefaultAliasFormatRequest.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class UpdateDefaultAliasFormatRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'format' => [
+                'required',
+                'string',
+                'in:uuid,random_words'
+            ]
+        ];
+    }
+}

+ 32 - 0
database/migrations/2020_06_18_105206_add_default_alias_format_to_users_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddDefaultAliasFormatToUsersTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->string('default_alias_format')->after('default_alias_domain')->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->dropColumn('default_alias_format');
+        });
+    }
+}

+ 5 - 1
resources/js/pages/Aliases.vue

@@ -648,6 +648,10 @@ export default {
       type: String,
       required: true,
     },
+    defaultAliasFormat: {
+      type: String,
+      required: true,
+    },
   },
   components: {
     Modal,
@@ -675,7 +679,7 @@ export default {
       generateAliasLoading: false,
       generateAliasDomain: this.defaultAliasDomain ? this.defaultAliasDomain : this.domain,
       generateAliasDescription: '',
-      generateAliasFormat: 'uuid',
+      generateAliasFormat: this.defaultAliasFormat ? this.defaultAliasFormat : 'uuid',
       aliasFormatOptions: [
         {
           value: 'uuid',

+ 1 - 1
resources/views/aliases/index.blade.php

@@ -4,6 +4,6 @@
     <div class="container py-8">
         @include('shared.status')
 
-        <aliases :default-recipient="{{json_encode($defaultRecipient)}}" :initial-aliases="{{json_encode($aliases)}}" :recipient-options="{{json_encode($recipients)}}" :total-forwarded="{{$totalForwarded}}" :total-blocked="{{$totalBlocked}}" :total-replies="{{$totalReplies}}" domain="{{config('anonaddy.domain')}}" subdomain="{{$domain}}" :bandwidth-mb="{{$bandwidthMb}}" :month="{{json_encode(now()->format('M'))}}" :domain-options="{{$domainOptions}}" default-alias-domain={{$defaultAliasDomain}} />
+        <aliases :default-recipient="{{json_encode($defaultRecipient)}}" :initial-aliases="{{json_encode($aliases)}}" :recipient-options="{{json_encode($recipients)}}" :total-forwarded="{{$totalForwarded}}" :total-blocked="{{$totalBlocked}}" :total-replies="{{$totalReplies}}" domain="{{config('anonaddy.domain')}}" subdomain="{{$domain}}" :bandwidth-mb="{{$bandwidthMb}}" :month="{{json_encode(now()->format('M'))}}" :domain-options="{{$domainOptions}}" default-alias-domain="{{$defaultAliasDomain}}" default-alias-format="{{$defaultAliasFormat}}" />
     </div>
 @endsection

+ 45 - 2
resources/views/settings/show.blade.php

@@ -157,10 +157,10 @@
 
                     <div class="mt-4 w-24 border-b-2 border-grey-200"></div>
 
-                    <p class="mt-6">The default alias domain is the domain you'd like to be selected by default in the drop down options when generating a new alias on the site or the browser extension. This will save you needing to select your preferred domain from the dropdown  each time.</p>
+                    <p class="mt-6">The default alias domain is the domain you'd like to be selected by default in the drop down options when generating a new alias on the site or the browser extension. This will save you needing to select your preferred domain from the dropdown each time.</p>
 
                     <div class="mt-6 flex flex-wrap mb-4">
-                        <label for="default-recipient" class="block text-grey-700 text-sm mb-2">
+                        <label for="default-alias-domain" class="block text-grey-700 text-sm mb-2">
                             {{ __('Select Default Domain') }}:
                         </label>
 
@@ -190,6 +190,49 @@
 
             </form>
 
+            <form method="POST" action="{{ route('settings.default_alias_format') }}" class="pt-16">
+                @csrf
+
+                <div class="mb-6">
+
+                    <h3 class="font-bold text-xl">
+                        Update Default Alias Format
+                    </h3>
+
+                    <div class="mt-4 w-24 border-b-2 border-grey-200"></div>
+
+                    <p class="mt-6">The default alias format is the format you'd like to be selected by default in the drop down options when generating a new alias on the site or the browser extension. This will save you needing to select your preferred format from the dropdown each time.</p>
+
+                    <div class="mt-6 flex flex-wrap mb-4">
+                        <label for="default-alias-format" class="block text-grey-700 text-sm mb-2">
+                            {{ __('Select Default Format') }}:
+                        </label>
+
+                        <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:shadow-outline" name="format" required>
+                                <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>
+                            </select>
+                            <div class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700">
+                                <svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z"/></svg>
+                            </div>
+                        </div>
+
+                        @if ($errors->has('format'))
+                            <p class="text-red-500 text-xs italic mt-4">
+                                {{ $errors->first('format') }}
+                            </p>
+                        @endif
+                    </div>
+
+                </div>
+
+                <button type="submit" class="bg-cyan-400 w-full hover:bg-cyan-300 text-cyan-900 font-bold py-3 px-4 rounded focus:outline-none">
+                    {{ __('Update Default Alias Format') }}
+                </button>
+
+            </form>
+
             <form id="update-password" method="POST" action="{{ route('settings.password') }}" class="pt-16">
                 @csrf
 

+ 2 - 0
routes/web.php

@@ -47,6 +47,8 @@ Route::group([
 
     Route::post('/default-alias-domain', 'DefaultAliasDomainController@update')->name('settings.default_alias_domain');
 
+    Route::post('/default-alias-format', 'DefaultAliasFormatController@update')->name('settings.default_alias_format');
+
     Route::post('/from-name', 'FromNameController@update')->name('settings.from_name');
 
     Route::post('/email-subject', 'EmailSubjectController@update')->name('settings.email_subject');

+ 32 - 3
tests/Feature/SettingsTest.php

@@ -85,10 +85,8 @@ class SettingsTest extends TestCase
     /** @test */
     public function user_cannot_update_default_alias_domain_if_invalid()
     {
-        $defaultAliasDomain = 'johndoe.anonaddy.me';
-
         $response = $this->post('/settings/default-alias-domain', [
-            'domain' => $defaultAliasDomain
+            'domain' => 'johndoe.anonaddy.me'
         ]);
 
         $response->assertStatus(302);
@@ -99,6 +97,37 @@ class SettingsTest extends TestCase
         ]);
     }
 
+    /** @test */
+    public function user_can_update_default_alias_format()
+    {
+        $defaultAliasFormat = 'random_words';
+
+        $response = $this->post('/settings/default-alias-format', [
+            'format' => $defaultAliasFormat
+        ]);
+
+        $response->assertStatus(302);
+        $this->assertDatabaseHas('users', [
+            'id' => $this->user->id,
+            'default_alias_format' => $defaultAliasFormat
+        ]);
+    }
+
+    /** @test */
+    public function user_cannot_update_default_alias_format_if_invalid()
+    {
+        $response = $this->post('/settings/default-alias-format', [
+            'format' => 'invalid_format'
+        ]);
+
+        $response->assertStatus(302);
+        $response->assertSessionHasErrors(['format']);
+        $this->assertDatabaseHas('users', [
+            'id' => $this->user->id,
+            'default_alias_format' => null
+        ]);
+    }
+
     /** @test */
     public function user_can_update_reply_from_name()
     {