mirror of
https://github.com/h44z/wg-portal.git
synced 2025-04-19 08:55:12 +00:00
convert all email addresses to lower case (#14)
This commit is contained in:
parent
926733dea4
commit
e052f400aa
@ -108,6 +108,7 @@ func (provider Provider) GetUserModel(ctx *authentication.AuthContext) (*authent
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (provider Provider) InitializeAdmin(email, password string) error {
|
func (provider Provider) InitializeAdmin(email, password string) error {
|
||||||
|
email = strings.ToLower(email)
|
||||||
if !emailRegex.MatchString(email) {
|
if !emailRegex.MatchString(email) {
|
||||||
return errors.New("admin username must be an email address")
|
return errors.New("admin username must be an email address")
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@ -14,6 +15,22 @@ import (
|
|||||||
"gorm.io/gorm/logger"
|
"gorm.io/gorm/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
migrations = append(migrations, Migration{
|
||||||
|
version: "1.0.7",
|
||||||
|
migrateFn: func(db *gorm.DB) error {
|
||||||
|
if err := db.Exec("UPDATE users SET email = LOWER(email)").Error; err != nil {
|
||||||
|
return errors.Wrap(err, "failed to convert user emails to lower case")
|
||||||
|
}
|
||||||
|
if err := db.Exec("UPDATE peers SET email = LOWER(email)").Error; err != nil {
|
||||||
|
return errors.Wrap(err, "failed to convert peer emails to lower case")
|
||||||
|
}
|
||||||
|
logrus.Infof("upgraded database format to version 1.0.7")
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
type SupportedDatabase string
|
type SupportedDatabase string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -80,16 +97,18 @@ type DatabaseMigrationInfo struct {
|
|||||||
Applied time.Time
|
Applied time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Migration struct {
|
||||||
|
version string
|
||||||
|
migrateFn func(db *gorm.DB) error
|
||||||
|
}
|
||||||
|
|
||||||
|
var migrations []Migration
|
||||||
|
|
||||||
func MigrateDatabase(db *gorm.DB, version string) error {
|
func MigrateDatabase(db *gorm.DB, version string) error {
|
||||||
if err := db.AutoMigrate(&DatabaseMigrationInfo{}); err != nil {
|
if err := db.AutoMigrate(&DatabaseMigrationInfo{}); err != nil {
|
||||||
return errors.Wrap(err, "failed to migrate version database")
|
return errors.Wrap(err, "failed to migrate version database")
|
||||||
}
|
}
|
||||||
|
|
||||||
newVersion := DatabaseMigrationInfo{
|
|
||||||
Version: version,
|
|
||||||
Applied: time.Now(),
|
|
||||||
}
|
|
||||||
|
|
||||||
existingMigration := DatabaseMigrationInfo{}
|
existingMigration := DatabaseMigrationInfo{}
|
||||||
db.Where("version = ?", version).FirstOrInit(&existingMigration)
|
db.Where("version = ?", version).FirstOrInit(&existingMigration)
|
||||||
|
|
||||||
@ -97,11 +116,24 @@ func MigrateDatabase(db *gorm.DB, version string) error {
|
|||||||
lastVersion := DatabaseMigrationInfo{}
|
lastVersion := DatabaseMigrationInfo{}
|
||||||
db.Order("applied desc, version desc").FirstOrInit(&lastVersion)
|
db.Order("applied desc, version desc").FirstOrInit(&lastVersion)
|
||||||
|
|
||||||
// TODO: migrate database
|
sort.Slice(migrations, func(i, j int) bool {
|
||||||
|
return migrations[i].version < migrations[j].version
|
||||||
|
})
|
||||||
|
|
||||||
res := db.Create(&newVersion)
|
for _, migration := range migrations {
|
||||||
|
if migration.version > lastVersion.Version {
|
||||||
|
if err := migration.migrateFn(db); err != nil {
|
||||||
|
return errors.Wrapf(err, "failed to migrate to version %s", migration.version)
|
||||||
|
}
|
||||||
|
|
||||||
|
res := db.Create(&DatabaseMigrationInfo{
|
||||||
|
Version: migration.version,
|
||||||
|
Applied: time.Now(),
|
||||||
|
})
|
||||||
if res.Error != nil {
|
if res.Error != nil {
|
||||||
return errors.Wrap(res.Error, "failed to write version to database")
|
return errors.Wrapf(res.Error, "failed to write version %s to database", migration.version)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package server
|
package server
|
||||||
|
|
||||||
var Version = "testbuild"
|
var Version = "testbuild"
|
||||||
var DatabaseVersion = "1.0.6"
|
var DatabaseVersion = "1.0.7"
|
||||||
|
@ -51,6 +51,8 @@ func (m Manager) UserExists(email string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m Manager) GetUser(email string) *User {
|
func (m Manager) GetUser(email string) *User {
|
||||||
|
email = strings.ToLower(email)
|
||||||
|
|
||||||
user := User{}
|
user := User{}
|
||||||
m.db.Where("email = ?", email).First(&user)
|
m.db.Where("email = ?", email).First(&user)
|
||||||
|
|
||||||
@ -62,6 +64,8 @@ func (m Manager) GetUser(email string) *User {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m Manager) GetUserUnscoped(email string) *User {
|
func (m Manager) GetUserUnscoped(email string) *User {
|
||||||
|
email = strings.ToLower(email)
|
||||||
|
|
||||||
user := User{}
|
user := User{}
|
||||||
m.db.Unscoped().Where("email = ?", email).First(&user)
|
m.db.Unscoped().Where("email = ?", email).First(&user)
|
||||||
|
|
||||||
@ -93,6 +97,8 @@ func (m Manager) GetFilteredAndSortedUsersUnscoped(sortKey, sortDirection, searc
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m Manager) GetOrCreateUser(email string) (*User, error) {
|
func (m Manager) GetOrCreateUser(email string) (*User, error) {
|
||||||
|
email = strings.ToLower(email)
|
||||||
|
|
||||||
user := User{}
|
user := User{}
|
||||||
m.db.Where("email = ?", email).FirstOrInit(&user)
|
m.db.Where("email = ?", email).FirstOrInit(&user)
|
||||||
|
|
||||||
@ -113,6 +119,8 @@ func (m Manager) GetOrCreateUser(email string) (*User, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m Manager) GetOrCreateUserUnscoped(email string) (*User, error) {
|
func (m Manager) GetOrCreateUserUnscoped(email string) (*User, error) {
|
||||||
|
email = strings.ToLower(email)
|
||||||
|
|
||||||
user := User{}
|
user := User{}
|
||||||
m.db.Unscoped().Where("email = ?", email).FirstOrInit(&user)
|
m.db.Unscoped().Where("email = ?", email).FirstOrInit(&user)
|
||||||
|
|
||||||
@ -133,6 +141,7 @@ func (m Manager) GetOrCreateUserUnscoped(email string) (*User, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m Manager) CreateUser(user *User) error {
|
func (m Manager) CreateUser(user *User) error {
|
||||||
|
user.Email = strings.ToLower(user.Email)
|
||||||
res := m.db.Create(user)
|
res := m.db.Create(user)
|
||||||
if res.Error != nil {
|
if res.Error != nil {
|
||||||
return errors.Wrapf(res.Error, "failed to create user %s", user.Email)
|
return errors.Wrapf(res.Error, "failed to create user %s", user.Email)
|
||||||
@ -142,6 +151,7 @@ func (m Manager) CreateUser(user *User) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m Manager) UpdateUser(user *User) error {
|
func (m Manager) UpdateUser(user *User) error {
|
||||||
|
user.Email = strings.ToLower(user.Email)
|
||||||
res := m.db.Save(user)
|
res := m.db.Save(user)
|
||||||
if res.Error != nil {
|
if res.Error != nil {
|
||||||
return errors.Wrapf(res.Error, "failed to update user %s", user.Email)
|
return errors.Wrapf(res.Error, "failed to update user %s", user.Email)
|
||||||
@ -151,6 +161,7 @@ func (m Manager) UpdateUser(user *User) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m Manager) DeleteUser(user *User) error {
|
func (m Manager) DeleteUser(user *User) error {
|
||||||
|
user.Email = strings.ToLower(user.Email)
|
||||||
res := m.db.Delete(user)
|
res := m.db.Delete(user)
|
||||||
if res.Error != nil {
|
if res.Error != nil {
|
||||||
return errors.Wrapf(res.Error, "failed to update user %s", user.Email)
|
return errors.Wrapf(res.Error, "failed to update user %s", user.Email)
|
||||||
|
@ -623,6 +623,7 @@ func (m *PeerManager) GetFilteredAndSortedPeers(device, sortKey, sortDirection,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *PeerManager) GetSortedPeersForEmail(sortKey, sortDirection, email string) []Peer {
|
func (m *PeerManager) GetSortedPeersForEmail(sortKey, sortDirection, email string) []Peer {
|
||||||
|
email = strings.ToLower(email)
|
||||||
peers := make([]Peer, 0)
|
peers := make([]Peer, 0)
|
||||||
m.db.Where("email = ?", email).Find(&peers)
|
m.db.Where("email = ?", email).Find(&peers)
|
||||||
|
|
||||||
@ -691,6 +692,7 @@ func (m *PeerManager) GetPeerByKey(publicKey string) Peer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *PeerManager) GetPeersByMail(mail string) []Peer {
|
func (m *PeerManager) GetPeersByMail(mail string) []Peer {
|
||||||
|
mail = strings.ToLower(mail)
|
||||||
var peers []Peer
|
var peers []Peer
|
||||||
m.db.Where("email = ?", mail).Find(&peers)
|
m.db.Where("email = ?", mail).Find(&peers)
|
||||||
for i := range peers {
|
for i := range peers {
|
||||||
@ -706,6 +708,7 @@ func (m *PeerManager) CreatePeer(peer Peer) error {
|
|||||||
peer.UID = fmt.Sprintf("u%x", md5.Sum([]byte(peer.PublicKey)))
|
peer.UID = fmt.Sprintf("u%x", md5.Sum([]byte(peer.PublicKey)))
|
||||||
peer.UpdatedAt = time.Now()
|
peer.UpdatedAt = time.Now()
|
||||||
peer.CreatedAt = time.Now()
|
peer.CreatedAt = time.Now()
|
||||||
|
peer.Email = strings.ToLower(peer.Email)
|
||||||
|
|
||||||
res := m.db.Create(&peer)
|
res := m.db.Create(&peer)
|
||||||
if res.Error != nil {
|
if res.Error != nil {
|
||||||
@ -718,6 +721,7 @@ func (m *PeerManager) CreatePeer(peer Peer) error {
|
|||||||
|
|
||||||
func (m *PeerManager) UpdatePeer(peer Peer) error {
|
func (m *PeerManager) UpdatePeer(peer Peer) error {
|
||||||
peer.UpdatedAt = time.Now()
|
peer.UpdatedAt = time.Now()
|
||||||
|
peer.Email = strings.ToLower(peer.Email)
|
||||||
|
|
||||||
res := m.db.Save(&peer)
|
res := m.db.Save(&peer)
|
||||||
if res.Error != nil {
|
if res.Error != nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user