Esempio n. 1
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                // Insertar un nuevo usuario en la base de datos
                using (UsersContext db = new UsersContext())
                {
                    UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());
                    // Comprobar si el usuario ya existe
                    if (user == null)
                    {
                        // Insertar el nombre en la tabla de perfiles
                        db.UserProfiles.Add(new UserProfile {
                            UserName = model.UserName
                        });
                        db.SaveChanges();

                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                        return(RedirectToLocal(returnUrl));
                    }
                    else
                    {
                        ModelState.AddModelError("UserName", "El nombre de usuario ya existe. Escriba un nombre de usuario diferente.");
                    }
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
Esempio n. 2
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                // Insert a new user into the database
                using (UsersContext db = new UsersContext())
                {
                    UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());
                    // Check if user already exists
                    if (user == null)
                    {
                        // Insert name into the profile table
                        db.UserProfiles.Add(new UserProfile {
                            UserName = model.UserName
                        });
                        db.SaveChanges();

                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                        return(RedirectToLocal(returnUrl));
                    }
                    else
                    {
                        ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name.");
                    }
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
Esempio n. 3
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                // 將新使用者插入資料庫
                using (UsersContext db = new UsersContext())
                {
                    UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());
                    // 檢查使用者是否存在
                    if (user == null)
                    {
                        // 將名稱插入設定檔表格
                        db.UserProfiles.Add(new UserProfile {
                            UserName = model.UserName
                        });
                        db.SaveChanges();

                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                        return(RedirectToLocal(returnUrl));
                    }
                    else
                    {
                        ModelState.AddModelError("UserName", "使用者名稱已經存在。請輸入不同的使用者名稱。");
                    }
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
Esempio n. 4
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                // Добавление нового пользователя в базу данных
                using (UsersContext db = new UsersContext())
                {
                    UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());
                    // Проверка наличия пользователя в базе данных
                    if (user == null)
                    {
                        // Добавление имени в таблицу профиля
                        db.UserProfiles.Add(new UserProfile {
                            UserName = model.UserName
                        });
                        db.SaveChanges();

                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                        return(RedirectToLocal(returnUrl));
                    }
                    else
                    {
                        ModelState.AddModelError("UserName", "Имя пользователя уже существует. Введите другое имя пользователя.");
                    }
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                // Insérer un nouvel utilisateur dans la base de données
                using (UsersContext db = new UsersContext())
                {
                    UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());
                    // Vérifier si l'utilisateur n'existe pas déjà
                    if (user == null)
                    {
                        // Insérer le nom dans la table des profils
                        db.UserProfiles.Add(new UserProfile {
                            UserName = model.UserName
                        });
                        db.SaveChanges();

                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                        return(RedirectToLocal(returnUrl));
                    }
                    else
                    {
                        ModelState.AddModelError("UserName", "Le nom d'utilisateur existe déjà. Entrez un nom d'utilisateur différent.");
                    }
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
        public ActionResult ExternalLoginConfirmationCustom(RegisterExternalLoginModel model)
        {
            string provider       = null;
            string providerUserId = null;

            provider       = model.ExternalLoginData.Split('|')[0];
            providerUserId = model.ExternalLoginData.Split('|')[1];

            if (ModelState.IsValid)
            {
                // Insertar un nuevo usuario en la base de datos
                using (UsersContext db = new UsersContext())
                {
                    UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());
                    // Comprobar si el usuario ya existe
                    if (user == null)
                    {
                        // Insertar el nombre en la tabla de perfiles
                        db.UserProfiles.Add(new UserProfile {
                            UserName = model.UserName
                        });
                        db.SaveChanges();

                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        Roles.AddUserToRole(model.UserName, "Usuario");
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                        return(RedirectToAction("index", "home"));
                    }
                    else
                    {
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);
                        return(RedirectToAction("index", "home"));
                    }
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = Url.Action("index", "home");
            return(View(model));
        }
Esempio n. 7
0
        public ActionResult ExternalLoginCallback(string returnUrl)
        {
            FacebookClient2017.RewriteRequest();
            var regClients = OAuthWebSecurity.RegisteredClientData;
            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

            if (!result.IsSuccessful)
            {
                return(RedirectToAction("ExternalLoginFailure"));
            }

            // Check database for entry for provider, userid
            var oAuthResult = MembershipService.ValidateOAuthUser(result, this.Session);

            if (oAuthResult.AccountLinked)
            {
                //Log the user in
                this.ValidateUser(oAuthResult.UserEmail, oAuthResult.HashedPassword);

                return(RedirectToLocal(returnUrl));
            }

            //If account not already linked, then link them to the currently authenticated and logged in user
            if (User.Identity.IsAuthenticated)
            {
                // If the current user is logged in add the new account
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
                return(RedirectToLocal(returnUrl));
            }
            else
            {
                //User needs to register for a rooster account, direct them to registration process.
                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
                ViewBag.ReturnUrl           = returnUrl;
                ViewBag.StatesList          = WebUI.Common.Common.GetStates();
                return(View("ExternalLoginConfirmation", new RegisterModelDTO {
                    ExternalLoginData = loginData
                }));
            }
        }
