test borked

This commit is contained in:
Dan Baker 2026-02-22 17:49:23 +00:00
parent 49b528a66b
commit 2418edccfd
29 changed files with 2036 additions and 121 deletions

View file

@ -0,0 +1,77 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Login - Scan.fyi</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gradient-to-br from-blue-50 to-indigo-100 min-h-screen flex items-center justify-center p-4">
<div class="w-full max-w-md">
<div class="bg-white rounded-lg shadow-xl p-8">
<div class="text-center mb-8">
<h1 class="text-3xl font-bold text-gray-900">Scan.fyi</h1>
<p class="mt-2 text-sm text-gray-600">Passwordless Authentication</p>
</div>
@if (session('status'))
<div class="mb-6 p-4 rounded-lg bg-green-50 border border-green-200">
<p class="text-sm text-green-800">{{ session('status') }}</p>
</div>
@endif
@if (session('error'))
<div class="mb-6 p-4 rounded-lg bg-red-50 border border-red-200">
<p class="text-sm text-red-800">{{ session('error') }}</p>
</div>
@endif
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="mb-6">
<label for="email" class="block text-sm font-medium text-gray-700 mb-2">
Email Address
</label>
<input
type="email"
id="email"
name="email"
value="{{ old('email') }}"
required
autofocus
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 transition-colors @error('email') border-red-500 @enderror"
placeholder="you@example.com"
>
@error('email')
<p class="mt-2 text-sm text-red-600">{{ $message }}</p>
@enderror
</div>
<button
type="submit"
class="w-full bg-indigo-600 hover:bg-indigo-700 text-white font-semibold py-3 px-4 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
>
Send Login Link
</button>
</form>
<div class="mt-6 text-center">
<a
href="{{ route('verify-code') }}"
class="text-sm text-indigo-600 hover:text-indigo-800 font-medium"
>
Already have a code? Enter it here
</a>
</div>
</div>
<div class="mt-6 text-center">
<p class="text-xs text-gray-600">
You will receive a secure login link via email
</p>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,101 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Verify Code - Scan.fyi</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gradient-to-br from-blue-50 to-indigo-100 min-h-screen flex items-center justify-center p-4">
<div class="w-full max-w-md">
<div class="bg-white rounded-lg shadow-xl p-8">
<div class="text-center mb-8">
<h1 class="text-3xl font-bold text-gray-900">Scan.fyi</h1>
<p class="mt-2 text-sm text-gray-600">Enter Your Verification Code</p>
</div>
@if (session('status'))
<div class="mb-6 p-4 rounded-lg bg-green-50 border border-green-200">
<p class="text-sm text-green-800">{{ session('status') }}</p>
</div>
@endif
@if (session('error'))
<div class="mb-6 p-4 rounded-lg bg-red-50 border border-red-200">
<p class="text-sm text-red-800">{{ session('error') }}</p>
</div>
@endif
<form method="POST" action="{{ route('verify-code') }}">
@csrf
<div class="mb-6">
<label for="email" class="block text-sm font-medium text-gray-700 mb-2">
Email Address
</label>
<input
type="email"
id="email"
name="email"
value="{{ old('email') }}"
required
autofocus
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 transition-colors @error('email') border-red-500 @enderror"
placeholder="you@example.com"
>
@error('email')
<p class="mt-2 text-sm text-red-600">{{ $message }}</p>
@enderror
</div>
<div class="mb-6">
<label for="code" class="block text-sm font-medium text-gray-700 mb-2">
Verification Code
</label>
<input
type="text"
id="code"
name="code"
value="{{ old('code') }}"
required
pattern="[0-9]{6}"
maxlength="6"
inputmode="numeric"
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 transition-colors text-center text-2xl font-mono tracking-widest @error('code') border-red-500 @enderror"
placeholder="000000"
>
@error('code')
<p class="mt-2 text-sm text-red-600">{{ $message }}</p>
@enderror
<p class="mt-2 text-xs text-gray-500 text-center">
Enter the 6-digit code from your email
</p>
</div>
<button
type="submit"
class="w-full bg-indigo-600 hover:bg-indigo-700 text-white font-semibold py-3 px-4 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
>
Verify Code
</button>
</form>
<div class="mt-6 text-center">
<a
href="{{ route('login') }}"
class="text-sm text-indigo-600 hover:text-indigo-800 font-medium"
>
Back to login
</a>
</div>
</div>
<div class="mt-6 text-center">
<p class="text-xs text-gray-600">
Codes expire after 15 minutes
</p>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,98 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Dashboard - Scan.fyi</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-50 min-h-screen">
<nav class="bg-white shadow-sm border-b border-gray-200">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between items-center h-16">
<div class="flex items-center">
<h1 class="text-xl font-bold text-gray-900">Scan.fyi</h1>
</div>
<div class="flex items-center space-x-4">
<span class="text-sm text-gray-600">{{ auth()->user()->email }}</span>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button
type="submit"
class="bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-2 px-4 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2"
>
Logout
</button>
</form>
</div>
</div>
</div>
</nav>
<main class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<div class="bg-white rounded-lg shadow-sm p-8">
<div class="text-center">
<div class="inline-flex items-center justify-center w-16 h-16 bg-green-100 rounded-full mb-4">
<svg class="w-8 h-8 text-green-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
</svg>
</div>
<h2 class="text-3xl font-bold text-gray-900 mb-2">
Welcome, {{ auth()->user()->name ?? 'User' }}!
</h2>
<p class="text-lg text-gray-600 mb-6">
You are successfully logged in using passwordless authentication
</p>
<div class="inline-block bg-indigo-50 border border-indigo-200 rounded-lg px-6 py-4">
<p class="text-sm text-indigo-800">
<span class="font-semibold">Security:</span> Your session is secured with a 30-day remember token
</p>
</div>
</div>
<div class="mt-12 grid gap-6 md:grid-cols-3">
<div class="bg-gray-50 rounded-lg p-6 border border-gray-200">
<div class="text-gray-400 mb-3">
<svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
</svg>
</div>
<h3 class="font-semibold text-gray-900 mb-1">Email-Based Login</h3>
<p class="text-sm text-gray-600">No passwords to remember or manage</p>
</div>
<div class="bg-gray-50 rounded-lg p-6 border border-gray-200">
<div class="text-gray-400 mb-3">
<svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"></path>
</svg>
</div>
<h3 class="font-semibold text-gray-900 mb-1">Secure Authentication</h3>
<p class="text-sm text-gray-600">Time-limited codes and magic links</p>
</div>
<div class="bg-gray-50 rounded-lg p-6 border border-gray-200">
<div class="text-gray-400 mb-3">
<svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
</svg>
</div>
<h3 class="font-semibold text-gray-900 mb-1">Fast Access</h3>
<p class="text-sm text-gray-600">Quick login with verification codes</p>
</div>
</div>
</div>
</main>
<footer class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
<p class="text-center text-sm text-gray-500">
Powered by Scan.fyi Passwordless Authentication
</p>
</footer>
</body>
</html>

