[API] Add Restricted Field to User (#14630)

* Expose Restricted field for User

* Add Option to Change Restricted on User via adminEditUser API

* Add test who change restricted & test if it changed it ...

* make generate-swagger

Co-authored-by: zeripath <art27@cantab.net>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
6543 2021-02-18 09:25:35 +01:00 committed by GitHub
parent ce0346448f
commit 8d5c795cc4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 36 additions and 6 deletions

View file

@ -192,4 +192,18 @@ func TestAPIEditUser(t *testing.T) {
errMap := make(map[string]interface{}) errMap := make(map[string]interface{})
json.Unmarshal(resp.Body.Bytes(), &errMap) json.Unmarshal(resp.Body.Bytes(), &errMap)
assert.EqualValues(t, "email is not allowed to be empty string", errMap["message"].(string)) 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)
} }

View file

@ -17,12 +17,13 @@ func ToUser(user *models.User, signed, authed bool) *api.User {
return nil return nil
} }
result := &api.User{ result := &api.User{
ID: user.ID, ID: user.ID,
UserName: user.Name, UserName: user.Name,
FullName: markup.Sanitize(user.FullName), FullName: markup.Sanitize(user.FullName),
Email: user.GetEmail(), Email: user.GetEmail(),
AvatarURL: user.AvatarLink(), AvatarURL: user.AvatarLink(),
Created: user.CreatedUnix.AsTime(), Created: user.CreatedUnix.AsTime(),
Restricted: user.IsRestricted,
} }
// hide primary email if API caller is anonymous or user keep email private // hide primary email if API caller is anonymous or user keep email private
if signed && (!user.KeepEmailPrivate || authed) { if signed && (!user.KeepEmailPrivate || authed) {

View file

@ -41,4 +41,5 @@ type EditUserOption struct {
MaxRepoCreation *int `json:"max_repo_creation"` MaxRepoCreation *int `json:"max_repo_creation"`
ProhibitLogin *bool `json:"prohibit_login"` ProhibitLogin *bool `json:"prohibit_login"`
AllowCreateOrganization *bool `json:"allow_create_organization"` AllowCreateOrganization *bool `json:"allow_create_organization"`
Restricted *bool `json:"restricted"`
} }

View file

@ -30,6 +30,8 @@ type User struct {
LastLogin time.Time `json:"last_login,omitempty"` LastLogin time.Time `json:"last_login,omitempty"`
// swagger:strfmt date-time // swagger:strfmt date-time
Created time.Time `json:"created,omitempty"` 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 // MarshalJSON implements the json.Marshaler interface for User, adding field(s) for backward compatibility

View file

@ -224,6 +224,9 @@ func EditUser(ctx *context.APIContext) {
if form.ProhibitLogin != nil { if form.ProhibitLogin != nil {
u.ProhibitLogin = *form.ProhibitLogin u.ProhibitLogin = *form.ProhibitLogin
} }
if form.Restricted != nil {
u.IsRestricted = *form.Restricted
}
if err := models.UpdateUser(u); err != nil { if err := models.UpdateUser(u); err != nil {
if models.IsErrEmailAlreadyUsed(err) || models.IsErrEmailInvalid(err) { if models.IsErrEmailAlreadyUsed(err) || models.IsErrEmailInvalid(err) {

View file

@ -13796,6 +13796,10 @@
"type": "boolean", "type": "boolean",
"x-go-name": "ProhibitLogin" "x-go-name": "ProhibitLogin"
}, },
"restricted": {
"type": "boolean",
"x-go-name": "Restricted"
},
"source_id": { "source_id": {
"type": "integer", "type": "integer",
"format": "int64", "format": "int64",
@ -16209,6 +16213,11 @@
"description": "the user's username", "description": "the user's username",
"type": "string", "type": "string",
"x-go-name": "UserName" "x-go-name": "UserName"
},
"restricted": {
"description": "Is user restricted",
"type": "boolean",
"x-go-name": "Restricted"
} }
}, },
"x-go-package": "code.gitea.io/gitea/modules/structs" "x-go-package": "code.gitea.io/gitea/modules/structs"