test borked
This commit is contained in:
parent
49b528a66b
commit
2418edccfd
29 changed files with 2036 additions and 121 deletions
77
resources/views/auth/login.blade.php
Executable file
77
resources/views/auth/login.blade.php
Executable 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>
|
||||
101
resources/views/auth/verify-code.blade.php
Executable file
101
resources/views/auth/verify-code.blade.php
Executable 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>
|
||||
98
resources/views/dashboard.blade.php
Executable file
98
resources/views/dashboard.blade.php
Executable 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>
|
||||
36
resources/views/emails/magic-login-text.blade.php
Executable file
36
resources/views/emails/magic-login-text.blade.php
Executable 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.
|
||||
108
resources/views/emails/magic-login.blade.php
Executable file
108
resources/views/emails/magic-login.blade.php
Executable 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;">
|
||||
© {{ date('Y') }} {{ config('app.name') }}. All rights reserved.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue