mirror of
https://github.com/pocketbase/pocketbase.git
synced 2025-03-20 22:36:00 +02:00
eagerly interrupt waiting for the email alert send in case it takes longer than 15s
This commit is contained in:
parent
4824701b6c
commit
47bd4ca11e
@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
- Added cache for the JSVM `arrayOf(m)`, `DynamicModel`, etc. dynamic `reflect` created types.
|
- Added cache for the JSVM `arrayOf(m)`, `DynamicModel`, etc. dynamic `reflect` created types.
|
||||||
|
|
||||||
|
- Eagerly interrupt waiting for the email alert send in case it takes longer than 15s.
|
||||||
|
|
||||||
- ⚠️ Removed the "dry submit" when executing the collections Create API rule
|
- ⚠️ Removed the "dry submit" when executing the collections Create API rule
|
||||||
(you can find more details why this change was introduced and how it could affect your app in https://github.com/pocketbase/pocketbase/discussions/6073).
|
(you can find more details why this change was introduced and how it could affect your app in https://github.com/pocketbase/pocketbase/discussions/6073).
|
||||||
For most users it should be non-breaking change, BUT if you have Create API rules that uses self-references or view counters you may have to adjust them manually.
|
For most users it should be non-breaking change, BUT if you have Create API rules that uses self-references or view counters you may have to adjust them manually.
|
||||||
|
@ -6,11 +6,13 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/pocketbase/dbx"
|
"github.com/pocketbase/dbx"
|
||||||
"github.com/pocketbase/pocketbase/core"
|
"github.com/pocketbase/pocketbase/core"
|
||||||
"github.com/pocketbase/pocketbase/mails"
|
"github.com/pocketbase/pocketbase/mails"
|
||||||
"github.com/pocketbase/pocketbase/tools/router"
|
"github.com/pocketbase/pocketbase/tools/router"
|
||||||
|
"github.com/pocketbase/pocketbase/tools/routine"
|
||||||
"github.com/pocketbase/pocketbase/tools/search"
|
"github.com/pocketbase/pocketbase/tools/search"
|
||||||
"github.com/pocketbase/pocketbase/tools/security"
|
"github.com/pocketbase/pocketbase/tools/security"
|
||||||
)
|
)
|
||||||
@ -569,8 +571,28 @@ func authAlert(e *core.RequestEvent, authRecord *core.Record) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// send email alert for the new origin auth (skip first login)
|
// send email alert for the new origin auth (skip first login)
|
||||||
|
//
|
||||||
|
// Note: The "fake" timeout is a temp solution to avoid blocking
|
||||||
|
// for too long when the SMTP server is not accessible, due
|
||||||
|
// to the lack of context concellation support in the underlying
|
||||||
|
// mailer and net/smtp package.
|
||||||
|
// The goroutine technically "leaks" but we assume that the OS will
|
||||||
|
// terminate the connection after some time (usually after 3-4 mins).
|
||||||
if !isFirstLogin && currentOrigin.IsNew() && authRecord.Email() != "" {
|
if !isFirstLogin && currentOrigin.IsNew() && authRecord.Email() != "" {
|
||||||
if err := mails.SendRecordAuthAlert(e.App, authRecord); err != nil {
|
mailSent := make(chan error, 1)
|
||||||
|
|
||||||
|
timer := time.AfterFunc(15*time.Second, func() {
|
||||||
|
mailSent <- errors.New("auth alert mail send wait timeout reached")
|
||||||
|
})
|
||||||
|
|
||||||
|
routine.FireAndForget(func() {
|
||||||
|
err := mails.SendRecordAuthAlert(e.App, authRecord)
|
||||||
|
timer.Stop()
|
||||||
|
mailSent <- err
|
||||||
|
})
|
||||||
|
|
||||||
|
err = <-mailSent
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user