diff options
author | Steve Manuel <nilslice@gmail.com> | 2016-11-09 18:09:36 -0800 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2016-11-09 18:09:36 -0800 |
commit | e70c231df82f4e5f09869f8d570d809a5f70993c (patch) | |
tree | e1a0c76ab0483c29b78ba7c0458f5f59b5ca0598 /system/admin/admin.go | |
parent | ea3d29602be45c49629c2a8b6b8199e4f9e9076d (diff) |
adding initial partial implementation of account recovery flow
Diffstat (limited to 'system/admin/admin.go')
-rw-r--r-- | system/admin/admin.go | 115 |
1 files changed, 114 insertions, 1 deletions
diff --git a/system/admin/admin.go b/system/admin/admin.go index 8c13582..e0689b3 100644 --- a/system/admin/admin.go +++ b/system/admin/admin.go @@ -205,7 +205,8 @@ var loginAdminHTML = ` </div> <div class="input-field col s12"> <input placeholder="Enter your password" class="validate required" type="password" id="password" name="password"/> - <label for="password" class="active">Password</label> + <a href="/admin/recover" class="right">Forgot password?</a> + <label for="password" class="active">Password</label> </div> <button class="btn waves-effect waves-light right">Log in</button> </form> @@ -246,6 +247,118 @@ func Login() ([]byte, error) { return buf.Bytes(), nil } +var forgotPasswordHTML = ` +<div class="init col s5"> +<div class="card"> +<div class="card-content"> + <div class="card-title">Account Recovery</div> + <blockquote>Please enter the email for your account and a recovery message will be sent to you at this address. Check your spam folder in case the message was flagged.</blockquote> + <form method="post" action="/admin/recover" class="row"> + <div class="input-field col s12"> + <input placeholder="Enter your email address e.g. you@example.com" class="validate required" type="email" id="email" name="email"/> + <label for="email" class="active">Email</label> + </div> + + <button class="btn waves-effect waves-light right">Send Recovery Email</button> + </form> +</div> +</div> +</div> +<script> + $(function() { + $('.nav-wrapper ul.right').hide(); + }); +</script> +` + +// ForgotPassword ... +func ForgotPassword() ([]byte, error) { + html := startAdminHTML + forgotPasswordHTML + endAdminHTML + + cfg, err := db.Config("name") + if err != nil { + return nil, err + } + + if cfg == nil { + cfg = []byte("") + } + + a := admin{ + Logo: string(cfg), + } + + buf := &bytes.Buffer{} + tmpl := template.Must(template.New("forgotPassword").Parse(html)) + err = tmpl.Execute(buf, a) + if err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +var recoveryKeyHTML = ` +<div class="init col s5"> +<div class="card"> +<div class="card-content"> + <div class="card-title">Account Recovery</div> + <blockquote>Please check for your recovery key inside an email sent to the address you provided. Check your spam folder in case the message was flagged.</blockquote> + <form method="post" action="/admin/recover/key" class="row"> + <div class="input-field col s12"> + <input placeholder="Enter your recovery key" class="validate required" type="text" id="key" name="key"/> + <label for="key" class="active">Recovery Key</label> + </div> + + <div class="input-field col s12"> + <input placeholder="Enter your email address e.g. you@example.com" class="validate required" type="email" id="email" name="email"/> + <label for="email" class="active">Email</label> + </div> + + <div class="input-field col s12"> + <input placeholder="Enter your password" class="validate required" type="password" id="password" name="password"/> + <label for="password" class="active">New Password</label> + </div> + + <button class="btn waves-effect waves-light right">Update Account</button> + </form> +</div> +</div> +</div> +<script> + $(function() { + $('.nav-wrapper ul.right').hide(); + }); +</script> +` + +// RecoveryKey ... +func RecoveryKey() ([]byte, error) { + html := startAdminHTML + recoveryKeyHTML + endAdminHTML + + cfg, err := db.Config("name") + if err != nil { + return nil, err + } + + if cfg == nil { + cfg = []byte("") + } + + a := admin{ + Logo: string(cfg), + } + + buf := &bytes.Buffer{} + tmpl := template.Must(template.New("recoveryKey").Parse(html)) + err = tmpl.Execute(buf, a) + if err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + // UsersList ... func UsersList(req *http.Request) ([]byte, error) { html := ` |