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  }