bugfix: Local users now work with a single usergroup (#486)
This commit is contained in:
parent
f0b1cefb72
commit
476838d59a
|
|
@ -147,8 +147,8 @@ type AuthLocalUsersConfig struct {
|
||||||
|
|
||||||
type LocalUser struct {
|
type LocalUser struct {
|
||||||
Username string
|
Username string
|
||||||
|
Usergroup string
|
||||||
Password string
|
Password string
|
||||||
Groups []string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type OAuth2Provider struct {
|
type OAuth2Provider struct {
|
||||||
|
|
|
||||||
|
|
@ -114,8 +114,7 @@ func (api *oliveTinAPI) LocalUserLogin(ctx ctx.Context, req *pb.LocalUserLoginRe
|
||||||
match := checkUserPassword(cfg, req.Username, req.Password)
|
match := checkUserPassword(cfg, req.Username, req.Password)
|
||||||
|
|
||||||
if match {
|
if match {
|
||||||
header := metadata.Pairs("set-user", req.Username)
|
grpc.SendHeader(ctx, metadata.Pairs("set-username", req.Username))
|
||||||
grpc.SendHeader(ctx, header)
|
|
||||||
|
|
||||||
log.WithFields(log.Fields{
|
log.WithFields(log.Fields{
|
||||||
"username": req.Username,
|
"username": req.Username,
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,12 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
"github.com/OliveTin/OliveTin/internal/config"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
localUserSessions = make(map[string]string) // sid -> username, used for local user sessions
|
localUserSessions = make(map[string]*config.LocalUser)
|
||||||
)
|
)
|
||||||
|
|
||||||
func parseLocalUserCookie(req *http.Request) (string, string, string) {
|
func parseLocalUserCookie(req *http.Request) (string, string, string) {
|
||||||
|
|
@ -21,7 +22,7 @@ func parseLocalUserCookie(req *http.Request) (string, string, string) {
|
||||||
|
|
||||||
cookieValue := cookie.Value
|
cookieValue := cookie.Value
|
||||||
|
|
||||||
username, ok := localUserSessions[cookieValue]
|
user, ok := localUserSessions[cookieValue]
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
log.WithFields(log.Fields{
|
log.WithFields(log.Fields{
|
||||||
|
|
@ -31,15 +32,31 @@ func parseLocalUserCookie(req *http.Request) (string, string, string) {
|
||||||
return "", "", ""
|
return "", "", ""
|
||||||
}
|
}
|
||||||
|
|
||||||
return username, "", cookie.Value
|
return user.Username, user.Usergroup, cookie.Value
|
||||||
|
}
|
||||||
|
|
||||||
|
func findUserByUsername(searchUsername string) *config.LocalUser {
|
||||||
|
for _, user := range cfg.AuthLocalUsers.Users {
|
||||||
|
if user.Username == searchUsername {
|
||||||
|
return user
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func forwardResponseHandlerLoginLocalUser(md metadata.MD, w http.ResponseWriter) error {
|
func forwardResponseHandlerLoginLocalUser(md metadata.MD, w http.ResponseWriter) error {
|
||||||
setUser := getMetadataKeyOrEmpty(md, "set-user")
|
setUsername := getMetadataKeyOrEmpty(md, "set-username")
|
||||||
|
|
||||||
|
if setUsername != "" {
|
||||||
|
user := findUserByUsername(setUsername)
|
||||||
|
|
||||||
|
if user == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if setUser != "" {
|
|
||||||
sid := uuid.NewString()
|
sid := uuid.NewString()
|
||||||
localUserSessions[sid] = setUser
|
localUserSessions[sid] = user
|
||||||
|
|
||||||
http.SetCookie(
|
http.SetCookie(
|
||||||
w,
|
w,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue