Esempio n. 1
0
        public ActionResult Register(string email, string password, string password2)
        {
            if (!IsEmailAddress(email))
            {
                return(View(new RegisterVM
                {
                    ErrorMessage = "You must enter a valid email address"
                }));
            }

            if (email.IsNullOrEmpty() || password.IsNullOrEmpty() || password2.IsNullOrEmpty())
            {
                return(View(new RegisterVM
                {
                    ErrorMessage = "All fields marked with * are mandatory"
                }));
            }

            if (password != password2)
            {
                return(View(new RegisterVM
                {
                    ErrorMessage = "Passwords do not match"
                }));
            }

            if (!PasswordMeetsPolicy(password, PwdPolicy))
            {
                return(View(new RegisterVM
                {
                    ErrorMessage = "Password must be at least 6 characters long"
                }));
            }

            var user = userService.GetUser(email);

            if (user != null)
            {
                return(View(new RegisterVM
                {
                    ErrorMessage = "That email is already taken"
                }));
            }

            var salt = PWDTK.GetRandomSalt(saltSize);
            var hash = PWDTK.PasswordToHash(salt, password, Configuration.GetHashIterations());

            user = new User
            {
                UserName      = email,
                Salt          = salt,
                Password      = hash,
                LoginProvider = LoginProvider.Internal
            };

            user.Id = userService.InsertUser(user, () => Redis.AddUser(user));
            FormsAuthentication.SetAuthCookie(user.Id.ToString(), createPersistentCookie: true);

            return(RedirectToAction("Index", "Home"));
        }
Esempio n. 2
0
        public ActionResult AuthenticatedWithGoogle()
        {
            var code = Request["code"];

            if (!code.IsNullOrEmpty())
            {
                var token = GetTokenFromGoogle(code);
                if (!token.IsNullOrEmpty())
                {
                    var profileJson = GetGoogleProfileInfoFromToken(token);
                    if (!profileJson.IsNullOrEmpty())
                    {
                        var json = JsonConvert.DeserializeObject(profileJson) as JObject;
                        var user = userService.GetUser(json["id"].Value <string>(), LoginProvider.Google);
                        if (user == null)
                        {
                            user = new User
                            {
                                RemoteId      = json["id"].Value <string>(),
                                UserName      = json["given_name"].Value <string>() + " " + json["family_name"].Value <string>(),
                                LoginProvider = LoginProvider.Google,
                                Email         = json["email"].Value <string>(),
                                FirstName     = json["given_name"].Value <string>(),
                                LastName      = json["family_name"].Value <string>()
                            };
                            if (user.UserName.IsNullOrEmpty())
                            {
                                user.UserName = user.Email;
                            }
                            user.Id = userService.InsertUser(user, () => Redis.AddUser(user));
                        }
                        FormsAuthentication.SetAuthCookie(user.Id.ToString(), createPersistentCookie: true);

                        var returnUrl = Request["state"];
                        if (!returnUrl.IsNullOrEmpty())
                        {
                            Response.Redirect(returnUrl, true);
                        }
                        else
                        {
                            return(RedirectToAction("Index", "Home"));
                        }

                        return(null);
                    }
                }
            }
            return(null);
        }
Esempio n. 3
0
        public ActionResult AuthenticatedWithTwitter()
        {
            var oAuth = new oAuthTwitter();

            oAuth.AccessTokenGet(Request["oauth_token"], Request["oauth_verifier"]);

            if (oAuth.UserName.IsNullOrEmpty())
            {
                return(null);
            }
            var userId   = oAuth.UserId;
            var userName = oAuth.UserName;

            if (userId.IsNullOrEmpty())
            {
                return(null);
            }

            var user = userService.GetUser(userId, LoginProvider.Twitter);

            if (user == null)
            {
                user = new User
                {
                    FirstName     = userName,
                    UserName      = userName,
                    LoginProvider = LoginProvider.Twitter,
                    RemoteId      = userId
                };
                user.Id = userService.InsertUser(user, () => Redis.AddUser(user));
            }
            FormsAuthentication.SetAuthCookie(user.Id.ToString(), createPersistentCookie: true);
            var returnUrl = Request["state"];

            if (!returnUrl.IsNullOrEmpty())
            {
                Response.Redirect(returnUrl, true);
            }
            else
            {
                return(RedirectToAction("Index", "Home"));
            }

            return(null);
        }
