proof-of-concept for very ugly auth0 integration
This commit is contained in:
parent
62b178ed02
commit
923d2e784f
10 changed files with 700 additions and 23 deletions
40
app/Extensions/Auth0/Laravel/UserRepository.php
Normal file
40
app/Extensions/Auth0/Laravel/UserRepository.php
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pterodactyl\Extensions\Auth0\Laravel;
|
||||||
|
|
||||||
|
use Ramsey\Uuid\Uuid;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Pterodactyl\Models\User;
|
||||||
|
use Auth0\Laravel\Contract\Auth\User\Repository as Auth0Repository;
|
||||||
|
|
||||||
|
class UserRepository implements Auth0Repository
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Authenticate the user from a session on Auth0. If there is no account present on the
|
||||||
|
* system currently, create them.
|
||||||
|
*
|
||||||
|
* @param array $user
|
||||||
|
* @return \Illuminate\Contracts\Auth\Authenticatable|null
|
||||||
|
*/
|
||||||
|
public function fromSession(array $user): ?\Illuminate\Contracts\Auth\Authenticatable
|
||||||
|
{
|
||||||
|
$match = User::query()->where('email', $user['email'])->first();
|
||||||
|
if (is_null($match)) {
|
||||||
|
$match = User::query()->forceCreate([
|
||||||
|
'uuid' => Uuid::uuid4()->toString(),
|
||||||
|
'email' => $user['email'],
|
||||||
|
'username' => 'auth0.' . $user['nickname'],
|
||||||
|
'name_first' => 'Auth0',
|
||||||
|
'name_last' => 'User',
|
||||||
|
'password' => password_hash(Str::random(32), PASSWORD_DEFAULT),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $match;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fromAccessToken(array $user): ?\Illuminate\Contracts\Auth\Authenticatable
|
||||||
|
{
|
||||||
|
dd('from token', $user);
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
namespace Pterodactyl\Http;
|
namespace Pterodactyl\Http;
|
||||||
|
|
||||||
use Illuminate\Http\Middleware\TrustProxies;
|
|
||||||
use Pterodactyl\Models\ApiKey;
|
use Pterodactyl\Models\ApiKey;
|
||||||
use Illuminate\Auth\Middleware\Authorize;
|
use Illuminate\Auth\Middleware\Authorize;
|
||||||
|
use Illuminate\Http\Middleware\TrustProxies;
|
||||||
use Illuminate\Auth\Middleware\Authenticate;
|
use Illuminate\Auth\Middleware\Authenticate;
|
||||||
use Pterodactyl\Http\Middleware\TrimStrings;
|
use Pterodactyl\Http\Middleware\TrimStrings;
|
||||||
use Illuminate\Session\Middleware\StartSession;
|
use Illuminate\Session\Middleware\StartSession;
|
||||||
|
@ -60,7 +60,7 @@ class Kernel extends HttpKernel
|
||||||
'web' => [
|
'web' => [
|
||||||
AddQueuedCookiesToResponse::class,
|
AddQueuedCookiesToResponse::class,
|
||||||
StartSession::class,
|
StartSession::class,
|
||||||
AuthenticateSession::class,
|
// AuthenticateSession::class,
|
||||||
ShareErrorsFromSession::class,
|
ShareErrorsFromSession::class,
|
||||||
VerifyCsrfToken::class,
|
VerifyCsrfToken::class,
|
||||||
SubstituteBindings::class,
|
SubstituteBindings::class,
|
||||||
|
@ -82,7 +82,7 @@ class Kernel extends HttpKernel
|
||||||
HandleStatelessRequest::class,
|
HandleStatelessRequest::class,
|
||||||
IsValidJson::class,
|
IsValidJson::class,
|
||||||
StartSession::class,
|
StartSession::class,
|
||||||
AuthenticateSession::class,
|
'auth0.authenticate',
|
||||||
SubstituteClientApiBindings::class,
|
SubstituteClientApiBindings::class,
|
||||||
'api..key:' . ApiKey::TYPE_ACCOUNT,
|
'api..key:' . ApiKey::TYPE_ACCOUNT,
|
||||||
AuthenticateIPAccess::class,
|
AuthenticateIPAccess::class,
|
||||||
|
|
|
@ -11,6 +11,7 @@ use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Auth\Passwords\CanResetPassword;
|
use Illuminate\Auth\Passwords\CanResetPassword;
|
||||||
use Pterodactyl\Traits\Helpers\AvailableLanguages;
|
use Pterodactyl\Traits\Helpers\AvailableLanguages;
|
||||||
use Illuminate\Foundation\Auth\Access\Authorizable;
|
use Illuminate\Foundation\Auth\Access\Authorizable;
|
||||||
|
use Auth0\Laravel\Contract\Model\Stateful\User as StatefulUser;
|
||||||
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
|
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
|
||||||
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
|
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
|
||||||
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
|
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
|
||||||
|
@ -42,7 +43,8 @@ use Pterodactyl\Notifications\SendPasswordReset as ResetPasswordNotification;
|
||||||
class User extends Model implements
|
class User extends Model implements
|
||||||
AuthenticatableContract,
|
AuthenticatableContract,
|
||||||
AuthorizableContract,
|
AuthorizableContract,
|
||||||
CanResetPasswordContract
|
CanResetPasswordContract,
|
||||||
|
StatefulUser
|
||||||
{
|
{
|
||||||
use Authenticatable;
|
use Authenticatable;
|
||||||
use Authorizable;
|
use Authorizable;
|
||||||
|
|
|
@ -27,19 +27,19 @@ class RouteServiceProvider extends ServiceProvider
|
||||||
$this->configureRateLimiting();
|
$this->configureRateLimiting();
|
||||||
|
|
||||||
$this->routes(function () {
|
$this->routes(function () {
|
||||||
Route::middleware(['web', 'auth', 'csrf'])
|
Route::middleware(['auth0.authenticate', 'web'])
|
||||||
->namespace("$this->namespace\\Base")
|
->namespace("$this->namespace\\Base")
|
||||||
->group(base_path('routes/base.php'));
|
->group(base_path('routes/base.php'));
|
||||||
|
|
||||||
Route::middleware(['web', 'auth', 'admin', 'csrf'])->prefix('/admin')
|
Route::middleware(['auth0.authenticate', 'web', 'admin'])->prefix('/admin')
|
||||||
->namespace("$this->namespace\\Admin")
|
->namespace("$this->namespace\\Admin")
|
||||||
->group(base_path('routes/admin.php'));
|
->group(base_path('routes/admin.php'));
|
||||||
|
|
||||||
Route::middleware(['web', 'csrf'])->prefix('/auth')
|
Route::middleware(['web'])->prefix('/auth')
|
||||||
->namespace("$this->namespace\\Auth")
|
->namespace("$this->namespace\\Auth")
|
||||||
->group(base_path('routes/auth.php'));
|
->group(base_path('routes/auth.php'));
|
||||||
|
|
||||||
Route::middleware(['web', 'csrf', 'auth', 'server', 'node.maintenance'])
|
Route::middleware(['auth0.authenticate', 'web', 'csrf', 'server', 'node.maintenance'])
|
||||||
->prefix('/api/server/{server}')
|
->prefix('/api/server/{server}')
|
||||||
->namespace("$this->namespace\\Server")
|
->namespace("$this->namespace\\Server")
|
||||||
->group(base_path('routes/server.php'));
|
->group(base_path('routes/server.php'));
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
"ext-pdo": "*",
|
"ext-pdo": "*",
|
||||||
"ext-pdo_mysql": "*",
|
"ext-pdo_mysql": "*",
|
||||||
"ext-zip": "*",
|
"ext-zip": "*",
|
||||||
|
"auth0/login": "^7.0",
|
||||||
"aws/aws-sdk-php": "^3.171",
|
"aws/aws-sdk-php": "^3.171",
|
||||||
"doctrine/dbal": "~2.13.9",
|
"doctrine/dbal": "~2.13.9",
|
||||||
"guzzlehttp/guzzle": "~7.4.2",
|
"guzzlehttp/guzzle": "~7.4.2",
|
||||||
|
|
555
composer.lock
generated
555
composer.lock
generated
|
@ -4,8 +4,199 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "966e12710f76fb744c32e90103b9f823",
|
"content-hash": "60871d97425bf6a386bd84c246856f8c",
|
||||||
"packages": [
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "auth0/auth0-php",
|
||||||
|
"version": "8.2.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/auth0/auth0-PHP.git",
|
||||||
|
"reference": "610873fcc14c03b92b1e71c167aeb2428919c904"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/auth0/auth0-PHP/zipball/610873fcc14c03b92b1e71c167aeb2428919c904",
|
||||||
|
"reference": "610873fcc14c03b92b1e71c167aeb2428919c904",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-filter": "*",
|
||||||
|
"ext-json": "*",
|
||||||
|
"ext-mbstring": "*",
|
||||||
|
"ext-openssl": "*",
|
||||||
|
"php": "^7.4 || ^8.0, <8.2",
|
||||||
|
"php-http/discovery": "^1.0",
|
||||||
|
"php-http/httplug": "^2.2",
|
||||||
|
"php-http/multipart-stream-builder": "^1.1",
|
||||||
|
"psr/cache": "^1.0 || ^2.0 || ^3.0",
|
||||||
|
"psr/event-dispatcher": "^1.0",
|
||||||
|
"psr/http-client-implementation": "^1.0",
|
||||||
|
"psr/http-factory-implementation": "^1.0",
|
||||||
|
"psr/http-message-implementation": "^1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"ergebnis/phpstan-rules": "^0.15",
|
||||||
|
"firebase/php-jwt": "^6.0",
|
||||||
|
"hyperf/event": "^2.2",
|
||||||
|
"mockery/mockery": "^1.4",
|
||||||
|
"nunomaduro/phpinsights": "^2.0",
|
||||||
|
"nyholm/psr7": "^1.4",
|
||||||
|
"pestphp/pest": "^1.18",
|
||||||
|
"pestphp/pest-plugin-parallel": "^0.2 || ^1.0",
|
||||||
|
"php-http/mock-client": "^1.4",
|
||||||
|
"phpstan/phpstan": "^0.12",
|
||||||
|
"phpstan/phpstan-strict-rules": "^0.12",
|
||||||
|
"symfony/cache": "^4.4 || ^5.2",
|
||||||
|
"thecodingmachine/phpstan-strict-rules": "^0.12",
|
||||||
|
"vimeo/psalm": "^4.10"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Auth0\\SDK\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Auth0",
|
||||||
|
"email": "support@auth0.com",
|
||||||
|
"homepage": "https://auth0.com/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Auth0 PHP SDK. Straight-forward and tested methods for accessing Auth0 Authentication and Management API endpoints.",
|
||||||
|
"homepage": "https://github.com/auth0/auth0-PHP",
|
||||||
|
"keywords": [
|
||||||
|
"Authentication",
|
||||||
|
"JSON Web Token",
|
||||||
|
"JWK",
|
||||||
|
"OpenId",
|
||||||
|
"api",
|
||||||
|
"auth",
|
||||||
|
"auth0",
|
||||||
|
"authorization",
|
||||||
|
"json web key",
|
||||||
|
"jwt",
|
||||||
|
"login",
|
||||||
|
"oauth",
|
||||||
|
"protect",
|
||||||
|
"secure"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/auth0/auth0-PHP/issues",
|
||||||
|
"source": "https://github.com/auth0/auth0-PHP/tree/8.2.0"
|
||||||
|
},
|
||||||
|
"time": "2022-04-26T13:11:00+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "auth0/login",
|
||||||
|
"version": "7.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/auth0/laravel-auth0.git",
|
||||||
|
"reference": "06238bdfa0bdf165b02cb8433a6d3c8e23cfc9ec"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/auth0/laravel-auth0/zipball/06238bdfa0bdf165b02cb8433a6d3c8e23cfc9ec",
|
||||||
|
"reference": "06238bdfa0bdf165b02cb8433a6d3c8e23cfc9ec",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"auth0/auth0-php": "^8.0",
|
||||||
|
"ext-filter": "*",
|
||||||
|
"ext-json": "*",
|
||||||
|
"ext-mbstring": "*",
|
||||||
|
"ext-openssl": "*",
|
||||||
|
"illuminate/contracts": "^8.0 || ^9.0",
|
||||||
|
"illuminate/http": "^8.0 || ^9.0",
|
||||||
|
"illuminate/support": " ^8.0 || ^9.0",
|
||||||
|
"php": "^7.4 || ^8.0",
|
||||||
|
"spatie/laravel-package-tools": "^1.9"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"ergebnis/phpstan-rules": "^1.0",
|
||||||
|
"laravel/laravel": "^8.4.4 || ^9.0",
|
||||||
|
"nunomaduro/larastan": "^1.0",
|
||||||
|
"nunomaduro/phpinsights": "^2.0",
|
||||||
|
"nyholm/psr7": "^1.4",
|
||||||
|
"orchestra/testbench": "6.0",
|
||||||
|
"pestphp/pest": "^1.21",
|
||||||
|
"pestphp/pest-plugin-laravel": "^1.2",
|
||||||
|
"phpstan/phpstan-strict-rules": "^1.1",
|
||||||
|
"phpunit/phpunit": "^9.5",
|
||||||
|
"rector/rector": "^0.12.16",
|
||||||
|
"thecodingmachine/phpstan-strict-rules": "^1.0",
|
||||||
|
"wikimedia/composer-merge-plugin": "^2.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"laravel": {
|
||||||
|
"providers": [
|
||||||
|
"Auth0\\Laravel\\ServiceProvider"
|
||||||
|
],
|
||||||
|
"aliases": {
|
||||||
|
"Auth0": "Auth0\\Laravel\\Facade\\Auth0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"merge-plugin": {
|
||||||
|
"include": [
|
||||||
|
"composer.local.json"
|
||||||
|
],
|
||||||
|
"recurse": true,
|
||||||
|
"replace": true,
|
||||||
|
"ignore-duplicates": false,
|
||||||
|
"merge-dev": true,
|
||||||
|
"merge-extra": false,
|
||||||
|
"merge-extra-deep": false,
|
||||||
|
"merge-scripts": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Auth0\\Laravel\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Auth0",
|
||||||
|
"email": "support@auth0.com",
|
||||||
|
"homepage": "https://auth0.com/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Auth0 Laravel SDK. Straight-forward and tested methods for implementing authentication, and accessing Auth0's Management API endpoints.",
|
||||||
|
"homepage": "https://github.com/auth0/laravel-auth0",
|
||||||
|
"keywords": [
|
||||||
|
"Authentication",
|
||||||
|
"JSON Web Token",
|
||||||
|
"JWK",
|
||||||
|
"OpenId",
|
||||||
|
"api",
|
||||||
|
"auth",
|
||||||
|
"auth0",
|
||||||
|
"authorization",
|
||||||
|
"json web key",
|
||||||
|
"jwt",
|
||||||
|
"laravel",
|
||||||
|
"login",
|
||||||
|
"oauth",
|
||||||
|
"protect",
|
||||||
|
"secure"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/auth0/laravel-auth0/issues",
|
||||||
|
"source": "https://github.com/auth0/laravel-auth0/tree/7.0.0"
|
||||||
|
},
|
||||||
|
"time": "2022-03-21T23:00:50+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "aws/aws-crt-php",
|
"name": "aws/aws-crt-php",
|
||||||
"version": "v1.0.2",
|
"version": "v1.0.2",
|
||||||
|
@ -3195,6 +3386,309 @@
|
||||||
},
|
},
|
||||||
"time": "2020-10-15T08:29:30+00:00"
|
"time": "2020-10-15T08:29:30+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "php-http/discovery",
|
||||||
|
"version": "1.14.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-http/discovery.git",
|
||||||
|
"reference": "de90ab2b41d7d61609f504e031339776bc8c7223"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-http/discovery/zipball/de90ab2b41d7d61609f504e031339776bc8c7223",
|
||||||
|
"reference": "de90ab2b41d7d61609f504e031339776bc8c7223",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1 || ^8.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"nyholm/psr7": "<1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"graham-campbell/phpspec-skip-example-extension": "^5.0",
|
||||||
|
"php-http/httplug": "^1.0 || ^2.0",
|
||||||
|
"php-http/message-factory": "^1.0",
|
||||||
|
"phpspec/phpspec": "^5.1 || ^6.1",
|
||||||
|
"puli/composer-plugin": "1.0.0-beta10"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.9-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Discovery\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Finds installed HTTPlug implementations and PSR-7 message factories",
|
||||||
|
"homepage": "http://php-http.org",
|
||||||
|
"keywords": [
|
||||||
|
"adapter",
|
||||||
|
"client",
|
||||||
|
"discovery",
|
||||||
|
"factory",
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"psr7"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-http/discovery/issues",
|
||||||
|
"source": "https://github.com/php-http/discovery/tree/1.14.1"
|
||||||
|
},
|
||||||
|
"time": "2021-09-18T07:57:46+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "php-http/httplug",
|
||||||
|
"version": "2.3.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-http/httplug.git",
|
||||||
|
"reference": "f640739f80dfa1152533976e3c112477f69274eb"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb",
|
||||||
|
"reference": "f640739f80dfa1152533976e3c112477f69274eb",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1 || ^8.0",
|
||||||
|
"php-http/promise": "^1.1",
|
||||||
|
"psr/http-client": "^1.0",
|
||||||
|
"psr/http-message": "^1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"friends-of-phpspec/phpspec-code-coverage": "^4.1",
|
||||||
|
"phpspec/phpspec": "^5.1 || ^6.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "2.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Client\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Eric GELOEN",
|
||||||
|
"email": "geloen.eric@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com",
|
||||||
|
"homepage": "https://sagikazarmark.hu"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "HTTPlug, the HTTP client abstraction for PHP",
|
||||||
|
"homepage": "http://httplug.io",
|
||||||
|
"keywords": [
|
||||||
|
"client",
|
||||||
|
"http"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-http/httplug/issues",
|
||||||
|
"source": "https://github.com/php-http/httplug/tree/2.3.0"
|
||||||
|
},
|
||||||
|
"time": "2022-02-21T09:52:22+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "php-http/message-factory",
|
||||||
|
"version": "v1.0.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-http/message-factory.git",
|
||||||
|
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1",
|
||||||
|
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.4",
|
||||||
|
"psr/http-message": "^1.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Message\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Factory interfaces for PSR-7 HTTP Message",
|
||||||
|
"homepage": "http://php-http.org",
|
||||||
|
"keywords": [
|
||||||
|
"factory",
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"stream",
|
||||||
|
"uri"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-http/message-factory/issues",
|
||||||
|
"source": "https://github.com/php-http/message-factory/tree/master"
|
||||||
|
},
|
||||||
|
"time": "2015-12-19T14:08:53+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "php-http/multipart-stream-builder",
|
||||||
|
"version": "1.2.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-http/multipart-stream-builder.git",
|
||||||
|
"reference": "11c1d31f72e01c738bbce9e27649a7cca829c30e"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/11c1d31f72e01c738bbce9e27649a7cca829c30e",
|
||||||
|
"reference": "11c1d31f72e01c738bbce9e27649a7cca829c30e",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1 || ^8.0",
|
||||||
|
"php-http/discovery": "^1.7",
|
||||||
|
"php-http/message-factory": "^1.0.2",
|
||||||
|
"psr/http-factory": "^1.0",
|
||||||
|
"psr/http-message": "^1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"nyholm/psr7": "^1.0",
|
||||||
|
"php-http/message": "^1.5",
|
||||||
|
"phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Message\\MultipartStream\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Tobias Nyholm",
|
||||||
|
"email": "tobias.nyholm@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A builder class that help you create a multipart stream",
|
||||||
|
"homepage": "http://php-http.org",
|
||||||
|
"keywords": [
|
||||||
|
"factory",
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"multipart stream",
|
||||||
|
"stream"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-http/multipart-stream-builder/issues",
|
||||||
|
"source": "https://github.com/php-http/multipart-stream-builder/tree/1.2.0"
|
||||||
|
},
|
||||||
|
"time": "2021-05-21T08:32:01+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "php-http/promise",
|
||||||
|
"version": "1.1.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-http/promise.git",
|
||||||
|
"reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
|
||||||
|
"reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1 || ^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"friends-of-phpspec/phpspec-code-coverage": "^4.3.2",
|
||||||
|
"phpspec/phpspec": "^5.1.2 || ^6.2"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.1-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Promise\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Joel Wurtz",
|
||||||
|
"email": "joel.wurtz@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Promise used for asynchronous HTTP requests",
|
||||||
|
"homepage": "http://httplug.io",
|
||||||
|
"keywords": [
|
||||||
|
"promise"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-http/promise/issues",
|
||||||
|
"source": "https://github.com/php-http/promise/tree/1.1.0"
|
||||||
|
},
|
||||||
|
"time": "2020-07-07T09:29:14+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "phpoption/phpoption",
|
"name": "phpoption/phpoption",
|
||||||
"version": "1.8.1",
|
"version": "1.8.1",
|
||||||
|
@ -4363,6 +4857,65 @@
|
||||||
],
|
],
|
||||||
"time": "2020-11-12T18:46:53+00:00"
|
"time": "2020-11-12T18:46:53+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "spatie/laravel-package-tools",
|
||||||
|
"version": "1.11.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/spatie/laravel-package-tools.git",
|
||||||
|
"reference": "baeb3df0ebb3a541394fdaf8cbe6115bf4034a59"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/baeb3df0ebb3a541394fdaf8cbe6115bf4034a59",
|
||||||
|
"reference": "baeb3df0ebb3a541394fdaf8cbe6115bf4034a59",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"illuminate/contracts": "^7.0|^8.0|^9.0",
|
||||||
|
"php": "^7.4|^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"mockery/mockery": "^1.4",
|
||||||
|
"orchestra/testbench": "^5.0|^6.23|^7.0",
|
||||||
|
"phpunit/phpunit": "^9.4",
|
||||||
|
"spatie/test-time": "^1.2"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Spatie\\LaravelPackageTools\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Freek Van der Herten",
|
||||||
|
"email": "freek@spatie.be",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Tools for creating Laravel packages",
|
||||||
|
"homepage": "https://github.com/spatie/laravel-package-tools",
|
||||||
|
"keywords": [
|
||||||
|
"laravel-package-tools",
|
||||||
|
"spatie"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/spatie/laravel-package-tools/issues",
|
||||||
|
"source": "https://github.com/spatie/laravel-package-tools/tree/1.11.3"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/spatie",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2022-03-15T20:01:36+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "spatie/laravel-query-builder",
|
"name": "spatie/laravel-query-builder",
|
||||||
"version": "3.6.2",
|
"version": "3.6.2",
|
||||||
|
|
|
@ -28,7 +28,7 @@ return [
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'defaults' => [
|
'defaults' => [
|
||||||
'guard' => 'web',
|
'guard' => env('APP_AUTH_GUARD', 'web'),
|
||||||
'passwords' => 'users',
|
'passwords' => 'users',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -59,6 +59,11 @@ return [
|
||||||
'driver' => 'token',
|
'driver' => 'token',
|
||||||
'provider' => 'users',
|
'provider' => 'users',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'auth0' => [
|
||||||
|
'driver' => 'auth0',
|
||||||
|
'provider' => 'auth0',
|
||||||
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -83,6 +88,12 @@ return [
|
||||||
'driver' => 'eloquent',
|
'driver' => 'eloquent',
|
||||||
'model' => Pterodactyl\Models\User::class,
|
'model' => Pterodactyl\Models\User::class,
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'auth0' => [
|
||||||
|
'driver' => 'auth0',
|
||||||
|
// 'repository' => Auth0\Laravel\Auth\User\Repository::class,
|
||||||
|
'repository' => Pterodactyl\Extensions\Auth0\Laravel\UserRepository::class,
|
||||||
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
59
config/auth0.php
Normal file
59
config/auth0.php
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Please review available configuration options here:
|
||||||
|
* https://github.com/auth0/auth0-PHP#configuration-options
|
||||||
|
*/
|
||||||
|
return [
|
||||||
|
// Should be assigned either 'api', 'management', or 'webapp' to indicate your application's use case for the SDK.
|
||||||
|
// Determines what configuration options will be required.
|
||||||
|
'strategy' => env('AUTH0_STRATEGY', 'webapp'),
|
||||||
|
|
||||||
|
// Auth0 domain for your tenant, found in your Auth0 Application settings.
|
||||||
|
'domain' => env('AUTH0_DOMAIN'),
|
||||||
|
|
||||||
|
// If you have configured Auth0 to use a custom domain, configure it here.
|
||||||
|
'customDomain' => env('AUTH0_CUSTOM_DOMAIN'),
|
||||||
|
|
||||||
|
// Client ID, found in the Auth0 Application settings.
|
||||||
|
'clientId' => env('AUTH0_CLIENT_ID'),
|
||||||
|
|
||||||
|
// Authentication callback URI, as defined in your Auth0 Application settings.
|
||||||
|
'redirectUri' => env('AUTH0_REDIRECT_URI', env('APP_URL') . '/callback'),
|
||||||
|
|
||||||
|
// Client Secret, found in the Auth0 Application settings.
|
||||||
|
'clientSecret' => env('AUTH0_CLIENT_SECRET'),
|
||||||
|
|
||||||
|
// One or more API identifiers, found in your Auth0 API settings. The SDK uses the first value for building links. If provided, at least one of these values must match the 'aud' claim to validate an ID Token successfully.
|
||||||
|
'audience' => \Auth0\Laravel\Configuration::stringToArrayOrNull(env('AUTH0_AUDIENCE')),
|
||||||
|
|
||||||
|
// One or more scopes to request for Tokens. See https://auth0.com/docs/scopes
|
||||||
|
'scope' => \Auth0\Laravel\Configuration::stringToArrayOrNull(env('AUTH0_SCOPE')),
|
||||||
|
|
||||||
|
// One or more Organization IDs, found in your Auth0 Organization settings. The SDK uses the first value for building links. If provided, at least one of these values must match the 'org_id' claim to validate an ID Token successfully.
|
||||||
|
'organization' => \Auth0\Laravel\Configuration::stringToArrayOrNull(env('AUTH0_ORGANIZATION')),
|
||||||
|
|
||||||
|
// The secret used to derive an encryption key for the user identity in a session cookie and to sign the transient cookies used by the login callback.
|
||||||
|
'cookieSecret' => env('AUTH0_COOKIE_SECRET', env('APP_KEY')),
|
||||||
|
|
||||||
|
// How long, in seconds, before cookies expire. If set to 0 the cookie will expire at the end of the session (when the browser closes).
|
||||||
|
'cookieExpires' => env('COOKIE_EXPIRES', 0),
|
||||||
|
|
||||||
|
// Cookie domain, for example 'www.example.com', for use with PHP sessions and SDK cookies. Defaults to value of HTTP_HOST server environment information.
|
||||||
|
// Note: To make cookies visible on all subdomains then the domain must be prefixed with a dot like '.example.com'.
|
||||||
|
'cookieDomain' => env('AUTH0_COOKIE_DOMAIN'),
|
||||||
|
|
||||||
|
// Specifies path on the domain where the cookies will work. Defaults to '/'. Use a single slash ('/') for all paths on the domain.
|
||||||
|
'cookiePath' => env('AUTH0_COOKIE_PATH'),
|
||||||
|
|
||||||
|
// Defaults to false. Specifies whether cookies should ONLY be sent over secure connections.
|
||||||
|
'cookieSecure' => \Auth0\Laravel\Configuration::stringToBoolOrNull(env('AUTH0_COOKIE_SECURE'), false),
|
||||||
|
|
||||||
|
// Named routes within your Laravel application that the SDK may call during stateful requests for redirections.
|
||||||
|
'routes' => [
|
||||||
|
'home' => env('AUTH0_ROUTE_HOME', '/'),
|
||||||
|
'login' => env('AUTH0_ROUTE_LOGIN', '/auth/providers/auth0/login')
|
||||||
|
]
|
||||||
|
];
|
|
@ -1,4 +1,5 @@
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
import { useState } from 'react';
|
||||||
import { Link, NavLink } from 'react-router-dom';
|
import { Link, NavLink } from 'react-router-dom';
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
import { faCogs, faLayerGroup, faSignOutAlt, faUserCircle } from '@fortawesome/free-solid-svg-icons';
|
import { faCogs, faLayerGroup, faSignOutAlt, faUserCircle } from '@fortawesome/free-solid-svg-icons';
|
||||||
|
@ -7,20 +8,18 @@ import { ApplicationStore } from '@/state';
|
||||||
import SearchContainer from '@/components/dashboard/search/SearchContainer';
|
import SearchContainer from '@/components/dashboard/search/SearchContainer';
|
||||||
import tw, { theme } from 'twin.macro';
|
import tw, { theme } from 'twin.macro';
|
||||||
import styled from 'styled-components/macro';
|
import styled from 'styled-components/macro';
|
||||||
import http from '@/api/http';
|
|
||||||
import SpinnerOverlay from '@/components/elements/SpinnerOverlay';
|
import SpinnerOverlay from '@/components/elements/SpinnerOverlay';
|
||||||
import { useState } from 'react';
|
|
||||||
|
|
||||||
const Navigation = styled.div`
|
const Navigation = styled.div`
|
||||||
${tw`w-full bg-neutral-900 shadow-md overflow-x-auto`};
|
${tw`w-full bg-neutral-900 shadow-md overflow-x-auto`};
|
||||||
|
|
||||||
& > div {
|
& > div {
|
||||||
${tw`mx-auto w-full flex items-center`};
|
${tw`mx-auto w-full flex items-center`};
|
||||||
}
|
}
|
||||||
|
|
||||||
& #logo {
|
& #logo {
|
||||||
${tw`flex-1`};
|
${tw`flex-1`};
|
||||||
|
|
||||||
& > a {
|
& > a {
|
||||||
${tw`text-2xl font-header px-4 no-underline text-neutral-200 hover:text-neutral-100 transition-colors duration-150`};
|
${tw`text-2xl font-header px-4 no-underline text-neutral-200 hover:text-neutral-100 transition-colors duration-150`};
|
||||||
}
|
}
|
||||||
|
@ -29,14 +28,14 @@ const Navigation = styled.div`
|
||||||
|
|
||||||
const RightNavigation = styled.div`
|
const RightNavigation = styled.div`
|
||||||
${tw`flex h-full items-center justify-center`};
|
${tw`flex h-full items-center justify-center`};
|
||||||
|
|
||||||
& > a, & > button, & > .navigation-link {
|
& > a, & > button, & > .navigation-link {
|
||||||
${tw`flex items-center h-full no-underline text-neutral-300 px-6 cursor-pointer transition-all duration-150`};
|
${tw`flex items-center h-full no-underline text-neutral-300 px-6 cursor-pointer transition-all duration-150`};
|
||||||
|
|
||||||
&:active, &:hover {
|
&:active, &:hover {
|
||||||
${tw`text-neutral-100 bg-black`};
|
${tw`text-neutral-100 bg-black`};
|
||||||
}
|
}
|
||||||
|
|
||||||
&:active, &:hover, &.active {
|
&:active, &:hover, &.active {
|
||||||
box-shadow: inset 0 -2px ${theme`colors.cyan.700`.toString()};
|
box-shadow: inset 0 -2px ${theme`colors.cyan.700`.toString()};
|
||||||
}
|
}
|
||||||
|
@ -50,10 +49,13 @@ export default () => {
|
||||||
|
|
||||||
const onTriggerLogout = () => {
|
const onTriggerLogout = () => {
|
||||||
setIsLoggingOut(true);
|
setIsLoggingOut(true);
|
||||||
http.post('/auth/logout').finally(() => {
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
window.location = '/';
|
window.location = '/auth/providers/auth0/logout';
|
||||||
});
|
// http.get('/auth/providers/auth0/logout').finally(() => {
|
||||||
|
// // @ts-ignore
|
||||||
|
// window.location = '/';
|
||||||
|
// });
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -36,6 +36,12 @@ Route::group(['middleware' => 'guest'], function () {
|
||||||
// is created).
|
// is created).
|
||||||
Route::post('/password/reset', 'ResetPasswordController')->name('auth.reset-password');
|
Route::post('/password/reset', 'ResetPasswordController')->name('auth.reset-password');
|
||||||
|
|
||||||
|
Route::namespace("\\Auth0\\Laravel\\Http\\Controller\\Stateful")->prefix('/providers/auth0')->group(function () {
|
||||||
|
Route::get('/login', 'Login')->name('auth.providers.auth0-login');
|
||||||
|
Route::get('/logout', 'Logout')->name('auth.providers.auth0-logout');
|
||||||
|
Route::get('/callback', 'Callback')->name('auth.providers.auth0-callback');
|
||||||
|
});
|
||||||
|
|
||||||
// Catch any other combinations of routes and pass them off to the Vuejs component.
|
// Catch any other combinations of routes and pass them off to the Vuejs component.
|
||||||
Route::fallback('LoginController@index');
|
Route::fallback('LoginController@index');
|
||||||
});
|
});
|
||||||
|
@ -48,4 +54,7 @@ Route::group(['middleware' => 'guest'], function () {
|
||||||
| Endpoint: /auth
|
| Endpoint: /auth
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
Route::post('/logout', 'LoginController@logout')->name('auth.logout')->middleware('auth', 'csrf');
|
Route::namespace("\\Auth0\\Laravel\\Http\\Controller\\Stateful")->group(function () {
|
||||||
|
Route::get('/logout', 'Logout');
|
||||||
|
});
|
||||||
|
//Route::post('/logout', 'LoginController@logout')->name('auth.logout')->middleware('auth', 'csrf');
|
||||||
|
|
Loading…
Reference in a new issue