My SMM panel
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

170 lines
4.8 KiB

  1. <template>
  2. <form v-if="active === 'register'" onsubmit = "event.preventDefault(); return false" id="register-form">
  3. <h3>Registration</h3>
  4. <div>{{errorMessage}}</div>
  5. <div>
  6. <label for='sender_name'>Name</label>
  7. <input id='register-name' required type='name' name='sender_name' placeholder=''
  8. spellcheck='false'>
  9. </div>
  10. <div>
  11. <label for='sender_email'>Email</label>
  12. <input v-on:input="checkPasswords" id='register-email' required type='email' name='sender_email' placeholder=''
  13. spellcheck='false'>
  14. </div>
  15. <div>
  16. <label for='sender_password'>Password</label>
  17. <input v-on:input="checkPasswords" id='register-password' required type='password' name='sender_password'
  18. placeholder='' spellcheck='false'>
  19. </div>
  20. <div>
  21. <label for='confirm_password'>Confirm Password</label>
  22. <input v-on:input="checkPasswords" id='confirm-password' required type='password'
  23. name='sender_password' placeholder='' spellcheck='false'>
  24. </div>
  25. <button @click="register($event)" class="submit-btn" type="submit">Submit</button>
  26. </form>
  27. <form v-if="active === 'forgot'" v-on:submit="forgotPassword" id="forgot-form">
  28. <h3>Forgot Password</h3>
  29. <div>
  30. <label for='sender_email'>Email</label>
  31. <input id='forgot-email' required type='email' name='sender_email' placeholder=''
  32. spellcheck='false'>
  33. </div>
  34. <button class="submit-btn" type="submit">Submit</button>
  35. </form>
  36. <img v-if="active === 'loading'" type="image/svg+xml" class="loading-icon" src="../../images/loading.svg" alt=""/>
  37. <div v-if="active === 'register-completed'">
  38. <img class="medium-icon" src="../../images/checked2.svg" alt="">
  39. <h3>Success!</h3>
  40. <p>A verification link has been sent to your inbox.</p>
  41. </div>
  42. <div v-if="active === 'forgot-completed'">
  43. <img class="medium-icon" src="../../images/checked2.svg" alt="">
  44. <h3>Success!</h3>
  45. <p>A password reset link has been sent.</p>
  46. </div>
  47. <div v-if="active === 'error'">
  48. <img class="medium-icon" src="../../images/warning-colored.svg" alt="">
  49. <h3>An Error Occured.</h3>
  50. <p>{{`${error}: ${errorMessage}`}}</p>
  51. </div>
  52. <div v-on:click="closeArea" class="cancel-button"></div>
  53. </template>
  54. <script>
  55. function getCookie(name) {
  56. var re = new RegExp(name + "=([^;]+)")
  57. var value = re.exec(document.cookie)
  58. let v = (value != null) ? unescape(value[1]) : null
  59. return v
  60. }
  61. function getToken() {
  62. return fetch("/sanctum/csrf-cookie", {
  63. method: 'GET'
  64. }).then( () => {
  65. this.token = this.getCookie('XSRF-TOKEN')
  66. return this.token
  67. })
  68. }
  69. function register(event) {
  70. event.preventDefault();
  71. event.stopPropagation();
  72. this.errorMessage = ''
  73. let name = document.getElementById("register-name").value
  74. let email = document.getElementById("register-email").value
  75. let password = document.getElementById("register-password").value
  76. let password_confirmation = document.getElementById("confirm-password").value
  77. this.active = 'loading'
  78. this.getToken().then(() => {fetch("/register", {
  79. method: 'POST',
  80. headers: {'Content-Type': 'application/json',
  81. 'Accept': 'application/json',
  82. 'X-XSRF-TOKEN': this.token},
  83. body: JSON.stringify({"name": name,
  84. "email": email,
  85. "password": password,
  86. "password_confirmation": password_confirmation})})
  87. .then(response => {
  88. //Give completed or error
  89. if (response.ok) {
  90. this.active = 'register-completed'
  91. } else if (response.status != 500) {
  92. response.json().then((e) => {
  93. try {
  94. for (let i in e.errors) {
  95. this.errorMessage = e.errors[i].flat().join("\n") +
  96. "\n" + this.errorMessage
  97. }
  98. } catch (x) {
  99. this.errorMessage = e.message
  100. }
  101. })
  102. this.active = 'register'
  103. } else {
  104. this.errorMessage = response.statusText
  105. this.active = 'register'
  106. }
  107. });
  108. })
  109. return false
  110. }
  111. function checkPasswords() {
  112. let passInput = document.getElementById('register-password')
  113. let passInput2 = document.getElementById('confirm-password')
  114. if (passInput.value != passInput2.value) {
  115. passInput2.setCustomValidity('Passwords must be matching')
  116. } else {
  117. passInput2.setCustomValidity('');
  118. }
  119. }
  120. function forgotPassword(event) {
  121. let email = document.getElementById("forgot-email").value
  122. this.active = 'loading'
  123. fetch("/forgot-password", {
  124. method: 'POST',
  125. headers: {'Content-Type': 'application/json',
  126. 'Accept': 'application/json',
  127. 'X-XSRF-TOKEN': this.token},
  128. body: JSON.stringify({"email": email})})
  129. .then(response => {
  130. if (response.ok) {
  131. this.active = 'forgot-completed'
  132. } else {
  133. this.error = response.status
  134. this.errorMessage = response.statusText
  135. this.active = 'error'
  136. }
  137. /* console.log(response.json()) */
  138. });
  139. event.preventDefault();
  140. }
  141. export default {
  142. data() {
  143. return {active: 'register', token: '', errorMessage: ''}
  144. },
  145. methods: {
  146. getToken,
  147. getCookie,
  148. register,
  149. checkPasswords,
  150. forgotPassword,
  151. closeArea() {
  152. document.querySelector(".register-area").classList.remove("active")
  153. },
  154. },
  155. mounted() {
  156. this.getToken()
  157. }
  158. }
  159. </script>