Esempio n. 8
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider;
            string providerUserId;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                // Добавление нового пользователя в базу данных
                using (var db = new UsersContext())
                {
                    UserProfile user =
                        db.UserProfiles.FirstOrDefault(
                            u => string.Equals(u.UserName, model.UserName, StringComparison.CurrentCultureIgnoreCase));
                    // Проверка наличия пользователя в базе данных
                    if (user == null)
                    {
                        // Добавление имени в таблицу профиля
                        db.UserProfiles.Add(new UserProfile {
                            UserName = model.UserName
                        });
                        db.SaveChanges();

                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                        return(RedirectToLocal(returnUrl));
                    }

                    ModelState.AddModelError("UserName", Resources.UserNameNotExists);
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
Esempio n. 9
0
        public OAuthResult GetOAuthResult(string encryptedLoginData)
        {
            string provider       = null;
            string providerUserId = null;
            var    oAuth          = new OAuthResult();

            if (!TryDecryptProviderData(encryptedLoginData, out provider, out providerUserId))
            {
                return(oAuth);
            }


            oAuth.IsValid             = true;
            oAuth.Provider            = provider;
            oAuth.ProviderUserId      = providerUserId;
            oAuth.UserName            = OAuthWebSecurity.GetUserName(provider, providerUserId);
            oAuth.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            oAuth.EncryptedLoginData  = encryptedLoginData;

            return(oAuth);
        }
        public List <AccountMembershipViewModel> GetAllRelatedAccountMembershipViewModels()
        {
            var result             = new List <AccountMembershipViewModel>();
            var listOAthMembership = this.Session.QueryOver <OAuthMembership>().Where(x => x.UserProfile.Id == User.Current.UserID).List();

            if (listOAthMembership != null && listOAthMembership.Any())
            {
                listOAthMembership.Each(x =>
                {
                    AuthenticationClientData clientData = OAuthWebSecurity.GetOAuthClientData(x.Provider);
                    result.Add(new AccountMembershipViewModel()
                    {
                        ID                  = x.Id,
                        OAuthProvider       = x.Provider,
                        OAuthProviderUserID = x.ProviderUserID,
                        ProviderDisplayName = clientData.DisplayName,
                    });
                });
            }
            return(result);
        }
Esempio n. 11
0
        public virtual ActionResult RemoveExternalLogins()
        {
            ICollection <OAuthAccount> accounts = OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name);
            var externalLogins = new List <ExternalLogin>();

            foreach (OAuthAccount account in accounts)
            {
                AuthenticationClientData clientData = OAuthWebSecurity.GetOAuthClientData(account.Provider);

                externalLogins.Add(new ExternalLogin
                {
                    Provider            = account.Provider,
                    ProviderDisplayName = clientData.DisplayName,
                    ProviderUserId      = account.ProviderUserId,
                });
            }

            ViewBag.ShowRemoveButton = externalLogins.Count > 1 ||
                                       OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
            return(PartialView("_RemoveExternalLoginsPartial", externalLogins));
        }
Esempio n. 12
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                // 将新用户插入到数据库

                UserProfile user = userProfileRepository.Entities.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());
                // 检查用户是否已存在
                if (user == null)
                {
                    // 将名称插入到配置文件表
                    userProfileRepository.Entities.Add(new UserProfile {
                        UserName = model.UserName
                    });
                    unitOfWork.Commit();

                    OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                    OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                    return(RedirectToLocal(returnUrl));
                }
                else
                {
                    ModelState.AddModelError("UserName", "用户名已存在。请输入其他用户名。");
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
Esempio n. 13
0
        public ExternalAccounts ExternalAccounts()
        {
            ICollection <OAuthAccount> accounts       = OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name);
            List <ExternalLogin>       externalLogins = new List <ExternalLogin>();

            foreach (OAuthAccount account in accounts)
            {
                AuthenticationClientData clientData = OAuthWebSecurity.GetOAuthClientData(account.Provider);

                externalLogins.Add(new ExternalLogin
                {
                    Provider            = account.Provider,
                    ProviderDisplayName = clientData.DisplayName,
                    ProviderUserId      = account.ProviderUserId,
                });
            }
            ExternalAccounts externalLoginList = new ExternalAccounts();

            externalLoginList.ExternalLogins   = externalLogins;
            externalLoginList.ShowRemoveButton = externalLogins.Count > 1 || OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
            return(externalLoginList);
        }
