Email is unique for people + start work on authelia integration
This commit is contained in:
parent
76981f31c8
commit
aeb43e4775
9 changed files with 82 additions and 4 deletions
|
|
@ -5,3 +5,4 @@ APP_LISTEN_PORT=3000
|
|||
APP_BEHIND_PROXY=false
|
||||
DATABASE_DSN="host=localhost user=camarades password=camarades dbname=camarades port=5432 sslmode=disable TimeZone=Europe/Zurich"
|
||||
SESSIONS_LOCATION=./sessions.db
|
||||
AUTHELIA_USERS_LOCATION=./users.yml
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -6,3 +6,4 @@ static/assets
|
|||
pop-camarades
|
||||
*.db
|
||||
__debug_bin*
|
||||
users.yml
|
||||
|
|
@ -495,6 +495,18 @@ func ContactAdd(c *fiber.Ctx) error {
|
|||
person.PostalCode = data.PostalCode
|
||||
person.City = data.City
|
||||
|
||||
if len(data.Email) > 0 {
|
||||
var personEmail []models.Person
|
||||
result := db.Find(&personEmail, "LOWER(email) = LOWER(?)", data.Email)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
|
||||
if result.RowsAffected > 0 {
|
||||
errors = append(errors, "L'adresse email est déjà utilisée par un membre ou un sympathisant")
|
||||
}
|
||||
}
|
||||
|
||||
sectionID, err := strconv.ParseUint(data.Section, 10, 0)
|
||||
if err == nil {
|
||||
for _, section := range sections {
|
||||
|
|
@ -744,6 +756,18 @@ func ContactEdit(c *fiber.Ctx) error {
|
|||
person.PostalCode = data.PostalCode
|
||||
person.City = data.City
|
||||
|
||||
if len(data.Email) > 0 {
|
||||
var personEmail []models.Person
|
||||
result := db.Find(&personEmail, "LOWER(email) = LOWER(?)", data.Email)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
|
||||
if result.RowsAffected > 0 {
|
||||
errors = append(errors, "L'adresse email est déjà utilisée par un membre ou un sympathisant")
|
||||
}
|
||||
}
|
||||
|
||||
sectionID, err := strconv.ParseUint(data.Section, 10, 0)
|
||||
if err == nil {
|
||||
for _, section := range sections {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import (
|
|||
type PersonValidation struct {
|
||||
LastName string `validate:"max=100"`
|
||||
FirstName string `validate:"required,min=1,max=100"`
|
||||
Email string `validate:"max=100"`
|
||||
Email string `validate:"max=100,email"`
|
||||
Phone string `validate:"max=100"`
|
||||
Mobile string `validate:"max=100"`
|
||||
Address1 string `validate:"max=100"`
|
||||
|
|
@ -498,6 +498,18 @@ func MemberAdd(c *fiber.Ctx) error {
|
|||
}
|
||||
}
|
||||
|
||||
if len(data.Email) > 0 {
|
||||
var personEmail []models.Person
|
||||
result := db.Find(&personEmail, "LOWER(email) = LOWER(?)", data.Email)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
|
||||
if result.RowsAffected > 0 {
|
||||
errors = append(errors, "L'adresse email est déjà utilisée par un membre ou un sympathisant")
|
||||
}
|
||||
}
|
||||
|
||||
person.IsContact = false
|
||||
person.IsMember = true
|
||||
person.LastName = data.LastName
|
||||
|
|
@ -747,6 +759,18 @@ func MemberEdit(c *fiber.Ctx) error {
|
|||
}
|
||||
}
|
||||
|
||||
if len(data.Email) > 0 {
|
||||
var personEmail []models.Person
|
||||
result := db.Find(&personEmail, "LOWER(email) = LOWER(?)", data.Email)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
|
||||
if result.RowsAffected > 0 {
|
||||
errors = append(errors, "L'adresse email est déjà utilisée par un membre ou un sympathisant")
|
||||
}
|
||||
}
|
||||
|
||||
person.IsContact = false
|
||||
person.IsMember = true
|
||||
person.LastName = data.LastName
|
||||
|
|
|
|||
1
helpers/authelia/users.go
Normal file
1
helpers/authelia/users.go
Normal file
|
|
@ -0,0 +1 @@
|
|||
package authelia
|
||||
|
|
@ -20,6 +20,9 @@ type Config struct {
|
|||
Sessions struct {
|
||||
Location string `env:"SESSIONS_LOCATION"`
|
||||
}
|
||||
Authelia struct {
|
||||
UsersLocation string `env:"AUTHELIA_USERS_LOCATION"`
|
||||
}
|
||||
}
|
||||
|
||||
var configParsed bool
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ func GetDatabase() (*gorm.DB, error) {
|
|||
&models.Role{},
|
||||
&models.UserRole{},
|
||||
&models.Person{},
|
||||
&models.PersonAccount{},
|
||||
&models.List{},
|
||||
&models.ListItem{},
|
||||
&models.Field{},
|
||||
|
|
|
|||
|
|
@ -1,6 +1,11 @@
|
|||
package models
|
||||
|
||||
import "gorm.io/gorm"
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type Person struct {
|
||||
gorm.Model
|
||||
|
|
@ -8,7 +13,7 @@ type Person struct {
|
|||
IsContact bool
|
||||
FirstName string
|
||||
LastName string
|
||||
Email string
|
||||
Email string `gorm:"unique"`
|
||||
Phone string
|
||||
Mobile string
|
||||
Address1 string
|
||||
|
|
@ -18,3 +23,21 @@ type Person struct {
|
|||
SectionID uint
|
||||
Section Section
|
||||
}
|
||||
|
||||
type PersonAccount struct {
|
||||
gorm.Model
|
||||
PersonID uint
|
||||
Person Person
|
||||
UUID uuid.UUID `gorm:"unique"`
|
||||
Enabled bool
|
||||
Email string `gorm:"unique"`
|
||||
GivenName string
|
||||
FamilyName string
|
||||
DisplayName string
|
||||
Groups string
|
||||
InitialPassword string
|
||||
InvitationSent time.Time
|
||||
AccountReady bool
|
||||
AccountCreated bool
|
||||
UpdateNeeded bool
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import (
|
|||
type User struct {
|
||||
gorm.Model
|
||||
Name string
|
||||
Email string
|
||||
Email string `gorm:"unique"`
|
||||
Password string
|
||||
TotpSecret sql.NullString
|
||||
IsAdmin bool
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue