mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	
		
			
				
	
	
		
			181 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2014 The Gogs 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 base
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 	"os/exec"
 | |
| 	"path"
 | |
| 	"path/filepath"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/Unknwon/com"
 | |
| 	"github.com/Unknwon/goconfig"
 | |
| 
 | |
| 	"github.com/gogits/gogs/modules/log"
 | |
| )
 | |
| 
 | |
| // Mailer represents a mail service.
 | |
| type Mailer struct {
 | |
| 	Name         string
 | |
| 	Host         string
 | |
| 	User, Passwd string
 | |
| }
 | |
| 
 | |
| var (
 | |
| 	AppVer      string
 | |
| 	AppName     string
 | |
| 	AppLogo     string
 | |
| 	AppUrl      string
 | |
| 	Domain      string
 | |
| 	SecretKey   string
 | |
| 	Cfg         *goconfig.ConfigFile
 | |
| 	MailService *Mailer
 | |
| )
 | |
| 
 | |
| var Service struct {
 | |
| 	RegisterEmailConfirm bool
 | |
| 	ActiveCodeLives      int
 | |
| 	ResetPwdCodeLives    int
 | |
| }
 | |
| 
 | |
| func exeDir() (string, error) {
 | |
| 	file, err := exec.LookPath(os.Args[0])
 | |
| 	if err != nil {
 | |
| 		return "", err
 | |
| 	}
 | |
| 	p, err := filepath.Abs(file)
 | |
| 	if err != nil {
 | |
| 		return "", err
 | |
| 	}
 | |
| 	return path.Dir(p), nil
 | |
| }
 | |
| 
 | |
| var logLevels = map[string]string{
 | |
| 	"Trace":    "0",
 | |
| 	"Debug":    "1",
 | |
| 	"Info":     "2",
 | |
| 	"Warn":     "3",
 | |
| 	"Error":    "4",
 | |
| 	"Critical": "5",
 | |
| }
 | |
| 
 | |
| func newService() {
 | |
| 	Service.ActiveCodeLives = Cfg.MustInt("service", "ACTIVE_CODE_LIVE_MINUTES", 180)
 | |
| 	Service.ResetPwdCodeLives = Cfg.MustInt("service", "RESET_PASSWD_CODE_LIVE_MINUTES", 180)
 | |
| }
 | |
| 
 | |
| func newLogService() {
 | |
| 	// Get and check log mode.
 | |
| 	mode := Cfg.MustValue("log", "MODE", "console")
 | |
| 	modeSec := "log." + mode
 | |
| 	if _, err := Cfg.GetSection(modeSec); err != nil {
 | |
| 		fmt.Printf("Unknown log mode: %s\n", mode)
 | |
| 		os.Exit(2)
 | |
| 	}
 | |
| 
 | |
| 	// Log level.
 | |
| 	levelName := Cfg.MustValue("log."+mode, "LEVEL", "Trace")
 | |
| 	level, ok := logLevels[levelName]
 | |
| 	if !ok {
 | |
| 		fmt.Printf("Unknown log level: %s\n", levelName)
 | |
| 		os.Exit(2)
 | |
| 	}
 | |
| 
 | |
| 	// Generate log configuration.
 | |
| 	var config string
 | |
| 	switch mode {
 | |
| 	case "console":
 | |
| 		config = fmt.Sprintf(`{"level":%s}`, level)
 | |
| 	case "file":
 | |
| 		config = fmt.Sprintf(
 | |
| 			`{"level":%s,"filename":%s,"rotate":%v,"maxlines":%d,"maxsize",%d,"daily":%v,"maxdays":%d}`, level,
 | |
| 			Cfg.MustValue(modeSec, "FILE_NAME", "log/gogs.log"),
 | |
| 			Cfg.MustBool(modeSec, "LOG_ROTATE", true),
 | |
| 			Cfg.MustInt(modeSec, "MAX_LINES", 1000000),
 | |
| 			1<<uint(Cfg.MustInt(modeSec, "MAX_SIZE_SHIFT", 28)),
 | |
| 			Cfg.MustBool(modeSec, "DAILY_ROTATE", true),
 | |
| 			Cfg.MustInt(modeSec, "MAX_DAYS", 7))
 | |
| 	case "conn":
 | |
| 		config = fmt.Sprintf(`{"level":%s,"reconnectOnMsg":%v,"reconnect":%v,"net":%s,"addr":%s}`, level,
 | |
| 			Cfg.MustBool(modeSec, "RECONNECT_ON_MSG", false),
 | |
| 			Cfg.MustBool(modeSec, "RECONNECT", false),
 | |
| 			Cfg.MustValue(modeSec, "PROTOCOL", "tcp"),
 | |
| 			Cfg.MustValue(modeSec, "ADDR", ":7020"))
 | |
| 	case "smtp":
 | |
| 		config = fmt.Sprintf(`{"level":%s,"username":%s,"password":%s,"host":%s,"sendTos":%s,"subject":%s}`, level,
 | |
| 			Cfg.MustValue(modeSec, "USER", "example@example.com"),
 | |
| 			Cfg.MustValue(modeSec, "PASSWD", "******"),
 | |
| 			Cfg.MustValue(modeSec, "HOST", "127.0.0.1:25"),
 | |
| 			Cfg.MustValue(modeSec, "RECEIVERS", "[]"),
 | |
| 			Cfg.MustValue(modeSec, "SUBJECT", "Diagnostic message from serve"))
 | |
| 	}
 | |
| 
 | |
| 	log.NewLogger(Cfg.MustInt64("log", "BUFFER_LEN", 10000), mode, config)
 | |
| 	log.Info("Log Mode: %s(%s)", strings.Title(mode), levelName)
 | |
| }
 | |
