mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	Finsih mail resend limit
This commit is contained in:
		@@ -5,7 +5,7 @@ Gogs(Go Git Service) is a GitHub-like clone in the Go Programming Language.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Since we choose to use pure Go implementation of Git manipulation, Gogs certainly supports **ALL platforms**  that Go supports, including Linux, Max OS X, and Windows with **ZERO** dependency.
 | 
					Since we choose to use pure Go implementation of Git manipulation, Gogs certainly supports **ALL platforms**  that Go supports, including Linux, Max OS X, and Windows with **ZERO** dependency.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
##### Current version: 0.1.4 Alpha
 | 
					##### Current version: 0.1.5 Alpha
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Purpose
 | 
					## Purpose
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,8 +61,14 @@ USER =
 | 
				
			|||||||
PASSWD = 
 | 
					PASSWD = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[cache]
 | 
					[cache]
 | 
				
			||||||
 | 
					; Either "memory", "redis", or "memcache", default is "memory"
 | 
				
			||||||
ADAPTER = memory
 | 
					ADAPTER = memory
 | 
				
			||||||
CONFIG = 
 | 
					; For "memory" only, GC interval in seconds, default is 60
 | 
				
			||||||
 | 
					INTERVAL = 60
 | 
				
			||||||
 | 
					; For "redis" and "memcache", connection host address
 | 
				
			||||||
 | 
					; redis: ":6039"
 | 
				
			||||||
 | 
					; memcache: "127.0.0.1:11211"
 | 
				
			||||||
 | 
					HOST =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[log]
 | 
					[log]
 | 
				
			||||||
