Quellcode durchsuchen

bugfix: Local users now work with a single usergroup (#486)

James Read vor 1 Jahr
Ursprung
Commit
476838d59a

+ 1 - 1
internal/config/config.go

@@ -147,8 +147,8 @@ type AuthLocalUsersConfig struct {
 
 type LocalUser struct {
 	Username string
+	Usergroup string
 	Password string
-	Groups   []string
 }
 
 type OAuth2Provider struct {

+ 1 - 2
internal/grpcapi/grpcApi.go

@@ -114,8 +114,7 @@ func (api *oliveTinAPI) LocalUserLogin(ctx ctx.Context, req *pb.LocalUserLoginRe
 	match := checkUserPassword(cfg, req.Username, req.Password)
 
 	if match {
-		header := metadata.Pairs("set-user", req.Username)
-		grpc.SendHeader(ctx, header)
+		grpc.SendHeader(ctx, metadata.Pairs("set-username", req.Username))
 
 		log.WithFields(log.Fields{
 			"username": req.Username,

+ 23 - 6
internal/httpservers/restapi_auth_local.go

@@ -5,11 +5,12 @@ import (
 	"net/http"
 
 	"github.com/google/uuid"
+	"github.com/OliveTin/OliveTin/internal/config"
 	log "github.com/sirupsen/logrus"
 )
 
 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) {
@@ -21,7 +22,7 @@ func parseLocalUserCookie(req *http.Request) (string, string, string) {
 
 	cookieValue := cookie.Value
 
-	username, ok := localUserSessions[cookieValue]
+	user, ok := localUserSessions[cookieValue]
 
 	if !ok {
 		log.WithFields(log.Fields{
@@ -31,15 +32,31 @@ func parseLocalUserCookie(req *http.Request) (string, string, string) {
 		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 {
-	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()
-		localUserSessions[sid] = setUser
+		localUserSessions[sid] = user
 
 		http.SetCookie(
 			w,