Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Visible modes function from Organisation to Users too #16069

Merged
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
487d12a
First take for hiding users from explore page
sergey-dryabzhinsky Jun 4, 2021
4d194d6
Update admin user forms
sergey-dryabzhinsky Jun 4, 2021
62f2bd9
Update template for new user by admin
sergey-dryabzhinsky Jun 4, 2021
1258a6e
Add migration to list to process
sergey-dryabzhinsky Jun 4, 2021
51520a3
Format files
sergey-dryabzhinsky Jun 4, 2021
8064e02
Update swagger template
sergey-dryabzhinsky Jun 4, 2021
9d5447f
Filter users via query, not in template
sergey-dryabzhinsky Jun 5, 2021
f0b582c
Fix user edit by admin - store new field
sergey-dryabzhinsky Jun 5, 2021
266bee8
Update locale strings for user profile page
sergey-dryabzhinsky Jun 5, 2021
b419594
Hide user from public api user/userSearch by swagger, only there
sergey-dryabzhinsky Jun 6, 2021
0194b9d
Simplify userSearch limits if hide_from_explore_page set
sergey-dryabzhinsky Jun 6, 2021
1fe1a41
Check user2 too
sergey-dryabzhinsky Jun 6, 2021
9e68bb7
And add new colum for select
sergey-dryabzhinsky Jun 6, 2021
f6fbef7
Add 2 tests for api_user_search
sergey-dryabzhinsky Jun 6, 2021
71bf397
Remove useles field
sergey-dryabzhinsky Jun 6, 2021
9925724
Fix test unused/undeclared vars
sergey-dryabzhinsky Jun 6, 2021
6580f93
Fix request string formating
sergey-dryabzhinsky Jun 6, 2021
132a727
Update swapper template
sergey-dryabzhinsky Jun 6, 2021
3d74a84
Remove whitespace
sergey-dryabzhinsky Jun 6, 2021
5cb908c
Typo in fixture
sergey-dryabzhinsky Jun 6, 2021
39df5f3
Don't break old tests, use new user31
sergey-dryabzhinsky Jun 6, 2021
c38ed85
Fix unit-tests - use user31, fix fixture typo
sergey-dryabzhinsky Jun 7, 2021
5c03ff1
Pass Actor to api user search
sergey-dryabzhinsky Jun 7, 2021
0655b1f
Token auth is basic auth? Trace request from who
sergey-dryabzhinsky Jun 7, 2021
a1bae9c
Fixes for user search:
sergey-dryabzhinsky Jun 7, 2021
8b0979c
Merge branch 'main' into sergeyd-user-dont-want-exhibit-selfs
sergey-dryabzhinsky Jun 8, 2021
e1d9935
Rename migration
sergey-dryabzhinsky Jun 8, 2021
5d27211
Merge branch 'main-gitea' into sergeyd-user-dont-want-exhibit-selfs
sergey-dryabzhinsky Jun 9, 2021
f9ba4f7
Mention API searches in new locale strings
sergey-dryabzhinsky Jun 9, 2021
6bfa28e
Add note about visibility by admins
sergey-dryabzhinsky Jun 9, 2021
7066c1f
Rewrote user hiding based on Visibility field:
sergey-dryabzhinsky Jun 10, 2021
fdf1f8e
Fix lint errors
sergey-dryabzhinsky Jun 10, 2021
c80d1c8
One more step to use `Visibility` field:
sergey-dryabzhinsky Jun 10, 2021
c4c1e68
Fix test
sergey-dryabzhinsky Jun 10, 2021
9e90a73
Use edit test - new always set default visibility
sergey-dryabzhinsky Jun 10, 2021
66a0b41
One more time edit test
sergey-dryabzhinsky Jun 10, 2021
231d8ba
Next try - new user, update visibility
sergey-dryabzhinsky Jun 10, 2021
06bea36
One more try
sergey-dryabzhinsky Jun 10, 2021
aee5bd6
We can change visibility type on create - so allow it, default value …
sergey-dryabzhinsky Jun 10, 2021
cfe9ce0
Update fixture
sergey-dryabzhinsky Jun 10, 2021
efe7865
Merge branch 'main' into sergeyd-user-dont-want-exhibit-selfs
sergey-dryabzhinsky Jun 10, 2021
4fd5c86
Fix api User output?
sergey-dryabzhinsky Jun 10, 2021
16e24bd
Try to fix Visibility type conversion
sergey-dryabzhinsky Jun 10, 2021
ddc8e4c
Try to use int for visibility
sergey-dryabzhinsky Jun 11, 2021
1874740
Rewrite a little, api output for User.visibility not integer
sergey-dryabzhinsky Jun 11, 2021
ba59339
Fix swagger
sergey-dryabzhinsky Jun 11, 2021
cd70c81
Fix user test
sergey-dryabzhinsky Jun 11, 2021
96018c3
Update integrations/api_user_search_test.go
6543 Jun 15, 2021
9e051e3
Return back to string, remove zero check
sergey-dryabzhinsky Jun 16, 2021
e9e80ab
Convert visibility for API User
sergey-dryabzhinsky Jun 16, 2021
d5d20f2
Test strings now
sergey-dryabzhinsky Jun 16, 2021
d41fb82
Fixes for swagger
sergey-dryabzhinsky Jun 16, 2021
04950ca
Merge branch 'main' into sergeyd-user-dont-want-exhibit-selfs
6543 Jun 16, 2021
197f6c1
Merge branch 'master' into sergeyd-user-dont-want-exhibit-selfs
6543 Jun 16, 2021
379444f
fix
6543 Jun 16, 2021
dfe8e37
binding do not support pointer at the moment
6543 Jun 16, 2021
53ecfb5
fix TestAPIRepoTransfer
6543 Jun 16, 2021
4208b60
respect setting.Service.DefaultUserVisibilityMode
6543 Jun 16, 2021
b677e38
fix unit test :D
6543 Jun 16, 2021
994e7b9
Update new ini-option description
sergey-dryabzhinsky Jun 17, 2021
830eb28
Merge branch 'main-gitea' into sergeyd-user-dont-want-exhibit-selfs
sergey-dryabzhinsky Jun 17, 2021
87455ff
Update other ini-option description
sergey-dryabzhinsky Jun 17, 2021
06e1e73
Fix swagger template
sergey-dryabzhinsky Jun 17, 2021
a19c673
Merge branch 'main' into sergeyd-user-dont-want-exhibit-selfs
6543 Jun 18, 2021
7c95a06
Small fixes as suggested
sergey-dryabzhinsky Jun 25, 2021
f768063
Fix user_test - need to check with app-default value, fix selected va…
sergey-dryabzhinsky Jun 25, 2021
efa6ed5
Merge branch 'master' into sergeyd-user-dont-want-exhibit-selfs
6543 Jun 25, 2021
7fcb9be
User-Repos respect user Visible setting
6543 Jun 25, 2021
d04c728
Respect current User in list search
sergey-dryabzhinsky Jun 25, 2021
e4b39c2
hide user provile
6543 Jun 25, 2021
fd4f147
fix lint
6543 Jun 25, 2021
f24d3bc
Append simple visibility check to user GetInfo api
sergey-dryabzhinsky Jun 25, 2021
89255e9
Fix visibility check for api get user info:
sergey-dryabzhinsky Jun 25, 2021
79770b5
Improve the team test
zeripath Jun 26, 2021
06fbdd5
Update models/repo_permission.go
zeripath Jun 26, 2021
f258297
Merge branch 'main' into sergeyd-user-dont-want-exhibit-selfs
zeripath Jun 26, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions models/migrations/migrations.go
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,8 @@ var migrations = []Migration{
NewMigration("Convert avatar url to text", convertAvatarURLToText),
// v180 -> v181
NewMigration("Delete credentials from past migrations", deleteMigrationCredentials),
// v181 -> v182
NewMigration("Add column to User to allow them hide self from explore/users page", addHideFromExplorePageUserColumn),
}

