Download templates/auth/login.html from Akoda35/PyRunner: direct link, hf CLI and curl.
- Browser
- Download file 6.54 kB
-
https://huggingface.co/spaces/Akoda35/PyRunner/resolve/main/templates/auth/login.html
- Command line
-
hf download hf://spaces/Akoda35/PyRunner/templates/auth/login.html
-
curl -L -o login.html https://huggingface.co/spaces/Akoda35/PyRunner/resolve/main/templates/auth/login.html
6.54 kB
| {% extends "base.html" %} | |
| {% block title %}Sign In - PyRunner{% endblock %} | |
| {% block header %}{% endblock %} | |
| {% block footer %}{% endblock %} | |
| {% block content %} | |
| <div class="min-h-screen flex items-center justify-center px-4 py-12"> | |
| <div class="w-full max-w-md"> | |
| <div class="text-center mb-10"> | |
| <div class="w-16 h-16 bg-code-accent/20 rounded-2xl flex items-center justify-center mx-auto mb-6 glow-accent"> | |
| <svg class="w-8 h-8 text-code-accent" 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"/> | |
| </svg> | |
| </div> | |
| <h1 class="text-3xl font-bold gradient-text mb-6">PyRunner</h1> | |
| </div> | |
| <div class="bg-code-surface border border-code-border rounded-xl p-8"> | |
| <h2 class="text-xl font-semibold text-code-text mb-6 text-center">Sign In</h2> | |
| {% if error_message %} | |
| <div class="mb-6 p-4 bg-code-red/10 border border-code-red/30 rounded-lg"> | |
| <p class="text-sm text-code-red">{{ error_message }}</p> | |
| </div> | |
| {% endif %} | |
| <!-- Password Login Form --> | |
| <form method="post" class="space-y-5" id="password-form"> | |
| {% csrf_token %} | |
| <input type="hidden" name="action" value="password"> | |
| <div> | |
| <label for="id_email" class="block text-sm font-medium text-code-muted mb-2"> | |
| Email address | |
| </label> | |
| {{ password_form.email }} | |
| </div> | |
| <div> | |
| <label for="id_password" class="block text-sm font-medium text-code-muted mb-2"> | |
| Password | |
| </label> | |
| {{ password_form.password }} | |
| </div> | |
| <button | |
| type="submit" | |
| class="w-full py-3 px-4 bg-code-accent hover:bg-code-accent/90 text-white font-semibold rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-code-accent/50 focus:ring-offset-2 focus:ring-offset-code-surface" | |
| > | |
| Sign In | |
| </button> | |
| </form> | |
| {% if email_enabled %} | |
| <!-- Forgot Password Link --> | |
| <div class="mt-4 text-center"> | |
| <a href="{% url 'auth:forgot_password' %}" class="text-sm text-code-muted hover:text-code-accent transition-colors"> | |
| Forgot your password? | |
| </a> | |
| </div> | |
| <!-- Divider --> | |
| <div class="relative my-6"> | |
| <div class="absolute inset-0 flex items-center"> | |
| <div class="w-full border-t border-code-border"></div> | |
| </div> | |
| <div class="relative flex justify-center text-sm"> | |
| <span class="px-4 bg-code-surface text-code-muted">or</span> | |
| </div> | |
| </div> | |
| <!-- Magic Link Section --> | |
| <div id="magic-link-section"> | |
| <button | |
| type="button" | |
| onclick="toggleMagicLink()" | |
| id="magic-link-toggle" | |
| class="w-full py-3 px-4 bg-code-bg hover:bg-code-bg/80 text-code-text border border-code-border font-medium rounded-lg transition-colors flex items-center justify-center space-x-2" | |
| > | |
| <svg class="w-5 h-5 text-code-accent" 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"/> | |
| </svg> | |
| <span>Use Magic Link Instead</span> | |
| </button> | |
| <form method="post" class="hidden mt-4 space-y-4" id="magic-link-form"> | |
| {% csrf_token %} | |
| <input type="hidden" name="action" value="magic_link"> | |
| <div> | |
| <label for="magic_email" class="block text-sm font-medium text-code-muted mb-2"> | |
| Email address | |
| </label> | |
| <input | |
| type="email" | |
| id="magic_email" | |
| name="magic_email" | |
| required | |
| autocomplete="email" | |
| placeholder="you@example.com" | |
| class="w-full px-4 py-3 bg-code-bg border border-code-border rounded-lg text-code-text placeholder-code-muted/50 focus:outline-none focus:ring-2 focus:ring-code-accent/50 focus:border-code-accent transition-all" | |
| > | |
| </div> | |
| <button | |
| type="submit" | |
| class="w-full py-3 px-4 bg-code-accent hover:bg-code-accent/90 text-white font-semibold rounded-lg transition-colors" | |
| > | |
| Send Magic Link | |
| </button> | |
| <button | |
| type="button" | |
| onclick="toggleMagicLink()" | |
| class="w-full py-2 text-sm text-code-muted hover:text-code-text transition-colors" | |
| > | |
| Back to password login | |
| </button> | |
| </form> | |
| </div> | |
| {% endif %} | |
| </div> | |
| </div> | |
| </div> | |
| <script> | |
| function toggleMagicLink() { | |
| const toggle = document.getElementById('magic-link-toggle'); | |
| const form = document.getElementById('magic-link-form'); | |
| const passwordForm = document.getElementById('password-form'); | |
| if (form.classList.contains('hidden')) { | |
| form.classList.remove('hidden'); | |
| toggle.classList.add('hidden'); | |
| passwordForm.classList.add('hidden'); | |
| } else { | |
| form.classList.add('hidden'); | |
| toggle.classList.remove('hidden'); | |
| passwordForm.classList.remove('hidden'); | |
| } | |
| } | |
| </script> | |
| {% endblock %} | |