bugfix: Safer handling of username/usergroup metadata

This commit is contained in:
jamesread 2022-10-19 09:48:36 +01:00
parent cc8cad10db
commit cfde9e5148
1 changed files with 21 additions and 5 deletions

View File

@ -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
}