mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
3.5 KiB
121 lines
3.5 KiB
// Copyright 2025 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package setting |
|
|
|
import ( |
|
"errors" |
|
"net/http" |
|
"strings" |
|
|
|
repo_model "code.gitea.io/gitea/models/repo" |
|
unit_model "code.gitea.io/gitea/models/unit" |
|
user_model "code.gitea.io/gitea/models/user" |
|
"code.gitea.io/gitea/modules/templates" |
|
"code.gitea.io/gitea/modules/util" |
|
"code.gitea.io/gitea/services/context" |
|
repo_service "code.gitea.io/gitea/services/repository" |
|
) |
|
|
|
const tplRepoActionsGeneralSettings templates.TplName = "repo/settings/actions" |
|
|
|
func ActionsGeneralSettings(ctx *context.Context) { |
|
ctx.Data["Title"] = ctx.Tr("actions.general") |
|
ctx.Data["PageType"] = "general" |
|
ctx.Data["PageIsActionsSettingsGeneral"] = true |
|
|
|
actionsUnit, err := ctx.Repo.Repository.GetUnit(ctx, unit_model.TypeActions) |
|
if err != nil && !repo_model.IsErrUnitTypeNotExist(err) { |
|
ctx.ServerError("GetUnit", err) |
|
return |
|
} |
|
if actionsUnit == nil { // no actions unit |
|
ctx.HTML(http.StatusOK, tplRepoActionsGeneralSettings) |
|
return |
|
} |
|
|
|
if ctx.Repo.Repository.IsPrivate { |
|
collaborativeOwnerIDs := actionsUnit.ActionsConfig().CollaborativeOwnerIDs |
|
collaborativeOwners, err := user_model.GetUsersByIDs(ctx, collaborativeOwnerIDs) |
|
if err != nil { |
|
ctx.ServerError("GetUsersByIDs", err) |
|
return |
|
} |
|
ctx.Data["CollaborativeOwners"] = collaborativeOwners |
|
} |
|
|
|
ctx.HTML(http.StatusOK, tplRepoActionsGeneralSettings) |
|
} |
|
|
|
func ActionsUnitPost(ctx *context.Context) { |
|
redirectURL := ctx.Repo.RepoLink + "/settings/actions/general" |
|
enableActionsUnit := ctx.FormBool("enable_actions") |
|
repo := ctx.Repo.Repository |
|
|
|
var err error |
|
if enableActionsUnit && !unit_model.TypeActions.UnitGlobalDisabled() { |
|
err = repo_service.UpdateRepositoryUnits(ctx, repo, []repo_model.RepoUnit{newRepoUnit(repo, unit_model.TypeActions, nil)}, nil) |
|
} else if !unit_model.TypeActions.UnitGlobalDisabled() { |
|
err = repo_service.UpdateRepositoryUnits(ctx, repo, nil, []unit_model.Type{unit_model.TypeActions}) |
|
} |
|
|
|
if err != nil { |
|
ctx.ServerError("UpdateRepositoryUnits", err) |
|
return |
|
} |
|
|
|
ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success")) |
|
ctx.Redirect(redirectURL) |
|
} |
|
|
|
func AddCollaborativeOwner(ctx *context.Context) { |
|
name := strings.ToLower(ctx.FormString("collaborative_owner")) |
|
|
|
ownerID, err := user_model.GetUserOrOrgIDByName(ctx, name) |
|
if err != nil { |
|
if errors.Is(err, util.ErrNotExist) { |
|
ctx.Flash.Error(ctx.Tr("form.user_not_exist")) |
|
ctx.JSONErrorNotFound() |
|
} else { |
|
ctx.ServerError("GetUserOrOrgIDByName", err) |
|
} |
|
return |
|
} |
|
|
|
actionsUnit, err := ctx.Repo.Repository.GetUnit(ctx, unit_model.TypeActions) |
|
if err != nil { |
|
ctx.ServerError("GetUnit", err) |
|
return |
|
} |
|
actionsCfg := actionsUnit.ActionsConfig() |
|
actionsCfg.AddCollaborativeOwner(ownerID) |
|
if err := repo_model.UpdateRepoUnit(ctx, actionsUnit); err != nil { |
|
ctx.ServerError("UpdateRepoUnit", err) |
|
return |
|
} |
|
|
|
ctx.JSONOK() |
|
} |
|
|
|
func DeleteCollaborativeOwner(ctx *context.Context) { |
|
ownerID := ctx.FormInt64("id") |
|
|
|
actionsUnit, err := ctx.Repo.Repository.GetUnit(ctx, unit_model.TypeActions) |
|
if err != nil { |
|
ctx.ServerError("GetUnit", err) |
|
return |
|
} |
|
actionsCfg := actionsUnit.ActionsConfig() |
|
if !actionsCfg.IsCollaborativeOwner(ownerID) { |
|
ctx.Flash.Error(ctx.Tr("actions.general.collaborative_owner_not_exist")) |
|
ctx.JSONErrorNotFound() |
|
return |
|
} |
|
actionsCfg.RemoveCollaborativeOwner(ownerID) |
|
if err := repo_model.UpdateRepoUnit(ctx, actionsUnit); err != nil { |
|
ctx.ServerError("UpdateRepoUnit", err) |
|
return |
|
} |
|
|
|
ctx.JSONOK() |
|
}
|
|
|