57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package migrations
|
|
|
|
import (
|
|
"slices"
|
|
|
|
"github.com/pocketbase/dbx"
|
|
"github.com/pocketbase/pocketbase/daos"
|
|
"github.com/pocketbase/pocketbase/models"
|
|
"github.com/pocketbase/pocketbase/models/schema"
|
|
"github.com/pocketbase/pocketbase/tools/security"
|
|
)
|
|
|
|
// adds a "lastLoginAlertSentAt" column to all auth collection tables (if not already)
|
|
func init() {
|
|
AppMigrations.Register(func(db dbx.Builder) error {
|
|
dao := daos.New(db)
|
|
|
|
collections := []*models.Collection{}
|
|
err := dao.CollectionQuery().AndWhere(dbx.HashExp{"type": models.CollectionTypeAuth}).All(&collections)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var needToResetTokens bool
|
|
|
|
for _, c := range collections {
|
|
columns, err := dao.TableColumns(c.Name)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if slices.Contains(columns, schema.FieldNameLastLoginAlertSentAt) {
|
|
continue // already inserted
|
|
}
|
|
|
|
_, err = db.AddColumn(c.Name, schema.FieldNameLastLoginAlertSentAt, "TEXT DEFAULT '' NOT NULL").Execute()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
opts := c.AuthOptions()
|
|
if opts.AllowOAuth2Auth && (opts.AllowEmailAuth || opts.AllowUsernameAuth) {
|
|
needToResetTokens = true
|
|
}
|
|
}
|
|
|
|
settings, _ := dao.FindSettings()
|
|
if needToResetTokens && settings != nil {
|
|
settings.RecordAuthToken.Secret = security.RandomString(50)
|
|
if err := dao.SaveSettings(settings); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}, nil)
|
|
}
|