Esempio n. 4
0
        public ActionResult AuthenticatedWithFacebook()
        {
            var result = facebookClient.Authorize(string.Empty);

            if (result != LoginResult.Authorized)
            {
                return(RedirectToAction("Login"));
            }

            var facebookUser = facebookClient.GetCurrentUser();
            var user         = userService.GetUser(facebookUser.Id, LoginProvider.Facebook);

            if (user == null)
            {
                user = new User
                {
                    RemoteId      = facebookUser.Id,
                    UserName      = facebookUser.FirstName + " " + facebookUser.LastName,
                    LoginProvider = LoginProvider.Facebook,
                    Email         = facebookUser.Email,
                    FirstName     = facebookUser.FirstName,
                    LastName      = facebookUser.LastName
                };
                user.Id = userService.InsertUser(user, () => Redis.AddUser(user));
            }
            FormsAuthentication.SetAuthCookie(user.Id.ToString(), createPersistentCookie: true);

            var returnUrl = Request["state"];

            if (!returnUrl.IsNullOrEmpty())
            {
                Response.Redirect(returnUrl, true);
            }
            else
            {
                return(RedirectToAction("Index", "Home"));
            }

            return(null);
        }
Esempio n. 5
0
        public ActionResult GetUser()
        {
            var json = GetJson(HttpContext.Request);

            ValidateJson(json);

            User          user = null;
            LoginProvider lp   = LoginProvider.Internal;

            switch (json["provider"].Value <string>())
            {
            case "google":
                user = UserService.GetUser(json["id"].Value <string>(), LoginProvider.Google);
                lp   = LoginProvider.Google;
                break;

            case "twitter":
                user = UserService.GetUser(json["id"].Value <string>(), LoginProvider.Twitter);
                lp   = LoginProvider.Twitter;
                break;

            case "facebook":
                user = UserService.GetUser(json["id"].Value <string>(), LoginProvider.Facebook);
                lp   = LoginProvider.Facebook;
                break;

            case "internal":
                string userName = json["username"].Value <string>();
                string password = json["password"].Value <string>();

                user = UserService.GetUser(userName);
                if (user != null)
                {
                    if (!PWDTK.ComparePasswordToHash(user.Salt, password, user.Password, Configuration.GetHashIterations()))
                    {
                        user = null;
                    }
                }
                lp = LoginProvider.Internal;
                break;
            }


            if (user == null && lp != LoginProvider.Internal)  //create the user if doesn't exist
            {
                user = new User
                {
                    RemoteId      = json["id"].Value <string>(),
                    LoginProvider = lp
                };
                switch (lp)
                {
                case LoginProvider.Twitter:
                    user.UserName = json["screenName"].Value <string>();
                    break;

                case LoginProvider.Facebook:
                    user.FirstName = json["firstname"].Value <string>();
                    user.LastName  = json["lastname"].Value <string>();
                    user.UserName  = json["name"].Value <string>();
                    user.Email     = json["email"].Value <string>();
                    break;

                case LoginProvider.Google:
                    user.UserName = json["email"].Value <string>();
                    user.Email    = json["email"].Value <string>();
                    break;
                }

                int newId = UserService.InsertUser(user, () => Redis.AddUser(user));
                user = UserService.GetUser(newId);
            }

            return(Json(user != null ? new
            {
                id = user.Id,
                guid = user.GUID
            } : null));
        }
