Selaa lähdekoodia

Bump version to 0.7.1

Daniel Supernault 6 vuotta sitten
vanhempi
commit
e39f88f6c6

+ 110 - 0
app/Console/Commands/FixUsernames.php

@@ -0,0 +1,110 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\{Profile, User};
+use DB;
+
+class FixUsernames extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'fix:usernames';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Fix invalid usernames';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        if(version_compare(config('pixelfed.version'), '0.7.2') !== -1) {
+            $this->info('This command is only for versions lower than 0.7.2');
+            return;
+        }
+
+        $this->info('Collecting data ...');
+
+        $affected = collect([]);
+
+        $users = User::chunk(100, function($users) use($affected) {
+            foreach($users as $user) {
+                $val = str_replace(['-', '_'], '', $user->username);
+                if(!ctype_alnum($val)) {
+                    $this->info('Found invalid username: ' . $user->username);
+                    $affected->push($user);
+                }
+            }
+        });
+        if($affected->count() > 0) {
+            $this->info('Found: ' . $affected->count() . ' affected usernames');
+
+            $opts = [
+                'Random replace (assigns random username)',
+                'Best try replace (assigns alpha numeric username)',
+                'Manual replace (manually set username)'
+            ];
+
+            foreach($affected as $u) {
+                $old = $u->username;
+                $opt = $this->choice('Select fix method:', $opts, 0);
+
+                switch ($opt) {
+                    case $opts[0]:
+                        $new = "user_" . str_random(6);
+                        $this->info('New username: ' . $new);
+                        break;
+
+                    case $opts[1]:
+                        $new = filter_var($old, FILTER_SANITIZE_STRING|FILTER_FLAG_STRIP_LOW);
+                        if(strlen($new) < 6) {
+                            $new = $new . '_' . str_random(4);
+                        }
+                        $this->info('New username: ' . $new);
+                        break;
+
+                    case $opts[2]:
+                        $new = $this->ask('Enter new username:');
+                        $this->info('New username: ' . $new);
+                        break;
+                    
+                    default:
+                        $new = "user_" . str_random(6);
+                        break;
+                }
+
+                DB::transaction(function() use($u, $new) {
+                    $profile = $u->profile;
+                    $profile->username = $new;
+                    $u->username = $new;
+                    $u->save();
+                    $profile->save();
+                });
+                $this->info('Selected: ' . $opt);
+            }
+
+            $this->info('Fixed ' . $affected->count() . ' usernames!');
+        }
+    }
+}

+ 4 - 1
app/Http/Controllers/Auth/RegisterController.php

@@ -55,7 +55,6 @@ class RegisterController extends Controller
         $this->validateUsername($data['username']);
         $usernameRules = [
             'required',
-            'alpha_dash',
             'min:2',
             'max:15',
             'unique:users',
@@ -63,6 +62,10 @@ class RegisterController extends Controller
                 if (!ctype_alpha($value[0])) {
                     return $fail($attribute.' is invalid. Username must be alpha-numeric and start with a letter.');
                 }
+                $val = str_replace(['-', '_'], '', $value);
+                if(!ctype_alnum($val)) {
+                    return $fail($attribute . ' is invalid. Username must be alpha-numeric.');
+                }
             },
         ];
 

+ 1 - 1
config/pixelfed.php

@@ -23,7 +23,7 @@ return [
     | This value is the version of your PixelFed instance.
     |
     */
-    'version' => '0.7.0',
+    'version' => '0.7.1',
 
     /*
     |--------------------------------------------------------------------------