From 7a8839c6ec9121897ce2eb2106bf132d5c95943b Mon Sep 17 00:00:00 2001 From: Kwesi Banson Jnr Date: Wed, 27 May 2026 12:08:49 +0000 Subject: [PATCH] added the single sign on logic --- php_code/.env | 12 ++- .../Http/Controllers/Api/AuthController.php | 47 ++++++++++ .../Controllers/LandingpageController.php | 1 - .../app/Http/Controllers/SsoController.php | 55 +++++++++++ .../Http/Controllers/UserloginController.php | 26 +++++- php_code/app/Models/User.php | 2 + php_code/bootstrap/app.php | 5 +- php_code/composer.json | 1 + php_code/composer.lock | 65 ++++++++++++- php_code/config/sanctum.php | 87 ++++++++++++++++++ ...02_create_personal_access_tokens_table.php | 33 +++++++ php_code/lupmis | Bin 0 -> 102400 bytes php_code/resources/views/landing.blade.php | 3 +- php_code/routes/api.php | 27 ++++++ php_code/routes/web.php | 2 + .../vendor/composer/autoload_classmap.php | 42 +++++++++ php_code/vendor/composer/autoload_psr4.php | 1 + php_code/vendor/composer/autoload_static.php | 47 ++++++++++ php_code/vendor/composer/installed.json | 66 +++++++++++++ php_code/vendor/composer/installed.php | 9 ++ 20 files changed, 519 insertions(+), 12 deletions(-) create mode 100644 php_code/app/Http/Controllers/Api/AuthController.php create mode 100644 php_code/app/Http/Controllers/SsoController.php create mode 100644 php_code/config/sanctum.php create mode 100644 php_code/database/migrations/2026_05_27_090302_create_personal_access_tokens_table.php create mode 100644 php_code/lupmis create mode 100644 php_code/routes/api.php diff --git a/php_code/.env b/php_code/.env index 599be8f7..66ef4a66 100644 --- a/php_code/.env +++ b/php_code/.env @@ -7,10 +7,15 @@ LOG_CHANNEL=daily LUPMISAPIKEY=1c46538c712e9b5b MNOTOFYKEY=hFsiPMAPS3sIdwYSIthRO5JtS -DB_CONNECTION=mysql -DB_HOST=host.docker.internal +#DB_CONNECTION=mysql +#DB_HOST=host.docker.internal + +DB_CONNECTION=sqlite +#DB_DATABASE=database/lupmis.sqlite +DB_DATABASE=/var/www/html/database/lupmis.sqlite + DB_PORT=3306 -DB_DATABASE=lupmis +#DB_DATABASE=lupmis.sqlite DB_USERNAME=root DB_PASSWORD=p@ssw0rd @@ -19,6 +24,7 @@ CACHE_DRIVER=file QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 +SESSION_DOMAIN=.housebanson.net REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null diff --git a/php_code/app/Http/Controllers/Api/AuthController.php b/php_code/app/Http/Controllers/Api/AuthController.php new file mode 100644 index 00000000..2539a080 --- /dev/null +++ b/php_code/app/Http/Controllers/Api/AuthController.php @@ -0,0 +1,47 @@ +json([ + 'message' => 'Welcome to your Laravel 11 API!', + 'status' => 'success' + ], 200); + } + + // Generate token on login + public function login(Request $request) + { + $request->validate([ + 'email' => 'required|email', + 'password' => 'required', + ]); + + $user = User::where('email', $request->email)->first(); + + if (!$user || !Hash::check($request->password, $user->password)) { + return response()->json([ + 'message' => 'Invalid credentials' + ], 401); + } + + // Generate the plain text token using Sanctum + $token = $user->createToken('auth_token')->plainTextToken; + + return response()->json([ + 'access_token' => $token, + 'token_type' => 'Bearer', + ], 200); + } +} + +?> \ No newline at end of file diff --git a/php_code/app/Http/Controllers/LandingpageController.php b/php_code/app/Http/Controllers/LandingpageController.php index d76a4266..155e4a13 100644 --- a/php_code/app/Http/Controllers/LandingpageController.php +++ b/php_code/app/Http/Controllers/LandingpageController.php @@ -12,7 +12,6 @@ class LandingpageController extends Controller $data = [ 'page_title' => 'Landing Page' ]; - // dump(session('current_user')); return view('landing', $data); } diff --git a/php_code/app/Http/Controllers/SsoController.php b/php_code/app/Http/Controllers/SsoController.php new file mode 100644 index 00000000..90396f27 --- /dev/null +++ b/php_code/app/Http/Controllers/SsoController.php @@ -0,0 +1,55 @@ +input('token'); + // dd(plainToken); + + \Log::info("New Request : $plainToken"); + + if (!$plainToken) { + return response()->json(['valid' => false], 400); + } + $hashedToken = hash('sha256', $plainToken); + \Log::info("hashed Token : $hashedToken"); + + + + $session = DB::table('sso_sessions')->where('token', $hashedToken)->first(); + \Log::info("session : " . json_encode($session)); + if ($session){ + $check_user_url = 'user_mgt/get_user_by_user_id.php'; + $data = ['user_id' => $session->user_id, 'api_token' => env('LUPMISAPIKEY')]; + + $check_user = ApiCalls::CurlPost(json_encode($data), $check_user_url); + if($check_user == false){ + \Log::info("User not found : $hashedToken"); + return response()->json(['valid' => false], 401); + } + $result = json_decode($check_user, true); + if($result['success'] == false){ + return response()->json(['valid' => false], 401); + } + // if($result['data']['is_disabled'] == true){ + // return response()->json(['valid 099' => false], 401); + // } + $logged_in = $result['data']; + return response()->json([ + 'valid' => true, + 'logged_in_user' => $logged_in + ], 200); + } + return response()->json(['valid 0123' => false], 401); +} +} diff --git a/php_code/app/Http/Controllers/UserloginController.php b/php_code/app/Http/Controllers/UserloginController.php index df36c7e5..727c2cf3 100644 --- a/php_code/app/Http/Controllers/UserloginController.php +++ b/php_code/app/Http/Controllers/UserloginController.php @@ -4,7 +4,9 @@ namespace App\Http\Controllers; use App\Utilities\ApiCalls; use Session; use Illuminate\Http\Request; - +use Illuminate\Support\Facades\Cookie; +use Illuminate\Support\Str; +use Illuminate\Support\Facades\DB; class UserloginController extends Controller { @@ -20,7 +22,8 @@ class UserloginController extends Controller $this->validate($request, ['username' => 'required', 'password' => 'required']); $logged_in = ''; - # call API here to login + + // dd(config('database.connections.sqlite.database')); $check_user_url = 'auth/auth_user.php'; $data = ['user' => $request->username, 'pass' => $request->password, 'api_token' => env('LUPMISAPIKEY')]; @@ -42,7 +45,6 @@ class UserloginController extends Controller "region_id":10, "district_id":122 } - */ @@ -57,6 +59,14 @@ class UserloginController extends Controller ##return redirect("user-login")->withErrors(array("Your Account has been disabled. Contact your administrator!"))->withInput(); } $logged_in = $result['data']; + $plainToken = Str::random(60); + + // $hashedToken = hash('sha256', $plainToken); + DB::table('sso_sessions')->insert([ + 'user_id' => $logged_in['user_id'], + 'token' => hash('sha256', $plainToken), + 'created_at' => now(), + ]); $request->session()->regenerate(true); $request->session()->put('current_user.ua_id', $logged_in['ua_id']); @@ -72,10 +82,12 @@ class UserloginController extends Controller $request->session()->put('current_user.region_id', $logged_in['region_id']); $request->session()->put('current_user.is_password_changed', $logged_in['is_password_changed']); $request->session()->put('current_user.district_id', $logged_in['district_id']); + // $request->session()->put('current_user.hashedToken', $hashedToken); + $request->session()->put('current_user.plainToken', $plainToken); + // $request->session()->put('current_user.permissions', $logged_in['permissions']); - - + Cookie::queue('sso_auth_token', $plainToken, 60, '/', '.lupmis4luspa.org'); \Log::info($logged_in['full_name']. ' Successfully logged in at : ' . date('Y-m-d H:i:s')); return redirect(url('/')); } @@ -83,6 +95,10 @@ class UserloginController extends Controller $user_id = session('current_user.id'); $username = session('current_user.name'); + $plainToken = request()->cookie('sso_auth_token'); + if ($plainToken) { + Cookie::queue(Cookie::forget('sso_auth_token', '/', '.lupmis4luspa.org')); + } $logout_user_url = 'auth/logout_user.php'; $data = ['user_id' => $user_id, 'api_token' => env('LUPMISAPIKEY')]; diff --git a/php_code/app/Models/User.php b/php_code/app/Models/User.php index 749c7b77..65642024 100644 --- a/php_code/app/Models/User.php +++ b/php_code/app/Models/User.php @@ -6,11 +6,13 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { /** @use HasFactory<\Database\Factories\UserFactory> */ use HasFactory, Notifiable; + use HasApiTokens; /** * The attributes that are mass assignable. diff --git a/php_code/bootstrap/app.php b/php_code/bootstrap/app.php index 7b162dac..f0cc75b1 100644 --- a/php_code/bootstrap/app.php +++ b/php_code/bootstrap/app.php @@ -7,11 +7,14 @@ use Illuminate\Foundation\Configuration\Middleware; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', + api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { - // + $middleware->encryptCookies(except: [ + 'sso_auth_token', + ]); }) ->withExceptions(function (Exceptions $exceptions) { // diff --git a/php_code/composer.json b/php_code/composer.json index 8c07d8c9..3224c253 100644 --- a/php_code/composer.json +++ b/php_code/composer.json @@ -8,6 +8,7 @@ "require": { "php": "^8.2", "laravel/framework": "^11.31", + "laravel/sanctum": "^4.0", "laravel/tinker": "^2.9", "laravel/ui": "^4.6" }, diff --git a/php_code/composer.lock b/php_code/composer.lock index 3b697952..7485bc58 100644 --- a/php_code/composer.lock +++ b/php_code/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a7159c5237c3c2e75dbd1d23c85e732c", + "content-hash": "c48ad68828797abd55f721d8cceec781", "packages": [ { "name": "brick/math", @@ -1326,6 +1326,69 @@ }, "time": "2026-02-03T06:57:26+00:00" }, + { + "name": "laravel/sanctum", + "version": "v4.3.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "2a9bccc18e9907808e0018dd15fa643937886b1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/2a9bccc18e9907808e0018dd15fa643937886b1e", + "reference": "2a9bccc18e9907808e0018dd15fa643937886b1e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^11.0|^12.0|^13.0", + "illuminate/contracts": "^11.0|^12.0|^13.0", + "illuminate/database": "^11.0|^12.0|^13.0", + "illuminate/support": "^11.0|^12.0|^13.0", + "php": "^8.2", + "symfony/console": "^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.6", + "orchestra/testbench": "^9.15|^10.8|^11.0", + "phpstan/phpstan": "^1.10" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2026-04-30T11:46:25+00:00" + }, { "name": "laravel/serializable-closure", "version": "v2.0.9", diff --git a/php_code/config/sanctum.php b/php_code/config/sanctum.php new file mode 100644 index 00000000..cde73cff --- /dev/null +++ b/php_code/config/sanctum.php @@ -0,0 +1,87 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + Sanctum::currentApplicationUrlWithPort(), + // Sanctum::currentRequestHost(), + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. This will override any values set in the token's + | "expires_at" attribute, but first-party sessions are not affected. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Token Prefix + |-------------------------------------------------------------------------- + | + | Sanctum can prefix new tokens in order to take advantage of numerous + | security scanning initiatives maintained by open source platforms + | that notify developers if they commit tokens into repositories. + | + | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning + | + */ + + 'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'authenticate_session' => AuthenticateSession::class, + 'encrypt_cookies' => EncryptCookies::class, + 'validate_csrf_token' => ValidateCsrfToken::class, + ], + +]; diff --git a/php_code/database/migrations/2026_05_27_090302_create_personal_access_tokens_table.php b/php_code/database/migrations/2026_05_27_090302_create_personal_access_tokens_table.php new file mode 100644 index 00000000..40ff706e --- /dev/null +++ b/php_code/database/migrations/2026_05_27_090302_create_personal_access_tokens_table.php @@ -0,0 +1,33 @@ +id(); + $table->morphs('tokenable'); + $table->text('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable()->index(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/php_code/lupmis b/php_code/lupmis new file mode 100644 index 0000000000000000000000000000000000000000..19d456175a0d9d16c3e5b6246646a0e0ad1510f5 GIT binary patch literal 102400 zcmeI(&u`Oa7{GCxrgeW%0+eD9LNe*55y7?;#HtEy8e^4K4H(d(4W`L+lNT@~PKcdC z(Kw{Qj+6KscHJMc!_K?yy2DP}Y1(bCU)zn{I0dfOH|h_^e*OA=KhN{Nw&Ql~#uYaZ z*4=iuPanWTbD9E)3e>)Ps#Td!-d zGKi~tU1L>Q*-q!EVLn^dw~xQJoz6y6*uhpu{s^trTeqdRIG**h`?D96$vdmEFUMJi&ySlo0#4s-|==~Ea zv+g=>QO%@8!g=<7_qCj?AasffY~cqLW`$-2QYB zcQVOph`Ua&8CaKZ-MqPSZQWj9y}Gite(CD<>h|}C6xB;ZQOV%g8%|KaFZ|Tv;Ve~Z zOG1^CyHRT9YzW$coV3F<7z~(HN_T|UaJ_q@3uGddjJQ+LMC=w2@Xa; z-SO(88K!247gs3Dr87P6Fs|qN_jm7=&J~qK)#`=A6XxoIuBk!bKa%55*wLgQPhw#= z6LEVn^=5AE;Dq`9yzZ;rLM>ZmOElYt?+?XMiBDm>i$voiTpI={%CzdXUN+46dHuOa z!X3uhKR6U%wbNSP_?r1h^!rEop z9M~&uQVp^fQ*X-s@{D1crrv)x=$+cWKc`1~^<~p(=FLrS-;wJ63G-ufRQ^Y8kGe4X z!?azR5h)dy4Z zB0(N~CVO;wa_q{PBzxTH5y#CG9zJ5cSzdL0Z5ZasllpUAg(+!O@_RBHtYmfA=x|Wx z46vl;WEjZ_%;k0JJ$ds2WJ*2sX8^%vWXj>d#fK#PMDWZ zjtY0u6MHdPn(BWtZkS6;`t}J$(Q$nLal6~F!@(cKSM|9oC$dPnWkNC0lGDWwL8|r9 zRbuXz^b9h%D9Uy>s<&EQotQAcTN>5l+-BK}xvLF%qca)a>^LRET$F>@P^lP(Oy1ap z-H0!m)SB_Q|Jgf(;lfcGs`Ueo>h|22nkZh3D|WS6{U~KwclLYhv%$zKfYAYo`nV~& z?p-&Y_6Pcv#4I;r;RSYULk`vGz9yCN`LV3zUb0@_H({PRqu-83WpuLkg*>mxYlQgR zoxB~(IPKbaI_&&eSyY~Gbi+J#O5dJSb++7lU3DJt2TS`hHB|;1lJTCLG1B=r^1fnc z_gp4*bvJynt{%DH?!LI59epT@FzLIup zsNiC9jOZiPsHC1(vX+!opY22k5AXl=^52^L;)MVL2q1s}0tg_000IagfB*so5jdca zozi#yRKPEV_y6*b{&^vQ00IagfB*srAbzx~WB~#QAb?V@wYbKmY**5I_I{1Q0*~ z0R#}>`9C>;00IagfB*srAbwd400IagfB*srAb
- + +
diff --git a/php_code/routes/api.php b/php_code/routes/api.php new file mode 100644 index 00000000..59221db7 --- /dev/null +++ b/php_code/routes/api.php @@ -0,0 +1,27 @@ +user(); +})->middleware('auth:sanctum'); + + + + +// 1. Public Route +Route::get('/test', [AuthController::class, 'index']); + +// 2. Authentication Route (to get token) +Route::post('/login', [AuthController::class, 'login']); + +Route::post('/sso/validate', [App\Http\Controllers\SsoController::class, 'validateToken']); + +// 3. Protected Route (Requires a valid Bearer token) +Route::middleware('auth:sanctum')->get('/user', function (Request $request) { + return $request->user(); + + +}); \ No newline at end of file diff --git a/php_code/routes/web.php b/php_code/routes/web.php index d2364349..5c9728d1 100644 --- a/php_code/routes/web.php +++ b/php_code/routes/web.php @@ -19,6 +19,8 @@ Auth::routes([ 'verify' => false, // Disables the email verification routes ]); +Route::get('/sso/validate', [App\Http\Controllers\SsoController::class, 'validateToken']); + Route::get('/view-pdf/{filename}', [App\Http\Controllers\PermitsController::class, 'viewPdf'])->name('view.pdf'); Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); diff --git a/php_code/vendor/composer/autoload_classmap.php b/php_code/vendor/composer/autoload_classmap.php index a94ceca3..53a7d2b9 100644 --- a/php_code/vendor/composer/autoload_classmap.php +++ b/php_code/vendor/composer/autoload_classmap.php @@ -6,9 +6,31 @@ $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( + 'App\\Http\\Controllers\\AdminController' => $baseDir . '/app/Http/Controllers/AdminController.php', + 'App\\Http\\Controllers\\Auth\\ConfirmPasswordController' => $baseDir . '/app/Http/Controllers/Auth/ConfirmPasswordController.php', + 'App\\Http\\Controllers\\Auth\\ForgotPasswordController' => $baseDir . '/app/Http/Controllers/Auth/ForgotPasswordController.php', + 'App\\Http\\Controllers\\Auth\\LoginController' => $baseDir . '/app/Http/Controllers/Auth/LoginController.php', + 'App\\Http\\Controllers\\Auth\\RegisterController' => $baseDir . '/app/Http/Controllers/Auth/RegisterController.php', + 'App\\Http\\Controllers\\Auth\\ResetPasswordController' => $baseDir . '/app/Http/Controllers/Auth/ResetPasswordController.php', + 'App\\Http\\Controllers\\Auth\\VerificationController' => $baseDir . '/app/Http/Controllers/Auth/VerificationController.php', 'App\\Http\\Controllers\\Controller' => $baseDir . '/app/Http/Controllers/Controller.php', + 'App\\Http\\Controllers\\HomeController' => $baseDir . '/app/Http/Controllers/HomeController.php', + 'App\\Http\\Controllers\\LandingpageController' => $baseDir . '/app/Http/Controllers/LandingpageController.php', + 'App\\Http\\Controllers\\PermitsController' => $baseDir . '/app/Http/Controllers/PermitsController.php', + 'App\\Http\\Controllers\\SsoController' => $baseDir . '/app/Http/Controllers/SsoController.php', + 'App\\Http\\Controllers\\UserloginController' => $baseDir . '/app/Http/Controllers/UserloginController.php', + 'App\\Http\\Controllers\\UsersController' => $baseDir . '/app/Http/Controllers/UsersController.php', + 'App\\Http\\Controllers\\UtilityController' => $baseDir . '/app/Http/Controllers/UtilityController.php', + 'App\\Http\\Middleware\\BackendSessionTimeout' => $baseDir . '/app/Http/Middleware/BackendSessionTimeout.php', + 'App\\Http\\Middleware\\CheckBackendSession' => $baseDir . '/app/Http/Middleware/CheckBackendSession.php', + 'App\\Http\\Middleware\\TrustProxies' => $baseDir . '/app/Http/Middleware/TrustProxies.php', + 'App\\Mail\\PasswordResetMail' => $baseDir . '/app/Mail/PasswordResetMail.php', + 'App\\Mail\\UserAccountsMail' => $baseDir . '/app/Mail/UserAccountsMail.php', + 'App\\Models\\LoggedUser' => $baseDir . '/app/Models/LoggedUser.php', 'App\\Models\\User' => $baseDir . '/app/Models/User.php', 'App\\Providers\\AppServiceProvider' => $baseDir . '/app/Providers/AppServiceProvider.php', + 'App\\Utilities\\ApiCalls' => $baseDir . '/app/Utilities/ApiCalls.php', + 'App\\Utilities\\SmsLibrary' => $baseDir . '/app/Utilities/SmsLibrary.php', 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'Brick\\Math\\BigDecimal' => $vendorDir . '/brick/math/src/BigDecimal.php', 'Brick\\Math\\BigInteger' => $vendorDir . '/brick/math/src/BigInteger.php', @@ -2451,6 +2473,26 @@ return array( 'Laravel\\Sail\\Console\\InstallCommand' => $vendorDir . '/laravel/sail/src/Console/InstallCommand.php', 'Laravel\\Sail\\Console\\PublishCommand' => $vendorDir . '/laravel/sail/src/Console/PublishCommand.php', 'Laravel\\Sail\\SailServiceProvider' => $vendorDir . '/laravel/sail/src/SailServiceProvider.php', + 'Laravel\\Sanctum\\Console\\Commands\\PruneExpired' => $vendorDir . '/laravel/sanctum/src/Console/Commands/PruneExpired.php', + 'Laravel\\Sanctum\\Contracts\\HasAbilities' => $vendorDir . '/laravel/sanctum/src/Contracts/HasAbilities.php', + 'Laravel\\Sanctum\\Contracts\\HasApiTokens' => $vendorDir . '/laravel/sanctum/src/Contracts/HasApiTokens.php', + 'Laravel\\Sanctum\\Events\\TokenAuthenticated' => $vendorDir . '/laravel/sanctum/src/Events/TokenAuthenticated.php', + 'Laravel\\Sanctum\\Exceptions\\MissingAbilityException' => $vendorDir . '/laravel/sanctum/src/Exceptions/MissingAbilityException.php', + 'Laravel\\Sanctum\\Exceptions\\MissingScopeException' => $vendorDir . '/laravel/sanctum/src/Exceptions/MissingScopeException.php', + 'Laravel\\Sanctum\\Guard' => $vendorDir . '/laravel/sanctum/src/Guard.php', + 'Laravel\\Sanctum\\HasApiTokens' => $vendorDir . '/laravel/sanctum/src/HasApiTokens.php', + 'Laravel\\Sanctum\\Http\\Controllers\\CsrfCookieController' => $vendorDir . '/laravel/sanctum/src/Http/Controllers/CsrfCookieController.php', + 'Laravel\\Sanctum\\Http\\Middleware\\AuthenticateSession' => $vendorDir . '/laravel/sanctum/src/Http/Middleware/AuthenticateSession.php', + 'Laravel\\Sanctum\\Http\\Middleware\\CheckAbilities' => $vendorDir . '/laravel/sanctum/src/Http/Middleware/CheckAbilities.php', + 'Laravel\\Sanctum\\Http\\Middleware\\CheckForAnyAbility' => $vendorDir . '/laravel/sanctum/src/Http/Middleware/CheckForAnyAbility.php', + 'Laravel\\Sanctum\\Http\\Middleware\\CheckForAnyScope' => $vendorDir . '/laravel/sanctum/src/Http/Middleware/CheckForAnyScope.php', + 'Laravel\\Sanctum\\Http\\Middleware\\CheckScopes' => $vendorDir . '/laravel/sanctum/src/Http/Middleware/CheckScopes.php', + 'Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful' => $vendorDir . '/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php', + 'Laravel\\Sanctum\\NewAccessToken' => $vendorDir . '/laravel/sanctum/src/NewAccessToken.php', + 'Laravel\\Sanctum\\PersonalAccessToken' => $vendorDir . '/laravel/sanctum/src/PersonalAccessToken.php', + 'Laravel\\Sanctum\\Sanctum' => $vendorDir . '/laravel/sanctum/src/Sanctum.php', + 'Laravel\\Sanctum\\SanctumServiceProvider' => $vendorDir . '/laravel/sanctum/src/SanctumServiceProvider.php', + 'Laravel\\Sanctum\\TransientToken' => $vendorDir . '/laravel/sanctum/src/TransientToken.php', 'Laravel\\SerializableClosure\\Contracts\\Serializable' => $vendorDir . '/laravel/serializable-closure/src/Contracts/Serializable.php', 'Laravel\\SerializableClosure\\Contracts\\Signer' => $vendorDir . '/laravel/serializable-closure/src/Contracts/Signer.php', 'Laravel\\SerializableClosure\\Exceptions\\InvalidSignatureException' => $vendorDir . '/laravel/serializable-closure/src/Exceptions/InvalidSignatureException.php', diff --git a/php_code/vendor/composer/autoload_psr4.php b/php_code/vendor/composer/autoload_psr4.php index 5d801cfe..a463d54f 100644 --- a/php_code/vendor/composer/autoload_psr4.php +++ b/php_code/vendor/composer/autoload_psr4.php @@ -65,6 +65,7 @@ return array( 'Laravel\\Ui\\' => array($vendorDir . '/laravel/ui/src'), 'Laravel\\Tinker\\' => array($vendorDir . '/laravel/tinker/src'), 'Laravel\\SerializableClosure\\' => array($vendorDir . '/laravel/serializable-closure/src'), + 'Laravel\\Sanctum\\' => array($vendorDir . '/laravel/sanctum/src'), 'Laravel\\Sail\\' => array($vendorDir . '/laravel/sail/src'), 'Laravel\\Prompts\\' => array($vendorDir . '/laravel/prompts/src'), 'Laravel\\Pail\\' => array($vendorDir . '/laravel/pail/src'), diff --git a/php_code/vendor/composer/autoload_static.php b/php_code/vendor/composer/autoload_static.php index 97442716..658a8f4b 100644 --- a/php_code/vendor/composer/autoload_static.php +++ b/php_code/vendor/composer/autoload_static.php @@ -128,6 +128,7 @@ class ComposerStaticInit626b9e7ddd47fb7eff9aaa53cce0c9ad 'Laravel\\Ui\\' => 11, 'Laravel\\Tinker\\' => 15, 'Laravel\\SerializableClosure\\' => 28, + 'Laravel\\Sanctum\\' => 16, 'Laravel\\Sail\\' => 13, 'Laravel\\Prompts\\' => 16, 'Laravel\\Pail\\' => 13, @@ -421,6 +422,10 @@ class ComposerStaticInit626b9e7ddd47fb7eff9aaa53cce0c9ad array ( 0 => __DIR__ . '/..' . '/laravel/serializable-closure/src', ), + 'Laravel\\Sanctum\\' => + array ( + 0 => __DIR__ . '/..' . '/laravel/sanctum/src', + ), 'Laravel\\Sail\\' => array ( 0 => __DIR__ . '/..' . '/laravel/sail/src', @@ -533,9 +538,31 @@ class ComposerStaticInit626b9e7ddd47fb7eff9aaa53cce0c9ad ); public static $classMap = array ( + 'App\\Http\\Controllers\\AdminController' => __DIR__ . '/../..' . '/app/Http/Controllers/AdminController.php', + 'App\\Http\\Controllers\\Auth\\ConfirmPasswordController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/ConfirmPasswordController.php', + 'App\\Http\\Controllers\\Auth\\ForgotPasswordController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/ForgotPasswordController.php', + 'App\\Http\\Controllers\\Auth\\LoginController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/LoginController.php', + 'App\\Http\\Controllers\\Auth\\RegisterController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/RegisterController.php', + 'App\\Http\\Controllers\\Auth\\ResetPasswordController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/ResetPasswordController.php', + 'App\\Http\\Controllers\\Auth\\VerificationController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/VerificationController.php', 'App\\Http\\Controllers\\Controller' => __DIR__ . '/../..' . '/app/Http/Controllers/Controller.php', + 'App\\Http\\Controllers\\HomeController' => __DIR__ . '/../..' . '/app/Http/Controllers/HomeController.php', + 'App\\Http\\Controllers\\LandingpageController' => __DIR__ . '/../..' . '/app/Http/Controllers/LandingpageController.php', + 'App\\Http\\Controllers\\PermitsController' => __DIR__ . '/../..' . '/app/Http/Controllers/PermitsController.php', + 'App\\Http\\Controllers\\SsoController' => __DIR__ . '/../..' . '/app/Http/Controllers/SsoController.php', + 'App\\Http\\Controllers\\UserloginController' => __DIR__ . '/../..' . '/app/Http/Controllers/UserloginController.php', + 'App\\Http\\Controllers\\UsersController' => __DIR__ . '/../..' . '/app/Http/Controllers/UsersController.php', + 'App\\Http\\Controllers\\UtilityController' => __DIR__ . '/../..' . '/app/Http/Controllers/UtilityController.php', + 'App\\Http\\Middleware\\BackendSessionTimeout' => __DIR__ . '/../..' . '/app/Http/Middleware/BackendSessionTimeout.php', + 'App\\Http\\Middleware\\CheckBackendSession' => __DIR__ . '/../..' . '/app/Http/Middleware/CheckBackendSession.php', + 'App\\Http\\Middleware\\TrustProxies' => __DIR__ . '/../..' . '/app/Http/Middleware/TrustProxies.php', + 'App\\Mail\\PasswordResetMail' => __DIR__ . '/../..' . '/app/Mail/PasswordResetMail.php', + 'App\\Mail\\UserAccountsMail' => __DIR__ . '/../..' . '/app/Mail/UserAccountsMail.php', + 'App\\Models\\LoggedUser' => __DIR__ . '/../..' . '/app/Models/LoggedUser.php', 'App\\Models\\User' => __DIR__ . '/../..' . '/app/Models/User.php', 'App\\Providers\\AppServiceProvider' => __DIR__ . '/../..' . '/app/Providers/AppServiceProvider.php', + 'App\\Utilities\\ApiCalls' => __DIR__ . '/../..' . '/app/Utilities/ApiCalls.php', + 'App\\Utilities\\SmsLibrary' => __DIR__ . '/../..' . '/app/Utilities/SmsLibrary.php', 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'Brick\\Math\\BigDecimal' => __DIR__ . '/..' . '/brick/math/src/BigDecimal.php', 'Brick\\Math\\BigInteger' => __DIR__ . '/..' . '/brick/math/src/BigInteger.php', @@ -2978,6 +3005,26 @@ class ComposerStaticInit626b9e7ddd47fb7eff9aaa53cce0c9ad 'Laravel\\Sail\\Console\\InstallCommand' => __DIR__ . '/..' . '/laravel/sail/src/Console/InstallCommand.php', 'Laravel\\Sail\\Console\\PublishCommand' => __DIR__ . '/..' . '/laravel/sail/src/Console/PublishCommand.php', 'Laravel\\Sail\\SailServiceProvider' => __DIR__ . '/..' . '/laravel/sail/src/SailServiceProvider.php', + 'Laravel\\Sanctum\\Console\\Commands\\PruneExpired' => __DIR__ . '/..' . '/laravel/sanctum/src/Console/Commands/PruneExpired.php', + 'Laravel\\Sanctum\\Contracts\\HasAbilities' => __DIR__ . '/..' . '/laravel/sanctum/src/Contracts/HasAbilities.php', + 'Laravel\\Sanctum\\Contracts\\HasApiTokens' => __DIR__ . '/..' . '/laravel/sanctum/src/Contracts/HasApiTokens.php', + 'Laravel\\Sanctum\\Events\\TokenAuthenticated' => __DIR__ . '/..' . '/laravel/sanctum/src/Events/TokenAuthenticated.php', + 'Laravel\\Sanctum\\Exceptions\\MissingAbilityException' => __DIR__ . '/..' . '/laravel/sanctum/src/Exceptions/MissingAbilityException.php', + 'Laravel\\Sanctum\\Exceptions\\MissingScopeException' => __DIR__ . '/..' . '/laravel/sanctum/src/Exceptions/MissingScopeException.php', + 'Laravel\\Sanctum\\Guard' => __DIR__ . '/..' . '/laravel/sanctum/src/Guard.php', + 'Laravel\\Sanctum\\HasApiTokens' => __DIR__ . '/..' . '/laravel/sanctum/src/HasApiTokens.php', + 'Laravel\\Sanctum\\Http\\Controllers\\CsrfCookieController' => __DIR__ . '/..' . '/laravel/sanctum/src/Http/Controllers/CsrfCookieController.php', + 'Laravel\\Sanctum\\Http\\Middleware\\AuthenticateSession' => __DIR__ . '/..' . '/laravel/sanctum/src/Http/Middleware/AuthenticateSession.php', + 'Laravel\\Sanctum\\Http\\Middleware\\CheckAbilities' => __DIR__ . '/..' . '/laravel/sanctum/src/Http/Middleware/CheckAbilities.php', + 'Laravel\\Sanctum\\Http\\Middleware\\CheckForAnyAbility' => __DIR__ . '/..' . '/laravel/sanctum/src/Http/Middleware/CheckForAnyAbility.php', + 'Laravel\\Sanctum\\Http\\Middleware\\CheckForAnyScope' => __DIR__ . '/..' . '/laravel/sanctum/src/Http/Middleware/CheckForAnyScope.php', + 'Laravel\\Sanctum\\Http\\Middleware\\CheckScopes' => __DIR__ . '/..' . '/laravel/sanctum/src/Http/Middleware/CheckScopes.php', + 'Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful' => __DIR__ . '/..' . '/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php', + 'Laravel\\Sanctum\\NewAccessToken' => __DIR__ . '/..' . '/laravel/sanctum/src/NewAccessToken.php', + 'Laravel\\Sanctum\\PersonalAccessToken' => __DIR__ . '/..' . '/laravel/sanctum/src/PersonalAccessToken.php', + 'Laravel\\Sanctum\\Sanctum' => __DIR__ . '/..' . '/laravel/sanctum/src/Sanctum.php', + 'Laravel\\Sanctum\\SanctumServiceProvider' => __DIR__ . '/..' . '/laravel/sanctum/src/SanctumServiceProvider.php', + 'Laravel\\Sanctum\\TransientToken' => __DIR__ . '/..' . '/laravel/sanctum/src/TransientToken.php', 'Laravel\\SerializableClosure\\Contracts\\Serializable' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Contracts/Serializable.php', 'Laravel\\SerializableClosure\\Contracts\\Signer' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Contracts/Signer.php', 'Laravel\\SerializableClosure\\Exceptions\\InvalidSignatureException' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Exceptions/InvalidSignatureException.php', diff --git a/php_code/vendor/composer/installed.json b/php_code/vendor/composer/installed.json index 3941dc39..118cd2f2 100644 --- a/php_code/vendor/composer/installed.json +++ b/php_code/vendor/composer/installed.json @@ -1778,6 +1778,72 @@ }, "install-path": "../laravel/sail" }, + { + "name": "laravel/sanctum", + "version": "v4.3.2", + "version_normalized": "4.3.2.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "2a9bccc18e9907808e0018dd15fa643937886b1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/2a9bccc18e9907808e0018dd15fa643937886b1e", + "reference": "2a9bccc18e9907808e0018dd15fa643937886b1e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^11.0|^12.0|^13.0", + "illuminate/contracts": "^11.0|^12.0|^13.0", + "illuminate/database": "^11.0|^12.0|^13.0", + "illuminate/support": "^11.0|^12.0|^13.0", + "php": "^8.2", + "symfony/console": "^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.6", + "orchestra/testbench": "^9.15|^10.8|^11.0", + "phpstan/phpstan": "^1.10" + }, + "time": "2026-04-30T11:46:25+00:00", + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "install-path": "../laravel/sanctum" + }, { "name": "laravel/serializable-closure", "version": "v2.0.9", diff --git a/php_code/vendor/composer/installed.php b/php_code/vendor/composer/installed.php index 87ecfb23..17365e55 100644 --- a/php_code/vendor/composer/installed.php +++ b/php_code/vendor/composer/installed.php @@ -430,6 +430,15 @@ 'aliases' => array(), 'dev_requirement' => true, ), + 'laravel/sanctum' => array( + 'pretty_version' => 'v4.3.2', + 'version' => '4.3.2.0', + 'reference' => '2a9bccc18e9907808e0018dd15fa643937886b1e', + 'type' => 'library', + 'install_path' => __DIR__ . '/../laravel/sanctum', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'laravel/serializable-closure' => array( 'pretty_version' => 'v2.0.9', 'version' => '2.0.9.0',