amuse.git

commit 7b8223a92adf97b043ab1efe05b22300ba991703

Author: Adam <git@apiote.tk>

show welcome after sign up

 accounts/signup.go | 2 +-
 front/capnproto.go | 7 ++++++-
 front/html.go | 6 ++++++
 front/renderer.go | 1 +
 libamuse/signup.go | 27 +++++++++++++++++++++++++--
 router.go | 21 +++++++++++----------
 static/style/style.css | 4 ++++
 templates/signedup.html | 36 ++++++++++++++++++++++++++++++++++++


diff --git a/accounts/signup.go b/accounts/signup.go
index 98369f388be284660cab5a3d20a87459a6939596..df71f3cdd9d91f0fdab2b0fedabb505ea670725e 100644
--- a/accounts/signup.go
+++ b/accounts/signup.go
@@ -89,5 +89,5 @@
 	if err != nil {
 		return "", err
 	}
-	return r.(gott.Tuple)[1].(*AuthResult).token, err
+	return r.(gott.Tuple)[1].(*AuthResult).recoveryCodesRaw, err
 }




diff --git a/front/capnproto.go b/front/capnproto.go
index 993d6a04dc0f12534dab1271a380cc5c19068407..47c382070fcbdc931c3ea86075a68b04991f401a 100644
--- a/front/capnproto.go
+++ b/front/capnproto.go
@@ -56,9 +56,14 @@ 	// todo throw Wrong Accept
 	return TODO("implement CapnprotoRenderer.RenderLogin").(string)
 }
 
-func (CapnprotoRenderer) RenderSignup(languages []language.Tag, err error, target *otp.Key) string {
+func (CapnprotoRenderer) RenderSignup(languages []language.Tag, err error, otp *otp.Key) string {
 	// todo throw Wrong Accept
 	return TODO("implement CapnprotoRenderer.RenderSignup").(string)
+}
+
+func (CapnprotoRenderer) RenderSignedup(languages []language.Tag, recoveryCodes []string) string {
+	// todo throw Wrong Accept
+	return TODO("implement CapnprotoRenderer.RenderSignedup").(string)
 }
 
 func (CapnprotoRenderer) RenderWatchlist(watchlist datastructure.Watchlist, languages []language.Tag) string {




diff --git a/front/html.go b/front/html.go
index 89ec021f32f5100951ae5d83b42302cfe079a183..5e3d6c17cad45814ae196a54e226f06d9552049e 100644
--- a/front/html.go
+++ b/front/html.go
@@ -151,6 +151,12 @@ 	data.State.Error = authError
 	return render(languages, data, "signup")
 }
 
+func (r HtmlRenderer) RenderSignedup(languages []language.Tag, recoveryCodes []string) string {
+	data := RenderData{Data: recoveryCodes}
+	data.State.User = r.user
+	return render(languages, data, "signedup")
+}
+
 func (r HtmlRenderer) RenderWatchlist(watchlist datastructure.Watchlist, languages []language.Tag) string {
 	data := RenderData{Data: watchlist}
 	data.State.User = r.user




diff --git a/front/renderer.go b/front/renderer.go
index b0c8c39176b3a90d92243bf8849d1655c93068b5..9c97247f40f1ba5dddd13923cd4da31c7f9a90d3 100644
--- a/front/renderer.go
+++ b/front/renderer.go
@@ -31,6 +31,7 @@ 	RenderAbout([]language.Tag) string
 	RenderErrorPage(int, []language.Tag) string
 	RenderLogin([]language.Tag, error, string) string
 	RenderSignup([]language.Tag, error, *otp.Key) string
+	RenderSignedup([]language.Tag, []string) string
 	RenderWatchlist(datastructure.Watchlist, []language.Tag) string
 	RenderTvQueue(datastructure.TvQueue, []language.Tag) string
 	RenderExperiences(datastructure.Experiences, []language.Tag) string




diff --git a/libamuse/signup.go b/libamuse/signup.go
index 7530470cef7193767f8ad3fb5a54e512e11edb18..46179267413dd217fdeb36f171c749f0b59769e7 100644
--- a/libamuse/signup.go
+++ b/libamuse/signup.go
@@ -4,6 +4,7 @@ import (
 	"notabug.org/apiote/amuse/accounts"
 
 	"errors"
+	"strings"
 
 	"github.com/pquerna/otp"
 	"github.com/pquerna/otp/totp"
@@ -79,6 +80,28 @@
 	return accounts.Signup(username, password, sfaSecret)
 }
 
-func ShowSignedup(acceptLanguages, mimetype string) (string, error) {
-	return "", nil
+func renderSignedup(args ...interface{}) interface{} {
+	result := args[1].(*Result)
+	recoveryCodes := args[2].(string)
+	codes := []string{}
+	if recoveryCodes != "" {
+		codes = strings.Split(recoveryCodes, ",")
+	}
+	result.page = result.renderer.RenderSignedup(result.languages, codes)
+	return gott.Tuple(args)
+}
+
+func ShowSignedup(acceptLanguages, mimetype, recoveryCodes string) (string, error) {
+	r, err := gott.
+		NewResult(gott.Tuple{&RequestData{language: acceptLanguages, mimetype: mimetype}, &Result{}, recoveryCodes}).
+		Bind(parseLanguage).
+		Bind(createRenderer).
+		Map(renderSignedup).
+		Finish()
+
+	if err != nil {
+		return "", err
+	} else {
+		return r.(gott.Tuple)[1].(*Result).page, nil
+	}
 }




diff --git a/router.go b/router.go
index aea23fb0f278e2186bc4f0f83f05d0daf861289c..5fc3a84ea1453e367b729a9816dd01cba40ab4a9 100644
--- a/router.go
+++ b/router.go
@@ -270,16 +270,6 @@ 		}
 	}
 }
 
