Ejemplo n.º 1
0
        private UserProfileCreateConnection CreateBattlenetConnectionDto(string userId, ClaimsPrincipal subject)
        {
            if (!subject.HasClaim(claim => claim.Type.Equals(ExternalClaimTypes.BattleNet.Name)) ||
                !subject.HasClaim(claim => claim.Type.Equals(JwtClaimTypes.Subject)))
            {
                return(null);
            }

            var dto = new UserProfileCreateConnection();

            dto.Name       = subject.FindFirstValue(ExternalClaimTypes.BattleNet.Name);
            dto.Provider   = ExternalProvider.BattleNet;
            dto.ExternalId = subject.FindFirstValue(JwtClaimTypes.Subject);
            dto.UserId     = userId;

            return(dto);
        }
Ejemplo n.º 2
0
        private UserProfileCreateConnection CreateTwitchConnectionDto(string userId, ClaimsPrincipal subject)
        {
            if (!subject.HasClaim(claim => claim.Type.Equals(ExternalClaimTypes.Twitch.Name)) ||
                !subject.HasClaim(claim => claim.Type.Equals(ClaimTypes.NameIdentifier)))
            {
                return(null);
            }

            var dto = new UserProfileCreateConnection();

            dto.Name       = subject.FindFirstValue(ExternalClaimTypes.Twitch.Name);
            dto.Provider   = ExternalProvider.Twitch;
            dto.ExternalId = subject.FindFirstValue(ClaimTypes.NameIdentifier);
            dto.UserId     = userId;

            return(dto);
        }
Ejemplo n.º 3
0
        private UserProfileCreateConnection CreateDiscordConnectionDto(string userId, ClaimsPrincipal subject)
        {
            if (!subject.HasClaim(claim => claim.Type.Equals(ExternalClaimTypes.Discord.Name)) ||
                !subject.HasClaim(claim => claim.Type.Equals(ExternalClaimTypes.Discord.Discriminator)) ||
                !subject.HasClaim(claim => claim.Type.Equals(JwtClaimTypes.Subject)))
            {
                return(null);
            }

            var dto = new UserProfileCreateConnection();

            dto.Name       = subject.FindFirstValue(ExternalClaimTypes.Discord.Name) + '#' + subject.FindFirstValue(ExternalClaimTypes.Discord.Discriminator);
            dto.Provider   = ExternalProvider.Discord;
            dto.ExternalId = subject.FindFirstValue(JwtClaimTypes.Subject);
            dto.UserId     = userId;

            return(dto);
        }
Ejemplo n.º 4
0
        public async Task <ServiceResult> AddExternalLink(string userId, string scheme, ClaimsPrincipal externalPrincipal)
        {
            var result = new ServiceResult();

            AuthenticationProperties signInProps = new AuthenticationProperties();
            PassportUser             user        = await userManager.FindByIdAsync(userId);

            if (user == null)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.UserNotFound),
                    Message = Errors.UserNotFound,
                });
                result.Code = 404;

                return(result);
            }

            UserProfileCreateConnection dto = null;

            switch (scheme)
            {
            case "battle.net":
                dto = CreateBattlenetConnectionDto(userId, externalPrincipal);
                break;

            case "discord":
                dto = CreateDiscordConnectionDto(userId, externalPrincipal);
                break;

            case "twitch":
                dto = CreateTwitchConnectionDto(userId, externalPrincipal);
                break;
            }

            if (dto == null)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.ExternalIdNotFound),
                    Message = Errors.ExternalIdNotFound,
                });
                result.Code = 400;

                return(result);
            }

            try
            {
                var client = clientFactory.GetProfileConnectionClient();
                await client.CreateConnectionAsync(dto);
            }
            catch (Exception)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.ExternalConnectionFailed),
                    Message = Errors.ExternalConnectionFailed,
                });
                result.Code = 500;
            }

            return(result);
        }