| 
 | |
| func newMailService() {
 | |
| 	// Check mailer setting.
 | |
| 	if Cfg.MustBool("mailer", "ENABLED") {
 | |
| 		MailService = &Mailer{
 | |
| 			Name:   Cfg.MustValue("mailer", "NAME", AppName),
 | |
| 			Host:   Cfg.MustValue("mailer", "HOST", "127.0.0.1:25"),
 | |
| 			User:   Cfg.MustValue("mailer", "USER", "example@example.com"),
 | |
| 			Passwd: Cfg.MustValue("mailer", "PASSWD", "******"),
 | |
| 		}
 | |
| 		log.Info("Mail Service Enabled")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func newRegisterService() {
 | |
| 	if !Cfg.MustBool("service", "REGISTER_EMAIL_CONFIRM") {
 | |
| 		return
 | |
| 	} else if MailService == nil {
 | |
| 		log.Warn("Register Service: Mail Service is not enabled")
 | |
| 		return
 | |
| 	}
 | |
| 	Service.RegisterEmailConfirm = true
 | |
| 	log.Info("Register Service Enabled")
 | |
| }
 | |
| 
 | |
| func init() {
 | |
| 	var err error
 | |
| 	workDir, err := exeDir()
 | |
| 	if err != nil {
 | |
| 		fmt.Printf("Fail to get work directory: %s\n", err)
 | |
| 		os.Exit(2)
 | |
| 	}
 | |
| 
 | |
| 	cfgPath := filepath.Join(workDir, "conf/app.ini")
 | |
| 	Cfg, err = goconfig.LoadConfigFile(cfgPath)
 | |
| 	if err != nil {
 | |
| 		fmt.Printf("Cannot load config file '%s'\n", cfgPath)
 | |
| 		os.Exit(2)
 | |
| 	}
 | |
| 	Cfg.BlockMode = false
 | |
| 
 | |
| 	cfgPath = filepath.Join(workDir, "custom/conf/app.ini")
 | |
| 	if com.IsFile(cfgPath) {
 | |
| 		if err = Cfg.AppendFiles(cfgPath); err != nil {
 | |
| 			fmt.Printf("Cannot load config file '%s'\n", cfgPath)
 | |
| 			os.Exit(2)
 | |
| 		}
 | |
| 	}
 | |
| 	Cfg.BlockMode = false
 | |
| 
 | |
| 	AppName = Cfg.MustValue("", "APP_NAME", "Gogs: Go Git Service")
 | |
| 	AppLogo = Cfg.MustValue("", "APP_LOGO", "img/favicon.png")
 | |
| 	AppUrl = Cfg.MustValue("server", "ROOT_URL")
 | |
| 	Domain = Cfg.MustValue("server", "DOMAIN")
 | |
| 	SecretKey = Cfg.MustValue("security", "SECRET_KEY")
 | |
| 
 | |
| 	// Extensions.
 | |
| 	newLogService()
 | |
| 	newMailService()
 | |
| 	newRegisterService()
 | |
| }
 |