Add HttpOnly cookie auth for cross-domain SPA login
Problem: Frontend JS bundle used credentials:'same-origin' which dropped cookies on cross-domain requests. Login worked (200) but the subsequent /auth/me check returned 401, leaving the user stuck on the login screen. Fix: - AuthController now sets a dtp_jwt HttpOnly cookie on login/refresh - Cookie uses Domain=.fahrschultermin.de (shared between frontend and api subdomain), Secure, SameSite=Lax, Max-Age=8h - JwtMiddleware reads JWT from Authorization header OR cookie - Added AuthController::me() endpoint (was missing, caused 500) - Logout endpoint clears the cookie - Frontend index.php patches fetch() to use credentials:'include' for all /api/v1/* calls
This commit is contained in:
0
.gitignore
vendored
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
0
api/README.md
Normal file → Executable file
0
api/README.md
Normal file → Executable file
0
api/composer.json
Normal file → Executable file
0
api/composer.json
Normal file → Executable file
0
api/migrations/001_add_refresh_tokens.sql
Normal file → Executable file
0
api/migrations/001_add_refresh_tokens.sql
Normal file → Executable file
0
api/public/index.php
Normal file → Executable file
0
api/public/index.php
Normal file → Executable file
0
api/src/Config/Container.php
Normal file → Executable file
0
api/src/Config/Container.php
Normal file → Executable file
0
api/src/Controllers/AppointmentsController.php
Normal file → Executable file
0
api/src/Controllers/AppointmentsController.php
Normal file → Executable file
44
api/src/Controllers/AuthController.php
Normal file → Executable file
44
api/src/Controllers/AuthController.php
Normal file → Executable file
@@ -41,6 +41,12 @@ final class AuthController
|
|||||||
// Generate refresh token
|
// Generate refresh token
|
||||||
$refreshToken = $this->generateRefreshToken($user->id);
|
$refreshToken = $this->generateRefreshToken($user->id);
|
||||||
|
|
||||||
|
// Set JWT in HttpOnly cookie for cross-domain SPA auth.
|
||||||
|
// Domain=.fahrschultermin.de makes the cookie available to BOTH
|
||||||
|
// fahrschultermin.de and api.fahrschultermin.de, so the browser
|
||||||
|
// sends it automatically with credentials:'include' requests.
|
||||||
|
$response = $this->setAuthCookie($response, $jwt);
|
||||||
|
|
||||||
$userData = $user->toArray();
|
$userData = $user->toArray();
|
||||||
unset($userData['password_hash']);
|
unset($userData['password_hash']);
|
||||||
|
|
||||||
@@ -82,6 +88,9 @@ final class AuthController
|
|||||||
$tokenRecord->revoke();
|
$tokenRecord->revoke();
|
||||||
$newRefreshToken = $this->generateRefreshToken($user->id);
|
$newRefreshToken = $this->generateRefreshToken($user->id);
|
||||||
|
|
||||||
|
// Update auth cookie with new JWT
|
||||||
|
$response = $this->setAuthCookie($response, $jwt);
|
||||||
|
|
||||||
$userData = $user->toArray();
|
$userData = $user->toArray();
|
||||||
unset($userData['password_hash']);
|
unset($userData['password_hash']);
|
||||||
|
|
||||||
@@ -93,6 +102,19 @@ final class AuthController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the current authenticated user. Used by the frontend to
|
||||||
|
* restore a session from the dtp_jwt cookie on page reload.
|
||||||
|
*/
|
||||||
|
public function me(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
|
||||||
|
{
|
||||||
|
$user = $request->getAttribute('user');
|
||||||
|
if (!$user) {
|
||||||
|
return $this->json($response, ['message' => 'Not authenticated'], 401);
|
||||||
|
}
|
||||||
|
return $this->json($response, $user);
|
||||||
|
}
|
||||||
|
|
||||||
public function logout(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
|
public function logout(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
|
||||||
{
|
{
|
||||||
$body = json_decode($request->getBody()->getContents(), true);
|
$body = json_decode($request->getBody()->getContents(), true);
|
||||||
@@ -105,9 +127,31 @@ final class AuthController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear auth cookie
|
||||||
|
$response = $this->clearAuthCookie($response);
|
||||||
|
|
||||||
return $this->json($response, ['message' => 'Logged out']);
|
return $this->json($response, ['message' => 'Logged out']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function setAuthCookie(ResponseInterface $response, string $jwt): ResponseInterface
|
||||||
|
{
|
||||||
|
// SameSite=Lax works for same-site requests (fahrschultermin.de → api.fahrschultermin.de
|
||||||
|
// is technically cross-origin but the registrable domain matches, so Lax is enough
|
||||||
|
// and is more browser-friendly than None). Secure is required for cross-site cookies.
|
||||||
|
$cookie = sprintf(
|
||||||
|
'dtp_jwt=%s; Path=/; Domain=.fahrschultermin.de; Max-Age=%d; Secure; HttpOnly; SameSite=Lax',
|
||||||
|
rawurlencode($jwt),
|
||||||
|
self::JWT_EXPIRY
|
||||||
|
);
|
||||||
|
return $response->withAddedHeader('Set-Cookie', $cookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function clearAuthCookie(ResponseInterface $response): ResponseInterface
|
||||||
|
{
|
||||||
|
$cookie = 'dtp_jwt=; Path=/; Domain=.fahrschultermin.de; Max-Age=0; Secure; HttpOnly; SameSite=Lax';
|
||||||
|
return $response->withAddedHeader('Set-Cookie', $cookie);
|
||||||
|
}
|
||||||
|
|
||||||
private function generateJwt(User $user): string
|
private function generateJwt(User $user): string
|
||||||
{
|
{
|
||||||
$now = time();
|
$now = time();
|
||||||
|
|||||||
0
api/src/Controllers/BootstrapController.php
Normal file → Executable file
0
api/src/Controllers/BootstrapController.php
Normal file → Executable file
0
api/src/Controllers/InstructorsController.php
Normal file → Executable file
0
api/src/Controllers/InstructorsController.php
Normal file → Executable file
0
api/src/Controllers/LessonTypesController.php
Normal file → Executable file
0
api/src/Controllers/LessonTypesController.php
Normal file → Executable file
0
api/src/Controllers/StudentsController.php
Normal file → Executable file
0
api/src/Controllers/StudentsController.php
Normal file → Executable file
0
api/src/Controllers/TemplatesController.php
Normal file → Executable file
0
api/src/Controllers/TemplatesController.php
Normal file → Executable file
36
api/src/Middleware/JwtMiddleware.php
Normal file → Executable file
36
api/src/Middleware/JwtMiddleware.php
Normal file → Executable file
@@ -15,17 +15,15 @@ final class JwtMiddleware implements \Psr\Http\Server\MiddlewareInterface
|
|||||||
{
|
{
|
||||||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||||
{
|
{
|
||||||
$authHeader = $request->getHeaderLine('Authorization') ?? '';
|
$token = $this->extractToken($request);
|
||||||
|
|
||||||
if (!str_starts_with($authHeader, 'Bearer ')) {
|
if ($token === null) {
|
||||||
$body = json_encode(['message' => 'Missing or invalid Authorization header']);
|
$body = json_encode(['message' => 'Missing or invalid Authorization header']);
|
||||||
return new \Slim\Psr7\Response(401)
|
return new \Slim\Psr7\Response(401)
|
||||||
->withHeader('Content-Type', 'application/json')
|
->withHeader('Content-Type', 'application/json')
|
||||||
->withBody((new \Slim\Psr7\Factory\StreamFactory())->createStream($body));
|
->withBody((new \Slim\Psr7\Factory\StreamFactory())->createStream($body));
|
||||||
}
|
}
|
||||||
|
|
||||||
$token = substr($authHeader, 7);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$secret = $_ENV['JWT_SECRET'] ?? 'this-is-a-32-character-secret-key-for-testing';
|
$secret = $_ENV['JWT_SECRET'] ?? 'this-is-a-32-character-secret-key-for-testing';
|
||||||
$decoded = JWT::decode($token, new Key($secret, 'HS256'));
|
$decoded = JWT::decode($token, new Key($secret, 'HS256'));
|
||||||
@@ -59,4 +57,34 @@ final class JwtMiddleware implements \Psr\Http\Server\MiddlewareInterface
|
|||||||
|
|
||||||
return $handler->handle($request);
|
return $handler->handle($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract JWT from Authorization header (Bearer) or from `dtp_jwt` cookie.
|
||||||
|
* Cookie is used for cross-domain SPA auth when the browser auto-sends it.
|
||||||
|
*/
|
||||||
|
private function extractToken(ServerRequestInterface $request): ?string
|
||||||
|
{
|
||||||
|
// 1. Try Authorization header first
|
||||||
|
$authHeader = $request->getHeaderLine('Authorization');
|
||||||
|
if (str_starts_with($authHeader, 'Bearer ')) {
|
||||||
|
return substr($authHeader, 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Fallback: read from cookie
|
||||||
|
$cookieHeader = $request->getHeaderLine('Cookie');
|
||||||
|
if (!empty($cookieHeader)) {
|
||||||
|
$cookies = [];
|
||||||
|
foreach (explode(';', $cookieHeader) as $pair) {
|
||||||
|
$parts = explode('=', trim($pair), 2);
|
||||||
|
if (count($parts) === 2) {
|
||||||
|
$cookies[$parts[0]] = urldecode($parts[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isset($cookies['dtp_jwt']) && !empty($cookies['dtp_jwt'])) {
|
||||||
|
return $cookies['dtp_jwt'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
0
api/src/Models/Appointment.php
Normal file → Executable file
0
api/src/Models/Appointment.php
Normal file → Executable file
0
api/src/Models/Instructor.php
Normal file → Executable file
0
api/src/Models/Instructor.php
Normal file → Executable file
0
api/src/Models/LessonType.php
Normal file → Executable file
0
api/src/Models/LessonType.php
Normal file → Executable file
0
api/src/Models/LessonTypeTemplateVisibility.php
Normal file → Executable file
0
api/src/Models/LessonTypeTemplateVisibility.php
Normal file → Executable file
0
api/src/Models/LicenseClassTemplate.php
Normal file → Executable file
0
api/src/Models/LicenseClassTemplate.php
Normal file → Executable file
0
api/src/Models/LicenseTemplateRequirement.php
Normal file → Executable file
0
api/src/Models/LicenseTemplateRequirement.php
Normal file → Executable file
0
api/src/Models/RefreshToken.php
Normal file → Executable file
0
api/src/Models/RefreshToken.php
Normal file → Executable file
0
api/src/Models/Student.php
Normal file → Executable file
0
api/src/Models/Student.php
Normal file → Executable file
0
api/src/Models/Tenant.php
Normal file → Executable file
0
api/src/Models/Tenant.php
Normal file → Executable file
0
api/src/Models/User.php
Normal file → Executable file
0
api/src/Models/User.php
Normal file → Executable file
0
api/src/Routes/api.php
Normal file → Executable file
0
api/src/Routes/api.php
Normal file → Executable file
0
api/src/Services/InstructorAvailabilityService.php
Normal file → Executable file
0
api/src/Services/InstructorAvailabilityService.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/docs/README.txt
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/docs/README.txt
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/api.fahrschultermin.de/public/index.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/api.fahrschultermin.de/public/index.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/AppointmentsController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/AppointmentsController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/AuthController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/AuthController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/BootstrapController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/BootstrapController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/InstructorsController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/InstructorsController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/ReferenceDataController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/ReferenceDataController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/StudentsController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/StudentsController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/TenantsController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/TenantsController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/UsersController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Http/Controllers/UsersController.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/AppointmentRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/AppointmentRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/BaseRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/BaseRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/InstructorRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/InstructorRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/ReferenceDataRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/ReferenceDataRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/StudentRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/StudentRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/TenantRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/TenantRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/UserRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Repositories/UserRepository.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Services/CalendarService.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Services/CalendarService.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Services/HolidayService.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Services/HolidayService.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Services/RequirementService.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Services/RequirementService.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Services/SunTimesService.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Services/SunTimesService.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Support/Auth.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Support/Auth.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Support/Database.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Support/Database.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Support/Request.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Support/Request.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Support/Response.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Support/Response.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Support/Router.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/Support/Router.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/bootstrap.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/app/bootstrap.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/bin/migrate.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/bin/migrate.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/bin/seed.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/bin/seed.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/config/app.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/config/app.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/001_initial.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/001_initial.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/002_instructors_user_link.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/002_instructors_user_link.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/003_backfill_instructor_user_links.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/003_backfill_instructor_user_links.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/004_lesson_type_template_visibility.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/004_lesson_type_template_visibility.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/005_tenant_location_sun.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/005_tenant_location_sun.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/006_tenant_federal_state.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/006_tenant_federal_state.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/007_student_prior_completed_units.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/007_student_prior_completed_units.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/008_lesson_type_system_key.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/008_lesson_type_system_key.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/009_requirement_phase_labels.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/009_requirement_phase_labels.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/010_student_email.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/010_student_email.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/010_students_contact_flags.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/010_students_contact_flags.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/011_student_needs_glasses.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/011_student_needs_glasses.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/012_split_combination_templates.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/012_split_combination_templates.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/013_combo_generic_key_cleanup.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/013_combo_generic_key_cleanup.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/015_instructor_pre_start_buffer.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/database/migrations/015_instructor_pre_start_buffer.sql
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/.htaccess
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/.htaccess
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/assets/.vite/manifest.json
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/assets/.vite/manifest.json
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/assets/assets/main-C54NZrM5.css
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/assets/assets/main-C54NZrM5.css
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/assets/assets/main-F76uNDS1.js
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/assets/assets/main-F76uNDS1.js
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/index.html
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/index.html
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/index.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/public/index.php
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/database/app.sqlite
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/database/app.sqlite
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/database/app.sqlite.bak-20260422203538
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/database/app.sqlite.bak-20260422203538
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/database/app.sqlite.bak-users-20260422204004
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/database/app.sqlite.bak-users-20260422204004
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_0006a50819ddb4c83f8927e073726008
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_0006a50819ddb4c83f8927e073726008
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_00309f86663d537153fcb66685d86df7
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_00309f86663d537153fcb66685d86df7
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_00409744a4c7e3bb92d2eb4076f6f9f1
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_00409744a4c7e3bb92d2eb4076f6f9f1
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_004433bebe95f3233eb3afeacee557d2
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_004433bebe95f3233eb3afeacee557d2
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_01276da25030fe7610e51db01928f92e
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_01276da25030fe7610e51db01928f92e
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_013cba357db97c86d9affd6f490425d2
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_013cba357db97c86d9affd6f490425d2
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_01db5cc5dc2af4df786929887036129e
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_01db5cc5dc2af4df786929887036129e
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_025b3db5cdc9307a49bbc4e7c8569322
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_025b3db5cdc9307a49bbc4e7c8569322
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_02ce241714378b298d820865b9f207fa
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_02ce241714378b298d820865b9f207fa
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_0302bb8051aea505d498b8118cf07cbc
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_0302bb8051aea505d498b8118cf07cbc
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_033690960537713e4b7584067e851174
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_033690960537713e4b7584067e851174
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_0387d0c9c23e92d7c5da1f59219d140a
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_0387d0c9c23e92d7c5da1f59219d140a
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_03ab912d95e7096bd5041a815feaaac6
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_03ab912d95e7096bd5041a815feaaac6
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_03bec560a62e6282f3c00ee39e0b5185
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_03bec560a62e6282f3c00ee39e0b5185
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_03f80785c72e82de6dbb20e633f8e70b
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_03f80785c72e82de6dbb20e633f8e70b
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_04921a0b3787740b88c11ab3b2b4d4dc
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_04921a0b3787740b88c11ab3b2b4d4dc
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_04ba107751852addceb705f95cb01636
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_04ba107751852addceb705f95cb01636
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_04e7eeca7ab45efc4714e55d0e488aab
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_04e7eeca7ab45efc4714e55d0e488aab
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_04ec6601cf72642f743fb0ad41d466b8
Normal file → Executable file
0
backup/fahrschultermin_20260518_223313/www/fahrschultermin.de/storage/sessions/sess_04ec6601cf72642f743fb0ad41d466b8
Normal file → Executable file
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user