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 @@ + + + + + + + {{ config_cache('app.name') }} - Authorization + + + + +
+
+
+
+ +
+

Authorize {{ $client->name }}

+
+
+
+ +
+

{{ $client->name }}

+

wants access to your {{request()->user()->username}} account

+
+
+
+ @if (count($scopes) > 0) +
+ @foreach ($scopes as $scope) +
+ +
+

{{ $scope->id }}

+

{{$scope->description}}

+
+
+ @endforeach +
+ @endif + +
+
+ {{ csrf_field() }} + + + + +
+ +
+ {{ csrf_field() }} + {{ method_field('DELETE') }} + + + + +
+
+
+

Click here to log out of this account.

+ +
+
+
+
+
+ +