public void RegisterNewUser(RegisterClaimsModel user, string id)
        {
            var newUser = new User()
            {
                PartitionKey = "ana",
                RowKey = id,
                UserName = user.Name,
                DisplayName = user.Name,
                Email = user.Email,
                IdentityProvider = user.IdentityProvider,
            };

            _userRepository.AddOrUpdateEntity(newUser);
        }
        public ActionResult SignIn(FormCollection forms)
        {
            //Extract claims
            var principal = HttpContext.User;
            var claim = new IdentityClaim(principal.Identity as IClaimsIdentity);

            //Delete session cookie so the module cannot reset principal
            var sam = FederatedAuthentication.SessionAuthenticationModule;
            sam.DeleteSessionTokenCookie();

            if (claim.HasIdentity )
            {
                //Ger returnUrl
                string returnUrl = GetUrlFromContext(forms) ?? Url.Action("Index", "Home", null);

                var user = Membership.GetUser(DeterministicGuid.GetDeterministicGuid(claim.IdentityValue));
                
                //If the identity exists, sets the new user identity on the Membership
                if (user != null)
                {
                    //Find user if the user is allready registered
                    var identity = _userManager.GetUser(user.ProviderUserKey.ToString());

                    if (identity == null)
                    {
                        //Clears Membership
                        Membership.DeleteUser(user.UserName);

                        ModelState.AddModelError("", "Please there was a problem with your username. Try again");
                        return RedirectToAction("LogOn", new { ReturnUrl = returnUrl });
                    }

                    if (Membership.ValidateUser(identity.name, CLAIMS_PRIVATE_KEY))
                    {

                        FormsAuthentication.SetAuthCookie(identity.name, false);
                        IdentityClaim.ClearSession();

                        _userManager.SetCurrentUser(identity);

                        return Redirect(returnUrl);
                    }
                    else
                    {
                        ModelState.AddModelError("", "Please there was a problem with your username. Try again");
                        return RedirectToAction("LogOn", new { ReturnUrl = returnUrl });
                    }
                }
                else
                {
                    //Save identity values for processing in the association page
                    claim.SaveToSession();

                    var model = new RegisterClaimsModel()
                                    {
                                        Email = claim.Email,
                                        Name = claim.Name
                                    };

                    return RedirectToAction("RegisterClaims", new {ReturnUrl = returnUrl});

                }

            }

            return RedirectToAction("LogOn", "Account");
        }
        public ActionResult RegisterClaims(RegisterClaimsModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                // Attempt to register the user
                var claim = new IdentityClaim();

                MembershipCreateStatus createStatus;

                Membership.CreateUser(model.Name, CLAIMS_PRIVATE_KEY, model.Email, null, null, true, DeterministicGuid.GetDeterministicGuid(claim.IdentityValue), out createStatus);

                if (createStatus == MembershipCreateStatus.Success && Membership.ValidateUser(model.Name,CLAIMS_PRIVATE_KEY))
                {
                    
                    if (claim.HasIdentity)
                    {
                        var user = Membership.GetUser(model.Name);

                        model.IdentityProvider = claim.IdentityProvider;
                        _userManager.RegisterNewUser(model, user.ProviderUserKey.ToString());

                        IdentityClaim.ClearSession();

                        _userManager.SetCurrentUser(_userManager.GetUser(user.ProviderUserKey.ToString()));
                    }
                    FormsAuthentication.SetAuthCookie(model.Name, false /* createPersistentCookie */);

                    

                    if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                    {
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction("Index", "Home");
                    }

                }
                else
                {
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }
        public ActionResult RegisterClaims(string returnUrl)
        {
            var claim = new IdentityClaim();
            
            if (!claim.HasIdentity)
            {
                return RedirectToAction("LogOn", new {ReturnUrl = returnUrl});
            }

            var model = new RegisterClaimsModel()
                            {
                                Email = claim.Email,
                                Name = claim.Name,
                                IdentityProvider = IdentityClaim.ProviderNiceName(claim.IdentityProvider),
                            };

            return View(model);
        }