Clean up authentication views.

This commit is contained in:
James Cole
2024-03-09 08:13:53 +01:00
parent 591c9e3b39
commit 46a60af966
54 changed files with 23996 additions and 108 deletions

View File

@@ -0,0 +1,89 @@
@extends('layout.v2.session')
@section('content')
@if(true===$IS_DEMO_SITE)
<div class="card">
<div class="card-body">
<p class="">
Welcome to the Firefly III demo!<br/>
<br/>
To log in, please use email address <strong>{{ $DEMO_USERNAME }}</strong> with password
<strong>{{ $DEMO_PASSWORD }}</strong>.
</p>
</div>
</div>
@endif
{{-- SUCCESS MESSAGE (ALWAYS SINGULAR) --}}
@if(session()->has('success'))
<div class="alert alert-success" role="alert">
<strong>{{ trans('firefly.flash_success') }}</strong> {{ session('success') }}
</div>
@endif
@if($errors->any())
<div class="alert alert-danger" role="alert">
<ul>
@foreach($errors->getBags() as $bag)
@foreach($bag->all() as $error)
<li>{{ $error }}</li>
@endforeach
@endforeach
</ul>
</div>
@endif
@if(session('logoutMessage'))
<div class="alert alert-primary" role="alert">
{{ session('logoutMessage') }}
</div>
@endif
<div class="card">
<div class="card-body login-card-body">
<p class="login-box-msg">{{ __('firefly.sign_in_to_start') }}
</p>
<form action="{{ route('login.post') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
@if(config('firefly.authentication_guard') === 'web')
<div class="input-group mb-3"> <input type="email" name="email" " class="form-control" placeholder="{{ trans('form.email') }}" value="@if(true===$IS_DEMO_SITE){{ $DEMO_USERNAME }}@else{{ $email }}@endif">
<div class="input-group-text"> <em class="fa-solid fa-envelope"></em> </div>
</div>
@else
<div class="input-group mb-3"> <input type="text" autocomplete="username" " name="{{ $usernameField }}" class="form-control" placeholder="{{ trans('form.login_name') }}" value="{{ $email }}">
<div class="input-group-text"> <em class="fa-solid fa-user"></em> </div>
</div>
@endif
<div class="input-group mb-3"> <input type="password" name="password" class="form-control" placeholder="{{ trans('form.password') }}" @if(true===$IS_DEMO_SITE)value="{{ $DEMO_PASSWORD }}"@endif autocomplete="current-password">
<div class="input-group-text"> <em class="fa-solid fa-lock"></em> </div>
</div> <!--begin::Row-->
<div class="row">
<div class="col-8">
<div class="form-check"> <input class="form-check-input" name="remember" id="remember" type="checkbox" value="1"> <label class="form-check-label" for="remember">
{{ trans('form.remember_me') }}
</label> </div>
</div> <!-- /.col -->
<div class="col-4">
<div class="d-grid gap-2"> <button type="submit" class="btn btn-primary">{{ trans('firefly.sign_in') }}</button> </div>
</div> <!-- /.col -->
</div> <!--end::Row-->
</form>
@if($allowReset)
<p class="mb-1 mt-3"> <a href="{{ route('password.reset.request') }}">{{ trans('firefly.forgot_my_password') }}</a> </p>
@endif
@if($allowRegistration)
<p class="mb-0"> <a class='text-center' href='{{ route('register') }}'>{{ trans('firefly.register_new_account') }}</a> </p>
@endif
</div> <!-- /.login-card-body -->
</div>
@endsection
@section('scripts')
<script nonce="{{ $JS_NONCE }}">
addEventListener("DOMContentLoaded", () => {
document.querySelector('#focus').focus();
});
</script>
@endsection

View File