// GetCurrentDBVersion returns the current db version
Expand Down
21 changes: 21 additions & 0 deletions models/migrations/v181.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package migrations

import (
"fmt"

"xorm.io/xorm"
)

func addHideFromExplorePageUserColumn(x *xorm.Engine) error {
type User struct {
HideFromExplorePage bool `xorm:"NOT NULL DEFAULT false"`
}
if err := x.Sync2(new(User)); err != nil {
return fmt.Errorf("Sync2: %v", err)
}
return nil
}
2 changes: 2 additions & 0 deletions models/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,8 @@ type User struct {
DiffViewStyle string `xorm:"NOT NULL DEFAULT ''"`
Theme string `xorm:"NOT NULL DEFAULT ''"`
KeepActivityPrivate bool `xorm:"NOT NULL DEFAULT false"`
// Users may don't want to appear on /explore/users page.
HideFromExplorePage bool `xorm:"NOT NULL DEFAULT false"`
}

// SearchOrganizationsOptions options to filter organizations
Expand Down
8 changes: 5 additions & 3 deletions modules/structs/admin_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ type CreateUserOption struct {
// swagger:strfmt email
Email string `json:"email" binding:"Required;Email;MaxSize(254)"`
// required: true
Password string `json:"password" binding:"Required;MaxSize(255)"`
MustChangePassword *bool `json:"must_change_password"`
SendNotify bool `json:"send_notify"`
Password string `json:"password" binding:"Required;MaxSize(255)"`
MustChangePassword *bool `json:"must_change_password"`
SendNotify bool `json:"send_notify"`
HideFromExplorePage *bool `json:"hide_from_explore_page"`
}