-func signedup(w http.ResponseWriter, r *http.Request) {
-	acceptLanguages := r.Header.Get("Accept-Language")
-	mimetype := strings.Split(r.Header.Get("Accept"), ",")[0]
-
-	defer recovery(acceptLanguages, mimetype, w)
-
-	signedup, err := libamuse.ShowSignedup(acceptLanguages, mimetype)
-	render(signedup, err, w, acceptLanguages, mimetype)
-}
-
 func signup(w http.ResponseWriter, r *http.Request) {
 	acceptLanguages := r.Header.Get("Accept-Language")
 	mimetype := strings.Split(r.Header.Get("Accept"), ",")[0]
@@ -291,6 +281,17 @@ 		signupGet(w, r, acceptLanguages, mimetype)
 	} else if r.Method == "POST" {
 		signupPost(w, r, acceptLanguages, mimetype)
 	}
+}
+
+func signedup(w http.ResponseWriter, r *http.Request) {
+	acceptLanguages := r.Header.Get("Accept-Language")
+	mimetype := strings.Split(r.Header.Get("Accept"), ",")[0]
+	recoveryCodes := r.URL.Query().Get("recoveryCodes")
+
+	defer recovery(acceptLanguages, mimetype, w)
+
+	signedup, err := libamuse.ShowSignedup(acceptLanguages, mimetype, recoveryCodes)
+	render(signedup, err, w, acceptLanguages, mimetype)
 }
 
 func static(w http.ResponseWriter, r *http.Request) {




diff --git a/static/style/style.css b/static/style/style.css
index c7b85e9496c5751c14d7554ed1f7b973824d052b..f5a6f83d9d6485ba4cb4f70fd6cd2ec92d31131e 100644
--- a/static/style/style.css
+++ b/static/style/style.css
@@ -787,6 +787,10 @@ }
 
 /* FONT STYLE */
 
+.monospace {
+	font-family: monospace;
+}
+
 .sans {
 	font-family: Fira Sans, sans-serif;
 }




diff --git a/templates/signedup.html b/templates/signedup.html
new file mode 100644
index 0000000000000000000000000000000000000000..30284a587ae656885c90432b56942c62b7c24e50
--- /dev/null
+++ b/templates/signedup.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="UTF-8">
+		<meta name="viewport" content="width=device-width, initial-scale=1.0">
+		<title>a·muse</title>
+		<link rel="stylesheet" href="/static/style/style.css" />
+		<link rel="icon" type="image/svg+xml" href="/static/img/logo.svg">
+		<link rel="apple-touch-icon" type="image/svg+xml" href="/static/img/logo.svg">
+	</head>
+	<body class="flex flex-column height-all">
+		<header class="w12 padding-bottom-_25 flex flex-row flex-justify-space flex-align-centre flex-content">
+			<a href="/" class="decoration-none">
+				<h1 class="inline valign-mid text sans margin-lr-1">a·muse</h1>
+			</a>
+		</header>
+		<main class="margin-lr-1 flex-fill">
+			<div class="flex flex-column height-fill flex-centre">
+				<div class="w12 flex flex-centre border-box left">
+					<div>
+						<div class="sans italic centre">„Welcome to Rivendell, Frodo Baggins.”</div>
+						<hr/>
+						{{if gt (len .Data) 0}}
+						<p class="sans">Your second factor recovery Codes are:<br/><br/>
+						{{range .Data}}<span class="monospace font-1">{{.}}</span><br/>{{end}}
+						<br/>
+						Copy them and keep safe.<br/>
+						You’ll need them if You lose Your second factor device.</p>
+						{{end}}
+						<p class="sans">Now, You can <a href="/login">log in</a> and be amused.</p>
+					</div>
+				</div>
+			</div>
+		</main>
+	</body>
+</html>