public GrantValidationResult Process(JObject userInfo, string provider)
        {
            var userEmail = userInfo.Value <string>("email");

            if (provider.ToLower() == "linkedin")
            {
                userEmail = userInfo.Value <string>("emailAddress");
            }

            var userExternalId = userInfo.Value <string>("id");

            if (userEmail == null)
            {
                var registeredUser = _externalUserRepository.Get().FirstOrDefault(x => x.ExternalId == userExternalId);
                if (registeredUser == null)
                {
                    var customResponse = new Dictionary <string, object>();
                    customResponse.Add("userInfo", userInfo);


                    return(new GrantValidationResult(TokenRequestErrors.InvalidRequest, "could not retrieve user's email from the given provider, include email paramater and send request again.", customResponse));
                }
                else
                {
                    var existingUser = _userManager.FindByIdAsync(registeredUser.UserId).Result;
                    var userClaims   = _userManager.GetClaimsAsync(existingUser).Result;
                    return(new GrantValidationResult(existingUser.Id, provider, userClaims, provider, null));
                }
            }
            else
            {
                var new_user = new ApplicationUser {
                    Email = userEmail, UserName = userEmail
                };
                var result = _userManager.CreateAsync(new_user).Result;
                if (result.Succeeded)
                {
                    _externalUserRepository.Add(new ExternalUser {
                        ExternalId = userExternalId, Provider = provider, UserId = new_user.Id
                    });
                    var userClaims = _userManager.GetClaimsAsync(new_user).Result;
                    return(new GrantValidationResult(new_user.Id, provider, userClaims, provider, null));
                }
                return(new GrantValidationResult(TokenRequestErrors.InvalidRequest, "user could not be created, please try again"));
            }
        }
        public async Task <ExternalUser> GetExternalUserByID(int id)
        {
            var prod = await _externalUserRepository.Get(id);

            return(ExternalUserMapper.Map(prod));
        }