* refactor routers directory * move func used for web and api to common * make corsHandler a function to prohibit side efects * rm unused func Co-authored-by: 6543 <6543@obermui.de>
		
			
				
	
	
		
			107 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // 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 explore
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"net/http"
 | |
| 	"strings"
 | |
| 
 | |
| 	"code.gitea.io/gitea/models"
 | |
| 	"code.gitea.io/gitea/modules/base"
 | |
| 	"code.gitea.io/gitea/modules/context"
 | |
| 	"code.gitea.io/gitea/modules/setting"
 | |
| 	"code.gitea.io/gitea/modules/structs"
 | |
| 	"code.gitea.io/gitea/modules/util"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	// tplExploreUsers explore users page template
 | |
| 	tplExploreUsers base.TplName = "explore/users"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	nullByte = []byte{0x00}
 | |
| )
 | |
| 
 | |
| func isKeywordValid(keyword string) bool {
 | |
| 	return !bytes.Contains([]byte(keyword), nullByte)
 | |
| }
 | |
| 
 | |
| // RenderUserSearch render user search page
 | |
| func RenderUserSearch(ctx *context.Context, opts *models.SearchUserOptions, tplName base.TplName) {
 | |
| 	opts.Page = ctx.QueryInt("page")
 | |
| 	if opts.Page <= 1 {
 | |
| 		opts.Page = 1
 | |
| 	}
 | |
| 
 | |
| 	var (
 | |
| 		users   []*models.User
 | |
| 		count   int64
 | |
| 		err     error
 | |
| 		orderBy models.SearchOrderBy
 | |
| 	)
 | |
| 
 | |
| 	ctx.Data["SortType"] = ctx.Query("sort")
 | |
| 	switch ctx.Query("sort") {
 | |
| 	case "newest":
 | |
| 		orderBy = models.SearchOrderByIDReverse
 | |
| 	case "oldest":
 | |
| 		orderBy = models.SearchOrderByID
 | |
| 	case "recentupdate":
 | |
| 		orderBy = models.SearchOrderByRecentUpdated
 | |
| 	case "leastupdate":
 | |
| 		orderBy = models.SearchOrderByLeastUpdated
 | |
| 	case "reversealphabetically":
 | |
| 		orderBy = models.SearchOrderByAlphabeticallyReverse
 | |
| 	case "alphabetically":
 | |
| 		orderBy = models.SearchOrderByAlphabetically
 | |
| 	default:
 | |
| 		ctx.Data["SortType"] = "alphabetically"
 | |
| 		orderBy = models.SearchOrderByAlphabetically
 | |
| 	}
 | |
| 
 | |
| 	opts.Keyword = strings.Trim(ctx.Query("q"), " ")
 | |
| 	opts.OrderBy = orderBy
 | |
| 	if len(opts.Keyword) == 0 || isKeywordValid(opts.Keyword) {
 | |
| 		users, count, err = models.SearchUsers(opts)
 | |
| 		if err != nil {
 | |
| 			ctx.ServerError("SearchUsers", err)
 | |
| 			return
 | |
| 		}
 | |
| 	}
 | |
| 	ctx.Data["Keyword"] = opts.Keyword
 | |
| 	ctx.Data["Total"] = count
 | |
| 	ctx.Data["Users"] = users
 | |
| 	ctx.Data["UsersTwoFaStatus"] = models.UserList(users).GetTwoFaStatus()
 | |
| 	ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail
 | |
| 	ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
 | |
| 
 | |
| 	pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
 | |
| 	pager.SetDefaultParams(ctx)
 | |
| 	ctx.Data["Page"] = pager
 | |
| 
 | |
| 	ctx.HTML(http.StatusOK, tplName)
 | |
| }
 | |
| 
 | |
| // Users render explore users page
 | |
| func Users(ctx *context.Context) {
 | |
| 	if setting.Service.Explore.DisableUsersPage {
 | |
| 		ctx.Redirect(setting.AppSubURL + "/explore/repos")
 | |
| 		return
 | |
| 	}
 | |
| 	ctx.Data["Title"] = ctx.Tr("explore")
 | |
| 	ctx.Data["PageIsExplore"] = true
 | |
| 	ctx.Data["PageIsExploreUsers"] = true
 | |
| 	ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
 | |
| 
 | |
| 	RenderUserSearch(ctx, &models.SearchUserOptions{
 | |
| 		Actor:       ctx.User,
 | |
| 		Type:        models.UserTypeIndividual,
 | |
| 		ListOptions: models.ListOptions{PageSize: setting.UI.ExplorePagingNum},
 | |
| 		IsActive:    util.OptionalBoolTrue,
 | |
| 		Visible:     []structs.VisibleType{structs.VisibleTypePublic, structs.VisibleTypeLimited, structs.VisibleTypePrivate},
 | |
| 	}, tplExploreUsers)
 | |
| }
 |