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")); }
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); }
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); }
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); }
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)); }
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); } }
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")); }