mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Working on register mail confirmation
This commit is contained in:
		| @@ -28,11 +28,20 @@ type Mailer struct { | ||||
| var ( | ||||
| 	AppVer      string | ||||
| 	AppName     string | ||||
| 	AppLogo     string | ||||
| 	AppUrl      string | ||||
| 	Domain      string | ||||
| 	SecretKey   string | ||||
| 	Cfg         *goconfig.ConfigFile | ||||
| 	MailService *Mailer | ||||
| ) | ||||
|  | ||||
| var Service struct { | ||||
| 	RegisterEmailConfitm bool | ||||
| 	ActiveCodeLives      int | ||||
| 	ResetPwdCodeLives    int | ||||
| } | ||||
|  | ||||
| func exeDir() (string, error) { | ||||
| 	file, err := exec.LookPath(os.Args[0]) | ||||
| 	if err != nil { | ||||
| @@ -54,6 +63,11 @@ var logLevels = map[string]string{ | ||||
| 	"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") | ||||
| @@ -117,6 +131,17 @@ func newMailService() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| 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.RegisterEmailConfitm = true | ||||
| 	log.Info("Register Service Enabled") | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	var err error | ||||
| 	workDir, err := exeDir() | ||||
| @@ -143,9 +168,13 @@ func init() { | ||||
| 	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() | ||||
| } | ||||
|   | ||||
| @@ -7,6 +7,8 @@ package base | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"crypto/md5" | ||||
| 	"crypto/rand" | ||||
| 	"crypto/sha1" | ||||
| 	"encoding/hex" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| @@ -22,6 +24,66 @@ func EncodeMd5(str string) string { | ||||
| 	return hex.EncodeToString(m.Sum(nil)) | ||||
| } | ||||
|  | ||||
| // Random generate string | ||||
| func GetRandomString(n int) string { | ||||
| 	const alphanum = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" | ||||
| 	var bytes = make([]byte, n) | ||||
| 	rand.Read(bytes) | ||||
| 	for i, b := range bytes { | ||||
| 		bytes[i] = alphanum[b%byte(len(alphanum))] | ||||
| 	} | ||||
| 	return string(bytes) | ||||
| } | ||||
|  | ||||
| // create a time limit code | ||||
| // code format: 12 length date time string + 6 minutes string + 40 sha1 encoded string | ||||
| func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string { | ||||
| 	format := "YmdHi" | ||||
|  | ||||
| 	var start, end time.Time | ||||
| 	var startStr, endStr string | ||||
|  | ||||
| 	if startInf == nil { | ||||
| 		// Use now time create code | ||||
| 		start = time.Now() | ||||
| 		startStr = DateFormat(start, format) | ||||
| 	} else { | ||||
| 		// use start string create code | ||||
| 		startStr = startInf.(string) | ||||
| 		start, _ = DateParse(startStr, format) | ||||
| 		startStr = DateFormat(start, format) | ||||
| 	} | ||||
|  | ||||
| 	end = start.Add(time.Minute * time.Duration(minutes)) | ||||
| 	endStr = DateFormat(end, format) | ||||
|  | ||||
| 	// create sha1 encode string | ||||
| 	sh := sha1.New() | ||||
| 	sh.Write([]byte(data + SecretKey + startStr + endStr + fmt.Sprintf("%d", minutes))) | ||||
| 	encoded := hex.EncodeToString(sh.Sum(nil)) | ||||
|  | ||||
| 	code := fmt.Sprintf("%s%06d%s", startStr, minutes, encoded) | ||||
| 	return code | ||||
| } | ||||
|  | ||||
| func RenderTemplate(TplNames string, Data map[interface{}]interface{}) string { | ||||
| 	// if beego.RunMode == "dev" { | ||||
| 	// 	beego.BuildTemplate(beego.ViewsPath) | ||||
| 	// } | ||||
|  | ||||
| 	// ibytes := bytes.NewBufferString("") | ||||
| 	// if _, ok := beego.BeeTemplates[TplNames]; !ok { | ||||
| 	// 	panic("can't find templatefile in the path:" + TplNames) | ||||
| 	// } | ||||
| 	// err := beego.BeeTemplates[TplNames].ExecuteTemplate(ibytes, TplNames, Data) | ||||
| 	// if err != nil { | ||||
| 	// 	beego.Trace("template Execute err:", err) | ||||
| 	// } | ||||
| 	// icontent, _ := ioutil.ReadAll(ibytes) | ||||
| 	// return string(icontent) | ||||
| 	return "not implement yet" | ||||
| } | ||||
|  | ||||
| // AvatarLink returns avatar link by given e-mail. | ||||
| func AvatarLink(email string) string { | ||||
| 	return "http://1.gravatar.com/avatar/" + EncodeMd5(email) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user