code.gitea.io/gitea@v1.21.7/routers/web/home.go (about)

     1  // Copyright 2014 The Gogs Authors. All rights reserved.
     2  // Copyright 2019 The Gitea Authors. All rights reserved.
     3  // SPDX-License-Identifier: MIT
     4  
     5  package web
     6  
     7  import (
     8  	"net/http"
     9  	"strconv"
    10  
    11  	"code.gitea.io/gitea/models/db"
    12  	repo_model "code.gitea.io/gitea/models/repo"
    13  	user_model "code.gitea.io/gitea/models/user"
    14  	"code.gitea.io/gitea/modules/base"
    15  	"code.gitea.io/gitea/modules/context"
    16  	"code.gitea.io/gitea/modules/log"
    17  	"code.gitea.io/gitea/modules/setting"
    18  	"code.gitea.io/gitea/modules/sitemap"
    19  	"code.gitea.io/gitea/modules/structs"
    20  	"code.gitea.io/gitea/modules/util"
    21  	"code.gitea.io/gitea/modules/web/middleware"
    22  	"code.gitea.io/gitea/routers/web/auth"
    23  	"code.gitea.io/gitea/routers/web/user"
    24  )
    25  
    26  const (
    27  	// tplHome home page template
    28  	tplHome base.TplName = "home"
    29  )
    30  
    31  // Home render home page
    32  func Home(ctx *context.Context) {
    33  	if ctx.IsSigned {
    34  		if !ctx.Doer.IsActive && setting.Service.RegisterEmailConfirm {
    35  			ctx.Data["Title"] = ctx.Tr("auth.active_your_account")
    36  			ctx.HTML(http.StatusOK, auth.TplActivate)
    37  		} else if !ctx.Doer.IsActive || ctx.Doer.ProhibitLogin {
    38  			log.Info("Failed authentication attempt for %s from %s", ctx.Doer.Name, ctx.RemoteAddr())
    39  			ctx.Data["Title"] = ctx.Tr("auth.prohibit_login")
    40  			ctx.HTML(http.StatusOK, "user/auth/prohibit_login")
    41  		} else if ctx.Doer.MustChangePassword {
    42  			ctx.Data["Title"] = ctx.Tr("auth.must_change_password")
    43  			ctx.Data["ChangePasscodeLink"] = setting.AppSubURL + "/user/change_password"
    44  			middleware.SetRedirectToCookie(ctx.Resp, setting.AppSubURL+ctx.Req.URL.RequestURI())
    45  			ctx.Redirect(setting.AppSubURL + "/user/settings/change_password")
    46  		} else {
    47  			user.Dashboard(ctx)
    48  		}
    49  		return
    50  		// Check non-logged users landing page.
    51  	} else if setting.LandingPageURL != setting.LandingPageHome {
    52  		ctx.Redirect(setting.AppSubURL + string(setting.LandingPageURL))
    53  		return
    54  	}
    55  
    56  	// Check auto-login.
    57  	uname := ctx.GetSiteCookie(setting.CookieUserName)
    58  	if len(uname) != 0 {
    59  		ctx.Redirect(setting.AppSubURL + "/user/login")
    60  		return
    61  	}
    62  
    63  	ctx.Data["PageIsHome"] = true
    64  	ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
    65  	ctx.HTML(http.StatusOK, tplHome)
    66  }
    67  
    68  // HomeSitemap renders the main sitemap
    69  func HomeSitemap(ctx *context.Context) {
    70  	m := sitemap.NewSitemapIndex()
    71  	if !setting.Service.Explore.DisableUsersPage {
    72  		_, cnt, err := user_model.SearchUsers(ctx, &user_model.SearchUserOptions{
    73  			Type:        user_model.UserTypeIndividual,
    74  			ListOptions: db.ListOptions{PageSize: 1},
    75  			IsActive:    util.OptionalBoolTrue,
    76  			Visible:     []structs.VisibleType{structs.VisibleTypePublic},
    77  		})
    78  		if err != nil {
    79  			ctx.ServerError("SearchUsers", err)
    80  			return
    81  		}
    82  		count := int(cnt)
    83  		idx := 1
    84  		for i := 0; i < count; i += setting.UI.SitemapPagingNum {
    85  			m.Add(sitemap.URL{URL: setting.AppURL + "explore/users/sitemap-" + strconv.Itoa(idx) + ".xml"})
    86  			idx++
    87  		}
    88  	}
    89  
    90  	_, cnt, err := repo_model.SearchRepository(ctx, &repo_model.SearchRepoOptions{
    91  		ListOptions: db.ListOptions{
    92  			PageSize: 1,
    93  		},
    94  		Actor:     ctx.Doer,
    95  		AllPublic: true,
    96  	})
    97  	if err != nil {
    98  		ctx.ServerError("SearchRepository", err)
    99  		return
   100  	}
   101  	count := int(cnt)
   102  	idx := 1
   103  	for i := 0; i < count; i += setting.UI.SitemapPagingNum {
   104  		m.Add(sitemap.URL{URL: setting.AppURL + "explore/repos/sitemap-" + strconv.Itoa(idx) + ".xml"})
   105  		idx++
   106  	}
   107  
   108  	ctx.Resp.Header().Set("Content-Type", "text/xml")
   109  	if _, err := m.WriteTo(ctx.Resp); err != nil {
   110  		log.Error("Failed writing sitemap: %v", err)
   111  	}
   112  }
   113  
   114  // NotFound render 404 page
   115  func NotFound(ctx *context.Context) {
   116  	ctx.Data["Title"] = "Page Not Found"
   117  	ctx.NotFound("home.NotFound", nil)
   118  }