package service import ( "code.icod.de/auth/accountserver/util" "context" "errors" "github.com/matthewhartstonge/argon2" ) type CreateAccountInput struct { Name string `json:"name,omitempty"` Nickname string `json:"nickname,omitempty"` Email string `json:"email"` Secret string `json:"secret"` } // CreateAccount creates an account, returns nil if successful or error if not func (s *Service) CreateAccount(in *CreateAccountInput) error { // hash the secret with argon2 argon := argon2.DefaultConfig() encoded, e := argon.HashEncoded([]byte(in.Secret)) if e != nil { return errors.New("create account: could not encode secret: " + e.Error()) } // generate aes key k := util.GenerateRandomKey(32) create := s.client.Account.Create() create = create.SetSecret(encoded) create = create.SetAes(k) if in.Name != "" { create = create.SetName(in.Name) } if in.Nickname != "" { create = create.SetNickname(in.Nickname) } a, e := create.Save(context.Background()) if e != nil { return errors.New("create account: could not save account to database" + e.Error()) } cei := new(CreateEmailInput) cei.Account = a cei.Email = in.Email cei.Primary = true return s.CreateEmail(cei) } type ReplaceAccountInput struct{} // ReplaceAccount updates, replaces an account. func (s *Service) ReplaceAccount(input *ReplaceAccountInput) error { panic("implement me") } type DeleteAccountInput struct{} func (s *Service) DeleteAccount(input *DeleteAccountInput) error { panic("implement me") }