View file

@ -0,0 +1,36 @@
{{ config('app.name') }}
===============================================
YOUR LOGIN LINK
===============================================
Hello,
You requested a login link for your {{ config('app.name') }} account.
CLICK THIS LINK TO LOG IN:
{{ $loginUrl }}
-----------------------------------------------
OR
-----------------------------------------------
ENTER THIS CODE ON THE LOGIN PAGE:
{{ $code }}
-----------------------------------------------
IMPORTANT INFORMATION:
- This link and code will expire in {{ $expiresInMinutes }} minutes for your security
- If you didn't request this login link, you can safely ignore this email
- Your account remains secure
-----------------------------------------------
This is an automated message from {{ config('app.name') }}.
Please do not reply to this email.
© {{ date('Y') }} {{ config('app.name') }}. All rights reserved.

View file

@ -0,0 +1,108 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Your Login Link</title>
</head>
<body style="margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: #f3f4f6; line-height: 1.6;">
<table role="presentation" style="width: 100%; border-collapse: collapse; background-color: #f3f4f6;">
<tr>
<td style="padding: 40px 20px;">
<table role="presentation" style="max-width: 600px; margin: 0 auto; background-color: #ffffff; border-radius: 12px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05); border-collapse: collapse; overflow: hidden;">
<!-- Header -->
<tr>
<td style="padding: 48px 40px 32px; text-align: center; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);">
<h1 style="margin: 0; color: #ffffff; font-size: 28px; font-weight: 700; letter-spacing: -0.5px;">
{{ config('app.name') }}
</h1>
</td>
</tr>
<!-- Content -->
<tr>
<td style="padding: 40px;">
<h2 style="margin: 0 0 16px; color: #111827; font-size: 24px; font-weight: 600; text-align: center;">
Your Login Link
</h2>
<p style="margin: 0 0 32px; color: #6b7280; font-size: 16px; text-align: center;">
Click the button below to securely log in to your account.
</p>
<!-- Login Button -->
<table role="presentation" style="width: 100%; border-collapse: collapse; margin: 0 0 32px;">
<tr>
<td style="text-align: center;">
<a href="{{ $loginUrl }}" style="display: inline-block; padding: 16px 48px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: #ffffff; text-decoration: none; border-radius: 8px; font-size: 18px; font-weight: 600; box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3); transition: transform 0.2s;">
Log In to {{ config('app.name') }}
</a>
</td>
</tr>
</table>
<!-- Divider -->
<table role="presentation" style="width: 100%; border-collapse: collapse; margin: 0 0 32px;">
<tr>
<td style="width: 45%; border-bottom: 1px solid #e5e7eb;"></td>
<td style="width: 10%; text-align: center; color: #9ca3af; font-size: 14px; font-weight: 500; padding: 0 16px;">
OR
</td>
<td style="width: 45%; border-bottom: 1px solid #e5e7eb;"></td>
</tr>
</table>
<!-- Code Display -->
<div style="margin: 0 0 32px; text-align: center;">
<p style="margin: 0 0 16px; color: #6b7280; font-size: 16px;">
Enter this code on the login page:
</p>
<div style="display: inline-block; padding: 24px 48px; background-color: #f9fafb; border: 2px solid #e5e7eb; border-radius: 12px;">
<span style="font-family: 'Courier New', Courier, monospace; font-size: 42px; font-weight: 700; letter-spacing: 8px; color: #111827;">
{{ $code }}
</span>
</div>
</div>
<!-- Expiry Notice -->
<div style="margin: 0 0 32px; padding: 16px; background-color: #fef3c7; border-left: 4px solid #f59e0b; border-radius: 6px;">
<p style="margin: 0; color: #92400e; font-size: 14px; line-height: 1.5;">
<strong style="font-weight: 600;">Important:</strong> This link and code will expire in {{ $expiresInMinutes }} minutes for your security.
</p>
</div>
<!-- Security Notice -->
<div style="margin: 0; padding: 16px; background-color: #f3f4f6; border-radius: 6px;">
<p style="margin: 0; color: #6b7280; font-size: 14px; line-height: 1.5; text-align: center;">
If you didn't request this login link, you can safely ignore this email. Your account remains secure.
</p>
</div>
</td>
</tr>
<!-- Footer -->
<tr>
<td style="padding: 32px 40px; background-color: #f9fafb; border-top: 1px solid #e5e7eb;">
<p style="margin: 0; color: #9ca3af; font-size: 12px; text-align: center; line-height: 1.5;">
This is an automated message from {{ config('app.name') }}.<br>
Please do not reply to this email.
</p>
</td>
</tr>
</table>
<!-- Bottom Spacer -->
<table role="presentation" style="max-width: 600px; margin: 24px auto 0; border-collapse: collapse;">
<tr>
<td style="text-align: center;">
<p style="margin: 0; color: #9ca3af; font-size: 12px;">
&copy; {{ date('Y') }} {{ config('app.name') }}. All rights reserved.
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>