mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Add Visible modes function from Organisation to Users too (#16069)
You can limit or hide organisations. This pull make it also posible for users - new strings to translte - add checkbox to user profile form - add checkbox to admin user.edit form - filter explore page user search - filter api admin and public user searches - allow admins view "hidden" users - add app option DEFAULT_USER_VISIBILITY - rewrite many files to use Visibility field - check for teams intersection - fix context output - right fake 404 if not visible Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							19ac575d57
						
					
				
				
					commit
					22a0636544
				
			| @@ -66,6 +66,7 @@ func CreateUser(ctx *context.APIContext) { | ||||
| 	//   "422": | ||||
| 	//     "$ref": "#/responses/validationError" | ||||
| 	form := web.GetForm(ctx).(*api.CreateUserOption) | ||||
|  | ||||
| 	u := &models.User{ | ||||
| 		Name:               form.Username, | ||||
| 		FullName:           form.FullName, | ||||
| @@ -97,7 +98,15 @@ func CreateUser(ctx *context.APIContext) { | ||||
| 		ctx.Error(http.StatusBadRequest, "PasswordPwned", errors.New("PasswordPwned")) | ||||
| 		return | ||||
| 	} | ||||
| 	if err := models.CreateUser(u); err != nil { | ||||
|  | ||||
| 	var overwriteDefault *models.CreateUserOverwriteOptions | ||||
| 	if form.Visibility != "" { | ||||
| 		overwriteDefault = &models.CreateUserOverwriteOptions{ | ||||
| 			Visibility: api.VisibilityModes[form.Visibility], | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if err := models.CreateUser(u, overwriteDefault); err != nil { | ||||
| 		if models.IsErrUserAlreadyExist(err) || | ||||
| 			models.IsErrEmailAlreadyUsed(err) || | ||||
| 			models.IsErrNameReserved(err) || | ||||
| @@ -209,6 +218,9 @@ func EditUser(ctx *context.APIContext) { | ||||
| 	if form.Active != nil { | ||||
| 		u.IsActive = *form.Active | ||||
| 	} | ||||
| 	if len(form.Visibility) != 0 { | ||||
| 		u.Visibility = api.VisibilityModes[form.Visibility] | ||||
| 	} | ||||
| 	if form.Admin != nil { | ||||
| 		u.IsAdmin = *form.Admin | ||||
| 	} | ||||
| @@ -395,6 +407,7 @@ func GetAllUsers(ctx *context.APIContext) { | ||||
| 	listOptions := utils.GetListOptions(ctx) | ||||
|  | ||||
| 	users, maxResults, err := models.SearchUsers(&models.SearchUserOptions{ | ||||
| 		Actor:       ctx.User, | ||||
| 		Type:        models.UserTypeIndividual, | ||||
| 		OrderBy:     models.SearchOrderByAlphabetically, | ||||
| 		ListOptions: listOptions, | ||||
|   | ||||
| @@ -225,8 +225,8 @@ func Get(ctx *context.APIContext) { | ||||
| 	//   "200": | ||||
| 	//     "$ref": "#/responses/Organization" | ||||
|  | ||||
| 	if !models.HasOrgVisible(ctx.Org.Organization, ctx.User) { | ||||
| 		ctx.NotFound("HasOrgVisible", nil) | ||||
| 	if !models.HasOrgOrUserVisible(ctx.Org.Organization, ctx.User) { | ||||
| 		ctx.NotFound("HasOrgOrUserVisible", nil) | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.JSON(http.StatusOK, convert.ToOrganization(ctx.Org.Organization)) | ||||
|   | ||||
| @@ -375,8 +375,8 @@ func CreateOrgRepo(ctx *context.APIContext) { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	if !models.HasOrgVisible(org, ctx.User) { | ||||
| 		ctx.NotFound("HasOrgVisible", nil) | ||||
| 	if !models.HasOrgOrUserVisible(org, ctx.User) { | ||||
| 		ctx.NotFound("HasOrgOrUserVisible", nil) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -17,7 +17,7 @@ func GetUserByParamsName(ctx *context.APIContext, name string) *models.User { | ||||
| 	user, err := models.GetUserByName(username) | ||||
| 	if err != nil { | ||||
| 		if models.IsErrUserNotExist(err) { | ||||
| 			if redirectUserID, err := models.LookupUserRedirect(username); err == nil { | ||||
| 			if redirectUserID, err2 := models.LookupUserRedirect(username); err2 == nil { | ||||
| 				context.RedirectToUser(ctx.Context, username, redirectUserID) | ||||
| 			} else { | ||||
| 				ctx.NotFound("GetUserByName", err) | ||||
|   | ||||
| @@ -57,6 +57,7 @@ func Search(ctx *context.APIContext) { | ||||
| 	listOptions := utils.GetListOptions(ctx) | ||||
|  | ||||
| 	opts := &models.SearchUserOptions{ | ||||
| 		Actor:       ctx.User, | ||||
| 		Keyword:     strings.Trim(ctx.Query("q"), " "), | ||||
| 		UID:         ctx.QueryInt64("uid"), | ||||
| 		Type:        models.UserTypeIndividual, | ||||
| @@ -102,10 +103,16 @@ func GetInfo(ctx *context.APIContext) { | ||||
| 	//     "$ref": "#/responses/notFound" | ||||
|  | ||||
| 	u := GetUserByParams(ctx) | ||||
|  | ||||
| 	if ctx.Written() { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	if !u.IsVisibleToUser(ctx.User) { | ||||
| 		// fake ErrUserNotExist error message to not leak information about existence | ||||
| 		ctx.NotFound("GetUserByName", models.ErrUserNotExist{Name: ctx.Params(":username")}) | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.JSON(http.StatusOK, convert.ToUser(u, ctx.User)) | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user