Esempio n. 14
0
        //[ValidateAntiForgeryToken]
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider;
            string providerUserId;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                // Insert a new user into the database
                using (var db = new EStudyBaseContext())
                {
                    UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());
                    // Check if user already exists
                    if (user == null)
                    {
                        // Insert name into the profile table
                        db.UserProfiles.Add(new UserProfile {
                            UserName = model.UserName, Email = "*****@*****.**"
                        });
                        db.SaveChanges();

                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                        return(RedirectToLocal(returnUrl));
                    }

                    ModelState.AddModelError("UserName", "Bu kullanıcı adı ile daha önceden kayıt oluşturulmuş. Lütfen farklı bir kullanıcı adı giriniz.");
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
Esempio n. 15
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                var user = this._userRepository.GetUserByUserName(model.UserName);

                // if does not have any user with this username
                if (user == null)
                {
                    _userRepository.CreateUser(
                        model.UserName,
                        model.UserName,
                        "".GetDefaultPassword(),
                        "".GetDefaultEmail(),
                        (int)Role.RegisterUser,
                        "".GetDefaultCreatedByUser());

                    OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                    OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                    return(RedirectToLocal(returnUrl));
                }

                this.ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name.");
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
Esempio n. 16
0
        public async Task <ActionResult> OAuthLoginCallback(string returnUrl, CancellationToken cancellationToken)
        {
            OAuth.OAuthGoogleClient.RewriteRequest();

            var result = OAuthWebSecurity.VerifyAuthentication(Url.Action("oauthlogincallback", new RouteValueDictionary {
                { "returnurl", returnUrl }
            }));

            if (!result.IsSuccessful)
            {
                return(RedirectToAction("OAuthLoginFailure"));
            }

            if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                string userName = OAuthWebSecurity.GetUserName(result.Provider, result.ProviderUserId);
                await UpdateUserLoginDataAsync(userName, cancellationToken);

                return(RedirectToLocal(returnUrl));
            }

            if (User.Identity.IsAuthenticated)
            {
                // If the current user is logged in add the new account.
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
                return(RedirectToLocal(returnUrl));
            }
            else
            {
                // User is new, ask for their desired membership name.
                string extraData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
                ViewBag.ReturnUrl           = returnUrl;
                var model = CreateSignupInfo(result.ExtraData);
                model.ExtraData = extraData;
                return(View("OAuthLoginConfirmation", model));
            }
        }
        public ActionResult ExternalLoginCallback(string returnUrl)
        {
            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new
            {
                ReturnUrl
                    =
                        returnUrl
            }));

            if (!result.IsSuccessful)
            {
                return(RedirectToAction("ExternalLoginFailure"));
            }

            if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                return(RedirectToLocal(returnUrl));
            }

            if (User.Identity.IsAuthenticated)
            {
                // If the current user is logged in add the new account
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
                return(RedirectToLocal(returnUrl));
            }
            else
            {
                // User is new, ask for their desired membership name
                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
                ViewBag.ReturnUrl           = returnUrl;
                return(View("ExternalLoginConfirmation", new RegisterExternalLoginModel
                {
                    UserName = result.UserName,
                    ExternalLoginData = loginData
                }));
            }
        }
Esempio n. 18
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                var userId = WebSecurity.GetUserId(model.UserName);
                if (userId == -1)
                {
                    string str = ConfigurationManager.ConnectionStrings["mongodb"].ConnectionString;
                    DefaultUsersService service = new DefaultUsersService(str);
                    SampleUserProfile   profile = new SampleUserProfile();
                    profile.UserName = model.UserName;
                    service.Save(profile);

                    OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                    OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                    return(RedirectToLocal(returnUrl));
                }
                else
                {
                    ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name.");
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
Esempio n. 19
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                var user = _userService.Users.FirstOrDefault(x => x.Name.ToLower() == model.UserName.ToLower());

                if (user == null)
                {
                    _userService.AddUser(new User
                    {
                        Name = model.UserName
                    });

                    OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                    OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                    return(RedirectToLocal(returnUrl));
                }
                else
                {
                    ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name.");
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
        public ActionResult ExternalLoginCallback(string returnUrl)
        {
            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

            if (!result.IsSuccessful)
            {
                return(RedirectToAction("ExternalLoginFailure"));
            }

            if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                return(RedirectToLocal(returnUrl));
            }

            if (User.Identity.IsAuthenticated)
            {
                // If the current user is logged in add the new account
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
                if (result.Provider == "facebook" || result.Provider == "google")
                {
                    using (UsersContext db = new UsersContext())
                    {
                        UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == User.Identity.Name);
                        if (user != null)
                        {
                            var oauthItem = db.OAuthMemberships.FirstOrDefault(x => x.Provider == result.Provider && x.ProviderUserId == result.ProviderUserId && x.UserId == user.UserId);
                            if (oauthItem != null)
                            {
                                oauthItem.Email = result.UserName;
                                db.SaveChanges();
                            }
                        }
                    }
                }
                return(RedirectToLocal(returnUrl));
            }
            else
            {
                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
                ViewBag.ReturnUrl           = returnUrl;
                var model = new RegisterExternalLoginModel {
                    UserName = result.UserName, ExternalLoginData = loginData
                };
                switch (result.Provider)
                {
                case "facebook":
                case "google":
                {
                    model.Email    = result.UserName;
                    model.UserName = "";
                    break;
                }

                case "twitter":
                {
                    model.Email    = "";
                    model.UserName = result.UserName;
                    break;
                }

                default:
                    break;
                }
                return(View("ExternalLoginConfirmation", model));
            }
        }
 public AuthenticationClientData GetOAuthClientData(string providerName)
 {
     return(OAuthWebSecurity.GetOAuthClientData(providerName));
 }
