summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2020-02-04 15:27:18 +0100
committerGitHub <noreply@github.com>2020-02-04 16:27:18 +0200
commitd4096ab6a284ce2c36305428459fd75dcb2e4ee5 (patch)
treebf549fa86daa1262aa64e3d823addee2c3e6d5b1 /models
parentb3c72a7c4a935e805b87ff2e1911429628ace7c5 (diff)
downloadgitea-d4096ab6a284ce2c36305428459fd75dcb2e4ee5.tar.gz
gitea-d4096ab6a284ce2c36305428459fd75dcb2e4ee5.zip
Ensure DeleteUser is not allowed to Delete Orgs and visa versa (#10134)
* add check to DeleteUser * add check to DeleteOrganization * add Test * remove redundancy (deleteOrg is only used in DeleteOrganization) * Update models/org.go Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'models')
-rw-r--r--models/org.go8
-rw-r--r--models/org_test.go4
-rw-r--r--models/user.go4
-rw-r--r--models/user_test.go3
4 files changed, 13 insertions, 6 deletions
diff --git a/models/org.go b/models/org.go
index 176a51ef94..4961db2ac7 100644
--- a/models/org.go
+++ b/models/org.go
@@ -256,6 +256,10 @@ func CountOrganizations() int64 {
// DeleteOrganization completely and permanently deletes everything of organization.
func DeleteOrganization(org *User) (err error) {
+ if !org.IsOrganization() {
+ return fmt.Errorf("%s is a user not an organization", org.Name)
+ }
+
sess := x.NewSession()
defer sess.Close()
@@ -275,10 +279,6 @@ func DeleteOrganization(org *User) (err error) {
}
func deleteOrg(e *xorm.Session, u *User) error {
- if !u.IsOrganization() {
- return fmt.Errorf("You can't delete none organization user: %s", u.Name)
- }
-
// Check ownership of repository.
count, err := getRepositoryCount(e, u)
if err != nil {
diff --git a/models/org_test.go b/models/org_test.go
index 934d5bc4a2..79f8b060e7 100644
--- a/models/org_test.go
+++ b/models/org_test.go
@@ -272,8 +272,8 @@ func TestDeleteOrganization(t *testing.T) {
assert.Error(t, err)
assert.True(t, IsErrUserOwnRepos(err))
- nonOrg := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
- assert.Error(t, DeleteOrganization(nonOrg))
+ user := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
+ assert.Error(t, DeleteOrganization(user))
CheckConsistencyFor(t, &User{}, &Team{})
}
diff --git a/models/user.go b/models/user.go
index fda3bb5eab..213b5f76ab 100644
--- a/models/user.go
+++ b/models/user.go
@@ -1244,6 +1244,10 @@ func deleteUser(e *xorm.Session, u *User) error {
// DeleteUser completely and permanently deletes everything of a user,
// but issues/comments/pulls will be kept and shown as someone has been deleted.
func DeleteUser(u *User) (err error) {
+ if u.IsOrganization() {
+ return fmt.Errorf("%s is an organization not a user", u.Name)
+ }
+
sess := x.NewSession()
defer sess.Close()
if err = sess.Begin(); err != nil {
diff --git a/models/user_test.go b/models/user_test.go
index fa1b0048e1..02b1893c43 100644
--- a/models/user_test.go
+++ b/models/user_test.go
@@ -199,6 +199,9 @@ func TestDeleteUser(t *testing.T) {
test(4)
test(8)
test(11)
+
+ org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
+ assert.Error(t, DeleteUser(org))
}
func TestEmailNotificationPreferences(t *testing.T) {