mirror of
https://github.com/go-gitea/gitea
synced 2025-01-09 21:35:58 +01:00
2a828e2798
In history (from some legacy frameworks), both `:name` and `name` are supported as path path name, `:name` is an alias to `name`. To make code consistent, now we should only use `name` but not `:name`. Also added panic check in related functions to make sure the name won't be abused in case some downstreams still use them.
58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
// Copyright 2021 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package private
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
repo_model "code.gitea.io/gitea/models/repo"
|
|
"code.gitea.io/gitea/modules/gitrepo"
|
|
"code.gitea.io/gitea/modules/log"
|
|
"code.gitea.io/gitea/modules/private"
|
|
gitea_context "code.gitea.io/gitea/services/context"
|
|
)
|
|
|
|
// This file contains common functions relating to setting the Repository for the internal routes
|
|
|
|
// RepoAssignment assigns the repository and git repository to the private context
|
|
func RepoAssignment(ctx *gitea_context.PrivateContext) {
|
|
ownerName := ctx.PathParam("owner")
|
|
repoName := ctx.PathParam("repo")
|
|
|
|
repo := loadRepository(ctx, ownerName, repoName)
|
|
if ctx.Written() {
|
|
// Error handled in loadRepository
|
|
return
|
|
}
|
|
|
|
gitRepo, err := gitrepo.RepositoryFromRequestContextOrOpen(ctx, ctx, repo)
|
|
if err != nil {
|
|
log.Error("Failed to open repository: %s/%s Error: %v", ownerName, repoName, err)
|
|
ctx.JSON(http.StatusInternalServerError, private.Response{
|
|
Err: fmt.Sprintf("Failed to open repository: %s/%s Error: %v", ownerName, repoName, err),
|
|
})
|
|
return
|
|
}
|
|
ctx.Repo = &gitea_context.Repository{
|
|
Repository: repo,
|
|
GitRepo: gitRepo,
|
|
}
|
|
}
|
|
|
|
func loadRepository(ctx *gitea_context.PrivateContext, ownerName, repoName string) *repo_model.Repository {
|
|
repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, ownerName, repoName)
|
|
if err != nil {
|
|
log.Error("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err)
|
|
ctx.JSON(http.StatusInternalServerError, private.Response{
|
|
Err: fmt.Sprintf("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err),
|
|
})
|
|
return nil
|
|
}
|
|
if repo.OwnerName == "" {
|
|
repo.OwnerName = ownerName
|
|
}
|
|
return repo
|
|
}
|