// EditUserOption edit user options
Expand All @@ -43,4 +44,5 @@ type EditUserOption struct {
ProhibitLogin *bool `json:"prohibit_login"`
AllowCreateOrganization *bool `json:"allow_create_organization"`
Restricted *bool `json:"restricted"`
HideFromExplorePage *bool `json:"hide_from_explore_page"`
}
4 changes: 4 additions & 0 deletions options/locale/locale_en-US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,8 @@ ui = Theme
privacy = Privacy
keep_activity_private = Hide the activity from the profile page
keep_activity_private_popup = Makes the activity visible only for you and the admins
hide_from_explore_page = Hide user from explorabale service users page
hide_from_explore_page_popup = Makes user visible only if mentioned in repo, commit, etc.

lookup_avatar_by_mail = Look Up Avatar by Email Address
federated_avatar_lookup = Federated Avatar Lookup
Expand Down Expand Up @@ -2236,6 +2238,8 @@ users.still_own_repo = This user still owns one or more repositories. Delete or
users.still_has_org = This user is a member of an organization. Remove the user from any organizations first.
users.deletion_success = The user account has been deleted.
users.reset_2fa = Reset 2FA
users.hide_from_explore_page = User do not appear on service explore page
users.hide_from_explore_page_tooltip = Users may do not want to be anounced publicly. So they can be hided from that page. But they profile will be accesible by mentioning in commit, issue, etc.

