/// <summary>
        /// Return the view for the 2FA screen
        /// </summary>
        /// <param name="owinContext"></param>
        /// <param name="umbracoContext"></param>
        /// <param name="username"></param>
        /// <returns></returns>
        public string GetTwoFactorView(IOwinContext owinContext, UmbracoContext umbracoContext, string username)
        {
            var user     = ApplicationContext.Current.Services.UserService.GetByUsername(username);
            var database = new FortressDatabase();

            var accountIsLockedFlag = HttpContext.Current.Items[FortressConstants.LockoutItemKey] as bool?;

            if (accountIsLockedFlag.HasValue && accountIsLockedFlag.Value)
            {
                return("/App_Plugins/Umbraco2FA/backoffice/TwoFactor/AccountLockout.html");
            }

            var details = database.GetUserDetails(user.Id);

            if (details == null || !details.IsValidated)
            {
                //user needs setting up
                return("/App_Plugins/Umbraco2FA/backoffice/TwoFactor/Setup.html");
            }

            var provider = TwoFactorProviders[details.Provider];

            //var providerDetails = provider as IuProtectTwoFactorProvider;
            if (provider != null)
            {
                return("/App_Plugins/Umbraco2FA/backoffice/TwoFactor/TwoFactorLogin.html");
            }
            return("/App_Plugins/Umbraco2FA/backoffice/TwoFactor/GenericError.html");
        }
Esempio n. 2
0
        /// <summary>
        /// Explicitly implement this interface method - which overrides the base class's implementation
        /// </summary>
        /// <param name="purpose"></param>
        /// <param name="token"></param>
        /// <param name="manager"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        Task <bool> IUserTokenProvider <BackOfficeIdentityUser, int> .ValidateAsync(string purpose, string token, UserManager <BackOfficeIdentityUser, int> manager, BackOfficeIdentityUser user)
        {
            var db      = new FortressDatabase();
            var details = db.GetUserDetails(user.Id);

            if (details != null && details.Provider == "SMS")
            {
                return(Task.FromResult(details.CurrentCode == token));
            }

            return(Task.FromResult(false));
        }
Esempio n. 3
0
        /// <summary>
        /// Explicitly implement this interface method - which overrides the base class's implementation
        /// </summary>
        /// <param name="purpose"></param>
        /// <param name="token"></param>
        /// <param name="manager"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        Task <bool> IUserTokenProvider <BackOfficeIdentityUser, int> .ValidateAsync(string purpose, string token, UserManager <BackOfficeIdentityUser, int> manager, BackOfficeIdentityUser user)
        {
            TwoFactorAuthenticator tfa = new TwoFactorAuthenticator();
            var db      = new FortressDatabase();
            var details = db.GetUserDetails(user.Id);

            bool isCorrectPIN = tfa.ValidateTwoFactorPIN(details.Configuration, token);

            if (details.IsValidated == false && isCorrectPIN)
            {
                details.IsValidated = true;
                db.Update(details);
            }
            return(Task.FromResult(isCorrectPIN));
        }
Esempio n. 4
0
        /// <summary>
        /// Return the view for the 2FA screen
        /// </summary>
        /// <param name="owinContext"></param>
        /// <param name="umbracoContext"></param>
        /// <param name="username"></param>
        /// <returns></returns>
        public string GetTwoFactorView(IOwinContext owinContext, UmbracoContext umbracoContext, string username)
        {
            var user     = ApplicationContext.Current.Services.UserService.GetByUsername(username);
            var database = new FortressDatabase();

            var details  = database.GetUserDetails(user.Id);
            var provider = TwoFactorProviders[details.Provider];

            //var providerDetails = provider as IuProtectTwoFactorProvider;
            if (provider != null)
            {
                return("/App_Plugins/Umbraco2FA/backoffice/TwoFactor/TwoFactorLogin.html");
            }
            return("/App_Plugins/Umbraco2FA/backoffice/TwoFactor/GenericError.html");
        }
        /// <summary>
        /// Returns whether two factor authentication is enabled for the user
        /// </summary>
        /// <param name="user"/>
        /// <returns/>
        /// <remarks>
        /// This Demo does not persist any data, so this method for this Demo always returns true.
        /// If you want to have 2FA configured per user, you will need to store that information somewhere.
        /// See the notes above in the SetTwoFactorEnabledAsync method.
        /// </remarks>
        public override Task <bool> GetTwoFactorEnabledAsync(BackOfficeIdentityUser user)
        {
            var db      = new FortressDatabase();
            var details = db.GetUserDetails(user.Id);

            if (details != null && details.IsValidated)
            {
                return(Task.FromResult(true));
            }
            return(Task.FromResult(false));

            //If you persisted this data somewhere then you could either look it up now, or you could
            //explicitly implement all IUserStore "Find*" methods, call their base implementation and then lookup
            //your persisted value and assign to the TwoFactorEnabled property of the resulting BackOfficeIdentityUser user.
            //return Task.FromResult(user.TwoFactorEnabled);
        }
Esempio n. 6
0
        //
        // Summary:
        //     Returns true if provider can be used for this user, i.e. could require a user
        //     to have an email
        //
        // Parameters:
        //   manager:
        //
        //   user:
        Task <bool> IUserTokenProvider <BackOfficeIdentityUser, int> .IsValidProviderForUserAsync(UserManager <BackOfficeIdentityUser, int> manager, BackOfficeIdentityUser user)
        {
            var db = new FortressDatabase();

            if (!db.GetSettingsFromDatabase().GoogleAuthenticator_Enabled)
            {
                return(Task.FromResult(false));
            }

            var details = db.GetUserDetails(user.Id);

            if (details == null || !details.IsValidated || details.Provider == "GoogleAuthenticator")
            {
                return(Task.FromResult(true));
            }
            return(Task.FromResult(false));
        }
Esempio n. 7
0
        Task IUserTokenProvider <BackOfficeIdentityUser, int> .NotifyAsync(string token, UserManager <BackOfficeIdentityUser, int> manager, BackOfficeIdentityUser user)
        {
            var db      = new FortressDatabase();
            var details = db.GetUserDetails(user.Id);

            var settings = db.GetSettingsFromDatabase();

            if (details == null || !details.IsValidated || details.Provider == "SMS")
            {
                details.CurrentCode          = token;
                details.CurrentCodeGenerated = DateTime.UtcNow;
                db.Update(details);
            }
            var SmsProvider = FortressContext.GetCurrentSmsProvider();

            SmsProvider.SendSms(details.Configuration, string.Format(settings.SMS_MessageFormat, token));
            return(Task.FromResult(true));
        }