www.spaceplanner.app

Web client to the spaceplanner API
git clone git://jacobedwards.org/www.spaceplanner.app
Log | Files | Refs

main.js (2886B)


      1 import * as api from "/lib/api.js"
      2 import * as etc from "/lib/etc.js"
      3 
      4 etc.handle_wrap(main)
      5 
      6 function main() {
      7 	api.fetch("GET", "users/:user/email/code")
      8 		.then(function() {
      9 			document.getElementById("wait").remove()
     10 			document.body.appendChild(codeForm())
     11 			document.body.appendChild(document.createElement("br"))
     12 			document.body.appendChild(resendForm())
     13 		})
     14 		.catch(function(err) {
     15 			etc.error(err + ": Unable to send code")
     16 
     17 			let b = document.body.appendChild(document.createElement("input"))
     18 			b.type = "button"
     19 			b.value = "Retry"
     20 			b.addEventListener("click", function() {
     21 				b.remove()
     22 				main()
     23 			})
     24 		})
     25 
     26 }
     27 
     28 function codeForm() {
     29 	let form = document.createElement("form")
     30 	form.id = "code_form"
     31 
     32 	let label = form.appendChild(
     33 		document.createElement("label")
     34 	)
     35 	label.setAttribute("for", "code")
     36 	label.classList.add("break")
     37 
     38 	label.appendChild(
     39 		document.createTextNode("Please enter the code sent to your email:")
     40 	)
     41 	let input = form.appendChild(
     42 		document.createElement("input")
     43 	)
     44 	input.id = "code"
     45 	input.setAttribute("autofocus", true)
     46 	input.setAttribute("name", "otp")
     47 	input.setAttribute("type", "number")
     48 
     49 	input.after(document.createTextNode(" "))
     50 
     51 	let submit = form.appendChild(
     52 		document.createElement("input")
     53 	)
     54 	submit.setAttribute("type", "submit")
     55 
     56 	form.addEventListener("submit", function(event) {
     57 		event.preventDefault()
     58 		api.fetch("POST", "users/:user/email/code", { code: code.value })
     59 			.then(function(body) {
     60 				if (!body.valid) {
     61 					etc.error("That was not the correct code, please try again.", form)
     62 				} else {
     63 					etc.userService()
     64 						.then(function(service) {
     65 							if (service) {
     66 								window.location.href = "/settings"
     67 							} else {
     68 								window.location.href = "/services"
     69 							}
     70 						})
     71 						.catch(function() {
     72 							// Eh.
     73 							window.location.href = "/settings"
     74 						})
     75 				}
     76 			})
     77 			.catch(function(err) {
     78 				etc.error(err + ": Could not verify code", form)
     79 			})
     80 	})
     81 
     82 	return form
     83 }
     84 
     85 function resendForm() {
     86 	let form = document.createElement("form")
     87 	form.id = "resend"
     88 
     89 	let label = form.appendChild(
     90 		document.createElement("label")
     91 	)
     92 	label.setAttribute("for", "resend")
     93 	label.appendChild(
     94 		document.createTextNode("Don't see the code? Click here to resend it: ")
     95 	)
     96 
     97 	let resend = form.appendChild(
     98 		document.createElement("input")
     99 	)
    100 	resend.setAttribute("type", "submit")
    101 	resend.setAttribute("value", "Resend")
    102 
    103 	form.addEventListener("submit", function(event) {
    104 		event.preventDefault()
    105 		api.fetch("GET", "users/:user/email/code")
    106 			.then(function(body) {
    107 				console.log(body)
    108 				let msg = document.createElement("p")
    109 				msg.appendChild(document.createTextNode("Code resent."))
    110 				form.before(msg)
    111 				setTimeout(function() { msg.remove() }, 5500)
    112 			})
    113 			.catch(function(err) {
    114 				etc.error(err + ": Unable to resend code", form)
    115 			})
    116 	})
    117 
    118 	return form
    119 }