Esempio n. 22
0
        public ActionResult ExternalLoginConfirmation(RegisterModelDTO model, string profileImageUrl, string returnUrl)
        {
            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out string provider, out string providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            model.ExternalProvider       = provider;
            model.ExternalProviderUserId = providerUserId;

            //Download the image for profile pic
            HttpWebRequest  request  = (HttpWebRequest)WebRequest.Create(profileImageUrl);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            // Check that the remote file was found. The ContentType
            // check is performed since a request for a non-existent
            // image file might be redirected to a 404-page, which would
            // yield the StatusCode "OK", even though the image was not
            // found.
            if ((response.StatusCode == HttpStatusCode.OK ||
                 response.StatusCode == HttpStatusCode.Moved ||
                 response.StatusCode == HttpStatusCode.Redirect) &&
                response.ContentType.StartsWith("image", StringComparison.OrdinalIgnoreCase))
            {
                Stream inputStream = null;
                try
                {
                    inputStream = response.GetResponseStream();

                    //get the bytes from the content stream of the file
                    byte[] thePictureAsBytes = new byte[response.ContentLength];
                    using (BinaryReader theReader = new BinaryReader(inputStream))
                    {
                        inputStream       = null;
                        thePictureAsBytes = theReader.ReadBytes(int.Parse(response.ContentLength.ToString()));
                    }
                    model.ImageData = thePictureAsBytes;
                    model.ImageType = response.ContentType;
                }
                finally
                {
                    if (inputStream != null)
                    {
                        inputStream.Dispose();
                    }
                }
            }


            if (ModelState.IsValid)
            {
                // Attempt to register the user
                try
                {
                    using (HttpClientWrapper httpClient = new HttpClientWrapper(Session))
                    {
                        var responseMessage = httpClient.PostAsJsonAsync("/api/AccountAPI", model).Result;
                        //If registration worked, then need to send email confirmation
                        if (responseMessage.IsSuccessStatusCode)
                        {
                            var confirmationToken = JsonConvert.DeserializeObject <string>(responseMessage.Content.ReadAsStringAsync().Result);

                            var confURL = WebUI.Common.Common.GetDomainFromRequest(HttpContext.Request) + "/Account/RegisterConfirmation/" + confirmationToken.ToString();
                            MessagingService.RegistrationConfirmation(model.Email, model.FirstName, confURL);

                            return(RedirectToAction("RegisterStepTwo"));
                        }
                        else
                        {
                            var error = JsonConvert.DeserializeObject <System.Web.Http.HttpError>(responseMessage.Content.ReadAsStringAsync().Result);

                            ModelState.AddModelError(responseMessage.ReasonPhrase, error.Message);
                        }
                    }
                }
                catch (MembershipCreateUserException e)
                {
                    ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            ViewBag.StatesList          = WebUI.Common.Common.GetStates();
            return(View(model));
        }
Esempio n. 23
0
        public ActionResult ExternalLoginCallback(string returnUrl)
        {
            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

            if (!result.IsSuccessful)
            {
                return(RedirectToAction("ExternalLoginFailure"));
            }


            string first_name = "";
            string last_name  = "";
            string email      = "";

            if (result.ExtraData.Keys.Contains("accesstoken"))
            {
                var     client = new FacebookClient(result.ExtraData["accesstoken"]);
                dynamic me     = client.Get("me");
                Session["facebooktoken"] = result.ExtraData["accesstoken"];
                first_name = me.first_name;
                last_name  = me.last_name;
                email      = me.email;
            }
            else
            {
                String[] full_name = result.ExtraData["name"].ToString().Split(' ');
                if (full_name[0] != null)
                {
                    first_name = full_name[0];
                }
                if (full_name[1] != null)
                {
                    last_name = full_name[1];
                }
            }


            if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                SetAuthCookie(email);

                var user = UserService.GetUserbyEmail(email);

                if (user == null)
                {
                    SetMessage("Error.", BootstrapAlertTypes.Danger);
                    return(Redirect("/Account/login"));
                }

                var claims = new List <Claim>();
                claims.Add(new Claim(ClaimTypes.Name, user.UserName));
                claims.Add(new Claim(ClaimTypes.Email, user.Email));
                var id = new ClaimsIdentity(claims,
                                            DefaultAuthenticationTypes.ApplicationCookie);

                var ctx = Request.GetOwinContext();
                var authenticationManager = ctx.Authentication;
                authenticationManager.SignIn(id);



                SetEncryptedCookie(Configuration.UserCookie, new Dictionary <String, String>
                {
                    { "Email", user.Email },
                    { "Code", user.Code }
                });


                if (RoleService.IsUserInRole(user.Email, "Admin"))
                {
                    return(Redirect("/Magazines"));
                }

                if (RoleService.IsUserInRole(user.Email, "Influencer"))
                {
                    return(Redirect("/Home/Index"));
                }

                if (!String.IsNullOrEmpty(returnUrl))
                {
                    return(Redirect(returnUrl));
                }

                return(Redirect("/Influencer"));


                //SetEncryptedCookie(Configuration.UserCookie, first_name, Configuration.CookieLifeTime);
            }


            if (User.Identity.IsAuthenticated)
            {
                // If the current user is logged in add the new account
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, email);

                SetAuthCookie(email);


                //SetEncryptedCookie(Configuration.UserCookie, first_name, Configuration.CookieLifeTime);

                //UserService.LastSeenUpdate(email);

                //if (Request.Cookies["isFromCheckOut"] != null)
                //{
                //    SetCookie("isFromCheckOut", false, false);
                //    RemoveCookie("isFromCheckOut");
                //    return Redirect("/store/checkout");


                //}

                return(Redirect("/"));
            }
            else
            {
                // User is new, ask for their desired membership name
                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
                ViewBag.ReturnUrl           = returnUrl;
                //return View("ExternalLoginConfirmation", new RegisterExternalLoginModel { UserName = result.UserName, ExternalLoginData = loginData });
                return(View("ExternalLoginConfirmation", new RegisterExternalLoginModel
                {
                    UserName = result.UserName,
                    ExternalLoginData = loginData,
                    Name = first_name
                }));
            }
        }
