// Copyright 2021 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT package private import ( "gitea.dev/models/perm/access" repo_model "gitea.dev/models/repo" "gitea.dev/models/user" "gitea.dev/modules/git" gitea_context "gitea.dev/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 := git.RepositoryFromRequestContextOrOpen(ctx, repo) if err != nil { ctx.PrivateInternalErrorf("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 { ctx.PrivateInternalErrorf("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err) return nil } if repo.OwnerName == "" { repo.OwnerName = ownerName } return repo } func loadContextDoerPermission(ctx *gitea_context.PrivateContext, userID int64, extDoerData string) bool { doer, err := user.GetDoerUser(ctx, userID, extDoerData) if err != nil { ctx.PrivateInternalErrorf("Failed to get user: %d, error: %v", userID, err) return false } ctx.Doer = doer ctx.Repo.Permission, err = access.GetDoerRepoPermission(ctx, ctx.Repo.Repository, doer) if err != nil { ctx.PrivateInternalErrorf("Failed to get permission for user: %d, error: %v", userID, err) return false } return true }