checkpoint.blade.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. @extends('layouts.blank')
  2. @push('styles')
  3. <link href="{{ mix('css/landing.css') }}" rel="stylesheet">
  4. <link rel="preload" as="image" href="{{ url('/_landing/bg.jpg')}}" />
  5. @endpush
  6. @section('content')
  7. <div class="page-wrapper">
  8. <div class="container mt-5">
  9. <div class="row justify-content-center">
  10. <div class="col-lg-5">
  11. <div class="text-center">
  12. <a href="/">
  13. <img src="/img/pixelfed-icon-white.svg" height="60px">
  14. </a>
  15. <h1 class="pt-4 pb-1">2FA Checkpoint</h1>
  16. <p class="font-weight-light lead">
  17. Enter the 2FA code from your device.
  18. </p>
  19. <p class="text-muted small pb-3">
  20. If you lose access to your 2FA device, contact the admins.
  21. </p>
  22. </div>
  23. <div class="card bg-glass">
  24. <div class="card-body">
  25. <form method="POST" id="2faForm">
  26. @csrf
  27. <div class="form-group row">
  28. <div class="col-md-12">
  29. <label class="font-weight-bold small text-muted">2FA Code</label>
  30. <input
  31. id="code"
  32. type="text"
  33. class="form-control{{ $errors->has('code') ? ' is-invalid' : '' }}"
  34. name="code"
  35. placeholder="{{__('Two-Factor Authentication Code')}}"
  36. required
  37. autocomplete="new-password"
  38. autofocus=""
  39. inputmode="numeric"
  40. minlength="6">
  41. @if ($errors->has('code'))
  42. <span class="invalid-feedback">
  43. <strong>{{ $errors->first('code') }}</strong>
  44. </span>
  45. @endif
  46. </div>
  47. </div>
  48. <div class="form-group row mb-0">
  49. <div class="col-md-12">
  50. <button
  51. type="button"
  52. id="sbtn"
  53. class="btn btn-success btn-block rounded-pill font-weight-bold"
  54. onclick="event.preventDefault();handleSubmit()"
  55. >
  56. {{ __('Verify') }}
  57. </button>
  58. </div>
  59. </div>
  60. </form>
  61. </div>
  62. </div>
  63. <div class="d-flex justify-content-between my-3">
  64. <p class="mb-0 small">
  65. <span class="text-muted">Logged in as:</span> {{request()->user()->username}}
  66. </p>
  67. <form action="/logout" method="post">
  68. @csrf
  69. <button type="submit" class="btn btn-link p-0 btn-sm text-white font-weight-bold">Logout</button>
  70. </form>
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. </div>
  76. @endsection
  77. @push('scripts')
  78. <script type="text/javascript">
  79. function handleSubmit() {
  80. let warning = document.querySelector('.invalid-feedback');
  81. if(warning) {
  82. warning.style.display = 'none';
  83. }
  84. let code = document.getElementById('code');
  85. code.setAttribute('readonly', 'readonly');
  86. code.style.opacity = '20%';
  87. let btn = document.getElementById('sbtn');
  88. btn.classList.add('disabled');
  89. btn.setAttribute('disabled', 'disabled');
  90. btn.innerHTML = '<div class="spinner-border spinner-border-sm" role="status"><span class="sr-only">Loading...</span></div>';
  91. document.getElementById('2faForm').submit()
  92. }
  93. </script>
  94. @endpush