1
0
Fork 0
forked from forgejo/forgejo

Working on register mail confirmation

This commit is contained in:
Unknown 2014-03-19 07:21:23 -04:00
parent 9a666f3377
commit fbbae2b721
8 changed files with 189 additions and 14 deletions

View file

@ -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()
}

View file

@ -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)