Email is unique for people + start work on authelia integration

This commit is contained in:
William Bouzourène 2026-03-13 14:42:40 +01:00
parent 76981f31c8
commit aeb43e4775
Signed by: bouzoure
GPG key ID: 423440D735B56BE2
9 changed files with 82 additions and 4 deletions

View file

@ -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
View file

@ -6,3 +6,4 @@ static/assets
pop-camarades
*.db
__debug_bin*
users.yml

View file

@ -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 {

View file

@ -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

View file

@ -0,0 +1 @@
package authelia

View file

@ -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

View file

@ -52,6 +52,7 @@ func GetDatabase() (*gorm.DB, error) {
&models.Role{},
&models.UserRole{},
&models.Person{},
&models.PersonAccount{},
&models.List{},
&models.ListItem{},
&models.Field{},

View file

@ -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
}

View file

@ -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