diff --git a/pkg/services/user/identity.go b/pkg/services/user/identity.go index f71c29f6b97..a9692eed6f8 100644 --- a/pkg/services/user/identity.go +++ b/pkg/services/user/identity.go @@ -104,7 +104,18 @@ func (u *SignedInUser) IsIdentityType(expected ...claims.IdentityType) bool { // GetName implements identity.Requester. func (u *SignedInUser) GetName() string { - return u.Name + // kubernetesAggregator feature flag which allows Cloud Apps to become available + // in single tenant Grafana requires that GetName() returns something and not an empty string + // the logic below ensures that something is returned + if u.Name != "" { + return u.Name + } + + if u.Login != "" { + return u.Login + } + + return u.Email } // GetExtra implements Requester. diff --git a/pkg/services/user/identity_test.go b/pkg/services/user/identity_test.go new file mode 100644 index 00000000000..dd2915ffcb4 --- /dev/null +++ b/pkg/services/user/identity_test.go @@ -0,0 +1,36 @@ +package user + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestIdentityGetName(t *testing.T) { + tt := []struct { + name string + user *SignedInUser + expected string + }{ + { + name: "GetName on a user with empty name returns Login, if set", + user: &SignedInUser{ + Login: "userLogin", + Email: "user@grafana.com", + }, + expected: "userLogin", + }, + { + name: "GetName on a user with empty name returns Email, if no Login is set", + user: &SignedInUser{ + Email: "user@grafana.com", + }, + expected: "user@grafana.com", + }, + } + + for _, tc := range tt { + user := tc.user + require.Equal(t, user.GetName(), tc.expected, tc.name) + } +}