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); }
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); }
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); }
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); }