From ecedb882a1d5466108ddd4e0e834ddba3844e087 Mon Sep 17 00:00:00 2001 From: Tan Jiang Date: Wed, 24 Feb 2016 14:31:52 +0800 Subject: [PATCH] replace status codes with constants in net/http --- api/base.go | 8 +++--- api/project.go | 27 ++++++++++--------- api/project_member.go | 47 +++++++++++++++++---------------- api/repository.go | 19 ++++++------- api/search.go | 5 ++-- api/user.go | 27 ++++++++++--------- controllers/item_detail.go | 9 ++++--- controllers/login.go | 8 +++--- controllers/password.go | 47 +++++++++++++++++---------------- controllers/register.go | 7 ++--- service/auth.go | 5 ++-- service/utils/registry_utils.go | 6 ++--- utils/registry_utils.go | 6 ++--- 13 files changed, 116 insertions(+), 105 deletions(-) diff --git a/api/base.go b/api/base.go index 92578bb78..2262bb3ac 100644 --- a/api/base.go +++ b/api/base.go @@ -40,7 +40,7 @@ func (b *BaseAPI) DecodeJsonReq(v interface{}) { err := json.Unmarshal(b.Ctx.Input.CopyBody(1<<32), v) if err != nil { beego.Error("Error while decoding the json request:", err) - b.CustomAbort(400, "Invalid json request") + b.CustomAbort(http.StatusBadRequest, "Invalid json request") } } @@ -49,17 +49,17 @@ func (b *BaseAPI) ValidateUser() int { sessionUserId := b.GetSession("userId") if sessionUserId == nil { beego.Warning("No user id in session, canceling request") - b.CustomAbort(401, "") + b.CustomAbort(http.StatusUnauthorized, "") } userId := sessionUserId.(int) u, err := dao.GetUser(models.User{UserId: userId}) if err != nil { beego.Error("Error occurred in GetUser:", err) - b.CustomAbort(500, "Internal error.") + b.CustomAbort(http.StatusInternalServerError, "Internal error.") } if u == nil { beego.Warning("User was deleted already, user id: ", userId, " canceling request.") - b.CustomAbort(401, "") + b.CustomAbort(http.StatusUnauthorized, "") } return userId } diff --git a/api/project.go b/api/project.go index 73fa4ae70..42944ef51 100644 --- a/api/project.go +++ b/api/project.go @@ -17,6 +17,7 @@ package api import ( "fmt" "log" + "net/http" "github.com/vmware/harbor/dao" "github.com/vmware/harbor/models" @@ -48,15 +49,15 @@ func (p *ProjectAPI) Prepare() { p.projectId, err = strconv.ParseInt(id_str, 10, 64) if err != nil { log.Printf("Error parsing project id: %s, error: %v", id_str, err) - p.CustomAbort(400, "invalid project id") + p.CustomAbort(http.StatusBadRequest, "invalid project id") } exist, err := dao.ProjectExists(p.projectId) if err != nil { log.Printf("Error occurred in ProjectExists: %v", err) - p.CustomAbort(500, "Internal error.") + p.CustomAbort(http.StatusInternalServerError, "Internal error.") } if !exist { - p.CustomAbort(404, fmt.Sprintf("project does not exist, id: %v", p.projectId)) + p.CustomAbort(http.StatusNotFound, fmt.Sprintf("project does not exist, id: %v", p.projectId)) } } } @@ -71,7 +72,7 @@ func (p *ProjectAPI) Post() { err := validateProjectReq(req) if err != nil { beego.Error("Invalid project request, error: ", err) - p.RenderError(400, "Invalid request for creating project") + p.RenderError(http.StatusBadRequest, "Invalid request for creating project") return } projectName := req.ProjectName @@ -80,14 +81,14 @@ func (p *ProjectAPI) Post() { beego.Error("Error happened checking project existence in db:", err, ", project name:", projectName) } if exist { - p.RenderError(409, "") + p.RenderError(http.StatusConflict, "") return } project := models.Project{OwnerId: p.userId, Name: projectName, CreationTime: time.Now(), Public: public} err = dao.AddProject(project) if err != nil { beego.Error("Failed to add project, error: %v", err) - p.RenderError(500, "Failed to add project") + p.RenderError(http.StatusInternalServerError, "Failed to add project") } } @@ -96,11 +97,11 @@ func (p *ProjectAPI) Head() { result, err := dao.ProjectExists(projectName) if err != nil { beego.Error("Error while communicating with DB: ", err) - p.RenderError(500, "Error while communicating with DB") + p.RenderError(http.StatusInternalServerError, "Error while communicating with DB") return } if !result { - p.RenderError(404, "") + p.RenderError(http.StatusNotFound, "") return } } @@ -117,7 +118,7 @@ func (p *ProjectAPI) Get() { projectList, err := dao.QueryProject(queryProject) if err != nil { beego.Error("Error occurred in QueryProject:", err) - p.CustomAbort(500, "Internal error.") + p.CustomAbort(http.StatusInternalServerError, "Internal error.") } for i := 0; i < len(projectList); i++ { if isProjectAdmin(p.userId, projectList[i].ProjectId) { @@ -135,7 +136,7 @@ func (p *ProjectAPI) Put() { projectId, err := strconv.ParseInt(p.Ctx.Input.Param(":id"), 10, 64) if err != nil { beego.Error("Error parsing project id:", projectId, ", error: ", err) - p.RenderError(400, "invalid project id") + p.RenderError(http.StatusBadRequest, "invalid project id") return } @@ -145,13 +146,13 @@ func (p *ProjectAPI) Put() { } if !isProjectAdmin(p.userId, projectId) { beego.Warning("Current user, id:", p.userId, ", does not have project admin role for project, id:", projectId) - p.RenderError(403, "") + p.RenderError(http.StatusForbidden, "") return } err = dao.ToggleProjectPublicity(p.projectId, public) if err != nil { beego.Error("Error while updating project, project id:", projectId, ", error:", err) - p.RenderError(500, "Failed to update project") + p.RenderError(http.StatusInternalServerError, "Failed to update project") } } @@ -173,7 +174,7 @@ func (p *ProjectAPI) FilterAccessLog() { accessLogList, err := dao.GetAccessLogs(query) if err != nil { log.Printf("Error occurred in GetAccessLogs: %v", err) - p.CustomAbort(500, "Internal error.") + p.CustomAbort(http.StatusInternalServerError, "Internal error.") } p.Data["json"] = accessLogList p.ServeJSON() diff --git a/api/project_member.go b/api/project_member.go index b387958e7..37185ad31 100644 --- a/api/project_member.go +++ b/api/project_member.go @@ -15,12 +15,13 @@ package api import ( + "net/http" + "strconv" + "github.com/vmware/harbor/dao" "github.com/vmware/harbor/models" "github.com/astaxie/beego" - - "strconv" ) type ProjectMemberAPI struct { @@ -40,18 +41,18 @@ func (pma *ProjectMemberAPI) Prepare() { pid, err := strconv.ParseInt(pma.Ctx.Input.Param(":pid"), 10, 64) if err != nil { beego.Error("Error parsing project id:", pid, ", error:", err) - pma.CustomAbort(400, "invalid project Id") + pma.CustomAbort(http.StatusBadRequest, "invalid project Id") return } p, err := dao.GetProjectById(models.Project{ProjectId: pid}) if err != nil { beego.Error("Error occurred in GetProjectById:", err) - pma.CustomAbort(500, "Internal error.") + pma.CustomAbort(http.StatusInternalServerError, "Internal error.") } if p == nil { beego.Warning("Project with id:", pid, "does not exist.") - pma.CustomAbort(404, "Project does not exist") + pma.CustomAbort(http.StatusNotFound, "Project does not exist") } pma.project = p pma.currentUserId = pma.ValidateUser() @@ -64,7 +65,7 @@ func (pma *ProjectMemberAPI) Prepare() { memberId, err := strconv.Atoi(mid) if err != nil { beego.Error("Invalid member Id, error:", err) - pma.CustomAbort(400, "Invalid member id") + pma.CustomAbort(http.StatusBadRequest, "Invalid member id") } pma.memberId = memberId } @@ -74,7 +75,7 @@ func (pma *ProjectMemberAPI) Get() { pid := pma.project.ProjectId if !CheckProjectPermission(pma.currentUserId, pid) { beego.Warning("Current user, user id :", pma.currentUserId, "does not have permission for project, id:", pid) - pma.RenderError(403, "") + pma.RenderError(http.StatusForbidden, "") return } if pma.memberId == 0 { //member id not set return list of the members @@ -84,7 +85,7 @@ func (pma *ProjectMemberAPI) Get() { userList, err := dao.GetUserByProject(queryProject, queryUser) if err != nil { beego.Error("Failed to query database for member list, error:", err) - pma.RenderError(500, "Internal Server Error") + pma.RenderError(http.StatusInternalServerError, "Internal Server Error") return } pma.Data["json"] = userList @@ -92,14 +93,14 @@ func (pma *ProjectMemberAPI) Get() { roleList, err := dao.GetUserProjectRoles(models.User{UserId: pma.memberId}, pid) if err != nil { beego.Error("Error occurred in GetUserProjectRoles:", err) - pma.CustomAbort(500, "Internal error.") + pma.CustomAbort(http.StatusInternalServerError, "Internal error.") } //return empty role list to indicate if a user is not a member result := make(map[string]interface{}) user, err := dao.GetUser(models.User{UserId: pma.memberId}) if err != nil { beego.Error("Error occurred in GetUser:", err) - pma.CustomAbort(500, "Internal error.") + pma.CustomAbort(http.StatusInternalServerError, "Internal error.") } result["user_name"] = user.Username result["user_id"] = pma.memberId @@ -115,11 +116,11 @@ func (pma *ProjectMemberAPI) Post() { rolelist, err := dao.GetUserProjectRoles(userQuery, pid) if err != nil { beego.Error("Error occurred in GetUserProjectRoles:", err) - pma.CustomAbort(500, "Internal error.") + pma.CustomAbort(http.StatusInternalServerError, "Internal error.") } if len(rolelist) == 0 { beego.Warning("Current user, id:", pma.currentUserId, "does not have project admin role for project, id:", pid) - pma.RenderError(403, "") + pma.RenderError(http.StatusForbidden, "") return } var req memberReq @@ -128,17 +129,17 @@ func (pma *ProjectMemberAPI) Post() { userId := CheckUserExists(username) if userId <= 0 { beego.Warning("User does not exist, user name:", username) - pma.RenderError(404, "User does not exist") + pma.RenderError(http.StatusNotFound, "User does not exist") return } rolelist, err = dao.GetUserProjectRoles(models.User{UserId: userId}, pid) if err != nil { beego.Error("Error occurred in GetUserProjectRoles:", err) - pma.CustomAbort(500, "Internal error.") + pma.CustomAbort(http.StatusInternalServerError, "Internal error.") } if len(rolelist) > 0 { beego.Warning("user is already added to project, user id:", userId, ", project id:", pid) - pma.RenderError(409, "user is ready in project") + pma.RenderError(http.StatusConflict, "user is ready in project") return } @@ -146,7 +147,7 @@ func (pma *ProjectMemberAPI) Post() { err = dao.AddUserProjectRole(userId, pid, int(rid)) if err != nil { beego.Error("Failed to update DB to add project user role, project id:", pid, ", user id:", userId, ", role id:", rid) - pma.RenderError(500, "Failed to update data in database") + pma.RenderError(http.StatusInternalServerError, "Failed to update data in database") return } } @@ -159,11 +160,11 @@ func (pma *ProjectMemberAPI) Put() { rolelist, err := dao.GetUserProjectRoles(userQuery, pid) if err != nil { beego.Error("Error occurred in GetUserProjectRoles:", err) - pma.CustomAbort(500, "Internal error.") + pma.CustomAbort(http.StatusInternalServerError, "Internal error.") } if len(rolelist) == 0 { beego.Warning("Current user, id:", pma.currentUserId, ", does not have project admin role for project, id:", pid) - pma.RenderError(403, "") + pma.RenderError(http.StatusForbidden, "") return } var req memberReq @@ -171,7 +172,7 @@ func (pma *ProjectMemberAPI) Put() { roleList, err := dao.GetUserProjectRoles(models.User{UserId: mid}, pid) if len(roleList) == 0 { beego.Warning("User is not in project, user id:", mid, ", project id:", pid) - pma.RenderError(404, "user not exist in project") + pma.RenderError(http.StatusNotFound, "user not exist in project") return } //TODO: delete and insert should in one transaction @@ -179,7 +180,7 @@ func (pma *ProjectMemberAPI) Put() { err = dao.DeleteUserProjectRoles(mid, pid) if err != nil { beego.Error("Failed to delete project roles for user, user id:", mid, ", project id: ", pid, ", error: ", err) - pma.RenderError(500, "Failed to update data in DB") + pma.RenderError(http.StatusInternalServerError, "Failed to update data in DB") return } //insert roles in request @@ -187,7 +188,7 @@ func (pma *ProjectMemberAPI) Put() { err = dao.AddUserProjectRole(mid, pid, int(rid)) if err != nil { beego.Error("Failed to update DB to add project user role, project id:", pid, ", user id:", mid, ", role id:", rid) - pma.RenderError(500, "Failed to update data in database") + pma.RenderError(http.StatusInternalServerError, "Failed to update data in database") return } } @@ -200,13 +201,13 @@ func (pma *ProjectMemberAPI) Delete() { rolelist, err := dao.GetUserProjectRoles(userQuery, pid) if len(rolelist) == 0 { beego.Warning("Current user, id:", pma.currentUserId, ", does not have project admin role for project, id:", pid) - pma.RenderError(403, "") + pma.RenderError(http.StatusForbidden, "") return } err = dao.DeleteUserProjectRoles(mid, pid) if err != nil { beego.Error("Failed to delete project roles for user, user id:", mid, ", project id:", pid, ", error:", err) - pma.RenderError(500, "Failed to update data in DB") + pma.RenderError(http.StatusInternalServerError, "Failed to update data in DB") return } } diff --git a/api/repository.go b/api/repository.go index 284a73515..918724638 100644 --- a/api/repository.go +++ b/api/repository.go @@ -16,6 +16,7 @@ package api import ( "encoding/json" + "net/http" "strconv" "strings" "time" @@ -56,28 +57,28 @@ func (ra *RepositoryAPI) Get() { projectId, err0 := ra.GetInt64("project_id") if err0 != nil { beego.Error("Failed to get project id, error:", err0) - ra.RenderError(400, "Invalid project id") + ra.RenderError(http.StatusBadRequest, "Invalid project id") return } projectQuery := models.Project{ProjectId: projectId} p, err := dao.GetProjectById(projectQuery) if err != nil { beego.Error("Error occurred in GetProjectById:", err) - ra.CustomAbort(500, "Internal error.") + ra.CustomAbort(http.StatusInternalServerError, "Internal error.") } if p == nil { beego.Warning("Project with Id:", projectId, ", does not exist", projectId) - ra.RenderError(404, "") + ra.RenderError(http.StatusNotFound, "") return } if p.Public == 0 && !CheckProjectPermission(ra.userId, projectId) { - ra.RenderError(403, "") + ra.RenderError(http.StatusForbidden, "") return } repoList, err := svc_utils.GetRepoFromCache() if err != nil { beego.Error("Failed to get repo from cache, error:", err) - ra.RenderError(500, "internal sever error") + ra.RenderError(http.StatusInternalServerError, "internal sever error") } projectName := p.Name q := ra.GetString("q") @@ -127,7 +128,7 @@ func (ra *RepositoryAPI) GetTags() { result, err := svc_utils.RegistryApiGet(svc_utils.BuildRegistryUrl(repoName, "tags", "list"), ra.username) if err != nil { beego.Error("Failed to get repo tags, repo name:", repoName, ", error: ", err) - ra.RenderError(500, "Failed to get repo tags") + ra.RenderError(http.StatusInternalServerError, "Failed to get repo tags") } else { t := Tag{} json.Unmarshal(result, &t) @@ -146,14 +147,14 @@ func (ra *RepositoryAPI) GetManifests() { result, err := svc_utils.RegistryApiGet(svc_utils.BuildRegistryUrl(repoName, "manifests", tag), ra.username) if err != nil { beego.Error("Failed to get manifests for repo, repo name:", repoName, ", tag:", tag, ", error:", err) - ra.RenderError(500, "Internal Server Error") + ra.RenderError(http.StatusInternalServerError, "Internal Server Error") return } else { mani := Manifest{} err = json.Unmarshal(result, &mani) if err != nil { beego.Error("Failed to decode json from response for manifests, repo name:", repoName, ", tag:", tag, ", error:", err) - ra.RenderError(500, "Internal Server Error") + ra.RenderError(http.StatusInternalServerError, "Internal Server Error") return } else { v1Compatibility := mani.History[0].V1Compatibility @@ -161,7 +162,7 @@ func (ra *RepositoryAPI) GetManifests() { err = json.Unmarshal([]byte(v1Compatibility), &item) if err != nil { beego.Error("Failed to decode V1 field for repo, repo name:", repoName, ", tag:", tag, ", error:", err) - ra.RenderError(500, "Internal Server Error") + ra.RenderError(http.StatusInternalServerError, "Internal Server Error") return } else { item.CreatedStr = item.Created.Format("2006-01-02 15:04:05") diff --git a/api/search.go b/api/search.go index 805647596..e0d7348bc 100644 --- a/api/search.go +++ b/api/search.go @@ -15,6 +15,7 @@ package api import ( + "net/http" "sort" "strings" @@ -44,7 +45,7 @@ func (n *SearchAPI) Get() { projects, err := dao.QueryRelevantProjects(userId) if err != nil { beego.Error("Failed to get projects of user id:", userId, ", error:", err) - n.CustomAbort(500, "Failed to get project search result") + n.CustomAbort(http.StatusInternalServerError, "Failed to get project search result") } projectSorter := &utils.ProjectSorter{Projects: projects} sort.Sort(projectSorter) @@ -66,7 +67,7 @@ func (n *SearchAPI) Get() { repositories, err2 := svc_utils.GetRepoFromCache() if err2 != nil { beego.Error("Failed to get repos from cache, error :", err2) - n.CustomAbort(500, "Failed to get repositories search result") + n.CustomAbort(http.StatusInternalServerError, "Failed to get repositories search result") } sort.Strings(repositories) repositoryResult := filterRepositories(repositories, projects, keyword) diff --git a/api/user.go b/api/user.go index 2df9bf454..1c3fcbc13 100644 --- a/api/user.go +++ b/api/user.go @@ -15,6 +15,7 @@ package api import ( + "net/http" "strconv" "github.com/vmware/harbor/dao" @@ -40,17 +41,17 @@ func (ua *UserAPI) Prepare() { ua.userId, err = strconv.Atoi(id) if err != nil { beego.Error("Invalid user id, error:", err) - ua.CustomAbort(400, "Invalid user Id") + ua.CustomAbort(http.StatusBadRequest, "Invalid user Id") } userQuery := models.User{UserId: ua.userId} u, err := dao.GetUser(userQuery) if err != nil { beego.Error("Error occurred in GetUser:", err) - ua.CustomAbort(500, "Internal error.") + ua.CustomAbort(http.StatusInternalServerError, "Internal error.") } if u == nil { beego.Error("User with Id:", ua.userId, "does not exist") - ua.CustomAbort(404, "") + ua.CustomAbort(http.StatusNotFound, "") } } } @@ -59,13 +60,13 @@ func (ua *UserAPI) Get() { exist, err := dao.IsAdminRole(ua.currentUid) if err != nil { beego.Error("Error occurred in IsAdminRole:", err) - ua.CustomAbort(500, "Internal error.") + ua.CustomAbort(http.StatusInternalServerError, "Internal error.") } if ua.userId == 0 { //list users if !exist { beego.Error("Current user, id:", ua.currentUid, ", does not have admin role, can not list users") - ua.RenderError(403, "User does not have admin role") + ua.RenderError(http.StatusForbidden, "User does not have admin role") return } username := ua.GetString("username") @@ -76,7 +77,7 @@ func (ua *UserAPI) Get() { userList, err := dao.ListUsers(userQuery) if err != nil { beego.Error("Failed to get data from database, error:", err) - ua.RenderError(500, "Failed to query from database") + ua.RenderError(http.StatusInternalServerError, "Failed to query from database") return } ua.Data["json"] = userList @@ -86,12 +87,12 @@ func (ua *UserAPI) Get() { u, err := dao.GetUser(userQuery) if err != nil { beego.Error("Error occurred in GetUser:", err) - ua.CustomAbort(500, "Internal error.") + ua.CustomAbort(http.StatusInternalServerError, "Internal error.") } ua.Data["json"] = u } else { beego.Error("Current user, id:", ua.currentUid, "does not have admin role, can not view other user's detail") - ua.RenderError(403, "User does not have admin role") + ua.RenderError(http.StatusForbidden, "User does not have admin role") return } ua.ServeJSON() @@ -101,11 +102,11 @@ func (ua *UserAPI) Put() { //currently only for toggle admin, so no request body exist, err := dao.IsAdminRole(ua.currentUid) if err != nil { beego.Error("Error occurred in IsAdminRole:", err) - ua.CustomAbort(500, "Internal error.") + ua.CustomAbort(http.StatusInternalServerError, "Internal error.") } if !exist { beego.Warning("current user, id:", ua.currentUid, ", does not have admin role, can not update other user's role") - ua.RenderError(403, "User does not have admin role") + ua.RenderError(http.StatusForbidden, "User does not have admin role") return } userQuery := models.User{UserId: ua.userId} @@ -116,17 +117,17 @@ func (ua *UserAPI) Delete() { exist, err := dao.IsAdminRole(ua.currentUid) if err != nil { beego.Error("Error occurred in IsAdminRole:", err) - ua.CustomAbort(500, "Internal error.") + ua.CustomAbort(http.StatusInternalServerError, "Internal error.") } if !exist { beego.Warning("current user, id:", ua.currentUid, ", does not have admin role, can not remove user") - ua.RenderError(403, "User does not have admin role") + ua.RenderError(http.StatusForbidden, "User does not have admin role") return } err = dao.DeleteUser(ua.userId) if err != nil { beego.Error("Failed to delete data from database, error:", err) - ua.RenderError(500, "Failed to delete User") + ua.RenderError(http.StatusInternalServerError, "Failed to delete User") return } } diff --git a/controllers/item_detail.go b/controllers/item_detail.go index 391fbc04e..34761fce4 100644 --- a/controllers/item_detail.go +++ b/controllers/item_detail.go @@ -15,6 +15,7 @@ package controllers import ( + "net/http" "net/url" "os" @@ -68,7 +69,7 @@ func (idc *ItemDetailController) Get() { projectId, _ := idc.GetInt64("project_id") if CheckPublicProject(projectId) == false && (sessionUserId == nil || !CheckProjectRole(sessionUserId.(int), projectId)) { - idc.Redirect("/signIn?uri="+url.QueryEscape(idc.Ctx.Input.URI()), 302) + idc.Redirect("/signIn?uri="+url.QueryEscape(idc.Ctx.Input.URI()), http.StatusFound) } projectQuery := models.Project{ProjectId: projectId} @@ -76,11 +77,11 @@ func (idc *ItemDetailController) Get() { if err != nil { beego.Error("Error occurred in GetProjectById:", err) - idc.CustomAbort(500, "Internal error.") + idc.CustomAbort(http.StatusInternalServerError, "Internal error.") } if project == nil { - idc.Redirect("/signIn", 302) + idc.Redirect("/signIn", http.StatusFound) } idc.Data["ProjectId"] = project.ProjectId @@ -94,7 +95,7 @@ func (idc *ItemDetailController) Get() { roleList, err := dao.GetUserProjectRoles(models.User{UserId: sessionUserId.(int)}, projectId) if err != nil { beego.Error("Error occurred in GetUserProjectRoles:", err) - idc.CustomAbort(500, "Internal error.") + idc.CustomAbort(http.StatusInternalServerError, "Internal error.") } if len(roleList) > 0 { idc.Data["RoleId"] = roleList[0].RoleId diff --git a/controllers/login.go b/controllers/login.go index d907018d4..0839e483b 100644 --- a/controllers/login.go +++ b/controllers/login.go @@ -15,6 +15,8 @@ package controllers import ( + "net/http" + "github.com/vmware/harbor/models" "github.com/vmware/harbor/opt_auth" @@ -45,11 +47,11 @@ func (c *CommonController) Login() { user, err := opt_auth.Login(models.AuthModel{principal, password}) if err != nil { beego.Error("Error occurred in UserLogin:", err) - c.CustomAbort(500, "Internal error.") + c.CustomAbort(http.StatusInternalServerError, "Internal error.") } if user == nil { - c.CustomAbort(401, "") + c.CustomAbort(http.StatusUnauthorized, "") } c.SetSession("userId", user.UserId) @@ -62,7 +64,7 @@ func (c *CommonController) SwitchLanguage() { c.SetSession("lang", lang) c.Data["Lang"] = lang } - c.Redirect(c.Ctx.Request.Header.Get("Referer"), 302) + c.Redirect(c.Ctx.Request.Header.Get("Referer"), http.StatusFound) } func (c *CommonController) Logout() { diff --git a/controllers/password.go b/controllers/password.go index 9ecc6d713..aede09a0d 100644 --- a/controllers/password.go +++ b/controllers/password.go @@ -16,6 +16,7 @@ package controllers import ( "bytes" + "net/http" "os" "regexp" "text/template" @@ -34,7 +35,7 @@ type ChangePasswordController struct { func (cpc *ChangePasswordController) Get() { sessionUserId := cpc.GetSession("userId") if sessionUserId == nil { - cpc.Redirect("/signIn", 302) + cpc.Redirect("/signIn", http.StatusFound) } cpc.Data["Username"] = cpc.GetSession("username") cpc.ForwardTo("page_title_change_password", "change-password") @@ -46,25 +47,25 @@ func (cpc *CommonController) UpdatePassword() { if sessionUserId == nil { beego.Warning("User does not login.") - cpc.CustomAbort(401, "please_login_first") + cpc.CustomAbort(http.StatusUnauthorized, "please_login_first") } oldPassword := cpc.GetString("old_password") if oldPassword == "" { beego.Error("Old password is blank") - cpc.CustomAbort(400, "Old password is blank") + cpc.CustomAbort(http.StatusBadRequest, "Old password is blank") } queryUser := models.User{UserId: sessionUserId.(int), Password: oldPassword} user, err := dao.CheckUserPassword(queryUser) if err != nil { beego.Error("Error occurred in CheckUserPassword:", err) - cpc.CustomAbort(500, "Internal error.") + cpc.CustomAbort(http.StatusInternalServerError, "Internal error.") } if user == nil { beego.Warning("Password input is not correct") - cpc.CustomAbort(403, "old_password_is_not_correct") + cpc.CustomAbort(http.StatusForbidden, "old_password_is_not_correct") } password := cpc.GetString("password") @@ -73,10 +74,10 @@ func (cpc *CommonController) UpdatePassword() { err = dao.ChangeUserPassword(updateUser, oldPassword) if err != nil { beego.Error("Error occurred in ChangeUserPassword:", err) - cpc.CustomAbort(500, "Internal error.") + cpc.CustomAbort(http.StatusInternalServerError, "Internal error.") } } else { - cpc.CustomAbort(400, "please_input_new_password") + cpc.CustomAbort(http.StatusBadRequest, "please_input_new_password") } } @@ -101,23 +102,23 @@ func (fpc *CommonController) SendEmail() { pass, _ := regexp.MatchString(`^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$`, email) if !pass { - fpc.CustomAbort(400, "email_content_illegal") + fpc.CustomAbort(http.StatusBadRequest, "email_content_illegal") } else { queryUser := models.User{Email: email} exist, err := dao.UserExists(queryUser, "email") if err != nil { beego.Error("Error occurred in UserExists:", err) - fpc.CustomAbort(500, "Internal error.") + fpc.CustomAbort(http.StatusInternalServerError, "Internal error.") } if !exist { - fpc.CustomAbort(404, "email_does_not_exist") + fpc.CustomAbort(http.StatusNotFound, "email_does_not_exist") } messageTemplate, err := template.ParseFiles("views/reset-password-mail.tpl") if err != nil { beego.Error("Parse email template file failed:", err) - fpc.CustomAbort(500, err.Error()) + fpc.CustomAbort(http.StatusInternalServerError, err.Error()) } message := new(bytes.Buffer) @@ -129,7 +130,7 @@ func (fpc *CommonController) SendEmail() { uuid, err := dao.GenerateRandomString() if err != nil { beego.Error("Error occurred in GenerateRandomString:", err) - fpc.CustomAbort(500, "Internal error.") + fpc.CustomAbort(http.StatusInternalServerError, "Internal error.") } err = messageTemplate.Execute(message, MessageDetail{ Hint: fpc.Tr("reset_email_hint"), @@ -139,13 +140,13 @@ func (fpc *CommonController) SendEmail() { if err != nil { beego.Error("message template error:", err) - fpc.CustomAbort(500, "internal_error") + fpc.CustomAbort(http.StatusInternalServerError, "internal_error") } config, err := beego.AppConfig.GetSection("mail") if err != nil { beego.Error("Can not load app.conf:", err) - fpc.CustomAbort(500, "internal_error") + fpc.CustomAbort(http.StatusInternalServerError, "internal_error") } mail := utils.Mail{ @@ -158,7 +159,7 @@ func (fpc *CommonController) SendEmail() { if err != nil { beego.Error("send email failed:", err) - fpc.CustomAbort(500, "send_email_failed") + fpc.CustomAbort(http.StatusInternalServerError, "send_email_failed") } user := models.User{ResetUuid: uuid, Email: email} @@ -177,21 +178,21 @@ func (rpc *ResetPasswordController) Get() { resetUuid := rpc.GetString("reset_uuid") if resetUuid == "" { beego.Error("Reset uuid is blank.") - rpc.Redirect("/", 302) + rpc.Redirect("/", http.StatusFound) } queryUser := models.User{ResetUuid: resetUuid} user, err := dao.GetUser(queryUser) if err != nil { beego.Error("Error occurred in GetUser:", err) - rpc.CustomAbort(500, "Internal error.") + rpc.CustomAbort(http.StatusInternalServerError, "Internal error.") } if user != nil { rpc.Data["ResetUuid"] = user.ResetUuid rpc.ForwardTo("page_title_reset_password", "reset-password") } else { - rpc.Redirect("/", 302) + rpc.Redirect("/", http.StatusFound) } } @@ -199,18 +200,18 @@ func (rpc *CommonController) ResetPassword() { resetUuid := rpc.GetString("reset_uuid") if resetUuid == "" { - rpc.CustomAbort(400, "Reset uuid is blank.") + rpc.CustomAbort(http.StatusBadRequest, "Reset uuid is blank.") } queryUser := models.User{ResetUuid: resetUuid} user, err := dao.GetUser(queryUser) if err != nil { beego.Error("Error occurred in GetUser:", err) - rpc.CustomAbort(500, "Internal error.") + rpc.CustomAbort(http.StatusInternalServerError, "Internal error.") } if user == nil { beego.Error("User does not exist") - rpc.CustomAbort(400, "User does not exist") + rpc.CustomAbort(http.StatusBadRequest, "User does not exist") } password := rpc.GetString("password") @@ -220,9 +221,9 @@ func (rpc *CommonController) ResetPassword() { err = dao.ResetUserPassword(*user) if err != nil { beego.Error("Error occurred in ResetUserPassword:", err) - rpc.CustomAbort(500, "Internal error.") + rpc.CustomAbort(http.StatusInternalServerError, "Internal error.") } } else { - rpc.CustomAbort(400, "password_is_required") + rpc.CustomAbort(http.StatusBadRequest, "password_is_required") } } diff --git a/controllers/register.go b/controllers/register.go index 244770419..7f8553ae5 100644 --- a/controllers/register.go +++ b/controllers/register.go @@ -15,6 +15,7 @@ package controllers import ( + "net/http" "os" "strings" @@ -33,7 +34,7 @@ func (rc *RegisterController) Get() { if authMode == "" || authMode == "db_auth" { rc.ForwardTo("page_title_registration", "register") } else { - rc.Redirect("/signIn", 404) + rc.Redirect("/signIn", http.StatusNotFound) } } @@ -49,7 +50,7 @@ func (rc *CommonController) SignUp() { _, err := dao.Register(user) if err != nil { beego.Error("Error occurred in Register:", err) - rc.CustomAbort(500, "Internal error.") + rc.CustomAbort(http.StatusInternalServerError, "Internal error.") } } @@ -68,7 +69,7 @@ func (rc *CommonController) UserExists() { exist, err := dao.UserExists(user, target) if err != nil { beego.Error("Error occurred in UserExists:", err) - rc.CustomAbort(500, "Internal error.") + rc.CustomAbort(http.StatusInternalServerError, "Internal error.") } rc.Data["json"] = exist rc.ServeJSON() diff --git a/service/auth.go b/service/auth.go index f405ee9ce..bfa3dfd68 100644 --- a/service/auth.go +++ b/service/auth.go @@ -16,6 +16,7 @@ package service import ( "log" + "net/http" "github.com/vmware/harbor/models" "github.com/vmware/harbor/opt_auth" @@ -46,7 +47,7 @@ func (a *AuthController) Auth() { if len(scope) == 0 && !authenticated { log.Printf("login request with invalid credentials") - a.CustomAbort(401, "") + a.CustomAbort(http.StatusUnauthorized, "") } access := svc_utils.GetResourceActions(scope) for _, a := range access { @@ -61,7 +62,7 @@ func (a *AuthController) serveToken(username, service string, access []*token.Re rawToken, err := svc_utils.MakeToken(username, service, access) if err != nil { log.Printf("Failed to make token, error: %v", err) - writer.WriteHeader(500) + writer.WriteHeader(http.StatusInternalServerError) return } tk := make(map[string]string) diff --git a/service/utils/registry_utils.go b/service/utils/registry_utils.go index 8c8892d5b..aa5def9e6 100644 --- a/service/utils/registry_utils.go +++ b/service/utils/registry_utils.go @@ -50,9 +50,9 @@ func RegistryApiGet(url, username string) ([]byte, error) { return nil, err } defer response.Body.Close() - if response.StatusCode == 200 { + if response.StatusCode == http.StatusOK { return result, nil - } else if response.StatusCode == 401 { + } else if response.StatusCode == http.StatusUnauthorized { authenticate := response.Header.Get("WWW-Authenticate") str := strings.Split(authenticate, " ")[1] log.Println("url: " + url) @@ -94,7 +94,7 @@ func RegistryApiGet(url, username string) ([]byte, error) { if err != nil { return nil, err } - if response.StatusCode != 200 { + if response.StatusCode != http.StatusOK { errMsg := fmt.Sprintf("Unexpected return code from registry: %d", response.StatusCode) log.Printf(errMsg) return nil, fmt.Errorf(errMsg) diff --git a/utils/registry_utils.go b/utils/registry_utils.go index 22e1fe455..13f989a2e 100644 --- a/utils/registry_utils.go +++ b/utils/registry_utils.go @@ -55,9 +55,9 @@ func HttpGet(url, sessionId, username, password string) ([]byte, error) { return nil, err } defer response.Body.Close() - if response.StatusCode == 200 { + if response.StatusCode == http.StatusOK { return result, nil - } else if response.StatusCode == 401 { + } else if response.StatusCode == http.StatusUnauthorized { authenticate := response.Header.Get("WWW-Authenticate") str := strings.Split(authenticate, " ")[1] beego.Trace("url: " + url) @@ -106,7 +106,7 @@ func HttpGet(url, sessionId, username, password string) ([]byte, error) { if err != nil { return nil, err } - if response.StatusCode == 200 { + if response.StatusCode == http.StatusOK { tt := make(map[string]string) json.Unmarshal(result, &tt) request, err = http.NewRequest("GET", url, nil)