Esempio n. 24
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;


            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }


            if (ModelState.IsValid)
            {
                // Insert a new user into the database
                using (EFDataBase db = new EFDataBase())
                {
                    User user = db.Users().FirstOrDefault(u => u.Email.ToLower() == model.UserName.ToLower());
                    // Check if user already exists
                    if (user == null)
                    {
                        // Insert name into the profile table
                        //db.UserProfiles.Add(new UserProfile { UserName = model.UserName });
                        //db.SaveChanges();



                        bool facebookVerified;


                        var     client   = new Facebook.FacebookClient(Session["facebooktoken"].ToString());
                        dynamic response = client.Get("me", new { fields = "id,verified" });
                        if (response.ContainsKey("verified"))
                        {
                            facebookVerified = response["verified"];
                        }
                        else
                        {
                            facebookVerified = false;
                        }
                        var code = Guid.NewGuid().ToString();

                        var newUser = new User();


                        newUser.ActivationDate = DateTime.Now;
                        newUser.Code           = code;
                        newUser.Email          = model.UserName;
                        newUser.UserName       = model.Name;
                        newUser.CreateDate     = DateTime.Now.ToString();
                        newUser.FbId           = response["id"];

                        db.UsersList.Add(newUser);

                        db.SaveChanges();

                        RoleService.AddUserToRole(model.UserName, "Influencer");

                        user = UserService.GetUserbyEmail(model.UserName);

                        if (user == null)
                        {
                            SetMessage("Error.", BootstrapAlertTypes.Danger);
                            return(Redirect("/Account/login"));
                        }


                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);


                        var claims = new List <Claim>();
                        claims.Add(new Claim(ClaimTypes.Name, model.UserName));
                        claims.Add(new Claim(ClaimTypes.Email, model.UserName));
                        var id = new ClaimsIdentity(claims,
                                                    DefaultAuthenticationTypes.ApplicationCookie);

                        var ctx = Request.GetOwinContext();
                        var authenticationManager = ctx.Authentication;
                        authenticationManager.SignIn(id);


                        SetAuthCookie(model.UserName);


                        SetEncryptedCookie(Configuration.UserCookie, new Dictionary <String, String>
                        {
                            { "Email", user.Email },
                            { "Code", user.Code }
                        });


                        if (RoleService.IsUserInRole(model.UserName, "Admin"))
                        {
                            return(Redirect("/Magazines"));
                        }

                        if (RoleService.IsUserInRole(model.UserName, "Influencer"))
                        {
                            return(Redirect("/Influencer"));
                        }

                        if (!String.IsNullOrEmpty(returnUrl))
                        {
                            return(Redirect(returnUrl));
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name.");
                    }
                }
            }


            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                // Insert a new user into the database
                using (UsersContext db = new UsersContext())
                {
                    UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());
                    // Check if user already exists
                    if (user == null)
                    {
                        UserProfile newUser = db.UserProfiles.Add(new UserProfile {
                            UserName = model.UserName
                        });
                        db.SaveChanges();

                        //
                        bool facebookVerified;

                        var     client   = new Facebook.FacebookClient(Session["facebooktoken"].ToString());
                        dynamic response = client.Get("me", new { fields = "verified" });
                        if (response.ContainsKey("verified"))
                        {
                            facebookVerified = response["verified"];
                        }
                        else
                        {
                            facebookVerified = false;
                        }

                        db.ExternalUsers.Add(new ExternalUserInformation
                        {
                            UserId   = newUser.UserId,
                            FullName = model.FullName,
                            Link     = model.Link,
                            Verified = facebookVerified
                        });
                        db.SaveChanges();

                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                        return(RedirectToLocal(returnUrl));
                    }
                    else
                    {
                        ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name.");
                    }
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(this.RedirectToAction("Index", "Home"));
            }

            if (ModelState.IsValid)
            {
                UserProfile userProfile = this.userManager.GetUserProfileFromProvider(provider, providerUserId);

                if (userProfile == null)
                {
                    ClientUserData clientUserData = (ClientUserData)TempData["ClientUserData"];

                    Random random = new Random();
                    int    userId = random.Next(int.MaxValue);

                    userProfile = new UserProfile
                    {
                        RowKey           = userId.ToString(),
                        UserName         = string.IsNullOrEmpty(clientUserData.UserName) ? clientUserData.Emails.Account : clientUserData.UserName,
                        AccountEmail     = clientUserData.Emails.Account,
                        FirstName        = model.FirstName,
                        LastName         = model.LastName,
                        City             = model.City,
                        Country          = model.Country,
                        State            = model.State,
                        PreferredEmail   = model.PreferredEmail,
                        Gender           = clientUserData.Gender,
                        Link             = Convert.ToString(clientUserData.Link),
                        IsSuperAdmin     = false,
                        TimeZone         = model.TimeZone,
                        CreatedTime      = DateTime.Now.ToUniversalTime().ToString(),
                        Address1         = model.Address1,
                        Address2         = model.Address2,
                        Phone            = model.Phone,
                        PhoneCountryCode = model.PhoneCountryCode,
                        ZipCode          = model.ZipCode
                    };

                    var regions = this.regionSource.GetAvailableRegions();
                    List <AccessDetails> defaultAccess = new List <AccessDetails>();

                    foreach (var region in regions)
                    {
                        var accessDetail = new AccessDetails
                        {
                            AccessLevel = AccessLevels.PortalUser,
                            Authority   = (Authorities)Convert.ToInt32(region.RegionInformation.Id)
                        };

                        defaultAccess.Add(accessDetail);
                    }

                    this.userManager.SaveUserDetails(
                        new UserDetails
                    {
                        UserInfo   = userProfile,
                        AccessInfo = defaultAccess,
                    });

                    this.RegisterAuditor.TransactionId = this.RegisterLogger.TransactionId;
                    this.RegisterAuditor.Audit(AuditId.RegisterUser, AuditStatus.Success, default(int), userProfile.UserName + " Registered Successfully");
                    this.RegisterLogger.Log(TraceEventType.Information, LoggingMessageId.PortalUserRegistration, userProfile.UserName + " registered to the portal");

                    OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                    OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);
                    this.RegisterLogger.Log(TraceEventType.Information, LoggingMessageId.PortalUserLoggedIn, userProfile.UserName + " has logged in to the portal");

                    // By Default IsSuperAdmin is false
                    this.CreateAuthenticationTicket(model.UserName, clientUserData.AccessToken, DateTime.Now, false, false);
                    return(this.RedirectToLocal(returnUrl));
                }
                else
                {
                    ModelState.AddModelError("UserName", "User already exists. Please enter a different user name.");
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            ViewBag.Country             = new SelectList(Utility.GetCounties());
            ViewBag.TimeZone            = new SelectList(Utility.GetTimeZones());
            ViewBag.PhoneCountryCode    = new SelectList(Utility.GetCountryPhoneCodes());
            return(this.View("Register", model));
        }
        public ActionResult ExternalLoginCallback(string returnUrl)
        {
            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(returnUrl);

            if (!result.IsSuccessful)
            {
                return(this.RedirectToAction("ExternalLoginFailure"));
            }

            if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                UserProfile userProfile = this.userManager.GetUserProfileFromProvider(result.Provider, result.ProviderUserId);
                IEnumerable <AccessDetails> accessDetails = this.userManager.GetUserAccessDetails(userProfile.RowKey);
                var isRegionAdmin = accessDetails.Any(x => x.AccessLevel == AccessLevels.Admin);

                this.CreateAuthenticationTicket(result.ExtraData["name"].ToString(), result.ExtraData["accesstoken"].ToString(), DateTime.Now, userProfile.IsSuperAdmin, isRegionAdmin);

                this.RegisterLogger.Log(TraceEventType.Information, LoggingMessageId.PortalUserLoggedIn, userProfile.UserName + " has logged in to the portal");

                return(this.RedirectToLocal(returnUrl));
                //// return this.Redirect(redirectUrl);
            }

            if (User.Identity.IsAuthenticated)
            {
                // If the current user is logged in add the new account
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
                UserProfile userProfile = this.userManager.GetUserProfileFromProvider(result.Provider, result.ProviderUserId);
                IEnumerable <AccessDetails> accessDetails = this.userManager.GetUserAccessDetails(userProfile.RowKey);
                var isRegionAdmin = accessDetails.Any(x => x.AccessLevel == AccessLevels.Admin);

                this.CreateAuthenticationTicket(User.Identity.Name, result.ExtraData["accesstoken"].ToString(), DateTime.Now, userProfile.IsSuperAdmin, isRegionAdmin);

                return(this.RedirectToLocal(returnUrl));
            }
            else
            {
                // User is new, ask for them to register
                string accessToken = result.ExtraData["accesstoken"].ToString();
                var    userData    = this.userManager.GetClientUserDataByAccessToken(accessToken);
                userData.AccessToken = accessToken;

                this.TempData["ClientUserData"] = userData;

                RegisterExternalLoginModel registerModel = new RegisterExternalLoginModel
                {
                    FirstName         = userData.FirstName,
                    LastName          = userData.LastName,
                    UserName          = string.IsNullOrEmpty(userData.UserName) ? userData.Emails.Account : userData.UserName,
                    AccountEmail      = userData.Emails.Account,
                    PreferredEmail    = userData.Emails.Preferred,
                    City              = userData.Business != null ? userData.Business.City : string.Empty,
                    ExternalLoginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId),
                };

                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
                ViewBag.ReturnUrl           = returnUrl;
                ViewBag.Country             = new SelectList(Utility.GetCounties());
                ViewBag.TimeZone            = new SelectList(Utility.GetTimeZones(), "(UTC-08:00) Pacific Time (US & Canada)");
                ViewBag.PhoneCountryCode    = new SelectList(Utility.GetCountryPhoneCodes(), "United States(+1)");
                return(this.View("Register", registerModel));
            }
        }
