예제 #1
0
        public async Task GetProfileDataAsync(ProfileDataRequestContext context)
        {
            if (context.Caller == IdentityServerConstants.ProfileDataCallers.UserInfoEndpoint)
            {
                var accessToken = _protector.Unprotect(context.Subject.FindFirstValue("discord"));

                var user = await _discord.GetUserAsync(accessToken);

                var userGuilds = await _discord.GetUserGuildsAsync(accessToken);

                var mutualGuilds    = userGuilds.Where(userGuild => _bot.GetGuildAsync(ulong.Parse(userGuild.Id, CultureInfo.InvariantCulture)).Result != null);
                var mutualGuildsMap = new Dictionary <string, string>();
                foreach (var guild in mutualGuilds)
                {
                    mutualGuildsMap.Add(guild.Name, $"{guild.Id}:{guild.Permissions}:{guild.Owner}:{guild.Icon}");
                }

                var serializerOptions = new JsonSerializerOptions()
                {
                    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
                    IgnoreNullValues     = true
                };

                context.IssuedClaims.Add(new Claim("user", JsonSerializer.Serialize(user, serializerOptions), "json"));
                context.IssuedClaims.Add(new Claim("user_guilds", JsonSerializer.Serialize(mutualGuildsMap, serializerOptions), "json"));
            }

            else if (context.Caller == IdentityServerConstants.ProfileDataCallers.ClaimsProviderAccessToken)
            {
                var accessToken = context.Subject.FindFirstValue("discord");
                context.IssuedClaims.Add(new Claim("discord", _protector.Protect(accessToken)));
            }
        }
예제 #2
0
 public async Task <ActionResult <DiscordApiUser> > GetMeAsync()
 {
     return(await _discord.GetUserAsync(_protector.Unprotect(User.FindFirstValue("discord"))));
 }