@@ -0,0 +1,48 @@
@extends('layout.v2.session')
@section('content')
@if($errors->any())
<div class="alert alert-danger" role="alert">
<ul>
@foreach($errors->getBags() as $bag)
@foreach($bag->all() as $error)
<li>{{ $error }}</li>
@endforeach
@endforeach
</ul>
</div>
@endif
@if(session()->has('error'))
<div class="alert alert-danger" role="alert">
{{ session('error') }}
</div>
@endif
<div class="card">
<div class="card-body login-card-body">
<p class="login-box-msg">{{ trans('firefly.two_factor_welcome', ['user' => auth()->user()->email]) }}</p>
<p class="login-box-msg">{{ __('firefly.two_factor_enter_code') }}</p>
<form action="{{ route('two-factor.submit') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="input-group mb-3">
<input type="text" name="one_time_password" inputmode="numeric" autocomplete="one-time-code" class="form-control" placeholder="{{ __('firefly.two_factor_code_here') }}" autofocus />
<div class="input-group-text"> <em class="fa-solid fa-calculator"></em> </div>
</div>
<div class="row">
<!-- /.col -->
<div class="col">
<button type="submit" class="btn btn-primary btn-block">{{ __('firefly.authenticate') }}</button>
</div>
<!-- /.col -->
</div>
</form>
<p class="mb-1 mt-3">
<a href="{{ route('two-factor.lost') }}">{{ __('firefly.two_factor_forgot') }}</a>
</p>
</div>
</div>
@endsection

View File

@@ -67,11 +67,11 @@
<div class="input-group mb-3">
{% if config('firefly.authentication_guard') == 'web' %}
<input type="email" id="focus" class="form-control" name="email"
<input type="email" " class="form-control" name="email"
placeholder="{{ trans('form.email') }}"
value="{% if not IS_DEMO_SITE %}{{ email }}{% else %}{{ DEMO_USERNAME }}{% endif %}">
{% else %}
<input type="text" id="focus" autocomplete="username" name="{{ usernameField }}" value="{{ email }}"
<input type="text" " autocomplete="username" name="{{ usernameField }}" value="{{ email }}"
class="form-control" placeholder="{{ trans('form.login_name') }}"/>
{% endif %}
<div class="input-group-append">

View File

@@ -0,0 +1,67 @@
@extends('layout.v2.session')
@section('content')
{{-- SUCCESS MESSAGE (ALWAYS SINGULAR) --}}
@if(session()->has('success'))
<div class="alert alert-success" role="alert">
<strong>{{ trans('firefly.flash_success') }}</strong> {{ session('success') }}
</div>
@endif
@if($errors->any())
<div class="alert alert-danger" role="alert">
<ul>
@foreach($errors->getBags() as $bag)
@foreach($bag->all() as $error)
<li>{{ $error }}</li>
@endforeach
@endforeach
</ul>
</div>
@endif
<div class="card">
<div class="card-body login-card-body">
@if(session('status'))
<p class="login-box-msg text-success">
{{ session('status') }}
</p>
@else
<p class="login-box-msg">{{ trans('firefly.reset_password') }}</p>
<form action="{{ route('password.email') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="input-group mb-3">
<input type="email" " class="form-control" name="email"
placeholder="{{ trans('form.email') }}"/>
<div class="input-group-text"> <em class="fa-solid fa-envelope"></em> </div>
</div>
<div class="row">
<div class="col-12">
<button type="submit" class="btn btn-primary btn-block">{{ trans('firefly.reset_button') }}</button>
</div>
<!-- /.col -->
</div>
</form>
<p class="mt-3 mb-1">
<a href="{{ route('login') }}">{{ trans('firefly.want_to_login') }}</a>
</p>
@if($allowRegistration)
<p class="mb-0">
<a href="{{ route('register') }}" class="text-center">{{ trans('firefly.register_new_account') }}</a>
</p>
@endif
@endif
</div>
</div>
@endsection
@section('scripts')
<script nonce="{{ $JS_NONCE }}">
addEventListener("DOMContentLoaded", () => {
document.querySelector('#focus').focus();
});
</script>
@endsection

View File