Esempio n. 28
0
        public ActionResult ExternalLoginCallback(string returnUrl)
        {
            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

            if (!result.IsSuccessful)
            {
                return(RedirectToAction("ExternalLoginFailure"));
            }


            // store the user id in the session
            Session["UserFacebookId"] = result.ProviderUserId;
            webpages_OAuthMembership userrecord = db.webpages_OAuthMembership.FirstOrDefault(m => m.Provider == "facebook" && m.ProviderUserId == result.ProviderUserId);

            if (userrecord != null)
            {
                Session["UserID"] = userrecord.UserId;
            }


            // remember the user's facebook friends

            var     fb     = new FacebookClient(result.ExtraData["accesstoken"]);
            dynamic myInfo = fb.Get("/me/friends");

            foreach (dynamic friend in myInfo.data)
            {
                // post a test message the friend's wall
                //try
                //{
                //    fb.Post(string.Format("{0}/feed",friend.id), new { message = "My first wall post" });
                //}
                //catch (Exception e)
                //{
                //    string text = e.StackTrace;
                //}



                // does the friend already exist?
                String     strUserId   = result.ProviderUserId;
                Int64      intUserId   = Int64.Parse(strUserId);
                Int64      intfriendId = Int64.Parse(friend.id);
                UserFriend userFriend  = db.UserFriends.FirstOrDefault(u => u.UserFriend_UserFacebookId == intUserId && u.UserFriend_FriendFacebookId == intfriendId);
                if (userFriend == null)
                {
                    UserFriend newUserFriend = new UserFriend();
                    newUserFriend.UserFriend_UserFacebookId   = intUserId;
                    newUserFriend.UserFriend_FriendFacebookId = intfriendId;
                    newUserFriend.UserFriend_Name             = friend.name;

                    // Save the record
                    db.UserFriends.Add(newUserFriend);
                    db.SaveChanges();
                }
            }

            // post a test message on my wall
            //try
            //{
            //    fb.Post("me/feed", new { message = "My second wall post" });
            //}
            //catch (Exception e)
            //{
            //    string text = e.StackTrace;
            //}


            // post a test
            var parameters = new Dictionary <string, object>
            {
                { "event", "http://amovada.azurewebsites.net/Event/Details/1963" },
                { "tags", "585173979" }
            };
            var response = fb.Post("me/amovada:added_you_to", parameters);



            if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                return(RedirectToLocal(returnUrl));
            }



            if (User.Identity.IsAuthenticated)
            {
                // If the current user is logged in add the new account
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
                return(RedirectToLocal(returnUrl));
            }
            else
            {
                // User is new, ask for their desired membership name
                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
                ViewBag.ReturnUrl           = returnUrl;
                return(View("ExternalLoginConfirmation", new RegisterExternalLoginModel {
                    UserName = result.UserName, ExternalLoginData = loginData
                }));
            }
        }
