mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
members: add multiuser profile.
This commit is contained in:
parent
d09e421a51
commit
8753e7b69a
@ -99,6 +99,8 @@ member:
|
|||||||
# multiuser:
|
# multiuser:
|
||||||
# admin_password: "admin"
|
# admin_password: "admin"
|
||||||
# user_password: "neko"
|
# user_password: "neko"
|
||||||
|
# admin_profile: # optional
|
||||||
|
# user_profile: # optional
|
||||||
# provider: "noauth"
|
# provider: "noauth"
|
||||||
|
|
||||||
session:
|
session:
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
"github.com/demodesk/neko/internal/member/file"
|
"github.com/demodesk/neko/internal/member/file"
|
||||||
"github.com/demodesk/neko/internal/member/multiuser"
|
"github.com/demodesk/neko/internal/member/multiuser"
|
||||||
"github.com/demodesk/neko/internal/member/object"
|
"github.com/demodesk/neko/internal/member/object"
|
||||||
|
"github.com/demodesk/neko/pkg/types"
|
||||||
"github.com/demodesk/neko/pkg/utils"
|
"github.com/demodesk/neko/pkg/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -49,6 +50,16 @@ func (Member) Init(cmd *cobra.Command) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("member.multiuser.user_profile", "{}", "member multiuser provider: user profile in JSON format")
|
||||||
|
if err := viper.BindPFlag("member.multiuser.user_profile", cmd.PersistentFlags().Lookup("member.multiuser.user_profile")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("member.multiuser.admin_profile", "{}", "member multiuser provider: admin profile in JSON format")
|
||||||
|
if err := viper.BindPFlag("member.multiuser.admin_profile", cmd.PersistentFlags().Lookup("member.multiuser.admin_profile")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,4 +79,44 @@ func (s *Member) Set() {
|
|||||||
// multiuser provider
|
// multiuser provider
|
||||||
s.Multiuser.UserPassword = viper.GetString("member.multiuser.user_password")
|
s.Multiuser.UserPassword = viper.GetString("member.multiuser.user_password")
|
||||||
s.Multiuser.AdminPassword = viper.GetString("member.multiuser.admin_password")
|
s.Multiuser.AdminPassword = viper.GetString("member.multiuser.admin_password")
|
||||||
|
|
||||||
|
// default user profile
|
||||||
|
s.Multiuser.UserProfile = types.MemberProfile{
|
||||||
|
IsAdmin: false,
|
||||||
|
CanLogin: true,
|
||||||
|
CanConnect: true,
|
||||||
|
CanWatch: true,
|
||||||
|
CanHost: true,
|
||||||
|
CanShareMedia: true,
|
||||||
|
CanAccessClipboard: true,
|
||||||
|
SendsInactiveCursor: true,
|
||||||
|
CanSeeInactiveCursors: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
// override user profile
|
||||||
|
if err := viper.UnmarshalKey("member.multiuser.user_profile", &s.Multiuser.UserProfile, viper.DecodeHook(
|
||||||
|
utils.JsonStringAutoDecode(s.Multiuser.UserProfile),
|
||||||
|
)); err != nil {
|
||||||
|
log.Warn().Err(err).Msgf("unable to parse member multiuser user profile")
|
||||||
|
}
|
||||||
|
|
||||||
|
// default admin profile
|
||||||
|
s.Multiuser.AdminProfile = types.MemberProfile{
|
||||||
|
IsAdmin: true,
|
||||||
|
CanLogin: true,
|
||||||
|
CanConnect: true,
|
||||||
|
CanWatch: true,
|
||||||
|
CanHost: true,
|
||||||
|
CanShareMedia: true,
|
||||||
|
CanAccessClipboard: true,
|
||||||
|
SendsInactiveCursor: true,
|
||||||
|
CanSeeInactiveCursors: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
// override admin profile
|
||||||
|
if err := viper.UnmarshalKey("member.multiuser.admin_profile", &s.Multiuser.AdminProfile, viper.DecodeHook(
|
||||||
|
utils.JsonStringAutoDecode(s.Multiuser.AdminProfile),
|
||||||
|
)); err != nil {
|
||||||
|
log.Warn().Err(err).Msgf("unable to parse member multiuser admin profile")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,34 +38,20 @@ func (provider *MemberProviderCtx) Authenticate(username string, password string
|
|||||||
|
|
||||||
// if logged in as administrator
|
// if logged in as administrator
|
||||||
if provider.config.AdminPassword == password {
|
if provider.config.AdminPassword == password {
|
||||||
return id, types.MemberProfile{
|
profile := provider.config.AdminProfile
|
||||||
Name: username,
|
if profile.Name == "" {
|
||||||
IsAdmin: true,
|
profile.Name = username
|
||||||
CanLogin: true,
|
}
|
||||||
CanConnect: true,
|
return id, profile, nil
|
||||||
CanWatch: true,
|
|
||||||
CanHost: true,
|
|
||||||
CanShareMedia: true,
|
|
||||||
CanAccessClipboard: true,
|
|
||||||
SendsInactiveCursor: true,
|
|
||||||
CanSeeInactiveCursors: true,
|
|
||||||
}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if logged in as user
|
// if logged in as user
|
||||||
if provider.config.UserPassword == password {
|
if provider.config.UserPassword == password {
|
||||||
return id, types.MemberProfile{
|
profile := provider.config.UserProfile
|
||||||
Name: username,
|
if profile.Name == "" {
|
||||||
IsAdmin: false,
|
profile.Name = username
|
||||||
CanLogin: true,
|
}
|
||||||
CanConnect: true,
|
return id, profile, nil
|
||||||
CanWatch: true,
|
|
||||||
CanHost: true,
|
|
||||||
CanShareMedia: true,
|
|
||||||
CanAccessClipboard: true,
|
|
||||||
SendsInactiveCursor: true,
|
|
||||||
CanSeeInactiveCursors: false,
|
|
||||||
}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return "", types.MemberProfile{}, types.ErrMemberInvalidPassword
|
return "", types.MemberProfile{}, types.ErrMemberInvalidPassword
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
package multiuser
|
package multiuser
|
||||||
|
|
||||||
|
import "github.com/demodesk/neko/pkg/types"
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
AdminPassword string
|
AdminPassword string
|
||||||
UserPassword string
|
UserPassword string
|
||||||
|
AdminProfile types.MemberProfile
|
||||||
|
UserProfile types.MemberProfile
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user