private void PromptForNeededInfo(OpenIdRpxHelper rpxHelper, OpenIdRpxAuthInfo authInfo)
        {
            if (Email.IsValidEmailAddressSyntax(authInfo.Email))
            {
                divEmailInput.Visible   = false;
                divEmailDisplay.Visible = true;
                litEmail.Text           = authInfo.Email;
            }
            else
            {
                divEmailInput.Visible   = true;
                divEmailDisplay.Visible = false;
            }

            pnlNeededProfileProperties.Visible = true;
            pnlOpenID.Visible = false;

            litOpenIDURI.Text          = authInfo.Identifier;
            hdnIdentifier.Value        = authInfo.Identifier;
            hdnPreferredUsername.Value = authInfo.PreferredUsername;
            hdnDisplayName.Value       = authInfo.DisplayName;

            if (authInfo.ProviderName.Length > 0)
            {
                litHeading.Text = string.Format(CultureInfo.InvariantCulture, Resource.RpxRegistrationHeadingFormat, authInfo.ProviderName);
            }

            PopulateRequiredProfileControls();

            litInfoNeededMessage.Text = Resource.OpenIDAdditionalInfoNeededMessage;
        }
        private void HandleAuthenticatedUser(OpenIdRpxHelper rpxHelper, OpenIdRpxAuthInfo authInfo)
        {
            // user is already authenticated so must be updating open id in profile

            SiteUser currentUser = SiteUtils.GetCurrentSiteUser();

            if (currentUser == null)
            {
                Response.Redirect(SiteRoot);
                return;
            }

            rpxHelper.Map(authInfo.Identifier, currentUser.UserGuid.ToString());

            currentUser.OpenIdUri = authInfo.Identifier;
            currentUser.Save();

            Response.Redirect(SiteRoot + "/Secure/UserProfile.aspx?t=i");
        }
Example #3
0
        private void HandleNewUser(OpenIdRpxHelper rpxHelper, OpenIdRpxAuthInfo authInfo)
        {
            log.Debug($"openid-debug: adding user ");

            if (!IsValidForUserCreation(authInfo))
            {
                PromptForNeededInfo(rpxHelper, authInfo);
                return;
            }

            string loginName = string.Empty;

            if ((authInfo.PreferredUsername.Length > 0) && (!SiteUser.LoginExistsInDB(siteSettings.SiteId, authInfo.PreferredUsername)))
            {
                loginName = SecurityHelper.RemoveMarkup(authInfo.PreferredUsername);
            }

            if (loginName.Length == 0)
            {
                loginName = SiteUtils.SuggestLoginNameFromEmail(siteSettings.SiteId, authInfo.Email);
            }

            string name = loginName;

            if (authInfo.DisplayName.Length > 0)
            {
                name = SecurityHelper.RemoveMarkup(authInfo.DisplayName);
            }

            bool emailIsVerified = (authInfo.VerifiedEmail == authInfo.Email);

            SiteUser newUser = CreateUser(
                authInfo.Identifier,
                authInfo.Email,
                loginName,
                name,
                emailIsVerified);

            log.Debug($"openid-debug: user created ({newUser.LoweredEmail}, {newUser.UserId.ToString()}) ");

            SignInUser(newUser, true);
        }
