2021-06-09 02:33:54 +03:00
// Copyright 2014 The Gogs Authors. All rights reserved.
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2021-06-09 02:33:54 +03:00
package web
import (
"net/http"
2022-06-25 20:06:01 +03:00
"strconv"
2021-06-09 02:33:54 +03:00
2022-06-25 20:06:01 +03:00
"code.gitea.io/gitea/models/db"
repo_model "code.gitea.io/gitea/models/repo"
user_model "code.gitea.io/gitea/models/user"
2021-06-09 02:33:54 +03:00
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/log"
2024-02-29 21:52:49 +03:00
"code.gitea.io/gitea/modules/optional"
2021-06-09 02:33:54 +03:00
"code.gitea.io/gitea/modules/setting"
2022-06-25 20:06:01 +03:00
"code.gitea.io/gitea/modules/sitemap"
"code.gitea.io/gitea/modules/structs"
2021-06-09 02:33:54 +03:00
"code.gitea.io/gitea/modules/web/middleware"
2022-01-02 16:12:35 +03:00
"code.gitea.io/gitea/routers/web/auth"
2021-06-09 02:33:54 +03:00
"code.gitea.io/gitea/routers/web/user"
2024-02-27 10:12:22 +03:00
"code.gitea.io/gitea/services/context"
2021-06-09 02:33:54 +03:00
)
const (
// tplHome home page template
tplHome base . TplName = "home"
)
// Home render home page
func Home ( ctx * context . Context ) {
if ctx . IsSigned {
2022-03-22 10:03:22 +03:00
if ! ctx . Doer . IsActive && setting . Service . RegisterEmailConfirm {
2021-06-09 02:33:54 +03:00
ctx . Data [ "Title" ] = ctx . Tr ( "auth.active_your_account" )
2022-01-02 16:12:35 +03:00
ctx . HTML ( http . StatusOK , auth . TplActivate )
2022-03-22 10:03:22 +03:00
} else if ! ctx . Doer . IsActive || ctx . Doer . ProhibitLogin {
log . Info ( "Failed authentication attempt for %s from %s" , ctx . Doer . Name , ctx . RemoteAddr ( ) )
2021-06-09 02:33:54 +03:00
ctx . Data [ "Title" ] = ctx . Tr ( "auth.prohibit_login" )
ctx . HTML ( http . StatusOK , "user/auth/prohibit_login" )
2022-03-22 10:03:22 +03:00
} else if ctx . Doer . MustChangePassword {
2021-06-09 02:33:54 +03:00
ctx . Data [ "Title" ] = ctx . Tr ( "auth.must_change_password" )
ctx . Data [ "ChangePasscodeLink" ] = setting . AppSubURL + "/user/change_password"
middleware . SetRedirectToCookie ( ctx . Resp , setting . AppSubURL + ctx . Req . URL . RequestURI ( ) )
ctx . Redirect ( setting . AppSubURL + "/user/settings/change_password" )
} else {
user . Dashboard ( ctx )
}
return
// Check non-logged users landing page.
} else if setting . LandingPageURL != setting . LandingPageHome {
ctx . Redirect ( setting . AppSubURL + string ( setting . LandingPageURL ) )
return
}
// Check auto-login.
2023-10-14 03:56:41 +03:00
if ctx . GetSiteCookie ( setting . CookieRememberName ) != "" {
2021-06-09 02:33:54 +03:00
ctx . Redirect ( setting . AppSubURL + "/user/login" )
return
}
ctx . Data [ "PageIsHome" ] = true
ctx . Data [ "IsRepoIndexerEnabled" ] = setting . Indexer . RepoIndexerEnabled
ctx . HTML ( http . StatusOK , tplHome )
}
2022-06-25 20:06:01 +03:00
// HomeSitemap renders the main sitemap
func HomeSitemap ( ctx * context . Context ) {
m := sitemap . NewSitemapIndex ( )
if ! setting . Service . Explore . DisableUsersPage {
2023-09-14 20:09:32 +03:00
_ , cnt , err := user_model . SearchUsers ( ctx , & user_model . SearchUserOptions {
2022-06-25 20:06:01 +03:00
Type : user_model . UserTypeIndividual ,
ListOptions : db . ListOptions { PageSize : 1 } ,
2024-02-29 21:52:49 +03:00
IsActive : optional . Some ( true ) ,
2022-06-25 20:06:01 +03:00
Visible : [ ] structs . VisibleType { structs . VisibleTypePublic } ,
} )
if err != nil {
ctx . ServerError ( "SearchUsers" , err )
return
}
count := int ( cnt )
idx := 1
for i := 0 ; i < count ; i += setting . UI . SitemapPagingNum {
m . Add ( sitemap . URL { URL : setting . AppURL + "explore/users/sitemap-" + strconv . Itoa ( idx ) + ".xml" } )
idx ++
}
}
2022-11-19 11:12:33 +03:00
_ , cnt , err := repo_model . SearchRepository ( ctx , & repo_model . SearchRepoOptions {
2022-06-25 20:06:01 +03:00
ListOptions : db . ListOptions {
PageSize : 1 ,
} ,
Actor : ctx . Doer ,
AllPublic : true ,
} )
if err != nil {
ctx . ServerError ( "SearchRepository" , err )
return
}
count := int ( cnt )
idx := 1
for i := 0 ; i < count ; i += setting . UI . SitemapPagingNum {
m . Add ( sitemap . URL { URL : setting . AppURL + "explore/repos/sitemap-" + strconv . Itoa ( idx ) + ".xml" } )
idx ++
}
ctx . Resp . Header ( ) . Set ( "Content-Type" , "text/xml" )
if _ , err := m . WriteTo ( ctx . Resp ) ; err != nil {
log . Error ( "Failed writing sitemap: %v" , err )
}
}
2021-06-09 02:33:54 +03:00
// NotFound render 404 page
func NotFound ( ctx * context . Context ) {
ctx . Data [ "Title" ] = "Page Not Found"
ctx . NotFound ( "home.NotFound" , nil )
}