diff options
author | Steve Manuel <nilslice@gmail.com> | 2016-10-22 01:39:19 -0700 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2016-10-22 01:39:19 -0700 |
commit | 735f99addd98f232ae126cac11d93a9dbbcc3c79 (patch) | |
tree | f8d3804f326fda466ac9ac91782228909ef05fd6 /system/admin/admin.go | |
parent | 936b8aef13b164ce74f9ec11bf1385275d282df8 (diff) |
adding initial support to edit and add admin users
Diffstat (limited to 'system/admin/admin.go')
-rw-r--r-- | system/admin/admin.go | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/system/admin/admin.go b/system/admin/admin.go index b375eb6..e56453f 100644 --- a/system/admin/admin.go +++ b/system/admin/admin.go @@ -4,9 +4,12 @@ package admin import ( "bytes" + "encoding/json" "html/template" + "net/http" "github.com/bosssauce/ponzu/content" + "github.com/bosssauce/ponzu/system/admin/user" "github.com/bosssauce/ponzu/system/db" ) @@ -241,6 +244,119 @@ func Login() ([]byte, error) { return buf.Bytes(), nil } +// UsersList ... +func UsersList(req *http.Request) ([]byte, error) { + html := ` + <div class="card"> + <form class="row" enctype="multipart/form-data" action="/admin/configure/users/edit" method="post"> + <div>Edit your account:</div> + <div class="input-feild col s12"> + <label class="active">Email Address</label> + <input type="email" name="email" value="{{ .User.Email }}"/> + </div> + + <div>To approve changes, enter your password:</div> + <div class="input-feild col s12"> + <label class="active">Current Password</label> + <input type="password" name="password"/> + </div> + + <div class="input-feild col s12"> + <label class="active">New Password: (leave blank if no password change needed)</label> + <input type="email" name="new_password" type="password"/> + </div> + + <button class="btn waves-effect waves-light green" type="submit">Save</button> + </form> + + <form class="row" enctype="multipart/form-data" action="/admin/configure/users" method="post"> + <div>Add a new user:</div> + <div class="input-feild col s12"> + <label class="active">Email Address</label> + <input type="email" name="email" value=""/> + </div> + + <div class="input-feild col s12"> + <label class="active">Password</label> + <input type="password" name="password"/> + </div> + + <button class="btn waves-effect waves-light green" type="submit">Add User</button> + </form> + + <ul class="users row"> + {{ range .Users }} + <li class="col s12"> + {{ .Email }} + <form enctype="multipart/form-data" class="delete-user __ponzu right" action="/admin/configure/users/delete" method="post"> + <span>Delete</span> + <input type="hidden" name="email" value="{{ .Email }}"/> + <input type="hidden" name="id" value="{{ .ID }}"/> + </form> + <li> + {{ end }} + </ul> + </div> + ` + script := ` + <script> + $(function() { + var del = $('.delete-user.__ponzu span'); + del.on('click', function(e) { + if (confirm("[Ponzu] Please confirm:\n\nAre you sure you want to delete this user?\nThis cannot be undone.")) { + $(e.target).parent().submit(); + } + }); + }); + </script> + ` + var usr user.User + var usrs []user.User + // get current user out to pass as data to execute template + j, err := db.CurrentUser(req) + if err != nil { + return nil, err + } + err = json.Unmarshal(j, &usr) + if err != nil { + return nil, err + } + + // get all users to list + jj, err := db.UserAll() + if err != nil { + return nil, err + } + for i := range jj { + var u user.User + err = json.Unmarshal(jj[i], &u) + if err != nil { + return nil, err + } + usrs = append(usrs, u) + } + + // make buffer to execute html into then pass buffer's bytes to Admin + buf := &bytes.Buffer{} + tmpl := template.Must(template.New("users").Parse(html + script)) + data := map[string]interface{}{ + "User": usr, + "Users": usrs, + } + + err = tmpl.Execute(buf, data) + if err != nil { + return nil, err + } + + view, err := Admin(buf.Bytes()) + if err != nil { + return nil, err + } + + return view, nil +} + var err400HTML = ` <div class="error-page e400 col s6"> <div class="card"> |