Пример #1
0
        private void EnsureStockwinnersMember()
        {
            LoggedInUserIdentity currentUser = Authentication.GetCurrentUserIdentity();

            if (currentUser.IdentityProvider != IdentityProvider.Stockwinners)
            {
                RedirectToAction("InvalidProvider");
            }
        }
Пример #2
0
 public static void SetCurrentUser(LoggedInUserIdentity userIdentity, bool rememberUser)
 {
     // Ensure the user exists in our own system
     if (Authentication.EnsureUserExists(userIdentity))
     {
         // Create a customized authentication cookie
         Authentication.SetAuthenticationCookie(userIdentity, rememberUser);
     }
 }
Пример #3
0
        public static User GetCurrentUserEagerlyLoaded(LoggedInUserIdentity userIdentity)
        {
            if (userIdentity != null)
            {
                DatabaseContext db = System.Web.Mvc.DependencyResolver.Current.GetService(typeof(DatabaseContext)) as DatabaseContext;

                return(db.Users.Include(u => u.Subscription).Include(u => u.Roles).First(
                           u => u.IdentityProvider == (int)userIdentity.IdentityProvider && u.IdentityProviderIssuedUserId == userIdentity.IdentityProviderIssuedId));
            }

            return(null);
        }
Пример #4
0
        /// <summary>
        /// Authenticates the user in the system as the currently logged on user. Ensures that we have sufficient information
        /// in our database to track the user's identity. If the user is already authenticated, then redirects it to the <paramref name="returnUrl"/>.
        /// </summary>
        public static void AuthenticateOrRedirect(IdentityProvider identityProvider, string returnUrl)
        {
            // Get user information from the identitiy provider
            LoggedInUserIdentity userIdentity = Authentication.GetUserIdentity(identityProvider, returnUrl);

            if (userIdentity != null)
            {
                Authentication.SetCurrentUser(userIdentity, false);

                Authentication.Redirect(returnUrl);
            }
        }
Пример #5
0
        public static User GetCurrentUser()
        {
            LoggedInUserIdentity loggedInUser = Authentication.GetCurrentUserIdentity();

            if (loggedInUser != null)
            {
                DatabaseContext db = System.Web.Mvc.DependencyResolver.Current.GetService(typeof(DatabaseContext)) as DatabaseContext;

                return(db.Users.First(
                           u => u.IdentityProvider == (int)loggedInUser.IdentityProvider && u.IdentityProviderIssuedUserId == loggedInUser.IdentityProviderIssuedId));
            }

            return(null);
        }
Пример #6
0
        public ActionResult Feedback()
        {
            FeedbackModel model = new FeedbackModel();

            // If the user is logged in, fill values that we know already
            if (Request.IsAuthenticated)
            {
                LoggedInUserIdentity userIdentity = Authentication.GetCurrentUserIdentity();

                model.Name         = userIdentity.FirstName + " " + userIdentity.LastName;
                model.EmailAddress = userIdentity.EmailAddress;
            }

            return(View(model));
        }
Пример #7
0
        private static void SetAuthenticationCookie(LoggedInUserIdentity userIdentity, bool rememberUser = false)
        {
            // Get or create current authentication cookie
            HttpCookie cookie = FormsAuthentication.GetAuthCookie(userIdentity.EmailAddress, rememberUser);
            FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);

            // Append user information to the cookie
            FormsAuthenticationTicket ticketWithUserData =
                new FormsAuthenticationTicket(ticket.Version, ticket.Name,
                                              ticket.IssueDate, ticket.Expiration,
                                              ticket.IsPersistent, JsonConvert.SerializeObject(userIdentity));

            cookie.Value = FormsAuthentication.Encrypt(ticketWithUserData);

            // Set the cookie as the current cookie
            HttpContext.Current.Response.Cookies.Add(cookie);
        }