@@ -0,0 +1,28 @@
{% extends "./layout/v3/session" %}
{% block content %}
<div class="login-box">
<div class="login-logo">
<img src="v3-local/logo/logo-session.png" width="68" height="100" alt="Firefly III Logo"
title="Firefly III"/>
</div>
{% if errors|length > 0 %}
<div class="alert alert-danger">
<strong>{{ 'flash_error'|_ }}</strong> {{ 'problems_with_input'|_ }}<br><br>
<ul>
{% for error in errors.all %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="card">
<!-- /.login-card-body -->
</div>
</div>
<!-- /.login-box -->
{% include 'partials.password-modal' %}
{% endblock %}

View File

@@ -0,0 +1,87 @@
@extends('layout.v2.session')
@section('content')
@if($errors->any())
<div class="alert alert-danger" role="alert">
<ul>
@foreach($errors->getBags() as $bag)
@foreach($bag->all() as $error)
<li>{{ $error }}</li>
@endforeach
@endforeach
</ul>
</div>
@endif
@if(session('logoutMessage'))
<div class="alert alert-primary" role="alert">
{{ session('logoutMessage') }}
</div>
@endif
<div class="card">
<div class="card-body login-card-body">
<p class="login-box-msg">{{ trans('firefly.reset_password') }}</p>
<form action="{{ url('/password/reset') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="token" value="{{ $token }}">
<div class="input-group mb-3">
<input type="email" name="email" " class="form-control" value="{{ old('email') }}"
placeholder="{{ trans('form.email') }}"/>
<div class="input-group-text"> <em class="fa-solid fa-envelope"></em> </div>
</div>
<div class="input-group mb-3">
<input type="password" class="form-control" placeholder="{{ trans('form.password') }}"
name="password"/>
<div class="input-group-text"> <em class="fa-solid fa-lock"></em> </div>
</div>
<div class="input-group mb-3">
<input type="password" class="form-control" placeholder="{{ trans('form.password_confirmation') }}"
name="password_confirmation"/>
<div class="input-group-text"> <em class="fa-solid fa-lock"></em> </div>
</div>
<div class="row">
<div class="col-12">
<input type="checkbox" id="verify_password" checked name="verify_password" value="1">
<label for="verify_password">
{{ trans('form.verify_password') }}
<a href="#"
data-bs-toggle="modal" data-bs-target="#passwordModal"
><span
class="fa fa-fw fa-question-circle"></span></a>
</label>
</div>
</div>
<div class="row mt-3">
<div class="col">
<button type="submit" class="btn btn-primary btn-block">{{ trans('firefly.button_reset_password') }}</button>
</div>
<!-- /.col -->
</div>
</form>
<p class="mt-3 mb-1">
<a href="{{ route('login') }}">{{ trans('firefly.want_to_login') }}</a>
</p>
@if($allowRegistration)
<p class="mb-0">
<a href="{{ route('register') }}" class="text-center">{{ trans('firefly.register_new_account') }}</a>
</p>
@endif
</div>
</div>
@include('partials.password-modal')
@endsection
@section('scripts')
<script nonce="{{ $JS_NONCE }}" src="v2-local/bs/js/bootstrap.min.js"></script>
<script nonce="{{ $JS_NONCE }}">
addEventListener("DOMContentLoaded", () => {
document.querySelector('#focus').focus();
});
</script>
@endsection

View File

@@ -1,89 +0,0 @@
{% extends "./layout/v3/session" %}
{% block content %}
<div class="login-box">
<div class="login-logo">
<img src="v3-local/logo/logo-session.png" width="68" height="100" alt="Firefly III Logo"
title="Firefly III"/>
</div>
{% if errors|length > 0 %}
<div class="alert alert-danger">
<strong>{{ 'flash_error'|_ }}</strong> {{ 'problems_with_input'|_ }}<br><br>
<ul>
{% for error in errors.all %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="card">
<div class="card-body login-card-body">
<p class="login-box-msg">{{ 'reset_password'|_ }}</p>
<form action="{{ url('/password/reset') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="token" value="{{ token }}">
<div class="input-group mb-3">
<input type="email" name="email" class="form-control" value="{{ old('email') }}" placeholder="{{ trans('form.email') }}"/>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-envelope"></span>
</div>
</div>
</div>
<div class="input-group mb-3">
<input type="password" class="form-control" placeholder="{{ trans('form.password') }}" name="password"/>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
<div class="input-group mb-3">
<input type="password" class="form-control" placeholder="{{ trans('form.password_confirmation') }}" name="password_confirmation"/>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="icheck-primary">
<input type="checkbox" id="verify_password" checked name="verify_password" value="1">
<label for="verify_password">
{{ trans('form.verify_password') }}
<a data-toggle="modal" data-target="#passwordModal" href="#passwordModal"><span
class="fa fa-fw fa-question-circle"></span></a>
</label>
</div>
</div>
</div>
<div class="row">
<div class="col-6 offset-6">
<button type="submit" class="btn btn-primary btn-block">{{ 'button_reset_password'|_ }}</button>
</div>
<!-- /.col -->
</div>
</form>
<p class="mt-3 mb-1">
<a href="{{ route('login') }}">{{ 'want_to_login'|_ }}</a>
</p>
{% if allowRegistration %}
<p class="mb-0">
<a href="{{ route('register') }}" class="text-center">{{ 'register_new_account'|_ }}</a>
</p>
{% endif %}
</div>
<!-- /.login-card-body -->
</div>
</div>
<!-- /.login-box -->
{% include 'partials.password-modal' %}
{% endblock %}

View File

@@ -0,0 +1,85 @@
@extends('layout.v2.session')
@section('content')
{{-- SUCCESS MESSAGE (ALWAYS SINGULAR) --}}
@if(session()->has('success'))
<div class="alert alert-success" role="alert">
<strong>{{ trans('firefly.flash_success') }}</strong> {{ session('success') }}
</div>
@endif
@if($errors->any())
<div class="alert alert-danger" role="alert">
<ul>
@foreach($errors->getBags() as $bag)
@foreach($bag->all() as $error)
<li>{{ $error }}</li>
@endforeach
@endforeach
</ul>
</div>
@endif
<div class="card">
<div class="card-body register-card-body">
<p class="login-box-msg">{{ trans('firefly.register_new_account') }}</p>
<form action="{{ route('register') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="invite_code" value="{{ $inviteCode ?? '' }}">
<div class="input-group mb-3">
<input type="email" name="email" value="{{ $email }}" class="form-control" "
placeholder="{{ trans('form.email') }}"/>
<div class="input-group-text"> <em class="fa-solid fa-envelope"></em> </div>
</div>
<div class="input-group mb-3">
<input type="password" autocomplete="new-password" class="form-control"
placeholder="{{ trans('form.password') }}" name="password"/>
<div class="input-group-text"> <em class="fa-solid fa-lock"></em> </div>
</div>
<div class="input-group mb-3">
<input type="password" autocomplete="new-password" class="form-control"
placeholder="{{ trans('form.password_confirmation') }}" name="password_confirmation"/>
<div class="input-group-text"> <em class="fa-solid fa-lock"></em> </div>
</div>
<div class="row">
<div class="col-12">
<input type="checkbox" id="verify_password" checked name="verify_password" value="1">
<label for="verify_password">
{{ trans('form.verify_password') }}
<a href="#"
data-bs-toggle="modal" data-bs-target="#passwordModal"
><span
class="fa fa-fw fa-question-circle"></span></a>
</label>
</div>
</div>
<div class="row mt-3">
<div class="col-4 offset-8">
<button type="submit" class="btn btn-primary btn-block">Register</button>
</div>
</div>
</form>
<p class="mb-1 mt-3">
<a href="{{ route('login') }}">{{ trans('firefly.want_to_login') }}</a>
</p>
<p class="mb-0">
<a href="{{ route('password.reset.request') }}">{{ trans('firefly.forgot_my_password') }}</a>
</p>
</div>
<!-- /.form-box -->
</div><!-- /.card -->
@include('partials.password-modal')
@endsection
@section('scripts')
<script nonce="{{ $JS_NONCE }}" src="v2-local/bs/js/bootstrap.min.js"></script>
<script nonce="{{ $JS_NONCE }}">
addEventListener("DOMContentLoaded", () => {
document.querySelector('#focus').focus();
});
</script>
@endsection

View File

@@ -0,0 +1,85 @@
<!DOCTYPE html>
<html lang="en">
<head>
<base href="{{ route('index') }}/" />
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{{ __('firefly.login_page_title') }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="{{ __('firefly.login_page_title') }}">
<!-- copy of head.blade.php -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="csrf-token" content="{{ csrf_token() }}">
<meta name="robots" content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="color-scheme" content="light dark">
<script type="text/javascript" nonce="{{ $JS_NONCE }}">
/*!
* Color mode toggler for Bootstrap's docs (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors
* Licensed under the Creative Commons Attribution 3.0 Unported License.
*/
(() => {
'use strict'
// todo store just happens to store in localStorage but if not, this would break.
const getStoredTheme = () => JSON.parse(localStorage.getItem('darkMode'))
const getPreferredTheme = () => {
const storedTheme = getStoredTheme()
if (storedTheme) {
return storedTheme
}
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
}
const setTheme = theme => {
if (theme === 'browser' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.documentElement.setAttribute('data-bs-theme', 'dark')
window.theme = 'dark';
return;
}
if (theme === 'browser' && window.matchMedia('(prefers-color-scheme: light)').matches) {
window.theme = 'light';
document.documentElement.setAttribute('data-bs-theme', 'light')
return;
}
document.documentElement.setAttribute('data-bs-theme', theme)
window.theme = theme;
}
setTheme(getPreferredTheme())
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = getStoredTheme()
if (storedTheme !== 'light' && storedTheme !== 'dark') {
setTheme(getPreferredTheme())
}
})
})()
</script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="v2/css/fonts.css" rel="stylesheet">
<link rel="stylesheet" href="v2/css/adminlte.css">
<!-- session layout includes custom set of icons -->
<link href="v2-local/fa/css/fontawesome.min.css" rel="stylesheet" />
<link href="v2-local/fa/css/solid.min.css" rel="stylesheet" />
</head> <!--end::Head--> <!--begin::Body-->
<body class="login-page bg-body-secondary">
<div class="login-box">
<div class="login-logo">
<img src="images/logo-session.png" width="68" height="100" alt="Firefly III Logo" title="Firefly III" /><br>
<a href='{{ route('index') }}'><b>Firefly</b> III</a> </div>
@yield('content')
</div> <!-- /.login-box --> <!--begin::Third Party Plugin(OverlayScrollbars)-->
<script src="v2/js/adminlte.js" nonce="{{ $JS_NONCE }}"></script>
@yield('scripts')
</body><!--end::Body-->
</html>

View File

@@ -0,0 +1,35 @@
<div class="modal fade" id="passwordModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">
{{ __('firefly.secure_pw_title') }}
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="{{ __('firefly.close') }}"></button>
</div>
<div class="modal-body">
<p>
{{ __('firefly.secure_pw_history') }}
</p>
<p>
{{ __('firefly.secure_pw_ff') }}
</p>
<p>
{{ __('firefly.secure_pw_check_box') }}
</p>
<h4>{{ __('firefly.secure_pw_working_title') }}</h4>
<p>
{!! __('firefly.secure_pw_working') !!}
</p>
<h4>{{ __('firefly.secure_pw_should') }}</h4>
<p>
{{ __('firefly.secure_pw_long_password') }}
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ __('firefly.close') }}</button>
</div>
</div>
</div>
</div>

View File

@@ -1,3 +1 @@
<!--begin::Required Plugin(AdminLTE)-->
<script src="v2/js/adminlte.js" nonce="{{ $JS_NONCE }}"></script>
<!--end::Required Plugin(AdminLTE)-->