From 67b4415717dd5a33f23fa442cb000f5241188bd4 Mon Sep 17 00:00:00 2001 From: wknet123 Date: Wed, 24 Feb 2016 20:07:00 +0800 Subject: [PATCH 1/3] refactored codes in item_detail controller --- controllers/item_detail.go | 62 ++++++++++++-------------------------- 1 file changed, 19 insertions(+), 43 deletions(-) diff --git a/controllers/item_detail.go b/controllers/item_detail.go index 391fbc04e..7b9ae9233 100644 --- a/controllers/item_detail.go +++ b/controllers/item_detail.go @@ -28,47 +28,12 @@ type ItemDetailController struct { BaseController } -var SYS_ADMIN int = 1 -var PROJECT_ADMIN int = 2 -var DEVELOPER int = 3 -var GUEST int = 4 - -func CheckProjectRole(userId int, projectId int64) bool { - if projectId == 0 { - return false - } - userQuery := models.User{UserId: int(userId)} - if userId == SYS_ADMIN { - return true - } - roleList, err := dao.GetUserProjectRoles(userQuery, projectId) - if err != nil { - beego.Error("Error occurred in GetUserProjectRoles:", err) - return false - } - return len(roleList) > 0 -} - -func CheckPublicProject(projectId int64) bool { - projectQuery := models.Project{ProjectId: projectId} - project, err := dao.GetProjectById(projectQuery) - if err != nil { - beego.Error("Error occurred in GetProjectById:", err) - return false - } - if project != nil && project.Public == 1 { - return true - } - return false -} - func (idc *ItemDetailController) Get() { - sessionUserId := idc.GetSession("userId") 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) + if projectId <= 0 { + beego.Error("Invalid project id:", projectId) + idc.Redirect("/signIn", 302) } projectQuery := models.Project{ProjectId: projectId} @@ -83,24 +48,35 @@ func (idc *ItemDetailController) Get() { idc.Redirect("/signIn", 302) } - idc.Data["ProjectId"] = project.ProjectId - idc.Data["ProjectName"] = project.Name - idc.Data["OwnerName"] = project.OwnerName - idc.Data["OwnerId"] = project.OwnerId + sessionUserId := idc.GetSession("userId") + + if project.Public != 1 && sessionUserId == nil { + idc.Redirect("/signIn?uri="+url.QueryEscape(idc.Ctx.Input.URI()), 302) + } if sessionUserId != nil { + idc.Data["Username"] = idc.GetSession("username") idc.Data["UserId"] = sessionUserId.(int) + 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.") } - if len(roleList) > 0 { + + if project.Public == 0 && len(roleList) == 0 { + idc.Redirect("/signIn?uri="+url.QueryEscape(idc.Ctx.Input.URI()), 302) + } else if len(roleList) > 0 { idc.Data["RoleId"] = roleList[0].RoleId } } + idc.Data["ProjectId"] = project.ProjectId + idc.Data["ProjectName"] = project.Name + idc.Data["OwnerName"] = project.OwnerName + idc.Data["OwnerId"] = project.OwnerId + idc.Data["HarborRegUrl"] = os.Getenv("HARBOR_REG_URL") idc.Data["RepoName"] = idc.GetString("repo_name") From bfd96c93736f4ba57678eacc7e28ca8ee73d6de8 Mon Sep 17 00:00:00 2001 From: wknet123 Date: Thu, 25 Feb 2016 11:18:40 +0800 Subject: [PATCH 2/3] refined redirection when user logined. --- controllers/item_detail.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/controllers/item_detail.go b/controllers/item_detail.go index 1ee904a85..5721047a8 100644 --- a/controllers/item_detail.go +++ b/controllers/item_detail.go @@ -67,8 +67,10 @@ func (idc *ItemDetailController) Get() { } if project.Public == 0 && len(roleList) == 0 { - idc.Redirect("/signIn?uri="+url.QueryEscape(idc.Ctx.Input.URI()), http.StatusFound) - } else if len(roleList) > 0 { + idc.Redirect("/registry/project", http.StatusFound) + } + + if len(roleList) > 0 { idc.Data["RoleId"] = roleList[0].RoleId } } From 634f69b2c561d65c119f794515ae22777436614b Mon Sep 17 00:00:00 2001 From: wknet123 Date: Thu, 25 Feb 2016 11:48:22 +0800 Subject: [PATCH 3/3] added return clause after redirection. --- controllers/item_detail.go | 4 ++++ controllers/password.go | 2 ++ 2 files changed, 6 insertions(+) diff --git a/controllers/item_detail.go b/controllers/item_detail.go index 5721047a8..cf5214fcd 100644 --- a/controllers/item_detail.go +++ b/controllers/item_detail.go @@ -36,6 +36,7 @@ func (idc *ItemDetailController) Get() { if projectId <= 0 { beego.Error("Invalid project id:", projectId) idc.Redirect("/signIn", http.StatusFound) + return } project, err := dao.GetProjectById(projectId) @@ -47,12 +48,14 @@ func (idc *ItemDetailController) Get() { if project == nil { idc.Redirect("/signIn", http.StatusFound) + return } sessionUserId := idc.GetSession("userId") if project.Public != 1 && sessionUserId == nil { idc.Redirect("/signIn?uri="+url.QueryEscape(idc.Ctx.Input.URI()), http.StatusFound) + return } if sessionUserId != nil { @@ -68,6 +71,7 @@ func (idc *ItemDetailController) Get() { if project.Public == 0 && len(roleList) == 0 { idc.Redirect("/registry/project", http.StatusFound) + return } if len(roleList) > 0 { diff --git a/controllers/password.go b/controllers/password.go index aede09a0d..9b9ecc0af 100644 --- a/controllers/password.go +++ b/controllers/password.go @@ -36,6 +36,7 @@ func (cpc *ChangePasswordController) Get() { sessionUserId := cpc.GetSession("userId") if sessionUserId == nil { cpc.Redirect("/signIn", http.StatusFound) + return } cpc.Data["Username"] = cpc.GetSession("username") cpc.ForwardTo("page_title_change_password", "change-password") @@ -179,6 +180,7 @@ func (rpc *ResetPasswordController) Get() { if resetUuid == "" { beego.Error("Reset uuid is blank.") rpc.Redirect("/", http.StatusFound) + return } queryUser := models.User{ResetUuid: resetUuid}