Просмотр исходного кода

bugfix: Safer handling of username/usergroup metadata

jamesread 3 лет назад
Родитель
Сommit
cfde9e5148
1 измененных файлов с 21 добавлено и 5 удалено
  1. 21 5
      internal/acl/acl.go

+ 21 - 5
internal/acl/acl.go

@@ -61,18 +61,34 @@ func IsAllowedView(cfg *config.Config, user *AuthenticatedUser, action *config.A
 	return cfg.DefaultPermissions.View
 }
 
+func getMetdataKeyOrEmpty(md metadata.MD, key string) string {
+	mdValues := md.Get(key)
+
+	if len(mdValues) > 0 {
+		return mdValues[0]
+	}
+
+	return ""
+}
+
 // UserFromContext tries to find a user from a grpc context
 func UserFromContext(ctx context.Context, cfg *config.Config) *AuthenticatedUser {
-	md, _ := metadata.FromIncomingContext(ctx)
+	md, ok := metadata.FromIncomingContext(ctx)
+
+	ret := &AuthenticatedUser{}
+
+	if ok {
+		ret.Username = getMetdataKeyOrEmpty(md, "username")
+		ret.Usergroup = getMetdataKeyOrEmpty(md, "password")
 
-	ret := &AuthenticatedUser{
-		Username:  md.Get("username")[0],
-		Usergroup: md.Get("usergroup")[0],
 	}
 
 	buildUserAcls(cfg, ret)
 
-	log.Infof("UserFromContext: %+v", ret)
+	log.WithFields(log.Fields{
+		"username": ret.Username,
+		"usergroup": ret.Usergroup,
+	}).Infof("UserFromContext")
 
 	return ret
 }