Example #4
0
        private void ProcessToken(HttpContext context)
        {
            OpenIdRpxAccountInfo rpxAccount = OpenIdRpxHelper.LookupRpxAccount(rpxToken, true);

            if (rpxAccount == null)
            {
                context.Response.Redirect(siteRoot + "/Admin/SiteSettings.aspx");
                return;
            }

            siteSettings.RpxNowAdminUrl        = rpxAccount.AdminUrl;
            siteSettings.RpxNowApiKey          = rpxAccount.ApiKey;
            siteSettings.RpxNowApplicationName = rpxAccount.Realm;
            if (siteSettings.SiteGuid.ToString() == rpxAccount.RequestId)
            {
                siteSettings.Save();
                CacheHelper.ClearSiteSettingsCache(siteSettings.SiteId);
            }

            context.Response.Redirect(siteRoot + "/Admin/SiteSettings.aspx?t=oid");
        }
        private void HandleNewUser(OpenIdRpxHelper rpxHelper, OpenIdRpxAuthInfo authInfo)
        {
            if (!IsValidForUserCreation(authInfo))
            {
                PromptForNeededInfo(rpxHelper, authInfo);
                return;
            }

            string loginName = string.Empty;

            if ((authInfo.PreferredUsername.Length > 0) && (!SiteUser.LoginExistsInDB(siteSettings.SiteId, authInfo.PreferredUsername)))
            {
                loginName = authInfo.PreferredUsername;
            }

            if (loginName.Length == 0)
            {
                loginName = SiteUtils.SuggestLoginNameFromEmail(siteSettings.SiteId, authInfo.Email);
            }

            string name = loginName;

            if (authInfo.DisplayName.Length > 0)
            {
                name = authInfo.DisplayName;
            }

            bool emailIsVerified = (authInfo.VerifiedEmail == authInfo.Email);

            SiteUser newUser = CreateUser(
                authInfo.Identifier,
                authInfo.Email,
                loginName,
                name,
                emailIsVerified);

            SignInUser(newUser);
        }
Example #6
0
        private void PromptForNeededInfo(OpenIdRpxHelper rpxHelper, OpenIdRpxAuthInfo authInfo)
        {
            if (Email.IsValidEmailAddressSyntax(authInfo.Email))
            {
                divEmailInput.Visible   = false;
                divEmailDisplay.Visible = true;
                litEmail.Text           = authInfo.Email;
                hdnEmail.Value          = authInfo.Email;
                //email is verified go ahead and track new registration in analytics
                //or we won't have another opportunity to track it
                if (authInfo.VerifiedEmail.Length > 0)
                {
                    AnalyticsAsyncTopScript asyncAnalytics = Page.Master.FindControl("analyticsTop") as AnalyticsAsyncTopScript;
                    if (asyncAnalytics != null)
                    {
                        asyncAnalytics.PageToTrack = "/RegistrationConfirmed.aspx";
                    }
                    else
                    {
                        mojoGoogleAnalyticsScript analytics = Page.Master.FindControl("mojoGoogleAnalyticsScript1") as mojoGoogleAnalyticsScript;
                        if (analytics != null)
                        {
                            analytics.PageToTrack = "/RegistrationConfirmed.aspx";
                        }
                    }
                }
            }
            else
            {
                divEmailInput.Visible   = true;
                divEmailDisplay.Visible = false;
            }

            pnlNeededProfileProperties.Visible = true;
            pnlSubscribe.Visible = displaySettings.ShowNewsLetters;
            pnlOpenID.Visible    = false;

            litOpenIDURI.Text          = authInfo.Identifier;
            hdnIdentifier.Value        = authInfo.Identifier;
            hdnPreferredUsername.Value = authInfo.PreferredUsername;
            hdnDisplayName.Value       = authInfo.DisplayName;

            if (authInfo.ProviderName.Length > 0)
            {
                litHeading.Text = string.Format(CultureInfo.InvariantCulture, Resource.RpxRegistrationHeadingFormat, authInfo.ProviderName);
            }

            //PopulateRequiredProfileControls();
            pnlRequiredProfileProperties.Visible = true;


            litInfoNeededMessage.Text = Resource.OpenIDAdditionalInfoNeededMessage;

            if (termsOfUse.Length > 0)
            {
                Literal agreement = new Literal();
                agreement.Text = termsOfUse;
                divAgreement.Controls.Add(agreement);
            }
            else
            {
                chkAgree.Visible = false;
            }
        }
