From 3b804ff8d1c6cbe988bbaf0da71ae43c87ed6adb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Z=C3=BCrcher?= Date: Thu, 20 Nov 2025 15:17:44 +0100 Subject: [PATCH] add new decrypt encrypt function to member --- handlers/members.go | 148 ++-------------------------------------- handlers/responsible.go | 27 ++++++-- models/member.go | 148 ++++++++++++++++++++++++++++++++++++++++ utils/utils.go | 9 +++ 4 files changed, 185 insertions(+), 147 deletions(-) diff --git a/handlers/members.go b/handlers/members.go index 21aeaca..1b50a8d 100644 --- a/handlers/members.go +++ b/handlers/members.go @@ -24,86 +24,21 @@ func (dh *DatabaseHandler) AddNewMember(members ...models.Member) error { return fmt.Errorf("member %s %s %s exists already", member.FirstName, member.LastName, member.Birthday) } - encFirstName, err := crypto.Encrypt(member.FirstName, dh.token) - if err != nil { - return err - } - - encLastName, err := crypto.Encrypt(member.LastName, dh.token) - if err != nil { - return err - } - //check correct birtday format if member.Birthday != "" && !utils.IsValidBirthday(member.Birthday) { return errors.New("incorrect birthday format") } - encBirthday, err := crypto.Encrypt(member.Birthday, dh.token) - if err != nil { - return err - } - - encAddress, err := crypto.Encrypt(member.Address, dh.token) - if err != nil { - return err - } - - encZip, err := crypto.Encrypt(member.Zip, dh.token) - if err != nil { - return err - } - - encTown, err := crypto.Encrypt(member.Town, dh.token) - if err != nil { - return err - } - - encPhone, err := crypto.Encrypt(member.Phone, dh.token) - if err != nil { - return err - } - //check correct email format if member.Email != "" && !utils.IsValidEmail(member.Email) { return errors.New("incorrect email format") } - encEmail, err := crypto.Encrypt(member.Email, dh.token) - if err != nil { - return err - } - now := utils.GetCurrentTime(dh.timeLocation) - encFirstVisit, err := crypto.Encrypt(now, dh.token) - if err != nil { - return err - } + member.FirstVisit = now + member.LastVisit = now - encLastVisit, err := crypto.Encrypt(now, dh.token) - if err != nil { - return err - } - - encComment, err := crypto.Encrypt(member.Comment, dh.token) - if err != nil { - return err - } - - member.FirstNameHash = dh.hashField(member.FirstName) - member.FirstName = encFirstName - member.LastNameHash = dh.hashField(member.LastName) - member.LastName = encLastName - member.BirthdayHash = dh.hashField(member.Birthday) - member.Birthday = encBirthday - member.Address = encAddress - member.Zip = encZip - member.Town = encTown - member.Phone = encPhone - member.Email = encEmail - member.FirstVisit = encFirstVisit - member.LastVisit = encLastVisit - member.Comment = encComment + member.Encrypt(dh.token) err = dh.database.AddNewColum(&member) if err != nil { @@ -137,81 +72,8 @@ func (dh *DatabaseHandler) GetMember(id uint) (members []models.Member, err erro } for i := range members { - if members[i].FirstName != "" { - members[i].FirstName, err = crypto.Decrypt(members[i].FirstName, dh.token) - if err != nil { - return - } - } - - if members[i].LastName != "" { - members[i].LastName, err = crypto.Decrypt(members[i].LastName, dh.token) - if err != nil { - return - } - } - - if members[i].Birthday != "" { - members[i].Birthday, err = crypto.Decrypt(members[i].Birthday, dh.token) - if err != nil { - return - } - } - - if members[i].Address != "" { - members[i].Address, err = crypto.Decrypt(members[i].Address, dh.token) - if err != nil { - return - } - } - - if members[i].Zip != "" { - members[i].Zip, err = crypto.Decrypt(members[i].Zip, dh.token) - if err != nil { - return - } - } - - if members[i].Town != "" { - members[i].Town, err = crypto.Decrypt(members[i].Town, dh.token) - if err != nil { - return - } - } - - if members[i].Phone != "" { - members[i].Phone, err = crypto.Decrypt(members[i].Phone, dh.token) - if err != nil { - return - } - } - - if members[i].Email != "" { - members[i].Email, err = crypto.Decrypt(members[i].Email, dh.token) - if err != nil { - return - } - } - - if members[i].FirstVisit != "" { - members[i].FirstVisit, err = crypto.Decrypt(members[i].FirstVisit, dh.token) - if err != nil { - return - } - } - - if members[i].LastVisit != "" { - members[i].LastVisit, err = crypto.Decrypt(members[i].LastVisit, dh.token) - if err != nil { - return - } - } - - if members[i].Comment != "" { - members[i].Comment, err = crypto.Decrypt(members[i].Comment, dh.token) - if err != nil { - return - } + if err := members[i].Decrypt(dh.token); err != nil { + return members, err } } return diff --git a/handlers/responsible.go b/handlers/responsible.go index 313fdbf..eed8529 100644 --- a/handlers/responsible.go +++ b/handlers/responsible.go @@ -12,10 +12,19 @@ func (dh *DatabaseHandler) AddNewResponsible(responsibles ...models.Responsible) } for i := range responsibles { - if !dh.database.Exists(&models.Member{}, "", "id", 25, false) { - continue + if responsibles[i].MemberId == 0 && responsibles[i].Id != 0 { + responsibles[i].MemberId = responsibles[i].Id + responsibles[i].Id = 0 } + //check if member exists + if !dh.database.Exists(&models.Member{}, "", "id", &responsibles[i].MemberId, false) { + continue + } + // check if already exists + if dh.database.Exists(&models.Responsible{}, "Member", "id", &responsibles[i].MemberId, false) { + continue + } err := dh.database.AddNewColum(&responsibles[i]) if err != nil { return err @@ -25,12 +34,22 @@ func (dh *DatabaseHandler) AddNewResponsible(responsibles ...models.Responsible) return nil } -func (dh *DatabaseHandler) GetResponsible(id uint) (responsibles models.Responsibles, err error) { +func (dh *DatabaseHandler) GetResponsible(id uint) (members []models.Member, err error) { if !dh.DatabaseOpened() { - return responsibles, errors.New("database not opened") + return members, errors.New("database not opened") } + var responsibles models.Responsibles err = dh.database.GetById(&responsibles, "Member", id) + + for _, r := range responsibles { + + err := r.Member.Decrypt(dh.token) + if err != nil { + return members, err + } + members = append(members, *r.Member) + } return } diff --git a/models/member.go b/models/member.go index 35c82eb..d20054b 100644 --- a/models/member.go +++ b/models/member.go @@ -1,5 +1,10 @@ package models +import ( + "gitea.tecamino.com/paadi/memberDB/crypto" + "gitea.tecamino.com/paadi/memberDB/utils" +) + type Member struct { Id int `gorm:"primaryKey" json:"id,omitempty"` FirstName string `gorm:"column:firstName" json:"firstName,omitempty"` @@ -22,3 +27,146 @@ type Member struct { Comment string `gorm:"column:comment" json:"comment,omitempty"` Events []*Event `gorm:"many2many:member_events;" ` } + +func (m *Member) Encrypt(token []byte) (err error) { + + m.FirstNameHash = utils.HashField(m.FirstName, token) + m.FirstName, err = crypto.Encrypt(m.FirstName, token) + if err != nil { + return + } + + m.LastNameHash = utils.HashField(m.LastName, token) + m.LastName, err = crypto.Encrypt(m.LastName, token) + if err != nil { + return + } + + m.BirthdayHash = utils.HashField(m.Birthday, token) + m.Birthday, err = crypto.Encrypt(m.Birthday, token) + if err != nil { + return + } + + m.Address, err = crypto.Encrypt(m.Address, token) + if err != nil { + return + } + + m.Zip, err = crypto.Encrypt(m.Zip, token) + if err != nil { + return + } + + m.Town, err = crypto.Encrypt(m.Town, token) + if err != nil { + return + } + + m.Phone, err = crypto.Encrypt(m.Phone, token) + if err != nil { + return + } + + m.Email, err = crypto.Encrypt(m.Email, token) + if err != nil { + return + } + + m.FirstVisit, err = crypto.Encrypt(m.FirstVisit, token) + if err != nil { + return + } + + m.LastVisit, err = crypto.Encrypt(m.LastVisit, token) + if err != nil { + return + } + + m.Comment, err = crypto.Encrypt(m.Comment, token) + if err != nil { + return + } + return +} + +func (m *Member) Decrypt(token []byte) (err error) { + + if m.FirstName != "" { + m.FirstName, err = crypto.Decrypt(m.FirstName, token) + if err != nil { + return + } + } + + if m.LastName != "" { + m.LastName, err = crypto.Decrypt(m.LastName, token) + if err != nil { + return + } + } + + if m.Birthday != "" { + m.Birthday, err = crypto.Decrypt(m.Birthday, token) + if err != nil { + return + } + } + + if m.Address != "" { + m.Address, err = crypto.Decrypt(m.Address, token) + if err != nil { + return + } + } + + if m.Zip != "" { + m.Zip, err = crypto.Decrypt(m.Zip, token) + if err != nil { + return + } + } + + if m.Town != "" { + m.Town, err = crypto.Decrypt(m.Town, token) + if err != nil { + return + } + } + + if m.Phone != "" { + m.Phone, err = crypto.Decrypt(m.Phone, token) + if err != nil { + return + } + } + + if m.Email != "" { + m.Email, err = crypto.Decrypt(m.Email, token) + if err != nil { + return + } + } + + if m.FirstVisit != "" { + m.FirstVisit, err = crypto.Decrypt(m.FirstVisit, token) + if err != nil { + return + } + } + + if m.LastVisit != "" { + m.LastVisit, err = crypto.Decrypt(m.LastVisit, token) + if err != nil { + return + } + } + + if m.Comment != "" { + m.Comment, err = crypto.Decrypt(m.Comment, token) + if err != nil { + return + } + } + return +} diff --git a/utils/utils.go b/utils/utils.go index ce9ac65..0a8a7a5 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -1,6 +1,9 @@ package utils import ( + "crypto/hmac" + "crypto/sha256" + "encoding/hex" "fmt" "net/mail" "time" @@ -34,3 +37,9 @@ func GetCurrentTime(loc *time.Location) string { func GetCurrentDay(loc *time.Location) string { return fmt.Sprint(time.Now().In(loc).Weekday()) } + +func HashField(field string, token []byte) string { + h := hmac.New(sha256.New, token) + h.Write([]byte(field)) + return hex.EncodeToString(h.Sum(nil)) +}