added member provider.

This commit is contained in:
Miroslav Šedivý
2021-03-14 01:08:50 +01:00
parent 594404824f
commit 7c79b48750
10 changed files with 141 additions and 78 deletions

44
internal/config/member.go Normal file
View File

@ -0,0 +1,44 @@
package config
import (
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
type Member struct {
Provider string
FilePath string
Password string
AdminPassword string
}
func (Member) Init(cmd *cobra.Command) error {
cmd.PersistentFlags().String("members_provider", "file", "choose members provider")
if err := viper.BindPFlag("members_provider", cmd.PersistentFlags().Lookup("members_provider")); err != nil {
return err
}
cmd.PersistentFlags().String("members_file_path", "/home/neko/members.json", "mebmer file provider path")
if err := viper.BindPFlag("members_file_path", cmd.PersistentFlags().Lookup("members_file_path")); err != nil {
return err
}
cmd.PersistentFlags().String("password", "neko", "password for connecting to stream")
if err := viper.BindPFlag("password", cmd.PersistentFlags().Lookup("password")); err != nil {
return err
}
cmd.PersistentFlags().String("password_admin", "admin", "admin password for connecting to stream")
if err := viper.BindPFlag("password_admin", cmd.PersistentFlags().Lookup("password_admin")); err != nil {
return err
}
return nil
}
func (s *Member) Set() {
s.Provider = viper.GetString("members_provider")
s.FilePath = viper.GetString("members_file_path")
s.Password = viper.GetString("password")
s.AdminPassword = viper.GetString("password_admin")
}

View File

@ -1,35 +0,0 @@
package dummy
import (
"demodesk/neko/internal/types"
)
func New() types.MembersDatabase {
return &MembersDatabaseCtx{}
}
type MembersDatabaseCtx struct{}
func (manager *MembersDatabaseCtx) Connect() error {
return nil
}
func (manager *MembersDatabaseCtx) Disconnect() error {
return nil
}
func (manager *MembersDatabaseCtx) Insert(id string, profile types.MemberProfile) error {
return nil
}
func (manager *MembersDatabaseCtx) Update(id string, profile types.MemberProfile) error {
return nil
}
func (manager *MembersDatabaseCtx) Delete(id string) error {
return nil
}
func (manager *MembersDatabaseCtx) Select() (map[string]types.MemberProfile, error) {
return map[string]types.MemberProfile{}, nil
}

View File

@ -1,22 +0,0 @@
package database
import (
"demodesk/neko/internal/config"
"demodesk/neko/internal/session/database/dummy"
"demodesk/neko/internal/session/database/file"
"demodesk/neko/internal/session/database/object"
"demodesk/neko/internal/types"
)
func New(config *config.Session) types.MembersDatabase {
switch config.DatabaseAdapter {
case "file":
return file.New(config.FilePath)
case "object":
return object.New()
case "dummy":
return dummy.New()
}
return dummy.New()
}

View File

@ -0,0 +1,35 @@
package dummy
import (
"demodesk/neko/internal/types"
)
func New() types.MemberManager {
return &MemberManagerCtx{}
}
type MemberManagerCtx struct{}
func (manager *MemberManagerCtx) Connect() error {
return nil
}
func (manager *MemberManagerCtx) Disconnect() error {
return nil
}
func (manager *MemberManagerCtx) Insert(id string, profile types.MemberProfile) error {
return nil
}
func (manager *MemberManagerCtx) Update(id string, profile types.MemberProfile) error {
return nil
}
func (manager *MemberManagerCtx) Delete(id string) error {
return nil
}
func (manager *MemberManagerCtx) Select() (map[string]types.MemberProfile, error) {
return map[string]types.MemberProfile{}, nil
}

View File

@ -10,27 +10,27 @@ import (
"demodesk/neko/internal/types"
)
func New(file string) types.MembersDatabase {
return &MembersDatabaseCtx{
func New(file string) types.MemberManager {
return &MemberManagerCtx{
file: file,
mu: sync.Mutex{},
}
}
type MembersDatabaseCtx struct {
type MemberManagerCtx struct {
file string
mu sync.Mutex
}
func (manager *MembersDatabaseCtx) Connect() error {
func (manager *MemberManagerCtx) Connect() error {
return nil
}
func (manager *MembersDatabaseCtx) Disconnect() error {
func (manager *MemberManagerCtx) Disconnect() error {
return nil
}
func (manager *MembersDatabaseCtx) Insert(id string, profile types.MemberProfile) error {
func (manager *MemberManagerCtx) Insert(id string, profile types.MemberProfile) error {
manager.mu.Lock()
defer manager.mu.Unlock()
@ -49,7 +49,7 @@ func (manager *MembersDatabaseCtx) Insert(id string, profile types.MemberProfile
return manager.serialize(profiles)
}
func (manager *MembersDatabaseCtx) Update(id string, profile types.MemberProfile) error {
func (manager *MemberManagerCtx) Update(id string, profile types.MemberProfile) error {
manager.mu.Lock()
defer manager.mu.Unlock()
@ -68,7 +68,7 @@ func (manager *MembersDatabaseCtx) Update(id string, profile types.MemberProfile
return manager.serialize(profiles)
}
func (manager *MembersDatabaseCtx) Delete(id string) error {
func (manager *MemberManagerCtx) Delete(id string) error {
manager.mu.Lock()
defer manager.mu.Unlock()
@ -87,7 +87,7 @@ func (manager *MembersDatabaseCtx) Delete(id string) error {
return manager.serialize(profiles)
}
func (manager *MembersDatabaseCtx) Select() (map[string]types.MemberProfile, error) {
func (manager *MemberManagerCtx) Select() (map[string]types.MemberProfile, error) {
manager.mu.Lock()
defer manager.mu.Unlock()
@ -95,7 +95,7 @@ func (manager *MembersDatabaseCtx) Select() (map[string]types.MemberProfile, err
return profiles, err
}
func (manager *MembersDatabaseCtx) deserialize() (map[string]types.MemberProfile, error) {
func (manager *MemberManagerCtx) deserialize() (map[string]types.MemberProfile, error) {
file, err := os.OpenFile(manager.file, os.O_RDONLY|os.O_CREATE, os.ModePerm)
if err != nil {
return nil, err
@ -118,7 +118,7 @@ func (manager *MembersDatabaseCtx) deserialize() (map[string]types.MemberProfile
return profiles, nil
}
func (manager *MembersDatabaseCtx) serialize(data map[string]types.MemberProfile) error {
func (manager *MemberManagerCtx) serialize(data map[string]types.MemberProfile) error {
raw, err := json.Marshal(data)
if err != nil {
return err

View File

@ -0,0 +1,22 @@
package member
import (
"demodesk/neko/internal/config"
"demodesk/neko/internal/member/dummy"
"demodesk/neko/internal/member/file"
"demodesk/neko/internal/member/object"
"demodesk/neko/internal/types"
)
func New(config *config.Member) types.MemberManager {
switch config.Provider {
case "file":
return file.New(config.FilePath)
case "object":
return object.New()
case "dummy":
return dummy.New()
}
return dummy.New()
}

View File

@ -7,27 +7,27 @@ import (
"demodesk/neko/internal/types"
)
func New() types.MembersDatabase {
return &MembersDatabaseCtx{
func New() types.MemberManager {
return &MemberManagerCtx{
profiles: make(map[string]types.MemberProfile),
mu: sync.Mutex{},
}
}
type MembersDatabaseCtx struct {
type MemberManagerCtx struct {
profiles map[string]types.MemberProfile
mu sync.Mutex
}
func (manager *MembersDatabaseCtx) Connect() error {
func (manager *MemberManagerCtx) Connect() error {
return nil
}
func (manager *MembersDatabaseCtx) Disconnect() error {
func (manager *MemberManagerCtx) Disconnect() error {
return nil
}
func (manager *MembersDatabaseCtx) Insert(id string, profile types.MemberProfile) error {
func (manager *MemberManagerCtx) Insert(id string, profile types.MemberProfile) error {
manager.mu.Lock()
defer manager.mu.Unlock()
@ -40,7 +40,7 @@ func (manager *MembersDatabaseCtx) Insert(id string, profile types.MemberProfile
return nil
}
func (manager *MembersDatabaseCtx) Update(id string, profile types.MemberProfile) error {
func (manager *MemberManagerCtx) Update(id string, profile types.MemberProfile) error {
manager.mu.Lock()
defer manager.mu.Unlock()
@ -53,7 +53,7 @@ func (manager *MembersDatabaseCtx) Update(id string, profile types.MemberProfile
return nil
}
func (manager *MembersDatabaseCtx) Delete(id string) error {
func (manager *MemberManagerCtx) Delete(id string) error {
manager.mu.Lock()
defer manager.mu.Unlock()
@ -66,7 +66,7 @@ func (manager *MembersDatabaseCtx) Delete(id string) error {
return nil
}
func (manager *MembersDatabaseCtx) Select() (map[string]types.MemberProfile, error) {
func (manager *MemberManagerCtx) Select() (map[string]types.MemberProfile, error) {
manager.mu.Lock()
defer manager.mu.Unlock()

View File

@ -1,6 +1,6 @@
package types
type MembersDatabase interface {
type MemberManager interface {
Connect() error
Disconnect() error