welcome: successful registration page (#82)

diff --git a/charts/welcome/templates/install.yaml b/charts/welcome/templates/install.yaml
index 418fdbb..a5f2a2c 100644
--- a/charts/welcome/templates/install.yaml
+++ b/charts/welcome/templates/install.yaml
@@ -110,6 +110,7 @@
         - --ssh-key=/pcloud/ssh-key/private
         - --port=8080
         - --create-account-addr={{ .Values.createAccountAddr }}
+        - --login-addr={{ .Values.loginAddr }} 
         volumeMounts:
         - name: ssh-key
           readOnly: true
diff --git a/charts/welcome/values.yaml b/charts/welcome/values.yaml
index 0e7a7ae..3aac390 100644
--- a/charts/welcome/values.yaml
+++ b/charts/welcome/values.yaml
@@ -5,6 +5,7 @@
 repoAddr: 192.168.0.11
 sshPrivateKey: key
 createAccountAddr: http://api.core-auth.svc.cluster.local/identities
+loginAddr: https://accounts-ui.example.com
 ingress:
   className: pcloud-ingress-public
   domain: welcome.example.com
diff --git a/core/installer/cmd/welcome.go b/core/installer/cmd/welcome.go
index 41d27f7..b1f3259 100644
--- a/core/installer/cmd/welcome.go
+++ b/core/installer/cmd/welcome.go
@@ -1,14 +1,13 @@
 package main
 
 import (
-	"golang.org/x/crypto/ssh"
 	"os"
 
-	"github.com/spf13/cobra"
-
 	"github.com/giolekva/pcloud/core/installer"
 	"github.com/giolekva/pcloud/core/installer/soft"
 	"github.com/giolekva/pcloud/core/installer/welcome"
+	"github.com/spf13/cobra"
+	"golang.org/x/crypto/ssh"
 )
 
 var welcomeFlags struct {
@@ -16,6 +15,7 @@
 	sshKey            string
 	port              int
 	createAccountAddr string
+	loginAddr         string
 }
 
 func welcomeCmd() *cobra.Command {
@@ -47,6 +47,12 @@
 		"",
 		"",
 	)
+	cmd.Flags().StringVar(
+		&welcomeFlags.loginAddr,
+		"login-addr",
+		"",
+		"",
+	)
 	return cmd
 }
 
@@ -76,6 +82,7 @@
 		installer.NewRepoIO(repo, signer),
 		nsCreator,
 		welcomeFlags.createAccountAddr,
+		welcomeFlags.loginAddr,
 	)
 	s.Start()
 	return nil
diff --git a/core/installer/values-tmpl/welcome.cue b/core/installer/values-tmpl/welcome.cue
index 255cc20..0a11ac9 100644
--- a/core/installer/values-tmpl/welcome.cue
+++ b/core/installer/values-tmpl/welcome.cue
@@ -6,6 +6,7 @@
 	repoAddr: string
 	sshPrivateKey: string
 	createAccountAddr: string
+	loginAddr: string
 }
 
 name: "welcome"
@@ -38,6 +39,7 @@
 			repoAddr: input.repoAddr
 			sshPrivateKey: base64.Encode(null, input.sshPrivateKey)
 			createAccountAddr: "http://api.\(global.namespacePrefix)core-auth.svc.cluster.local/identities"
+			loginAddr: "http://accounts-ui.\(global.domain)"
 			ingress: {
 				className: _ingressPublic
 				domain: "welcome.\(global.domain)"
diff --git a/core/installer/welcome/create-account-success.html b/core/installer/welcome/create-account-success.html
new file mode 100644
index 0000000..7432da3
--- /dev/null
+++ b/core/installer/welcome/create-account-success.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en" data-theme="light">
+    <head>
+        <link rel="stylesheet" href="/static/pico.2.0.6.min.css">
+        <meta charset="UTF-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1" >
+        <title>Successful Registration</title>
+    </head>
+    <body>
+        <main class="container">
+            <div>
+                <p>Your account has been successfully created.</p>
+                <p>Click <a href="{{ .LoginAddr }}">here</a> to authenticate.</p>
+            </div>
+        </main>
+    </body>
+</html>
diff --git a/core/installer/welcome/welcome.go b/core/installer/welcome/welcome.go
index 4d30784..5184a8e 100644
--- a/core/installer/welcome/welcome.go
+++ b/core/installer/welcome/welcome.go
@@ -19,6 +19,9 @@
 //go:embed create-account.html
 var indexHtml []byte
 
+//go:embed create-account-success.html
+var successHtml []byte
+
 //go:embed static/*
 var staticAssets embed.FS
 
@@ -27,6 +30,7 @@
 	repo              installer.RepoIO
 	nsCreator         installer.NamespaceCreator
 	createAccountAddr string
+	loginAddr         string
 }
 
 func NewServer(
@@ -34,12 +38,14 @@
 	repo installer.RepoIO,
 	nsCreator installer.NamespaceCreator,
 	createAccountAddr string,
+	loginAddr string,
 ) *Server {
 	return &Server{
 		port,
 		repo,
 		nsCreator,
 		createAccountAddr,
+		loginAddr,
 	}
 }
 
@@ -127,6 +133,23 @@
 	}
 }
 
+func renderRegistrationSuccess(w http.ResponseWriter, loginAddr string) {
+	data := struct {
+		LoginAddr string
+	}{
+		LoginAddr: loginAddr,
+	}
+	tmpl, err := template.New("create-account-success").Parse(string(successHtml))
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	if err := tmpl.Execute(w, data); err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+}
+
 func (s *Server) createAdminAccount(w http.ResponseWriter, r *http.Request) {
 	req, err := extractReq(r)
 	if err != nil {
@@ -209,8 +232,5 @@
 			}
 		}
 	}
-	if _, err := w.Write([]byte("OK")); err != nil {
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		return
-	}
+	renderRegistrationSuccess(w, s.loginAddr)
 }