emails.email_manage_panel = User Email Management
emails.primary = Primary
Expand Down
21 changes: 14 additions & 7 deletions routers/api/v1/admin/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,17 +67,21 @@ func CreateUser(ctx *context.APIContext) {
// "$ref": "#/responses/validationError"
form := web.GetForm(ctx).(*api.CreateUserOption)
u := &models.User{
Name: form.Username,
FullName: form.FullName,
Email: form.Email,
Passwd: form.Password,
MustChangePassword: true,
IsActive: true,
LoginType: models.LoginPlain,
Name: form.Username,
FullName: form.FullName,
Email: form.Email,
Passwd: form.Password,
MustChangePassword: true,
IsActive: true,
LoginType: models.LoginPlain,
HideFromExplorePage: false,
}
if form.MustChangePassword != nil {
u.MustChangePassword = *form.MustChangePassword
}
if form.HideFromExplorePage != nil {
u.HideFromExplorePage = *form.HideFromExplorePage
}

parseLoginSource(ctx, u, form.SourceID, form.LoginName)
if ctx.Written() {
Expand Down Expand Up @@ -230,6 +234,9 @@ func EditUser(ctx *context.APIContext) {
if form.Restricted != nil {
u.IsRestricted = *form.Restricted
}
if form.HideFromExplorePage != nil {
u.HideFromExplorePage = *form.HideFromExplorePage
}

if err := models.UpdateUser(u); err != nil {
if models.IsErrEmailAlreadyUsed(err) || models.IsErrEmailInvalid(err) {
Expand Down
1 change: 1 addition & 0 deletions routers/user/setting/profile.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ func ProfilePost(ctx *context.Context) {
}
ctx.User.Description = form.Description
ctx.User.KeepActivityPrivate = form.KeepActivityPrivate
ctx.User.HideFromExplorePage = form.HideFromExplorePage
if err := models.UpdateUserSetting(ctx.User); err != nil {
if _, ok := err.(models.ErrEmailAlreadyUsed); ok {
ctx.Flash.Error(ctx.Tr("form.email_been_used"))
Expand Down
16 changes: 9 additions & 7 deletions services/forms/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@ import (

// AdminCreateUserForm form for admin to create user
type AdminCreateUserForm struct {
LoginType string `binding:"Required"`
LoginName string
UserName string `binding:"Required;AlphaDashDot;MaxSize(40)"`
Email string `binding:"Required;Email;MaxSize(254)"`
Password string `binding:"MaxSize(255)"`
SendNotify bool
MustChangePassword bool
LoginType string `binding:"Required"`
LoginName string
UserName string `binding:"Required;AlphaDashDot;MaxSize(40)"`
Email string `binding:"Required;Email;MaxSize(254)"`
Password string `binding:"MaxSize(255)"`
SendNotify bool
MustChangePassword bool
HideFromExplorePage bool
}

// Validate validates form fields
Expand Down Expand Up @@ -49,6 +50,7 @@ type AdminEditUserForm struct {
AllowCreateOrganization bool
ProhibitLogin bool
Reset2FA bool `form:"reset_2fa"`
HideFromExplorePage bool
}

// Validate validates form fields
Expand Down
1 change: 1 addition & 0 deletions services/forms/user_form.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@ type UpdateProfileForm struct {
Language string
Description string `binding:"MaxSize(255)"`
KeepActivityPrivate bool
HideFromExplorePage bool
}

// Validate validates the fields
Expand Down
7 changes: 7 additions & 0 deletions templates/admin/user/edit.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,13 @@
</div>
{{end}}

<div class="inline field">
<div class="ui checkbox poping up" data-content="{{.i18n.Tr "admin.users.hide_from_explore_page_tooltip"}}" data-variation="very wide">
<label><strong>{{.i18n.Tr "admin.users.hide_from_explore_page"}}</strong></label>
<input name="hide_from_explore_page" type="checkbox" {{if .User.HideFromExplorePage}}checked{{end}}>
</div>
</div>

<div class="ui divider"></div>

<div class="field">
Expand Down
7 changes: 7 additions & 0 deletions templates/admin/user/new.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,13 @@
</div>
{{end}}

<div class="inline field">
<div class="ui checkbox poping up" data-content="{{.i18n.Tr "admin.users.hide_from_explore_page_tooltip"}}" data-variation="very wide">
<label><strong>{{.i18n.Tr "admin.users.hide_from_explore_page"}}</strong></label>
<input name="hide_from_explore_page" type="checkbox" {{if .User.HideFromExplorePage}}checked{{end}}>
</div>
</div>

<div class="field">
<button class="ui green button">{{.i18n.Tr "admin.users.new_account"}}</button>
</div>
Expand Down
2 changes: 2 additions & 0 deletions templates/explore/users.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

<div class="ui user list">
{{range .Users}}
{{if not .HideFromExplorePage}}
lunny marked this conversation as resolved.
Show resolved Hide resolved
<div class="item">
{{avatar .}}
<div class="content">
Expand All @@ -22,6 +23,7 @@
</div>
</div>
</div>
{{end}}
{{else}}
<div>{{$.i18n.Tr "explore.user_no_results"}}</div>
{{end}}
Expand Down
8 changes: 8 additions & 0 deletions templates/swagger/v1_json.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -13014,6 +13014,10 @@
"type": "string",
"x-go-name": "FullName"
},
"hide_from_explore_page": {
"type": "boolean",
"x-go-name": "HideFromExplorePage"
},
"login_name": {
"type": "string",
"x-go-name": "LoginName"
Expand Down Expand Up @@ -13813,6 +13817,10 @@
"type": "string",
"x-go-name": "FullName"
},
"hide_from_explore_page": {
"type": "boolean",
"x-go-name": "HideFromExplorePage"
},
"location": {
"type": "string",
"x-go-name": "Location"
Expand Down
7 changes: 7 additions & 0 deletions templates/user/settings/profile.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,13 @@
<input name="keep_activity_private" type="checkbox" {{if .SignedUser.KeepActivityPrivate}}checked{{end}}>
</div>
</div>
<div class="field">
<!-- continue of privacy settings -->
<div class="ui checkbox" id="hide_from_explore_page">
<label class="poping up" data-content="{{.i18n.Tr "settings.hide_from_explore_page_popup"}}"><strong>{{.i18n.Tr "settings.hide_from_explore_page"}}</strong></label>
<input name="hide_from_explore_page" type="checkbox" {{if .SignedUser.HideFromExplorePage}}checked{{end}}>
</div>
</div>
<div class="field">
<button class="ui green button">{{$.i18n.Tr "settings.update_profile"}}</button>
</div>
Expand Down