Example #7
0
        private void ProcessToken()
        {
            OpenIdRpxHelper   rpxHelper = new OpenIdRpxHelper(rpxApiKey, rpxBaseUrl);
            OpenIdRpxAuthInfo authInfo  = rpxHelper.AuthInfo(authToken, tokenUrl);

            if ((authInfo == null) || (!authInfo.IsValid))
            {
                log.Debug($"openid-debug: authInfo is null or authInfo.IsValid='false' ");

                Response.Redirect(SiteRoot + "/Secure/Login.aspx");
                return;
            }

            if (Request.IsAuthenticated)
            {
                log.Debug($"openid-debug: authInfo is valid and user exists, authenticated ");
                HandleAuthenticatedUser(rpxHelper, authInfo);
                return;
            }

            Guid     userGuid = Guid.Empty;
            SiteUser user     = null;

            //first find a site user by email
            // this allows associating the openid user with an existing user.
            if ((authInfo.Email.Length > 0))
            {
                log.Debug($"openid-debug: found user by email ");

                user = SiteUser.GetByEmail(siteSettings, authInfo.Email);
            }

            if (authInfo.PrimaryKey.Length == 36)
            {
                try
                {
                    userGuid = new Guid(authInfo.PrimaryKey);
                }
                catch (FormatException) { }
                catch (OverflowException) { }
            }

            if ((user == null) && (userGuid == Guid.Empty))
            {
                userGuid = SiteUser.GetUserGuidFromOpenId(
                    siteSettings.SiteId,
                    authInfo.Identifier);
            }

            if ((user == null) && (userGuid != Guid.Empty))
            {
                user = new SiteUser(siteSettings, userGuid);
                if (WebConfigSettings.UseRelatedSiteMode)
                {
                    if (user.UserId == -1)
                    {
                        user = null;
                        log.Debug($"openid-debug: user not found ");
                    }
                }
                else if (user.SiteGuid != siteSettings.SiteGuid)
                {
                    user = null;
                    log.Debug($"openid-debug: user not connected to this site ({siteSettings.SiteId.ToString()}) ");
                }
            }

            if (user == null)
            {
                // not an existing user
                if (siteSettings.AllowNewRegistration)
                {
                    HandleNewUser(rpxHelper, authInfo);
                }
                else
                {
                    log.Debug($"openid-debug: user not found, AllowNewRegistrations='false' ");
                    WebUtils.SetupRedirect(this, SiteRoot);
                    return;
                }
            }
            else
            {
                log.Debug($"openid-debug: user found ({user.LoweredEmail}, {user.UserId.ToString()}) ");

                bool needToSave = false;
                if ((siteSettings.UseSecureRegistration) && (user.RegisterConfirmGuid != Guid.Empty))
                {
                    if (authInfo.VerifiedEmail.Length > 0)
                    {
                        user.SetRegistrationConfirmationGuid(Guid.Empty);
                        user.Email = authInfo.VerifiedEmail;
                        needToSave = true;
                    }
                }

                if (user.OpenIdUri.Length == 0)
                {
                    user.OpenIdUri = authInfo.Identifier;
                    needToSave     = true;
                }

                if (needToSave)
                {
                    user.Save();
                }

                if (WebConfigSettings.OpenIdRpxUseMappings)
                {
                    if ((authInfo.PrimaryKey.Length == 0) || (authInfo.PrimaryKey != user.UserGuid.ToString()))
                    {
                        rpxHelper.Map(authInfo.Identifier, user.UserGuid.ToString());
                    }
                }


                SignInUser(user, false);
            }
        }
        private void PromptForNeededInfo(OpenIdRpxHelper rpxHelper, OpenIdRpxAuthInfo authInfo)
        {
            if (Email.IsValidEmailAddressSyntax(authInfo.Email))
            {
                divEmailInput.Visible = false;
                divEmailDisplay.Visible = true;
                litEmail.Text = authInfo.Email;
                hdnEmail.Value = authInfo.Email;
                //email is verified go ahead and track new registration in analytics
                //or we won't have another opportunity to track it
                if (authInfo.VerifiedEmail.Length > 0)
                {
                    AnalyticsAsyncTopScript asyncAnalytics = Page.Master.FindControl("analyticsTop") as AnalyticsAsyncTopScript;
                    if (asyncAnalytics != null)
                    {
                        asyncAnalytics.PageToTrack = "/RegistrationConfirmed.aspx";
                    }
                    else
                    {
                        mojoGoogleAnalyticsScript analytics = Page.Master.FindControl("mojoGoogleAnalyticsScript1") as mojoGoogleAnalyticsScript;
                        if (analytics != null)
                        {
                            analytics.PageToTrack = "/RegistrationConfirmed.aspx";
                        }
                    }
                }
            }
            else
            {
                divEmailInput.Visible = true;
                divEmailDisplay.Visible = false;
            }

            pnlNeededProfileProperties.Visible = true;
            pnlSubscribe.Visible = displaySettings.ShowNewsLetters;
            pnlOpenID.Visible = false;

            litOpenIDURI.Text = authInfo.Identifier;
            hdnIdentifier.Value = authInfo.Identifier;
            hdnPreferredUsername.Value = authInfo.PreferredUsername;
            hdnDisplayName.Value = authInfo.DisplayName;

            if (authInfo.ProviderName.Length > 0)
            {
                litHeading.Text = string.Format(CultureInfo.InvariantCulture, Resource.RpxRegistrationHeadingFormat, authInfo.ProviderName);
            }

            //PopulateRequiredProfileControls();
            pnlRequiredProfileProperties.Visible = true;

            litInfoNeededMessage.Text = Resource.OpenIDAdditionalInfoNeededMessage;

            if (termsOfUse.Length > 0)
            {
                Literal agreement = new Literal();
                agreement.Text = termsOfUse;
                divAgreement.Controls.Add(agreement);

            }
            else
            {
                chkAgree.Visible = false;
            }
        }
        private void ProcessToken()
        {
            OpenIdRpxHelper rpxHelper = new OpenIdRpxHelper(rpxApiKey, rpxBaseUrl);
            OpenIdRpxAuthInfo authInfo = rpxHelper.AuthInfo(authToken, tokenUrl);

            if ((authInfo == null) || (!authInfo.IsValid))
            {
                Response.Redirect(SiteRoot + "/Secure/Login.aspx");
                return;
            }

            if (Request.IsAuthenticated)
            {
                HandleAuthenticatedUser(rpxHelper, authInfo);
                return;
            }

            Guid userGuid = Guid.Empty;
            SiteUser user = null;

            //first find a site user by email
            // this allows associating the openid user with an existing user.
            if ((authInfo.Email.Length > 0))
            {
                user = SiteUser.GetByEmail(siteSettings, authInfo.Email);

            }

            if (authInfo.PrimaryKey.Length == 36)
            {
                try
                {
                    userGuid = new Guid(authInfo.PrimaryKey);
                }
                catch (FormatException) { }
                catch (OverflowException) { }
            }

            if ((user == null)&&(userGuid == Guid.Empty))
            {
                userGuid = SiteUser.GetUserGuidFromOpenId(
                    siteSettings.SiteId,
                    authInfo.Identifier);
            }

            if ((user == null) && (userGuid != Guid.Empty))
            {
                user = new SiteUser(siteSettings, userGuid);
                if (WebConfigSettings.UseRelatedSiteMode)
                {
                    if (user.UserId == -1) { user = null; } // user not found
                }
                else
                {
                    if (user.SiteGuid != siteSettings.SiteGuid) { user = null; } //user not connected to this site
                }
            }

            if (user == null)
            {
                // not an existing user
                if (siteSettings.AllowNewRegistration)
                {
                    HandleNewUser(rpxHelper, authInfo);
                }
                else
                {
                    WebUtils.SetupRedirect(this, SiteRoot);
                    return;

                }
            }
            else
            {
                bool needToSave = false;
                if ((siteSettings.UseSecureRegistration)&& (user.RegisterConfirmGuid != Guid.Empty))
                {
                    if (authInfo.VerifiedEmail.Length > 0)
                    {
                        user.SetRegistrationConfirmationGuid(Guid.Empty);
                        user.Email = authInfo.VerifiedEmail;
                        needToSave = true;

                    }

                }

                if (user.OpenIdUri.Length == 0)
                {
                    user.OpenIdUri = authInfo.Identifier;
                    needToSave = true;
                }

                if (needToSave) { user.Save(); }

                if (WebConfigSettings.OpenIdRpxUseMappings)
                {
                    if ((authInfo.PrimaryKey.Length == 0) || (authInfo.PrimaryKey != user.UserGuid.ToString()))
                    {
                        rpxHelper.Map(authInfo.Identifier, user.UserGuid.ToString());
                    }
                }

                SignInUser(user, false);

            }
        }
        private void HandleNewUser(OpenIdRpxHelper rpxHelper, OpenIdRpxAuthInfo authInfo)
        {
            if (!IsValidForUserCreation(authInfo))
            {
                PromptForNeededInfo(rpxHelper, authInfo);
                return;

            }

            string loginName = string.Empty;

            if ((authInfo.PreferredUsername.Length > 0) && (!SiteUser.LoginExistsInDB(siteSettings.SiteId, authInfo.PreferredUsername)))
            {
                loginName = SecurityHelper.RemoveMarkup(authInfo.PreferredUsername);
            }

            if (loginName.Length == 0) { loginName = SiteUtils.SuggestLoginNameFromEmail(siteSettings.SiteId, authInfo.Email); }

            string name = loginName;

            if (authInfo.DisplayName.Length > 0)
            {
                name = SecurityHelper.RemoveMarkup(authInfo.DisplayName);
            }

            bool emailIsVerified = (authInfo.VerifiedEmail == authInfo.Email);

            SiteUser newUser = CreateUser(
                    authInfo.Identifier,
                    authInfo.Email,
                    loginName,
                    name,
                    emailIsVerified);

            SignInUser(newUser, true);
        }
        private void HandleAuthenticatedUser(OpenIdRpxHelper rpxHelper, OpenIdRpxAuthInfo authInfo)
        {
            // user is already authenticated so must be updating open id in profile

            SiteUser currentUser = SiteUtils.GetCurrentSiteUser();

            if (currentUser == null)
            {
                Response.Redirect(SiteRoot);
                return;
            }

            rpxHelper.Map(authInfo.Identifier, currentUser.UserGuid.ToString());

            currentUser.OpenIdUri = authInfo.Identifier;
            currentUser.Save();

            Response.Redirect(SiteRoot + "/Secure/UserProfile.aspx?t=i");
        }
        private void ProcessToken()
        {
            OpenIdRpxHelper   rpxHelper = new OpenIdRpxHelper(rpxApiKey, rpxBaseUrl);
            OpenIdRpxAuthInfo authInfo  = rpxHelper.AuthInfo(authToken, tokenUrl);

            if ((authInfo == null) || (!authInfo.IsValid))
            {
                Response.Redirect(SiteRoot + "/Secure/Login.aspx");
                return;
            }

            if (Request.IsAuthenticated)
            {
                HandleAuthenticatedUser(rpxHelper, authInfo);
                return;
            }

            Guid     userGuid = Guid.Empty;
            SiteUser user     = null;

            //first find a site user by email
            if ((authInfo.Email.Length > 0))
            {
                user = SiteUser.GetByEmail(siteSettings, authInfo.Email);
            }

            if (authInfo.PrimaryKey.Length == 36)
            {
                try
                {
                    userGuid = new Guid(authInfo.PrimaryKey);
                }
                catch (FormatException) { }
                catch (OverflowException) { }
            }

            if ((user == null) && (userGuid == Guid.Empty))
            {
                userGuid = SiteUser.GetUserGuidFromOpenId(
                    siteSettings.SiteId,
                    authInfo.Identifier);
            }

            if ((user == null) && (userGuid != Guid.Empty))
            {
                user = new SiteUser(siteSettings, userGuid);
                if (user.SiteGuid != siteSettings.SiteGuid)
                {
                    user = null;
                }
            }

            if (user == null)
            {
                // not an existing user
                if (siteSettings.AllowNewRegistration)
                {
                    HandleNewUser(rpxHelper, authInfo);
                }
                else
                {
                    WebUtils.SetupRedirect(this, SiteRoot);
                    return;
                }
            }
            else
            {
                bool needToSave = false;
                if ((siteSettings.UseSecureRegistration) && (user.RegisterConfirmGuid != Guid.Empty))
                {
                    if (authInfo.VerifiedEmail.Length > 0)
                    {
                        user.SetRegistrationConfirmationGuid(Guid.Empty);
                        user.Email = authInfo.VerifiedEmail;
                        needToSave = true;
                    }
                }

                if (user.OpenIdUri.Length == 0)
                {
                    user.OpenIdUri = authInfo.Identifier;
                    needToSave     = true;
                }

                if (needToSave)
                {
                    user.Save();
                }

                if (WebConfigSettings.OpenIdRpxUseMappings)
                {
                    if ((authInfo.PrimaryKey.Length == 0) || (authInfo.PrimaryKey != user.UserGuid.ToString()))
                    {
                        rpxHelper.Map(authInfo.Identifier, user.UserGuid.ToString());
                    }
                }


                SignInUser(user);
            }
        }