partial void DeleteOpenIDWhiteList(OpenIDWhiteList instance);
 partial void InsertOpenIDWhiteList(OpenIDWhiteList instance);
 partial void UpdateOpenIDWhiteList(OpenIDWhiteList instance);
Example #4
0
        public virtual ActionResult OpenidRegisterFormSubmit(OpenIdRegistrationViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return View("OpenidRegister", model);
            }

            var DecryptedOpenID = Crypto.DecryptStringAES(model.OpenIdClaim, "secretstring");
            var validator = new IsSemiValidURLAttribute();
            var isValid = validator.IsValid(DecryptedOpenID);
            validator = null;
            if (!isValid)
            {
                //User tried to spoof encryption
                ModelState.AddModelError("OpenID", "There's a problem with the OpenID that you specified.");
                return View("OpenidRegister", model);
            }

            try
            {
                var db = Current.DB;
                var userNameAvailable = (db.aspnet_Users.Where(u => u.UserName == model.Nickname).FirstOrDefault()) == null;
                if (!userNameAvailable)
                {
                    ModelState.AddModelError("Username", "This username is already taken.");
                    return View("OpenidRegister", model);
                }

                // Attempt to register the user
                MembershipCreateStatus createStatus = MembershipService.CreateUser(model.Nickname, Membership.GeneratePassword(7, 0), model.EmailAddress);

                if (createStatus == MembershipCreateStatus.Success)
                {
                    AccountProfile.NewUser.Initialize(model.Nickname, true);
                    AccountProfile.NewUser.FullName = model.FullName.Trim();
                    AccountProfile.NewUser.Grade = model.Grade;
                    AccountProfile.NewUser.Sex = model.SelectedSex;
                    AccountProfile.NewUser.Save();
                    try
                    {
                        //Check OpenID-whitelist status and add OpenID to whitelist if needed
                        if (WhiteListEnabled)
                        {
                            //If we got here, this means that the user used a valid one-time registration code.
                            var whitelistRecord = new OpenIDWhiteList();
                            whitelistRecord.OpenID = DecryptedOpenID;
                            whitelistRecord.IsEnabled = true;
                            db.OpenIDWhiteLists.InsertOnSubmit(whitelistRecord);
                            db.SubmitChanges();
                        }

                        var userid = db.aspnet_Users.Where(u => u.UserName == model.Nickname).Single().UserId; // if we fail here, this usually means that we didn't specify a constant ApplicationName in Web.config, so each user has multiple entries in that table.

                        var openid = new UserOpenId();
                        openid.OpenIdClaim = DecryptedOpenID;
                        openid.UserId = userid;
                        db.UserOpenIds.InsertOnSubmit(openid);
                        db.SubmitChanges();

                        FormsAuth.SignIn(model.Nickname, true /* createPersistentCookie */);

                        if (ConfigurationManager.AppSettings["PromptEmailConfirmation"] == "true")
                        {
                            ViewData["email"] = model.EmailAddress;
                            return View("TimeToValidateYourEmailAddress");
                        }
                        else
                        {
                            /*if (model.ReturnURL.HasValue())
                            {
                                return Redirect(model.ReturnURL);
                            }*/

                            // Decide where to go next
                            if (System.Configuration.ConfigurationManager.AppSettings["ResultsOpen"] != "true")
                            {
                                return RedirectToAction("Index", "Home"); // Send to questionnaire page.
                            }
                            else
                            {
                                return RedirectToAction("Results", "Home"); // Send to results page (if they haven't submitted, it will redirect to form-is-closed page
                            }
                        }
                    }

                    catch
                    {
                        ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus));
                        return View("OpenidRegister", model);
                    }
                }
                else
                {
                    ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus));
                    return View("OpenidRegister", model);
                }
            }
            catch
            {
                return RedirectToAction("InternalServerError", "Error");
            }
        }