summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--integrations/api_admin_test.go14
-rw-r--r--modules/convert/user.go13
-rw-r--r--modules/structs/admin_user.go1
-rw-r--r--modules/structs/user.go2
-rw-r--r--routers/api/v1/admin/user.go3
-rw-r--r--templates/swagger/v1_json.tmpl9
6 files changed, 36 insertions, 6 deletions
diff --git a/integrations/api_admin_test.go b/integrations/api_admin_test.go
index 79fdc4a9f7..fdcfc40789 100644
--- a/integrations/api_admin_test.go
+++ b/integrations/api_admin_test.go
@@ -192,4 +192,18 @@ func TestAPIEditUser(t *testing.T) {
errMap := make(map[string]interface{})
json.Unmarshal(resp.Body.Bytes(), &errMap)
assert.EqualValues(t, "email is not allowed to be empty string", errMap["message"].(string))
+
+ user2 := models.AssertExistsAndLoadBean(t, &models.User{LoginName: "user2"}).(*models.User)
+ assert.Equal(t, false, user2.IsRestricted)
+ bTrue := true
+ req = NewRequestWithJSON(t, "PATCH", urlStr, api.EditUserOption{
+ // required
+ LoginName: "user2",
+ SourceID: 0,
+ // to change
+ Restricted: &bTrue,
+ })
+ session.MakeRequest(t, req, http.StatusOK)
+ user2 = models.AssertExistsAndLoadBean(t, &models.User{LoginName: "user2"}).(*models.User)
+ assert.Equal(t, true, user2.IsRestricted)
}
diff --git a/modules/convert/user.go b/modules/convert/user.go
index 010c92b969..f5d853fd4d 100644
--- a/modules/convert/user.go
+++ b/modules/convert/user.go
@@ -17,12 +17,13 @@ func ToUser(user *models.User, signed, authed bool) *api.User {
return nil
}
result := &api.User{
- ID: user.ID,
- UserName: user.Name,
- FullName: markup.Sanitize(user.FullName),
- Email: user.GetEmail(),
- AvatarURL: user.AvatarLink(),
- Created: user.CreatedUnix.AsTime(),
+ ID: user.ID,
+ UserName: user.Name,
+ FullName: markup.Sanitize(user.FullName),
+ Email: user.GetEmail(),
+ AvatarURL: user.AvatarLink(),
+ Created: user.CreatedUnix.AsTime(),
+ Restricted: user.IsRestricted,
}
// hide primary email if API caller is anonymous or user keep email private
if signed && (!user.KeepEmailPrivate || authed) {
diff --git a/modules/structs/admin_user.go b/modules/structs/admin_user.go
index 8cd4dc59e8..ee1738579a 100644
--- a/modules/structs/admin_user.go
+++ b/modules/structs/admin_user.go
@@ -41,4 +41,5 @@ type EditUserOption struct {
MaxRepoCreation *int `json:"max_repo_creation"`
ProhibitLogin *bool `json:"prohibit_login"`
AllowCreateOrganization *bool `json:"allow_create_organization"`
+ Restricted *bool `json:"restricted"`
}
diff --git a/modules/structs/user.go b/modules/structs/user.go
index bf52cc9ed6..511e4c56ce 100644
--- a/modules/structs/user.go
+++ b/modules/structs/user.go
@@ -30,6 +30,8 @@ type User struct {
LastLogin time.Time `json:"last_login,omitempty"`
// swagger:strfmt date-time
Created time.Time `json:"created,omitempty"`
+ // Is user restricted
+ Restricted bool `json:"restricted"`
}
// MarshalJSON implements the json.Marshaler interface for User, adding field(s) for backward compatibility
diff --git a/routers/api/v1/admin/user.go b/routers/api/v1/admin/user.go
index f148710c79..116c622048 100644
--- a/routers/api/v1/admin/user.go
+++ b/routers/api/v1/admin/user.go
@@ -224,6 +224,9 @@ func EditUser(ctx *context.APIContext) {
if form.ProhibitLogin != nil {
u.ProhibitLogin = *form.ProhibitLogin
}
+ if form.Restricted != nil {
+ u.IsRestricted = *form.Restricted
+ }
if err := models.UpdateUser(u); err != nil {
if models.IsErrEmailAlreadyUsed(err) || models.IsErrEmailInvalid(err) {
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index 2dedb56d1e..71caee9c75 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -13796,6 +13796,10 @@
"type": "boolean",
"x-go-name": "ProhibitLogin"
},
+ "restricted": {
+ "type": "boolean",
+ "x-go-name": "Restricted"
+ },
"source_id": {
"type": "integer",
"format": "int64",
@@ -16209,6 +16213,11 @@
"description": "the user's username",
"type": "string",
"x-go-name": "UserName"
+ },
+ "restricted": {
+ "description": "Is user restricted",
+ "type": "boolean",
+ "x-go-name": "Restricted"
}
},
"x-go-package": "code.gitea.io/gitea/modules/structs"