mirror of
https://github.com/go-gitea/gitea.git
synced 2025-04-18 00:47:48 -04:00
Fix permission check on http push
This commit is contained in:
parent
59c3707da2
commit
705fbb46d5
@ -185,6 +185,7 @@ Gitea or set your environment appropriately.`, "")
|
|||||||
userID, _ := strconv.ParseInt(os.Getenv(repo_module.EnvPusherID), 10, 64)
|
userID, _ := strconv.ParseInt(os.Getenv(repo_module.EnvPusherID), 10, 64)
|
||||||
prID, _ := strconv.ParseInt(os.Getenv(repo_module.EnvPRID), 10, 64)
|
prID, _ := strconv.ParseInt(os.Getenv(repo_module.EnvPRID), 10, 64)
|
||||||
deployKeyID, _ := strconv.ParseInt(os.Getenv(repo_module.EnvDeployKeyID), 10, 64)
|
deployKeyID, _ := strconv.ParseInt(os.Getenv(repo_module.EnvDeployKeyID), 10, 64)
|
||||||
|
actionPerm, _ := strconv.ParseInt(os.Getenv(repo_module.EnvActionPerm), 10, 64)
|
||||||
|
|
||||||
hookOptions := private.HookOptions{
|
hookOptions := private.HookOptions{
|
||||||
UserID: userID,
|
UserID: userID,
|
||||||
@ -194,6 +195,7 @@ Gitea or set your environment appropriately.`, "")
|
|||||||
GitPushOptions: pushOptions(),
|
GitPushOptions: pushOptions(),
|
||||||
PullRequestID: prID,
|
PullRequestID: prID,
|
||||||
DeployKeyID: deployKeyID,
|
DeployKeyID: deployKeyID,
|
||||||
|
ActionPerm: int(actionPerm),
|
||||||
}
|
}
|
||||||
|
|
||||||
scanner := bufio.NewScanner(os.Stdin)
|
scanner := bufio.NewScanner(os.Stdin)
|
||||||
|
@ -57,6 +57,7 @@ type HookOptions struct {
|
|||||||
PullRequestID int64
|
PullRequestID int64
|
||||||
DeployKeyID int64 // if the pusher is a DeployKey, then UserID is the repo's org user.
|
DeployKeyID int64 // if the pusher is a DeployKey, then UserID is the repo's org user.
|
||||||
IsWiki bool
|
IsWiki bool
|
||||||
|
ActionPerm int
|
||||||
}
|
}
|
||||||
|
|
||||||
// SSHLogOption ssh log options
|
// SSHLogOption ssh log options
|
||||||
|
@ -27,6 +27,7 @@ const (
|
|||||||
EnvPRID = "GITEA_PR_ID"
|
EnvPRID = "GITEA_PR_ID"
|
||||||
EnvIsInternal = "GITEA_INTERNAL_PUSH"
|
EnvIsInternal = "GITEA_INTERNAL_PUSH"
|
||||||
EnvAppURL = "GITEA_ROOT_URL"
|
EnvAppURL = "GITEA_ROOT_URL"
|
||||||
|
EnvActionPerm = "GITEA_ACTION_PERM"
|
||||||
)
|
)
|
||||||
|
|
||||||
// InternalPushingEnvironment returns an os environment to switch off hooks on push
|
// InternalPushingEnvironment returns an os environment to switch off hooks on push
|
||||||
|
@ -466,7 +466,7 @@ func (ctx *preReceiveContext) loadPusherAndPermission() bool {
|
|||||||
|
|
||||||
if ctx.opts.UserID == user_model.ActionsUserID {
|
if ctx.opts.UserID == user_model.ActionsUserID {
|
||||||
ctx.user = user_model.NewActionsUser()
|
ctx.user = user_model.NewActionsUser()
|
||||||
ctx.userPerm.AccessMode = perm_model.AccessModeAdmin
|
ctx.userPerm.AccessMode = perm_model.AccessMode(ctx.opts.ActionPerm)
|
||||||
if err := ctx.Repo.Repository.LoadUnits(ctx); err != nil {
|
if err := ctx.Repo.Repository.LoadUnits(ctx); err != nil {
|
||||||
log.Error("Unable to get User id %d Error: %v", ctx.opts.UserID, err)
|
log.Error("Unable to get User id %d Error: %v", ctx.opts.UserID, err)
|
||||||
ctx.JSON(http.StatusInternalServerError, private.Response{
|
ctx.JSON(http.StatusInternalServerError, private.Response{
|
||||||
|
@ -181,6 +181,14 @@ func httpBase(ctx *context.Context) (h *serviceHandler) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
environ = []string{
|
||||||
|
repo_module.EnvRepoUsername + "=" + username,
|
||||||
|
repo_module.EnvRepoName + "=" + reponame,
|
||||||
|
repo_module.EnvPusherName + "=" + ctx.Doer.Name,
|
||||||
|
repo_module.EnvPusherID + fmt.Sprintf("=%d", ctx.Doer.ID),
|
||||||
|
repo_module.EnvAppURL + "=" + setting.AppURL,
|
||||||
|
}
|
||||||
|
|
||||||
if repoExist {
|
if repoExist {
|
||||||
// Because of special ref "refs/for" .. , need delay write permission check
|
// Because of special ref "refs/for" .. , need delay write permission check
|
||||||
if git.SupportProcReceive {
|
if git.SupportProcReceive {
|
||||||
@ -204,11 +212,13 @@ func httpBase(ctx *context.Context) (h *serviceHandler) {
|
|||||||
ctx.PlainText(http.StatusForbidden, "User permission denied")
|
ctx.PlainText(http.StatusForbidden, "User permission denied")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
environ = append(environ, fmt.Sprintf("%s=%d", repo_module.EnvActionPerm, perm.AccessModeRead))
|
||||||
} else {
|
} else {
|
||||||
if accessMode > perm.AccessModeWrite {
|
if accessMode > perm.AccessModeWrite {
|
||||||
ctx.PlainText(http.StatusForbidden, "User permission denied")
|
ctx.PlainText(http.StatusForbidden, "User permission denied")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
environ = append(environ, fmt.Sprintf("%s=%d", repo_module.EnvActionPerm, perm.AccessModeWrite))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
p, err := access_model.GetUserRepoPermission(ctx, repo, ctx.Doer)
|
p, err := access_model.GetUserRepoPermission(ctx, repo, ctx.Doer)
|
||||||
@ -229,14 +239,6 @@ func httpBase(ctx *context.Context) (h *serviceHandler) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
environ = []string{
|
|
||||||
repo_module.EnvRepoUsername + "=" + username,
|
|
||||||
repo_module.EnvRepoName + "=" + reponame,
|
|
||||||
repo_module.EnvPusherName + "=" + ctx.Doer.Name,
|
|
||||||
repo_module.EnvPusherID + fmt.Sprintf("=%d", ctx.Doer.ID),
|
|
||||||
repo_module.EnvAppURL + "=" + setting.AppURL,
|
|
||||||
}
|
|
||||||
|
|
||||||
if !ctx.Doer.KeepEmailPrivate {
|
if !ctx.Doer.KeepEmailPrivate {
|
||||||
environ = append(environ, repo_module.EnvPusherEmail+"="+ctx.Doer.Email)
|
environ = append(environ, repo_module.EnvPusherEmail+"="+ctx.Doer.Email)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user