private async Task SignInAsync(AngoraUser user) { HttpContext.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie); var identity = await _userService.CreateIdentity(user); HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity); }
public async Task <ActionResult> Post(long id, string text, HttpPostedFileBase picture = null, bool shareOnFacebook = false, bool tweet = false) { MediaItem mediaItem = null; if (picture != null) { MemoryStream target = new MemoryStream(); picture.InputStream.CopyTo(target); var pictureData = target.ToArray(); var extension = Path.GetExtension(picture.FileName).TrimStart('.'); string blob = _fooCDNService.CreateNewBlob(string.Format("image/{0}", extension)); //async await _fooCDNService.PostToBlob(blob, pictureData, picture.FileName); mediaItem = new MediaItem { FooCDNBlob = blob, Size = (ulong)pictureData.LongLength, MediaType = MediaType.Photo }; } var post = new Post { User = await _userService.FindUserById(User.Identity.GetUserId()), MediaItem = mediaItem, PostText = text, PostTime = DateTime.Now, }; if (shareOnFacebook) { AngoraUser user = await _userService.FindUserById(User.Identity.GetUserId()); string e = _eventService.FindById(id).Name; var fbUser = new FacebookClient(user.FacebookAccessToken); var parameters = new Dictionary <string, object> { { "message", "I posted this to the event '" + e + "' on Auderus: \n" + text } }; if (picture != null) { parameters.Add("picture", post.MediaItem.GetUrl()); } fbUser.Post("me/feed", parameters); } _postService.AddOrUpdatePostToEvent(id, post); _unitOfWork.SaveChanges(); return(RedirectToAction("Details", new { id = id })); }
public void SetResponse(long eventId, AngoraUser user, SchedulerResponse response, DateTime time) { var vent = _eventService.FindById(eventId); vent.Scheduler = vent.Scheduler ?? new EventScheduler(); var resp = vent.Scheduler.Responses.FirstOrDefault(r => r.User.Id.Equals(user.Id) && r.Time.CompareTo(time) == 0); if (resp == null) { vent.Scheduler.Responses.Add(new EventSchedulerResponse { User = user, Response = response, Time = time }); } else { resp.Response = response; } _eventService.Update(vent); }
public async Task <ActionResult> ExternalLoginCallback(string returnUrl) { var loginInfo = HttpContext.GetOwinContext().Authentication.GetExternalLoginInfo(); if (loginInfo == null) { return(RedirectToAction("Login", new { returnUrl })); } var addingFacebook = "Facebook".Equals(loginInfo.Login.LoginProvider, StringComparison.OrdinalIgnoreCase); var addingTwitter = "Twitter".Equals(loginInfo.Login.LoginProvider, StringComparison.OrdinalIgnoreCase); // Sign in the user with this external login provider if the user already has a login var user = _userService.FindUser(loginInfo.Login); if (user != null) { await SignInAsync(user); return(Redirect(returnUrl ?? Url.Action("Index", "Home"))); } if (addingFacebook) { ClaimsIdentity externalCookie = await HttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie); var accessToken = GetExtendedFacebookAccessToken(externalCookie.Claims.First(x => x.Type.Contains("FacebookAccessToken")).Value); dynamic facebookUser = new FacebookClient(accessToken).Get(loginInfo.Login.ProviderKey); user = new AngoraUser() { FacebookAccessToken = accessToken, FirstName = facebookUser.first_name, LastName = facebookUser.last_name, EmailAddress = facebookUser.email, Location = facebookUser.location != null ? facebookUser.location.name : null, Birthday = Convert.ToDateTime(facebookUser.birthday) }; } else if (addingTwitter) { ClaimsIdentity externalCookie = await HttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie); var accessToken = externalCookie.Claims.First(x => x.Type.Contains("TwitterAccessToken")).Value; var accessSecret = externalCookie.Claims.First(x => x.Type.Contains("TwitterAccessSecret")).Value; var twitterService = new TwitterService("o8QTwfzt6CdfDGndyqvLrg", "jqU2tq5QVUkK6JdFA22wtXZNrTumatvG9VpPAfK5M", accessToken, accessSecret); var twitterUser = twitterService.GetUserProfile(new GetUserProfileOptions()); string firstName, lastName; if (twitterUser.Name.Contains(' ')) { var names = twitterUser.Name.Split(' '); firstName = names[0]; lastName = names[1]; } else { firstName = twitterUser.Name; lastName = ""; } user = new AngoraUser() { FirstName = firstName, LastName = lastName, Location = twitterUser.Location, TwitterAccessToken = accessToken, TwitterAccessSecret = accessSecret, }; } else { //if this happens, something went very wrong //login provider isn't facebook or twitter return(View("Login", new ReturnUrlViewModel { ReturnUrl = returnUrl })); } //TODO, we need a better solution for usernames, or a convenient way to make them irrelevant. // we only really use it in the navbar, so perhaps some sort of global model? // viewbag would be perfect, but gross. user.UserName = user.Id; var create = await _userService.CreateUser(user); if (create.Succeeded) { var add = await _userService.AddLogin(user.Id, loginInfo.Login); if (add.Succeeded) { await SignInAsync(user); var model = new ManageAccountViewModel(); model.User = user; model.Successes.Add("Welcome to Angora! Please fill out your information."); model.IsFirstTimeLogin = true; return(await Index(model)); } } // TODO .... uhhhhh return(new EmptyResult()); }
public async Task <ClaimsIdentity> CreateIdentity(AngoraUser user) { return(await _userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie)); }
public async Task <IdentityResult> UpdateUser(AngoraUser user) { return(await _userManager.UpdateAsync(user)); }