Пример #8
0
        public static void SignOut()
        {
            LoggedInUserIdentity currentUser = Authentication.GetCurrentUserIdentity();

            // If the current user is not a stockwinners user, delete their third party authorization state
            if (currentUser != null && currentUser.IdentityProvider != IdentityProvider.Stockwinners)
            {
                IAuthorizationState authorizationState = AuthenticationClientFactory.Instance.GetAuthenticationClient(currentUser.IdentityProvider).ProcessUserAuthorization();

                if (authorizationState != null)
                {
                    authorizationState.Delete();
                }
            }

            // Sign out of regular forms authentication
            FormsAuthentication.SignOut();
        }
 static Guid GetUserId(LoggedInUserIdentity loggedInUserIdentity)
 {
     return(Guid.Parse(loggedInUserIdentity.JwTokenClaims.First(x => x.Type.Equals("userguid")).Value));
 }
 static bool HasRole(LoggedInUserIdentity loggedInUserIdentity, string administrator)
 {
     return(loggedInUserIdentity.Claims.Any(x => x.Equals(administrator)));
 }
Пример #11
0
        /// <summary>
        /// Returns false if the user already exists and is banned, otherwise returns true.
        /// </summary>
        /// <param name="userIdentity"></param>
        /// <returns></returns>
        private static bool EnsureUserExists(LoggedInUserIdentity userIdentity)
        {
            bool isAccepted = true;

            DatabaseContext database = System.Web.Mvc.DependencyResolver.Current.GetService(typeof(DatabaseContext)) as DatabaseContext;

            var existingUser = (from user in database.Users
                                where user.IdentityProvider == (int)userIdentity.IdentityProvider && user.IdentityProviderIssuedUserId == userIdentity.IdentityProviderIssuedId
                                select user).FirstOrDefault();

            if (existingUser == null)
            {
                var existingUserWithSameEmail = (from user in database.Users
                                                 where user.EmailAddress == userIdentity.EmailAddress
                                                 select user).FirstOrDefault();

                // Create new user account
                User newUser = new User()
                {
                    FirstName                    = userIdentity.FirstName,
                    LastName                     = userIdentity.LastName,
                    EmailAddress                 = userIdentity.EmailAddress,
                    IdentityProvider             = (int)userIdentity.IdentityProvider,
                    IdentityProviderIssuedUserId = userIdentity.IdentityProviderIssuedId,
                    SignUpDate                   = DateTime.UtcNow,
                    LastLoginDate                = DateTime.UtcNow,
                };

                // No user exists, check to see if another account with the same email exists and if so mark the trial date of the duplicate account
                // and also its subscription.
                // Use the trial date to ensure users with the same email can't cheat the system by logging into multiple providers. Further, use the
                // subscription so that if a user by mistake uses another of its identity providers, he/she still gets his subscription
                if (existingUserWithSameEmail != null)
                {
                    newUser.TrialExpiryDate      = existingUserWithSameEmail.TrialExpiryDate;
                    newUser.Subscription         = existingUserWithSameEmail.Subscription;
                    newUser.SubscriptionId       = existingUserWithSameEmail.SubscriptionId;
                    newUser.NotificationSettings = existingUserWithSameEmail.NotificationSettings;
                    newUser.IsBanned             = existingUserWithSameEmail.IsBanned;

                    if (newUser.SubscriptionId.HasValue)
                    {
                        newUser.Subscriptions.Add(newUser.Subscription);
                    }

                    // Copy user roles
                    newUser.Roles = existingUserWithSameEmail.Roles;
                }
                else
                {
                    // By default send all types of emails to users
                    newUser.NotificationSettings = new NotificationSettings()
                    {
                        ReceiveStockPicks           = true,
                        ReceiveOptionPicks          = true,
                        ReceiveGeneralAnnouncements = true,
                        ReceiveDailyAlerts          = true,
                        ReceiveWeeklyAlerts         = true
                    };

                    // Provide a 14 day trial membership
                    newUser.TrialExpiryDate = DateTime.UtcNow.AddDays(15);

                    // New users are not banned by default
                    newUser.IsBanned = false;

                    // New users are added to the member role by default
                    newUser.Roles = new List <Role>(new Role[] { database.Roles.Where(r => r.Name == PredefinedRoles.Member).Single() });
                }

                database.Users.Add(newUser);

                // If this is truly a new user, then send him/her a welcome email
                if (existingUserWithSameEmail == null)
                {
                    newUser.SendWelcomeEmail();
                }
            }
            else
            {
                // The user already exists! Ensure he/she is not banned and also update last logon date
                existingUser.LastLoginDate = DateTime.UtcNow;
                isAccepted = !existingUser.IsBanned;
            }

            database.SaveChanges();

            return(isAccepted);
        }