diff --git a/routers/web/user/package.go b/routers/web/user/package.go index 8e58965259..5206adf418 100644 --- a/routers/web/user/package.go +++ b/routers/web/user/package.go @@ -155,6 +155,35 @@ func ListPackages(ctx *context.Context) { return } + // Split packages into public and private lists for the template + var publicPackages, privatePackages []*packages_model.PackageDescriptor + for _, pd := range pds { + if pd.Package.IsPrivate { + privatePackages = append(privatePackages, pd) + } else { + publicPackages = append(publicPackages, pd) + } + } + + // Determine if the viewer can write packages + canWritePackages := false + if ctx.Doer != nil { + if ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID { + canWritePackages = true + } else if ctx.ContextUser.IsOrganization() { + org := org_model.OrgFromUser(ctx.ContextUser) + teams, err := org_model.GetUserOrgTeams(ctx, org.ID, ctx.Doer.ID) + if err == nil { + for _, t := range teams { + if t.UnitAccessMode(ctx, unit.TypePackages) >= perm.AccessModeWrite { + canWritePackages = true + break + } + } + } + } + } + ctx.Data["Title"] = ctx.Tr("packages.title") ctx.Data["IsPackagesPage"] = true ctx.Data["Query"] = query @@ -162,6 +191,9 @@ func ListPackages(ctx *context.Context) { ctx.Data["AvailableTypes"] = packages_model.TypeList ctx.Data["HasPackages"] = hasPackages ctx.Data["PackageDescriptors"] = pds + ctx.Data["PublicPackages"] = publicPackages + ctx.Data["PrivatePackages"] = privatePackages + ctx.Data["CanWritePackages"] = canWritePackages ctx.Data["Total"] = total ctx.Data["RepositoryAccessMap"] = repositoryAccessMap diff --git a/services/context/context_response.go b/services/context/context_response.go index 1ae7779493..dc35b4c7d6 100644 --- a/services/context/context_response.go +++ b/services/context/context_response.go @@ -160,12 +160,6 @@ func (ctx *Context) notFoundInternal(logMsg string, logErr error) { return } - // Anonymous users get redirected to the homepage instead of seeing a 404 - if ctx.Doer == nil { - ctx.Redirect(setting.AppSubURL + "/") - return - } - ctx.Data["IsRepo"] = ctx.Repo.Repository != nil ctx.Data["Title"] = "Page Not Found" ctx.HTML(http.StatusNotFound, "status/404")