; Either "console", "file", "conn" or "smtp", default is "console"
 | 
					; Either "console", "file", "conn" or "smtp", default is "console"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							@@ -20,7 +20,7 @@ import (
 | 
				
			|||||||
// Test that go1.2 tag above is included in builds. main.go refers to this definition.
 | 
					// Test that go1.2 tag above is included in builds. main.go refers to this definition.
 | 
				
			||||||
const go12tag = true
 | 
					const go12tag = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const APP_VER = "0.1.4.0321"
 | 
					const APP_VER = "0.1.5.0321"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
	base.AppVer = APP_VER
 | 
						base.AppVer = APP_VER
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,6 @@ func LoadModelsConfig() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func setEngine() {
 | 
					func setEngine() {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	switch DbCfg.Type {
 | 
						switch DbCfg.Type {
 | 
				
			||||||
	case "mysql":
 | 
						case "mysql":
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -133,6 +133,30 @@ func newLogService() {
 | 
				
			|||||||
	log.Info("Log Mode: %s(%s)", strings.Title(mode), levelName)
 | 
						log.Info("Log Mode: %s(%s)", strings.Title(mode), levelName)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func newCacheService() {
 | 
				
			||||||
 | 
						CacheAdapter = Cfg.MustValue("cache", "ADAPTER", "memory")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch CacheAdapter {
 | 
				
			||||||
 | 
						case "memory":
 | 
				
			||||||
 | 
							CacheConfig = fmt.Sprintf(`{"interval":%d}`, Cfg.MustInt("cache", "INTERVAL", 60))
 | 
				
			||||||
 | 
						case "redis", "memcache":
 | 
				
			||||||
 | 
							CacheConfig = fmt.Sprintf(`{"conn":"%s"}`, Cfg.MustValue("cache", "HOST"))
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							fmt.Printf("Unknown cache adapter: %s\n", CacheAdapter)
 | 
				
			||||||
 | 
							os.Exit(2)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
						Cache, err = cache.NewCache(CacheAdapter, CacheConfig)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							fmt.Printf("Init cache system failed, adapter: %s, config: %s, %v\n",
 | 
				
			||||||
 | 
								CacheAdapter, CacheConfig, err)
 | 
				
			||||||
 | 
							os.Exit(2)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						log.Info("Cache Service Enabled")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func newMailService() {
 | 
					func newMailService() {
 | 
				
			||||||
	// Check mailer setting.
 | 
						// Check mailer setting.
 | 
				
			||||||
	if Cfg.MustBool("mailer", "ENABLED") {
 | 
						if Cfg.MustBool("mailer", "ENABLED") {
 | 
				
			||||||
@@ -188,16 +212,6 @@ func NewConfigContext() {
 | 
				
			|||||||
	SecretKey = Cfg.MustValue("security", "SECRET_KEY")
 | 
						SecretKey = Cfg.MustValue("security", "SECRET_KEY")
 | 
				
			||||||
	RunUser = Cfg.MustValue("", "RUN_USER")
 | 
						RunUser = Cfg.MustValue("", "RUN_USER")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	CacheAdapter = Cfg.MustValue("cache", "ADAPTER")
 | 
					 | 
				
			||||||
	CacheConfig = Cfg.MustValue("cache", "CONFIG")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	Cache, err = cache.NewCache(CacheAdapter, CacheConfig)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		fmt.Printf("Init cache system failed, adapter: %s, config: %s, %v\n",
 | 
					 | 
				
			||||||
			CacheAdapter, CacheConfig, err)
 | 
					 | 
				
			||||||
		os.Exit(2)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Determine and create root git reposiroty path.
 | 
						// Determine and create root git reposiroty path.
 | 
				
			||||||
	RepoRootPath = Cfg.MustValue("repository", "ROOT")
 | 
						RepoRootPath = Cfg.MustValue("repository", "ROOT")
 | 
				
			||||||
	if err = os.MkdirAll(RepoRootPath, os.ModePerm); err != nil {
 | 
						if err = os.MkdirAll(RepoRootPath, os.ModePerm); err != nil {
 | 
				
			||||||
@@ -209,6 +223,7 @@ func NewConfigContext() {
 | 
				
			|||||||
func NewServices() {
 | 
					func NewServices() {
 | 
				
			||||||
	newService()
 | 
						newService()
 | 
				
			||||||
	newLogService()
 | 
						newLogService()
 | 
				
			||||||
 | 
						newCacheService()
 | 
				
			||||||
	newMailService()
 | 
						newMailService()
 | 
				
			||||||
	newRegisterMailService()
 | 
						newRegisterMailService()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,5 +67,8 @@ func Config(ctx *middleware.Context) {
 | 
				
			|||||||
		ctx.Data["Mailer"] = base.MailService
 | 
							ctx.Data["Mailer"] = base.MailService
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.Data["CacheAdapter"] = base.CacheAdapter
 | 
				
			||||||
 | 
						ctx.Data["CacheConfig"] = base.CacheConfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.HTML(200, "admin/config")
 | 
						ctx.HTML(200, "admin/config")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -167,6 +167,10 @@ func SignUp(ctx *middleware.Context, form auth.RegisterForm) {
 | 
				
			|||||||
		ctx.Data["Email"] = u.Email
 | 
							ctx.Data["Email"] = u.Email
 | 
				
			||||||
		ctx.Data["Hours"] = base.Service.ActiveCodeLives / 60
 | 
							ctx.Data["Hours"] = base.Service.ActiveCodeLives / 60
 | 
				
			||||||
		ctx.HTML(200, "user/active")
 | 
							ctx.HTML(200, "user/active")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if err = ctx.Cache.Put("MailResendLimit_"+u.LowerName, u.LowerName, 180); err != nil {
 | 
				
			||||||
 | 
								log.Error("Set cache(MailResendLimit) fail: %v", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Redirect("/user/login")
 | 
						ctx.Redirect("/user/login")
 | 
				
			||||||
@@ -247,8 +251,12 @@ func Activate(ctx *middleware.Context) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		// Resend confirmation e-mail.
 | 
							// Resend confirmation e-mail.
 | 
				
			||||||
		if base.Service.RegisterEmailConfirm {
 | 
							if base.Service.RegisterEmailConfirm {
 | 
				
			||||||
 | 
								if ctx.Cache.IsExist("MailResendLimit_" + ctx.User.LowerName) {
 | 
				
			||||||
 | 
									ctx.Data["ResendLimited"] = true
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
				ctx.Data["Hours"] = base.Service.ActiveCodeLives / 60
 | 
									ctx.Data["Hours"] = base.Service.ActiveCodeLives / 60
 | 
				
			||||||
				mailer.SendActiveMail(ctx.Render, ctx.User)
 | 
									mailer.SendActiveMail(ctx.Render, ctx.User)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			ctx.Data["ServiceNotEnabled"] = true
 | 
								ctx.Data["ServiceNotEnabled"] = true
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,6 +63,17 @@
 | 
				
			|||||||
                <div><b>User:</b> {{.Mailer.User}}</div>
 | 
					                <div><b>User:</b> {{.Mailer.User}}</div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <div class="panel panel-default">
 | 
				
			||||||
 | 
					            <div class="panel-heading">
 | 
				
			||||||
 | 
					                Cache Configuration
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="panel-body">
 | 
				
			||||||
 | 
					                <div><b>Cache Adapter:</b> {{.CacheAdapter}}</div>
 | 
				
			||||||
 | 
					                <div><b>Cache Config:</b> <code>{{.CacheConfig}}</code></div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
{{template "base/footer" .}}
 | 
					{{template "base/footer" .}}
 | 
				
			||||||
@@ -6,6 +6,8 @@
 | 
				
			|||||||
        {{if .IsActivatePage}}
 | 
					        {{if .IsActivatePage}}
 | 
				
			||||||
            {{if .ServiceNotEnabled}}
 | 
					            {{if .ServiceNotEnabled}}
 | 
				
			||||||
            <p>Sorry, Register Mail Confirmation has been disabled.</p>
 | 
					            <p>Sorry, Register Mail Confirmation has been disabled.</p>
 | 
				
			||||||
 | 
					            {{else if .ResendLimited}}
 | 
				
			||||||
 | 
					            <p>Sorry, you are sending activation e-mail too frequently, please wait 3 minutes.</p>
 | 
				
			||||||
            {{else}}
 | 
					            {{else}}
 | 
				
			||||||
            <p>New confirmation e-mail has been sent to <b>{{.SignedUser.Email}}</b>, please check your inbox within {{.Hours}} hours to complete your registeration.</p>
 | 
					            <p>New confirmation e-mail has been sent to <b>{{.SignedUser.Email}}</b>, please check your inbox within {{.Hours}} hours to complete your registeration.</p>
 | 
				
			||||||
            <hr/>
 | 
					            <hr/>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user