Beispiel #1
0
        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);
        }
Beispiel #2
0
        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 }));
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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());
        }
Beispiel #5
0
 public async Task <ClaimsIdentity> CreateIdentity(AngoraUser user)
 {
     return(await _userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie));
 }
Beispiel #6
0
 public async Task <IdentityResult> UpdateUser(AngoraUser user)
 {
     return(await _userManager.UpdateAsync(user));
 }