github.com/unclejack/drone@v0.2.1-0.20140918182345-831b034aa33b/pkg/handler/users.go (about) 1 package handler 2 3 import ( 4 "net/http" 5 6 "github.com/drone/drone/pkg/database" 7 . "github.com/drone/drone/pkg/model" 8 ) 9 10 // Display the dashboard for a specific user 11 func UserShow(w http.ResponseWriter, r *http.Request, u *User) error { 12 // list of repositories owned by User 13 repos, err := database.ListRepos(u.ID) 14 if err != nil { 15 return err 16 } 17 // list of user team accounts 18 teams, err := database.ListTeams(u.ID) 19 if err != nil { 20 return err 21 } 22 // list of recent commits 23 commits, err := database.ListCommitsUser(u.ID) 24 if err != nil { 25 return err 26 } 27 28 data := struct { 29 User *User 30 Repos []*Repo 31 Teams []*Team 32 Commits []*RepoCommit 33 }{u, repos, teams, commits} 34 return RenderTemplate(w, "user_dashboard.html", &data) 35 } 36 37 // return an HTML form for editing a user 38 func UserEdit(w http.ResponseWriter, r *http.Request, u *User) error { 39 return RenderTemplate(w, "user_profile.html", struct{ User *User }{u}) 40 } 41 42 // return an HTML form for editing a user password 43 func UserPass(w http.ResponseWriter, r *http.Request, u *User) error { 44 return RenderTemplate(w, "user_password.html", struct{ User *User }{u}) 45 } 46 47 // return an HTML form for deleting a user. 48 func UserDeleteConfirm(w http.ResponseWriter, r *http.Request, u *User) error { 49 return RenderTemplate(w, "user_delete.html", struct{ User *User }{u}) 50 } 51 52 // update a specific user 53 func UserUpdate(w http.ResponseWriter, r *http.Request, u *User) error { 54 // set the name and email from the form data 55 u.Name = r.FormValue("name") 56 u.SetEmail(r.FormValue("email")) 57 58 if err := u.Validate(); err != nil { 59 return RenderError(w, err, http.StatusBadRequest) 60 } 61 if err := database.SaveUser(u); err != nil { 62 return RenderError(w, err, http.StatusBadRequest) 63 } 64 65 return RenderText(w, http.StatusText(http.StatusOK), http.StatusOK) 66 } 67 68 // update a specific user's password 69 func UserPassUpdate(w http.ResponseWriter, r *http.Request, u *User) error { 70 // set the name and email from the form data 71 pass := r.FormValue("password") 72 if err := u.SetPassword(pass); err != nil { 73 return RenderError(w, err, http.StatusBadRequest) 74 } 75 // save the updated password to the database 76 if err := database.SaveUser(u); err != nil { 77 return RenderError(w, err, http.StatusBadRequest) 78 } 79 return RenderText(w, http.StatusText(http.StatusOK), http.StatusOK) 80 } 81 82 // delete a specific user. 83 func UserDelete(w http.ResponseWriter, r *http.Request, u *User) error { 84 // the user must confirm their password before deleting 85 password := r.FormValue("password") 86 if err := u.ComparePassword(password); err != nil { 87 return RenderError(w, err, http.StatusBadRequest) 88 } 89 // TODO we need to delete all repos, builds, commits, branches, etc 90 // TODO we should transfer ownership of all team-owned projects to the team owner 91 // delete the account 92 if err := database.DeleteUser(u.ID); err != nil { 93 return RenderError(w, err, http.StatusBadRequest) 94 } 95 96 Logout(w, r) 97 return nil 98 } 99 100 // Display a list of all Teams for the currently authenticated User. 101 func UserTeams(w http.ResponseWriter, r *http.Request, u *User) error { 102 teams, err := database.ListTeams(u.ID) 103 if err != nil { 104 return err 105 } 106 data := struct { 107 User *User 108 Teams []*Team 109 }{u, teams} 110 return RenderTemplate(w, "user_teams.html", &data) 111 }