public static Task OnCreatingTicket(
            OAuthCreatingTicketContext context)
        {
            var user = ModixUser.FromClaimsPrincipal(context.Principal);

            var userIsInGuilds = context.HttpContext.RequestServices.GetRequiredService <IDiscordSocketClient>()
                                 .Guilds.Any(x => x.GetUser(user.UserId) is { });
Ejemplo n.º 2
0
        public async Task <IActionResult> AutocompleteUsers(string query)
        {
            await UserGuild.DownloadUsersAsync();

            var result = UserGuild.Users is null
                ? Enumerable.Empty <ModixUser>()
                : UserGuild.Users
                         .Where(d => d.Username.OrdinalContains(query))
                         .Take(10)
                         .Select(d => ModixUser.FromSocketGuildUser(d));

            return(Ok(result));
        }
Ejemplo n.º 3
0
        protected override async Task <AuthenticationTicket> CreateTicketAsync(ClaimsIdentity identity, AuthenticationProperties properties, OAuthTokenResponse tokens)
        {
            var baseResult = await base.CreateTicketAsync(identity, properties, tokens);

            var result = ModixUser.FromClaimsPrincipal(baseResult.Principal);

            var userWasfound = _client.Guilds.Any(d => d.GetUser(result.UserId) != null);

            if (!userWasfound)
            {
                throw new UnauthorizedAccessException("You must be a member of one of Modix's servers to log in.");
            }

            return(baseResult);
        }
Ejemplo n.º 4
0
        public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            if (!DiscordSocketClient.Guilds.Any())
            {
                return;
            }

            if (HttpContext.User == null)
            {
                await HttpContext.ChallengeAsync();

                return;
            }

            //Parse the ID to look up socket user
            ModixUser = ModixUser.FromClaimsPrincipal(HttpContext.User);

            var          guildCookie = Request.Cookies["SelectedGuild"];
            ISocketGuild guildToSearch;

            if (!string.IsNullOrWhiteSpace(guildCookie))
            {
                var guildId = ulong.Parse(guildCookie);
                guildToSearch = DiscordSocketClient.GetGuild(guildId);
            }
            else
            {
                guildToSearch = DiscordSocketClient.Guilds.First();
            }

            SocketUser = guildToSearch?.GetUser(ModixUser.UserId);

            if (SocketUser is null)
            {
                await HttpContext.ChallengeAsync();

                return;
            }

            await AssignClaims();

            //Do it again here to assign claims (this is very lazy of us)
            ModixUser = ModixUser.FromClaimsPrincipal(HttpContext.User);
            ModixUser.SelectedGuild = SocketUser.Guild.Id;
            ModixUser.AvatarHash    = SocketUser.GetAvatarUrl() ?? SocketUser.GetDefaultAvatarUrl();

            await next();
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> AutocompleteUsers(string query)
        {
            var result = UserGuild?.Users is null
                ? Enumerable.Empty <ModixUser>()
                : UserGuild.Users
                         .Where(d => d.Username.OrdinalContains(query) || d.Id.ToString() == query)
                         .Take(10)
                         .Select(ModixUser.FromIGuildUser);

            if (!result.Any() && ulong.TryParse(query, out var userId))
            {
                var user = await _userService.GetUserInformationAsync(UserGuild.Id, userId);

                if (user != null)
                {
                    result = result.Append(ModixUser.FromIGuildUser(user));
                }
            }
            return(Ok(result));
        }