common errors as variable.

This commit is contained in:
Miroslav Šedivý
2021-08-29 17:09:13 +02:00
parent 530cc04805
commit 343b0c562a
17 changed files with 108 additions and 77 deletions

View File

@ -1,7 +1,7 @@
package dummy
import (
"fmt"
"errors"
"demodesk/neko/internal/types"
)
@ -37,7 +37,7 @@ func (provider *MemberProviderCtx) Authenticate(username string, password string
}
func (provider *MemberProviderCtx) Insert(username string, password string, profile types.MemberProfile) (string, error) {
return "", fmt.Errorf("not implemented")
return "", errors.New("not implemented")
}
func (provider *MemberProviderCtx) Select(id string) (types.MemberProfile, error) {
@ -54,7 +54,7 @@ func (provider *MemberProviderCtx) UpdateProfile(id string, profile types.Member
}
func (provider *MemberProviderCtx) UpdatePassword(id string, password string) error {
return fmt.Errorf("not implemented")
return errors.New("not implemented")
}
func (provider *MemberProviderCtx) Delete(id string) error {

View File

@ -2,7 +2,6 @@ package file
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
@ -38,7 +37,7 @@ func (provider *MemberProviderCtx) Authenticate(username string, password string
// TODO: Use hash function.
if entry.Password != password {
return "", types.MemberProfile{}, fmt.Errorf("invalid password")
return "", types.MemberProfile{}, types.ErrMemberInvalidPassword
}
return id, entry.Profile, nil
@ -55,7 +54,7 @@ func (provider *MemberProviderCtx) Insert(username string, password string, prof
_, ok := entries[id]
if ok {
return "", fmt.Errorf("member ID already exists")
return "", types.ErrMemberAlreadyExists
}
entries[id] = MemberEntry{
@ -75,7 +74,7 @@ func (provider *MemberProviderCtx) UpdateProfile(id string, profile types.Member
entry, ok := entries[id]
if !ok {
return fmt.Errorf("member ID does not exist")
return types.ErrMemberDoesNotExist
}
entry.Profile = profile
@ -92,7 +91,7 @@ func (provider *MemberProviderCtx) UpdatePassword(id string, password string) er
entry, ok := entries[id]
if !ok {
return fmt.Errorf("member ID does not exist")
return types.ErrMemberDoesNotExist
}
// TODO: Use hash function.
@ -139,7 +138,7 @@ func (provider *MemberProviderCtx) Delete(id string) error {
_, ok := entries[id]
if !ok {
return fmt.Errorf("member ID does not exist")
return types.ErrMemberDoesNotExist
}
delete(entries, id)
@ -178,7 +177,7 @@ func (provider *MemberProviderCtx) getEntry(id string) (MemberEntry, error) {
entry, ok := entries[id]
if !ok {
return MemberEntry{}, fmt.Errorf("member ID does not exist")
return MemberEntry{}, types.ErrMemberDoesNotExist
}
return entry, nil

View File

@ -1,7 +1,7 @@
package member
import (
"fmt"
"errors"
"sync"
"github.com/rs/zerolog"
@ -41,7 +41,7 @@ type MemberManagerCtx struct {
config *config.Member
providerMu sync.Mutex
provider types.MemberProvider
sessionMu sync.Mutex
loginMu sync.Mutex
}
func (manager *MemberManagerCtx) Connect() error {
@ -91,13 +91,10 @@ func (manager *MemberManagerCtx) UpdateProfile(id string, profile types.MemberPr
defer manager.providerMu.Unlock()
// update corresponding session, if exists
manager.sessionMu.Lock()
if _, ok := manager.sessions.Get(id); ok {
if err := manager.sessions.Update(id, profile); err != nil {
manager.logger.Err(err).Msg("error while updating session")
}
err := manager.sessions.Update(id, profile)
if err != nil && !errors.Is(err, types.ErrSessionNotFound) {
manager.logger.Err(err).Msg("error while updating session")
}
manager.sessionMu.Unlock()
return manager.provider.UpdateProfile(id, profile)
}
@ -114,13 +111,10 @@ func (manager *MemberManagerCtx) Delete(id string) error {
defer manager.providerMu.Unlock()
// destroy corresponding session, if exists
manager.sessionMu.Lock()
if _, ok := manager.sessions.Get(id); ok {
if err := manager.sessions.Delete(id); err != nil {
manager.logger.Err(err).Msg("error while deleting session")
}
err := manager.sessions.Delete(id)
if err != nil && !errors.Is(err, types.ErrSessionNotFound) {
manager.logger.Err(err).Msg("error while deleting session")
}
manager.sessionMu.Unlock()
return manager.provider.Delete(id)
}
@ -130,8 +124,8 @@ func (manager *MemberManagerCtx) Delete(id string) error {
//
func (manager *MemberManagerCtx) Login(username string, password string) (types.Session, string, error) {
manager.sessionMu.Lock()
defer manager.sessionMu.Unlock()
manager.loginMu.Lock()
defer manager.loginMu.Unlock()
id, profile, err := manager.provider.Authenticate(username, password)
if err != nil {
@ -141,7 +135,7 @@ func (manager *MemberManagerCtx) Login(username string, password string) (types.
session, ok := manager.sessions.Get(id)
if ok {
if session.State().IsConnected {
return nil, "", fmt.Errorf("session is already connected")
return nil, "", types.ErrSessionAlreadyConnected
}
// TODO: Replace session.
@ -154,12 +148,8 @@ func (manager *MemberManagerCtx) Login(username string, password string) (types.
}
func (manager *MemberManagerCtx) Logout(id string) error {
manager.sessionMu.Lock()
defer manager.sessionMu.Unlock()
if _, ok := manager.sessions.Get(id); !ok {
return fmt.Errorf("session not found")
}
manager.loginMu.Lock()
defer manager.loginMu.Unlock()
return manager.sessions.Delete(id)
}

View File

@ -1,8 +1,6 @@
package object
import (
"fmt"
"demodesk/neko/internal/types"
)
@ -60,12 +58,12 @@ func (provider *MemberProviderCtx) Authenticate(username string, password string
entry, ok := provider.entries[id]
if !ok {
return "", types.MemberProfile{}, fmt.Errorf("member ID does not exist")
return "", types.MemberProfile{}, types.ErrMemberDoesNotExist
}
// TODO: Use hash function.
if entry.Password != password {
return "", types.MemberProfile{}, fmt.Errorf("invalid password")
return "", types.MemberProfile{}, types.ErrMemberInvalidPassword
}
return id, entry.Profile, nil
@ -77,7 +75,7 @@ func (provider *MemberProviderCtx) Insert(username string, password string, prof
_, ok := provider.entries[id]
if ok {
return "", fmt.Errorf("member ID already exists")
return "", types.ErrMemberAlreadyExists
}
provider.entries[id] = &MemberEntry{
@ -92,7 +90,7 @@ func (provider *MemberProviderCtx) Insert(username string, password string, prof
func (provider *MemberProviderCtx) UpdateProfile(id string, profile types.MemberProfile) error {
entry, ok := provider.entries[id]
if !ok {
return fmt.Errorf("member ID does not exist")
return types.ErrMemberDoesNotExist
}
entry.Profile = profile
@ -103,7 +101,7 @@ func (provider *MemberProviderCtx) UpdateProfile(id string, profile types.Member
func (provider *MemberProviderCtx) UpdatePassword(id string, password string) error {
entry, ok := provider.entries[id]
if !ok {
return fmt.Errorf("member ID does not exist")
return types.ErrMemberDoesNotExist
}
// TODO: Use hash function.
@ -115,7 +113,7 @@ func (provider *MemberProviderCtx) UpdatePassword(id string, password string) er
func (provider *MemberProviderCtx) Select(id string) (types.MemberProfile, error) {
entry, ok := provider.entries[id]
if !ok {
return types.MemberProfile{}, fmt.Errorf("member ID does not exist")
return types.MemberProfile{}, types.ErrMemberDoesNotExist
}
return entry.Profile, nil
@ -139,7 +137,7 @@ func (provider *MemberProviderCtx) SelectAll(limit int, offset int) (map[string]
func (provider *MemberProviderCtx) Delete(id string) error {
_, ok := provider.entries[id]
if !ok {
return fmt.Errorf("member ID does not exist")
return types.ErrMemberDoesNotExist
}
delete(provider.entries, id)