Fixed timer
This commit is contained in:
parent
c913b58e4c
commit
bd178e0168
|
@ -17,6 +17,9 @@ import (
|
||||||
"git.handmade.network/hmn/hmn/src/templates"
|
"git.handmade.network/hmn/hmn/src/templates"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TODO(asaf): Adjust this once we test on the server
|
||||||
|
const ExpectedEmailSendDuration = time.Millisecond * 3000
|
||||||
|
|
||||||
type RegistrationEmailData struct {
|
type RegistrationEmailData struct {
|
||||||
Name string
|
Name string
|
||||||
HomepageUrl string
|
HomepageUrl string
|
||||||
|
|
|
@ -27,6 +27,13 @@ func IntClamp(min, t, max int) int {
|
||||||
return IntMax(min, IntMin(t, max))
|
return IntMax(min, IntMin(t, max))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Int64Max(a, b int64) int64 {
|
||||||
|
if a > b {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Recover a panic and convert it to a returned error. Call it like so:
|
Recover a panic and convert it to a returned error. Call it like so:
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"git.handmade.network/hmn/hmn/src/auth"
|
"git.handmade.network/hmn/hmn/src/auth"
|
||||||
"git.handmade.network/hmn/hmn/src/config"
|
"git.handmade.network/hmn/hmn/src/config"
|
||||||
"git.handmade.network/hmn/hmn/src/db"
|
"git.handmade.network/hmn/hmn/src/db"
|
||||||
|
"git.handmade.network/hmn/hmn/src/email"
|
||||||
"git.handmade.network/hmn/hmn/src/hmnurl"
|
"git.handmade.network/hmn/hmn/src/hmnurl"
|
||||||
"git.handmade.network/hmn/hmn/src/logging"
|
"git.handmade.network/hmn/hmn/src/logging"
|
||||||
"git.handmade.network/hmn/hmn/src/models"
|
"git.handmade.network/hmn/hmn/src/models"
|
||||||
|
@ -123,12 +124,17 @@ func NewWebsiteRoutes(longRequestContext context.Context, conn *pgxpool.Pool, pe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
securityTimerMiddleware := func(delayMs int, h Handler) Handler {
|
securityTimerMiddleware := func(duration time.Duration, h Handler) Handler {
|
||||||
// NOTE(asaf): Will make sure that the request takes at least `delayMs` to finish. Adds a 10% random duration.
|
// NOTE(asaf): Will make sure that the request takes at least `delayMs` to finish. Adds a 10% random duration.
|
||||||
return func(c *RequestContext) ResponseData {
|
return func(c *RequestContext) ResponseData {
|
||||||
duration := time.Millisecond * time.Duration(delayMs+rand.Intn(utils.IntMax(1, delayMs/10)))
|
additionalDuration := time.Duration(rand.Int63n(utils.Int64Max(1, int64(duration)/10)))
|
||||||
|
timer := time.NewTimer(duration + additionalDuration)
|
||||||
res := h(c)
|
res := h(c)
|
||||||
utils.SleepContext(longRequestContext, duration)
|
select {
|
||||||
|
case <-longRequestContext.Done():
|
||||||
|
case <-c.Context().Done():
|
||||||
|
case <-timer.C:
|
||||||
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -164,14 +170,14 @@ func NewWebsiteRoutes(longRequestContext context.Context, conn *pgxpool.Pool, pe
|
||||||
mainRoutes.GET(hmnurl.RegexLoginPage, LoginPage)
|
mainRoutes.GET(hmnurl.RegexLoginPage, LoginPage)
|
||||||
|
|
||||||
mainRoutes.GET(hmnurl.RegexRegister, RegisterNewUser)
|
mainRoutes.GET(hmnurl.RegexRegister, RegisterNewUser)
|
||||||
mainRoutes.POST(hmnurl.RegexRegister, securityTimerMiddleware(3000, RegisterNewUserSubmit))
|
mainRoutes.POST(hmnurl.RegexRegister, securityTimerMiddleware(email.ExpectedEmailSendDuration, RegisterNewUserSubmit))
|
||||||
mainRoutes.GET(hmnurl.RegexRegistrationSuccess, RegisterNewUserSuccess)
|
mainRoutes.GET(hmnurl.RegexRegistrationSuccess, RegisterNewUserSuccess)
|
||||||
mainRoutes.GET(hmnurl.RegexOldEmailConfirmation, EmailConfirmation) // TODO(asaf): Delete this a bit after launch
|
mainRoutes.GET(hmnurl.RegexOldEmailConfirmation, EmailConfirmation) // TODO(asaf): Delete this a bit after launch
|
||||||
mainRoutes.GET(hmnurl.RegexEmailConfirmation, EmailConfirmation)
|
mainRoutes.GET(hmnurl.RegexEmailConfirmation, EmailConfirmation)
|
||||||
mainRoutes.POST(hmnurl.RegexEmailConfirmation, EmailConfirmationSubmit)
|
mainRoutes.POST(hmnurl.RegexEmailConfirmation, EmailConfirmationSubmit)
|
||||||
|
|
||||||
mainRoutes.GET(hmnurl.RegexRequestPasswordReset, RequestPasswordReset)
|
mainRoutes.GET(hmnurl.RegexRequestPasswordReset, RequestPasswordReset)
|
||||||
mainRoutes.POST(hmnurl.RegexRequestPasswordReset, securityTimerMiddleware(3000, RequestPasswordResetSubmit))
|
mainRoutes.POST(hmnurl.RegexRequestPasswordReset, securityTimerMiddleware(email.ExpectedEmailSendDuration, RequestPasswordResetSubmit))
|
||||||
mainRoutes.GET(hmnurl.RegexPasswordResetSent, PasswordResetSent)
|
mainRoutes.GET(hmnurl.RegexPasswordResetSent, PasswordResetSent)
|
||||||
mainRoutes.GET(hmnurl.RegexOldDoPasswordReset, DoPasswordReset)
|
mainRoutes.GET(hmnurl.RegexOldDoPasswordReset, DoPasswordReset)
|
||||||
mainRoutes.GET(hmnurl.RegexDoPasswordReset, DoPasswordReset)
|
mainRoutes.GET(hmnurl.RegexDoPasswordReset, DoPasswordReset)
|
||||||
|
|
Loading…
Reference in New Issue