2021-01-05 21:05:40 +08:00
// Copyright 2020 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 templates
import (
2022-08-28 10:43:25 +01:00
"fmt"
"io/fs"
2021-01-05 21:05:40 +08:00
"os"
2022-08-28 10:43:25 +01:00
"path/filepath"
2021-01-05 21:05:40 +08:00
"strings"
"time"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
)
// Vars represents variables to be render in golang templates
type Vars map [ string ] interface { }
// Merge merges another vars to the current, another Vars will override the current
func ( vars Vars ) Merge ( another map [ string ] interface { } ) Vars {
for k , v := range another {
vars [ k ] = v
}
return vars
}
// BaseVars returns all basic vars
func BaseVars ( ) Vars {
2022-01-20 18:46:10 +01:00
startTime := time . Now ( )
2021-01-05 21:05:40 +08:00
return map [ string ] interface { } {
"IsLandingPageHome" : setting . LandingPageURL == setting . LandingPageHome ,
"IsLandingPageExplore" : setting . LandingPageURL == setting . LandingPageExplore ,
"IsLandingPageOrganizations" : setting . LandingPageURL == setting . LandingPageOrganizations ,
2022-08-01 00:57:02 +08:00
"ShowRegistrationButton" : setting . Service . ShowRegistrationButton ,
"ShowMilestonesDashboardPage" : setting . Service . ShowMilestonesDashboardPage ,
"ShowFooterBranding" : setting . ShowFooterBranding ,
"ShowFooterVersion" : setting . ShowFooterVersion ,
"DisableDownloadSourceArchives" : setting . Repository . DisableDownloadSourceArchives ,
2021-01-05 21:05:40 +08:00
"EnableSwagger" : setting . API . EnableSwagger ,
"EnableOpenIDSignIn" : setting . Service . EnableOpenIDSignIn ,
"PageStartTime" : startTime ,
}
}
2022-08-28 10:43:25 +01:00
func getDirTemplateAssetNames ( dir string ) [ ] string {
return getDirAssetNames ( dir , false )
}
func getDirAssetNames ( dir string , mailer bool ) [ ] string {
2021-01-05 21:05:40 +08:00
var tmpls [ ] string
2022-08-28 10:43:25 +01:00
if mailer {
dir += filepath . Join ( dir , "mail" )
}
2021-01-05 21:05:40 +08:00
f , err := os . Stat ( dir )
if err != nil {
if os . IsNotExist ( err ) {
return tmpls
}
log . Warn ( "Unable to check if templates dir %s is a directory. Error: %v" , dir , err )
return tmpls
}
if ! f . IsDir ( ) {
log . Warn ( "Templates dir %s is a not directory." , dir )
return tmpls
}
files , err := util . StatDir ( dir )
if err != nil {
log . Warn ( "Failed to read %s templates dir. %v" , dir , err )
return tmpls
}
2022-08-28 10:43:25 +01:00
prefix := "templates/"
if mailer {
prefix += "mail/"
}
2021-01-05 21:05:40 +08:00
for _ , filePath := range files {
2022-08-28 10:43:25 +01:00
if ! mailer && strings . HasPrefix ( filePath , "mail/" ) {
2021-01-05 21:05:40 +08:00
continue
}
if ! strings . HasSuffix ( filePath , ".tmpl" ) {
continue
}
2022-08-28 10:43:25 +01:00
tmpls = append ( tmpls , prefix + filePath )
2021-01-05 21:05:40 +08:00
}
return tmpls
}
2021-01-26 23:36:53 +08:00
2022-08-28 10:43:25 +01:00
func walkAssetDir ( root string , skipMail bool , callback func ( path , name string , d fs . DirEntry , err error ) error ) error {
mailRoot := filepath . Join ( root , "mail" )
if err := filepath . WalkDir ( root , func ( path string , d fs . DirEntry , err error ) error {
name := path [ len ( root ) : ]
if len ( name ) > 0 && name [ 0 ] == '/' {
name = name [ 1 : ]
}
if err != nil {
if os . IsNotExist ( err ) {
return callback ( path , name , d , err )
}
return err
}
if skipMail && path == mailRoot && d . IsDir ( ) {
return fs . SkipDir
}
if util . CommonSkip ( d . Name ( ) ) {
if d . IsDir ( ) {
return fs . SkipDir
}
return nil
}
if strings . HasSuffix ( d . Name ( ) , ".tmpl" ) || d . IsDir ( ) {
return callback ( path , name , d , err )
}
return nil
} ) ; err != nil && ! os . IsNotExist ( err ) {
return fmt . Errorf ( "unable to get files for template assets in %s: %w" , root , err )
}
return nil
2021-01-26 23:36:53 +08:00
}