Esempio n. 29
0
        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)
        {
            string provider       = null;
            string providerUserId = null;

            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))
            {
                return(RedirectToAction("Manage"));
            }

            if (ModelState.IsValid)
            {
                // Insert a new user into the database
                using (MainDBEntities db = new MainDBEntities())
                {
                    user userEx = db.users.FirstOrDefault(u => u.email == model.UserName);
                    // Check if user already exists

                    if (userEx != null)
                    {
                        userEx.userName        = model.twitterName;
                        userEx.firstName       = model.firstName;
                        userEx.lastName        = model.lastName;
                        db.Entry(userEx).State = EntityState.Modified;
                        db.SaveChanges();
                        FormsAuthentication.SetAuthCookie(userEx.email, false);

                        return(RedirectToAction("List"));
                    }
                    if (userEx == null)
                    {
                        /////////////////////////////////////////

                        try
                        {
                            using (var df = new MainDBEntities())
                            {
                                var sysUser = df.users.Create();

                                sysUser.userId    = Guid.NewGuid();
                                sysUser.email     = model.UserName;
                                sysUser.password  = "******";
                                sysUser.userName  = model.twitterName;
                                sysUser.firstName = model.firstName;
                                sysUser.lastName  = model.lastName;

                                df.users.Add(sysUser);
                                df.SaveChanges();


                                //return RedirectToAction("List");
                                FormsAuthentication.SetAuthCookie(model.UserName, false);

                                return(RedirectToAction("List"));
                            }
                        }
                        catch
                        {
                            ModelState.AddModelError("UserName", "User name or twitter name already exists. Please enter a different user name or twitter name.");
                        }

                        /////////////////////////////////

                        // Insert name into the profile table
                        // db.UserProfiles.Add(new UserProfile { UserName = model.UserName });
                        //   db.SaveChanges();

                        //OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
                        //OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

                        //return RedirectToLocal(returnUrl);
                    }
                    else
                    {
                        ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name.");
                    }
                }
            }

            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;
            ViewBag.ReturnUrl           = returnUrl;
            return(View(model));
        }
