func marshalPrincipal(princ auth.Principal) ([]byte, error) { name := externalUserName(princ.Name()) info := db.PrincipalConfig{ Name: &name, ExplicitChannels: princ.ExplicitChannels().AsSet(), } if user, ok := princ.(auth.User); ok { info.Channels = user.InheritedChannels().AsSet() info.Email = user.Email() info.Disabled = user.Disabled() info.ExplicitRoleNames = user.ExplicitRoles().AllChannels() info.RoleNames = user.RoleNames().AllChannels() } else { info.Channels = princ.Channels().AsSet() } return json.Marshal(info) }