diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index 0a0c7f684..7bdb39211 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -86,7 +86,7 @@ use DB; use Illuminate\Http\Request; use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Str; -use Laravel\Passport\Passport; +use Laravel\Passport\Client; use League\Fractal; use League\Fractal\Serializer\ArraySerializer; use Storage; @@ -145,16 +145,18 @@ class ApiV1Controller extends Controller ->filter() ->join(','); - $client = Passport::client()->forceFill([ + $secret = Str::random(40); + + $client = new Client; + $client->forceFill([ 'user_id' => null, 'name' => e($request->client_name), - 'secret' => Str::random(40), + 'secret' => $secret, 'redirect' => $uris, 'personal_access_client' => false, 'password_client' => false, 'revoked' => false, ]); - $client->save(); $res = [ @@ -163,7 +165,7 @@ class ApiV1Controller extends Controller 'website' => null, 'redirect_uri' => $client->redirect, 'client_id' => (string) $client->id, - 'client_secret' => $client->secret, + 'client_secret' => $secret, 'vapid_key' => null, ]; diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 2d3f80e6f..b6ba8d67d 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -37,6 +37,7 @@ use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Validator; use Illuminate\Support\ServiceProvider; +use Laravel\Passport\Passport; use Laravel\Pulse\Facades\Pulse; use URL; @@ -53,6 +54,9 @@ class AppServiceProvider extends ServiceProvider URL::forceScheme('https'); } + Passport::$clientUuids = false; + Passport::authorizationView('auth.oauth.authorize'); + Schema::defaultStringLength(191); Paginator::useBootstrap(); Avatar::observe(AvatarObserver::class); diff --git a/app/User.php b/app/User.php index 086e4b0d8..ea7913226 100644 --- a/app/User.php +++ b/app/User.php @@ -8,10 +8,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +use Laravel\Passport\Contracts\OAuthenticatable; use Laravel\Passport\HasApiTokens; use NotificationChannels\WebPush\HasPushSubscriptions; -class User extends Authenticatable +class User extends Authenticatable implements OAuthenticatable { use HasApiTokens, HasFactory, HasPushSubscriptions, Notifiable, SoftDeletes, UserRateLimit; diff --git a/resources/views/auth/oauth/authorize.blade.php b/resources/views/auth/oauth/authorize.blade.php new file mode 100644 index 000000000..a644289ca --- /dev/null +++ b/resources/views/auth/oauth/authorize.blade.php @@ -0,0 +1,97 @@ + + +
+ + + +Authorize {{ $client->name }}
+{{ $client->name }}
+wants access to your {{request()->user()->username}} account
+{{ $scope->id }}
+{{$scope->description}}
+Click here to log out of this account.
+ +