Esempio n. 30
0
        public ActionResult ExternalLoginCallback(string returnUrl)
        {
            //Get result from OpenID provider
            AuthenticationResult authenticationResult = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

            if (!authenticationResult.IsSuccessful)
            {
                return(RedirectToAction("ExternalLoginFailure"));
            }

            //Login with authentication result
            if (OAuthWebSecurity.Login(authenticationResult.Provider, authenticationResult.ProviderUserId, createPersistentCookie: true))
            {
                return(RedirectTo(returnUrl));
            }

            var userName    = OAuthWebSecurity.GetUserName(authenticationResult.Provider, authenticationResult.ProviderUserId);
            var loginData   = OAuthWebSecurity.SerializeProviderUserId(authenticationResult.Provider, authenticationResult.ProviderUserId);
            var displayName = OAuthWebSecurity.GetOAuthClientData(authenticationResult.Provider).DisplayName;

            // If the current user is logged in add the new account
            if (User.Identity.IsAuthenticated)
            {
                OAuthWebSecurity.CreateOrUpdateAccount(authenticationResult.Provider, authenticationResult.ProviderUserId, User.Identity.Name);
                return(RedirectTo(returnUrl));
            }

            var membershipUserIdentifier = Guid.NewGuid().ToString();

            try
            {
                // Insert a new user into the database
                using (var db = dataContextFactory.Create())
                {
                    // Insert name into the profile table
                    db.Users.Add(new User {
                        MembershipUserIdentifier = membershipUserIdentifier, Email = authenticationResult.UserName
                    });
                    db.SaveChanges();
                }
            }
            catch (DbUpdateException e)
            {
                var innerException1 = e.InnerException as System.Data.Entity.Core.UpdateException;
                if (innerException1 == null)
                {
                    throw;
                }

                var innerException2 = innerException1.InnerException as SqlException;
                if (innerException2 == null)
                {
                    throw;
                }

                var innerExceptionMessage = innerException2.Message ?? "";

                if (innerExceptionMessage.Contains("IX_Email") && innerExceptionMessage.Contains("duplicate"))
                {
                    Flash.Error("The email address used to login is already in use on this site using a different login method.  "
                                + "Please login with the original login method used for that email.  "
                                + "Then you may associate other login methods with your account.  ");

                    return(RedirectToAction("Login"));
                }
                else
                {
                    throw;
                }
            }

            OAuthWebSecurity.CreateOrUpdateAccount(authenticationResult.Provider, authenticationResult.ProviderUserId, membershipUserIdentifier);
            OAuthWebSecurity.Login(authenticationResult.Provider, authenticationResult.ProviderUserId, createPersistentCookie: true);

            return(RedirectTo(returnUrl));
        }