mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2026-05-12 22:10:25 +00:00
fix: add missing deleting beans for organizations (#11699)
- Delete blocked users entries. - Organization cannot get blocked, it can block other people however. - Delete following entries. - Organization cannot follow, it can be followed by users. - Resolves forgejo/forgejo#11416 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11699 Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org> Reviewed-by: 0ko <0ko@noreply.codeberg.org> Reviewed-by: Andreas Ahlenstorf <aahlenst@noreply.codeberg.org> Co-authored-by: Gusted <postmaster@gusted.xyz> Co-committed-by: Gusted <postmaster@gusted.xyz>
This commit is contained in:
parent
075ee9ea88
commit
c1787d06e2
6 changed files with 37 additions and 0 deletions
|
|
@ -397,6 +397,14 @@ func DeleteOrganization(ctx context.Context, org *Organization) error {
|
|||
return fmt.Errorf("%s is a user not an organization", org.Name)
|
||||
}
|
||||
|
||||
// Decrease following count of users that follow the organisation.
|
||||
followerIDs, err := db.FindIDs(ctx, "follow", "follow.user_id", builder.Eq{"follow.follow_id": org.ID})
|
||||
if err != nil {
|
||||
return fmt.Errorf("get all followers: %w", err)
|
||||
} else if err = db.DecrByIDs(ctx, followerIDs, "num_following", new(user_model.User)); err != nil {
|
||||
return fmt.Errorf("decrease user num_following: %w", err)
|
||||
}
|
||||
|
||||
if err := db.DeleteBeans(ctx,
|
||||
&Team{OrgID: org.ID},
|
||||
&OrgUser{OrgID: org.ID},
|
||||
|
|
@ -406,6 +414,8 @@ func DeleteOrganization(ctx context.Context, org *Organization) error {
|
|||
&secret_model.Secret{OwnerID: org.ID},
|
||||
&actions_model.ActionRunner{OwnerID: org.ID},
|
||||
&actions_model.ActionRunnerToken{OwnerID: optional.Some(org.ID)},
|
||||
&user_model.BlockedUser{UserID: org.ID},
|
||||
&user_model.Follow{FollowID: org.ID},
|
||||
); err != nil {
|
||||
return fmt.Errorf("DeleteBeans: %w", err)
|
||||
}
|
||||
|
|
|
|||
1
release-notes/11699.md
Normal file
1
release-notes/11699.md
Normal file
|
|
@ -0,0 +1 @@
|
|||
fix: The DB entries about users following an organization and users blocked by an organization were not deleted when an organization was deleted. Orphaned entries can be cleaned up by running `forgejo doctor check --run check-db-consistency --fix`.
|
||||
4
services/org/TestDeleteOrganization/follow.yml
Normal file
4
services/org/TestDeleteOrganization/follow.yml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
-
|
||||
id: 1001
|
||||
user_id: 1001
|
||||
follow_id: 6
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
-
|
||||
id: 1001
|
||||
user_id: 6
|
||||
block_id: 1
|
||||
created_unix: 1772018142
|
||||
13
services/org/TestDeleteOrganization/user.yml
Normal file
13
services/org/TestDeleteOrganization/user.yml
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
-
|
||||
id: 1001
|
||||
lower_name: user1001
|
||||
name: user1001
|
||||
full_name: User That loves Upper Cases
|
||||
email: AnotherTestUserWithUpperCaseEmail@otto.splvs.net
|
||||
passwd: ZogKvWdyEx:password
|
||||
passwd_hash_algo: dummy
|
||||
avatar: ''
|
||||
avatar_email: anothertestuserwithuppercaseemail@otto.splvs.net
|
||||
login_name: user1
|
||||
created_unix: 1772018142
|
||||
num_following: 1
|
||||
|
|
@ -32,6 +32,8 @@ func TestDeleteOrganization(t *testing.T) {
|
|||
unittest.AssertNotExistsBean(t, &organization.OrgUser{OrgID: 6})
|
||||
unittest.AssertNotExistsBean(t, &organization.Team{OrgID: 6})
|
||||
unittest.AssertNotExistsBean(t, &actions.ActionRunnerToken{OwnerID: optional.Some[int64](6)})
|
||||
unittest.AssertNotExistsBean(t, &user_model.Follow{FollowID: 6})
|
||||
unittest.AssertNotExistsBean(t, &user_model.BlockedUser{UserID: 6})
|
||||
|
||||
org = unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
|
||||
err := DeleteOrganization(db.DefaultContext, org, false)
|
||||
|
|
@ -41,4 +43,6 @@ func TestDeleteOrganization(t *testing.T) {
|
|||
user := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 5})
|
||||
require.Error(t, DeleteOrganization(db.DefaultContext, user, false))
|
||||
unittest.CheckConsistencyFor(t, &user_model.User{}, &organization.Team{})
|
||||
|
||||
assert.Zero(t, unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1001}).NumFollowing)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue