diff options
author | Unknown <joe2010xtmf@163.com> | 2014-03-19 07:21:23 -0400 |
---|---|---|
committer | Unknown <joe2010xtmf@163.com> | 2014-03-19 07:21:23 -0400 |
commit | fbbae2b721c04be740d67b9d227a7578030f93b9 (patch) | |
tree | 394b9bb1e2e3b36611d834027ecaf6ee34a8a41d /modules/base | |
parent | 9a666f33773c5d8b66e9ab66598414f62bcfdc11 (diff) |
Working on register mail confirmation
Diffstat (limited to 'modules/base')
-rw-r--r-- | modules/base/conf.go | 29 | ||||
-rw-r--r-- | modules/base/tool.go | 62 |
2 files changed, 91 insertions, 0 deletions
diff --git a/modules/base/conf.go b/modules/base/conf.go index 9f6de56b..ee5638ed 100644 --- a/modules/base/conf.go +++ b/modules/base/conf.go @@ -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() } diff --git a/modules/base/tool.go b/modules/base/tool.go index 046b2c51..2a989b37 100644 --- a/modules/base/tool.go +++ b/modules/base/tool.go @@ -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) |