Esempio n. 6
0
        public void TestGetAdd()
        {
            var redis = ConnectionMultiplexer.Connect("localhost");
            var db    = redis.GetDatabase();

            //var server = redis.GetServer(redis.GetEndPoints().First());
            //foreach (var key in server.Keys())
            //{
            //    db.KeyDelete(key);
            //}

            var weekArticles = Redis.GetArticles(27, "week");

            var sTemp = @"select * from (

                select Article.Id as 'Article.Id', Article.Name as 'Article.Name', Article.Name, Article.Published as 'Article.Published', Article.Published,
                Article.ViewsCount as 'Article.ViewsCount', Article.LikesCount as 'Article.LikesCount', Article.LikesCount,
                Article.Flagged as 'Article.Flagged', Article.FlaggedBy as 'Article.FlaggedBy',
                Article.ShortUrl as 'Article.ShortUrl',
                Feed.Id as 'Feed.Id', Feed.Name as 'Feed.Name', Feed.SiteUrl as 'Feed.SiteUrl'  from Article

                inner join Feed on Article.FeedId = Feed.Id 
                    where (Published >= '2015-08-04 00:00:00'  and Article.Flagged = 0  and Published <= '2015-08-11 23:59:00'  and Feed.Id not in (select FeedId from UserFeedIgnored where UserId = 25)  and Article.Id not in (select ArticleId from UserArticleIgnored where UserId = 25)  and Article.Id in ( select ArticleId from ArticleTag where  ArticlePublic = 1 and  TagId in (5,9,24,139,153,185,200,553,1004,1992,2221,2222,2231,2237,2251,2332,2358,2394) and ArticlePublished >= '2015-08-04 00:00:00'  and ArticlePublished <= '2015-08-11 23:59:00' ) and Article.Id not in ( select ArticleId from ArticleTag where ArticlePublic = 1 and TagId in (830) and ArticlePublished >= '2015-08-04 00:00:00'  and ArticlePublished <= '2015-08-11 00:00:00' ) and ( (Feed.Public = 1 ))
                )

                ) as T 
                    order by  LikesCount desc, Name
                ";

            var dsSelect        = new DataProvider().GetFromSelect(sTemp).ToArticlesWithAssObjects();
            var missingArticles = dsSelect.Where(a => !weekArticles.Select(ar => ar.Id).Contains(a.Id)).ToList();

            var usersSelect = "select * from User";
            var users       = new DataProvider().GetFromSelect(usersSelect).ToUsers();

            foreach (var user in users)
            {
                Redis.AddUser(user);
                foreach (var tagId in user.FavoriteTagIds)
                {
                    Redis.AddUserTag(user, tagId, user.IgnoredTagIds);
                }
            }

            var select   = @"select Id, FeedId, Name, Body, Url, ViewsCount, LikesCount, FavoriteCount, 
                            Published, ShortUrl from Article where 
                            FeedId in (select Id from Feed where Public = 1) and Flagged = 0 and
                            Published >= '" + DateTime.Now.Date.AddMonths(-1).ToMySQLString() + "'";
            var articles = new DataProvider().GetFromSelect(select, null).ToArticles().OrderBy(a => a.Published).ToList();

            var feeds = new FeedService().GetFeeds(articles.Select(a => a.FeedId).ToList());

            //add articles to hashset
            foreach (var article in articles)
            {
                article.Feed = feeds.Find(f => f.Id == article.FeedId);
                article.Tags = new FeedService().GetTagsForArticle(article.Id);

                Redis.AddArticle(article);
            }
        }
Esempio n. 7
0
        private ActionResult AuthenticateWithOpenId(string url, string returnUrl)
        {
            OpenIdRelyingParty party = new OpenIdRelyingParty();

            var response = party.GetResponse();

            if (response == null)
            {
                if (Identifier.TryParse(url, out Identifier id))
                {
                    try
                    {
                        var request = party.CreateRequest(url);
                        if (!returnUrl.IsNullOrEmpty())
                        {
                            request.AddCallbackArguments("returnUrl", returnUrl);
                        }
                        var fetch = new FetchRequest();
                        fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
                        fetch.Attributes.AddRequired(WellKnownAttributes.Name.First);
                        fetch.Attributes.AddRequired(WellKnownAttributes.Name.Last);
                        request.AddExtension(fetch);
                        return(request.RedirectingResponse.AsActionResultMvc5());
                    }
                    catch
                    {
                        return(View("Login"));
                    }
                }
                return(RedirectToAction("Login"));
            }

            switch (response.Status)
            {
            case AuthenticationStatus.Authenticated:
                var    fetch     = response.GetExtension <FetchResponse>();
                string firstName = "unknown";
                string lastName  = "unknown";
                string email     = "unknown";
                if (fetch != null)
                {
                    firstName = fetch.GetAttributeValue(WellKnownAttributes.Name.First);
                    lastName  = fetch.GetAttributeValue(WellKnownAttributes.Name.Last);
                    email     = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
                }

                var lp       = LoginProvider.Internal;
                var provider = response.Provider.Uri.AbsoluteUri.ToLower();
                if (provider.Contains("google.com"))
                {
                    lp = LoginProvider.Google;
                }

                var user = userService.GetUser(response.ClaimedIdentifier, lp);
                if (user == null)
                {
                    user = new User
                    {
                        RemoteId      = response.ClaimedIdentifier,
                        UserName      = email,
                        Email         = email,
                        FirstName     = firstName,
                        LastName      = lastName,
                        LoginProvider = lp
                    };
                    user.Id = userService.InsertUser(user, () => Redis.AddUser(user));
                }

                FormsAuthentication.SetAuthCookie(user.Id.ToString(), createPersistentCookie: true);
                if (!returnUrl.IsNullOrEmpty())
                {
                    Response.Redirect(returnUrl, true);
                }
                else
                {
                    return(RedirectToAction("Index", "Home"));
                }
                break;
            }
            return(RedirectToAction("Login"));
        }