Delete repos/secrets on org deletion (#2367)

This commit is contained in:
qwerty287 2023-09-02 15:00:13 +02:00 committed by GitHub
parent 3e563ef198
commit 56b8ba151a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 33 additions and 16 deletions

View file

@ -48,7 +48,26 @@ func (s storage) OrgUpdate(org *model.Org) error {
}
func (s storage) OrgDelete(id int64) error {
return wrapDelete(s.engine.ID(id).Delete(new(model.Org)))
return s.orgDelete(s.engine.NewSession(), id)
}
func (s storage) orgDelete(sess *xorm.Session, id int64) error {
if _, err := sess.Where("secret_org_id = ?", id).Delete(new(model.Secret)); err != nil {
return err
}
var repos []*model.Repo
if err := sess.Where("repo_org_id = ?", id).Find(&repos); err != nil {
return err
}
for _, repo := range repos {
if err := s.deleteRepo(sess, repo); err != nil {
return err
}
}
return wrapDelete(sess.ID(id).Delete(new(model.Org)))
}
func (s storage) OrgFindByName(name string) (*model.Org, error) {

View file

@ -23,7 +23,7 @@ import (
)
func TestOrgCRUD(t *testing.T) {
store, closer := newTestStore(t, new(model.Org), new(model.Repo))
store, closer := newTestStore(t, new(model.Org), new(model.Repo), new(model.Secret), new(model.Config), new(model.Perm), new(model.Registry), new(model.Redirection), new(model.Pipeline))
defer closer()
org1 := &model.Org{

View file

@ -91,13 +91,11 @@ func (s storage) UpdateRepo(repo *model.Repo) error {
}
func (s storage) DeleteRepo(repo *model.Repo) error {
const batchSize = perPage
sess := s.engine.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
return err
}
return s.deleteRepo(s.engine.NewSession(), repo)
}
func (s storage) deleteRepo(sess *xorm.Session, repo *model.Repo) error {
const batchSize = perPage
if _, err := sess.Where("config_repo_id = ?", repo.ID).Delete(new(model.Config)); err != nil {
return err
}
@ -131,11 +129,7 @@ func (s storage) DeleteRepo(repo *model.Repo) error {
}
}
if err := wrapDelete(sess.ID(repo.ID).Delete(new(model.Repo))); err != nil {
return err
}
return sess.Commit()
return wrapDelete(sess.ID(repo.ID).Delete(new(model.Repo)))
}
// RepoList list all repos where permissions for specific user are stored

View file

@ -81,6 +81,10 @@ func (s storage) DeleteUser(user *model.User) error {
return err
}
if err := s.orgDelete(sess, user.OrgID); err != nil {
return err
}
if err := wrapDelete(sess.ID(user.ID).Delete(new(model.User))); err != nil {
return err
}

View file

@ -24,7 +24,7 @@ import (
)
func TestUsers(t *testing.T) {
store, closer := newTestStore(t, new(model.User), new(model.Repo), new(model.Pipeline), new(model.Step), new(model.Perm), new(model.Org))
store, closer := newTestStore(t, new(model.User), new(model.Repo), new(model.Pipeline), new(model.Step), new(model.Perm), new(model.Org), new(model.Secret))
defer closer()
g := goblin.Goblin(t)

View file

@ -412,7 +412,7 @@
"show": "Show users",
"add": "Add user",
"none": "There are no users yet.",
"delete_confirm": "Do you really want to delete this user?",
"delete_confirm": "Do you really want to delete this user? This will also delete all repositories owned by this user.",
"deleted": "User deleted",
"created": "User created",
"saved": "User saved",
@ -430,7 +430,7 @@
"org_settings": "Organization settings",
"delete_org": "Delete organization",
"deleted": "Organization deleted",
"delete_confirm": "Do you really want to delete this organization?",
"delete_confirm": "Do you really want to delete this organization? This will also delete all repositories owned by this organization.",
"view": "View organization"
}
}