public static void SingIn(IOwinContext owinContext, User user, ExternalLoginModel externalLogin)
 {
     owinContext.Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
     var claimsMapper = new RegisteredExternal(user, externalLogin);
     var oAuthIdentity = CreateIdentity(claimsMapper, OAuthDefaults.AuthenticationType);
     var cookieIdentity = CreateIdentity(claimsMapper, CookieAuthenticationDefaults.AuthenticationType);
     var properties = CreateProperties(user);
     owinContext.Authentication.SignIn(properties, oAuthIdentity, cookieIdentity);
 }
 public RegisteredExternal(User user, ExternalLoginModel extLogin)
 {
     this.Id = user.Id.ToString();
     this.Email = user.Email;
     this.FullName = user.FullName ?? string.Empty;
     this.AvatarUrl = UserProvider.GetAvatarUrl(user);
     this.Sid = extLogin.ProviderKey;
     this.Version = this.GetVersion(user.TimeStamp);
     this.IsVerified = user.IsVerified.ToString();
     this.Issuer = ClaimsIdentity.DefaultIssuer;
     this.OriginalIssuer = extLogin.Provider.ToString();
 }
 public NotRegisteredExternal(ExternalLoginModel extLogin)
 {
     this.Id = string.Empty;
     this.Email = extLogin.Email ?? string.Empty;
     this.FullName = extLogin.FullName ?? string.Empty;
     this.AvatarUrl = extLogin.AvatarUrl ?? string.Empty;
     this.Sid = extLogin.ProviderKey;
     this.Version = string.Empty;
     this.IsVerified = false.ToString();
     this.Issuer = extLogin.Provider.ToString();
     this.OriginalIssuer = this.Issuer;
 }
        public async Task<User> CreateExternalAsync(ExternalLoginModel externalInfo)
        {
            var userRegistration = new UserRegistration()
            {
                Email = externalInfo.Email,
                FullName = externalInfo.FullName,
                Avatar = await GetExternalAvatarAsync(externalInfo),
                ExternalLoginInfo = new ExternalLoginInfo
                {
                    ProviderType = externalInfo.Provider,
                    ProviderKey = externalInfo.ProviderKey
                }
            };

            return await this.UsersManager.CreateUserAsync(userRegistration);
        }
        public static ExternalLoginModel FromIdentity(ClaimsIdentity identity)
        {
            if (identity == null)
            {
                return null;
            }

            Claim idClaim = identity.FindFirst(ClaimTypes.NameIdentifier);

            if (!IsOk(idClaim))
                return null;

            ExternalLoginModel result = new ExternalLoginModel();
            result.IsRegistered = (idClaim.Issuer == ClaimsIdentity.DefaultIssuer);

            ExternalLoginProvider loginProvider;
            if (!Enum.TryParse<ExternalLoginProvider>(idClaim.OriginalIssuer, ignoreCase: true, result: out loginProvider))
                return null;
            result.Provider = loginProvider;

            if (identity.AuthenticationType == DefaultAuthenticationTypes.ExternalCookie)
            {
                result.ProviderKey = idClaim.Value;
                result.Email = identity.FindFirstValue(ClaimTypes.Email);
                result.FullName =
                    loginProvider == ExternalLoginProvider.Facebook ?
                    identity.FindFirstValue("urn:facebook:name") :
                    identity.FindFirstValue(ClaimTypes.Name);
            }
            else
            {
                result.ProviderKey = identity.FindFirstValue(ClaimTypes.Sid);
                result.Email = identity.FindFirstValue(ClaimTypes.Email);
                result.FullName = identity.FindFirstValue(ClaimTypes.GivenName);
            }

            result.AvatarUrl = identity.FindFirstValue(OwinHelper.ClaimTypeAvatarUrl);
            return result;
        }
 public static UserViewModel MapUserToViewModel(User user, ExternalLoginModel externalLogin)
 {
     return new UserViewModel
     {
         Email = user.Email,
         FullName = user.FullName,
         IsVerified = user.IsVerified,
         AvatarUrl = GetAvatarUrl(user),
         IsRegistered = true,
         LoginProvider = externalLogin.Provider.ToString()
     };
 }
        private static Task<byte[]> GetExternalAvatarAsync(ExternalLoginModel externalInfo)
        {
            if (string.IsNullOrEmpty(externalInfo.AvatarUrl))
                return null;

            var client = HttpHelper.CreateHttpClient();
            return client.GetByteArrayAsync(externalInfo.AvatarUrl);
        }
 public static void SingIn(IOwinContext owinContext, ExternalLoginModel externalLogin)
 {
     var claimsMapper = new NotRegisteredExternal(externalLogin);
     var identity = CreateIdentity(claimsMapper, OAuthDefaults.AuthenticationType);
     owinContext.Authentication.SignIn(identity);
 }
 public static AccessToken CreateToken(IOwinContext owinContext, User user, ExternalLoginModel externalLogin)
 {
     var claimsMapper = new RegisteredExternal(user, externalLogin);
     return CreateToken(owinContext, user, claimsMapper);
 }