/// <summary>
        /// Attempt to locate an application user that matches the incoming oauth provider's user
        /// </summary>
        /// <param name="userConductor"></param>
        /// <param name="metadataConductor"></param>
        /// <param name="oauthUser"></param>
        /// <returns></returns>
        private static TUser FindUserByOAuthUser(
            IRepositoryConductor <TUser> userConductor,
            IRepositoryConductor <TUserMetadata> metadataConductor,
            IOAuthUser oauthUser
            )
        {
            // Match by OAuth External Id
            var user = FindUserByMetadata(metadataConductor, oauthUser);

            if (user != null)
            {
                return(user);
            }

            // Match by email address
            user = FindUserByEmail(userConductor, oauthUser.Email);

            // Connect user to OAuth External Id for future requests
            if (user != null)
            {
                CreateMetadata(metadataConductor, user.Id, oauthUser);
            }

            return(user);
        }
 private static TUser InstantiateUser(IOAuthUser oauthUser) => new TUser
 {
     Email     = oauthUser.Email,
     FirstName = oauthUser.FirstName,
     LastName  = oauthUser.LastName,
     UserName  = oauthUser.Email
 };
Exemplo n.º 3
0
        IEnumerable<IPhoto> IPhotoService.GetPhotos(IOAuthUser owner, string tag)
        {
            var photos = PeopleGetPhotos(owner.Id, PhotoSearchExtras.Tags).ToList();
            if (!String.IsNullOrWhiteSpace(tag))
            {
                photos = photos.Where(p => p.Tags.Any(t => t == tag)).ToList();
            }

            return photos.Select(p => new Photo { Id = p.PhotoId, Name = p.Title, ThumbNailUrl = p.ThumbnailUrl, SmallUrl = p.SmallUrl, LargeUrl = p.LargeUrl, Owner = owner, Tags = p.Tags });
        }
        private static TUser FindOrCreateUser(
            IOAuthUser oauthUser,
            IRepositoryConductor <TUser> conductor,
            IRepositoryConductor <TUserMetadata> metadataConductor,
            ILogger <IOAuthUser> logger
            )
        {
            var user = FindUserByOAuthUser(conductor, metadataConductor, oauthUser);

            if (user != null)
            {
                return(user);
            }

            user = CreateUser(conductor, oauthUser);
            CreateMetadata(metadataConductor, user.Id, oauthUser);

            logger.LogInformation($"Created new {nameof(TUser)} '{user.Id}' for {oauthUser.UserMetadataName} {nameof(TOAuthUser)} '{oauthUser.Id}'");

            return(user);
        }
        public void SetUp()
        {
            _oAuthUserOne = RMM.GenerateStub<IOAuthUser>();
            _oAuthUserOne.Id = "Id1";
            _oAuthUserOne.UserName = "******";
            _oAuthUserOne.FullName = "User One Of America";
            _oAuthUserOne.AccessToken = "72157626737672178-oneoneoneoneone1";
            _oAuthUserOne.AccessTokenSecret = "111111111111111";

            _oAuthService = RMM.GenerateStub<IOAuthService>();
            _oAuthService.Stub(s => s.GetOAuthAuthenticationUrl(null)).IgnoreArguments().Return(OAuthURL);
            _oAuthService.Stub(s => s.GetOAuthUser(@"72157626737672178-oneoneoneoneone1", @"5d1b96a26b494074")).Return(_oAuthUserOne);

            _userOneTags = new List<string> { "children", "school", "parents" };
            _photoOne = RMM.GenerateStub<IPhoto>();
            _photoOne.Id = @"PhotoIdOne";
            _photoOne.Name = @"PhotoIdOne";
            _photoOne.LargeUrl = @"http://www.flickr.com/large/one.jpg";
            _photoOne.ThumbNailUrl = @"http://www.flickr.com/tn/one.jpg";
            _photoOne.Owner = _oAuthUserOne;
            _photoOne.Tags = new List<string> { "children", "school" };
            _photoTwo = RMM.GenerateStub<IPhoto>();
            _photoTwo.Id = @"PhotoIdTwo";
            _photoTwo.Name = @"PhotoIdTwo";
            _photoTwo.LargeUrl = @"http://www.flickr.com/large/two.jpg";
            _photoTwo.ThumbNailUrl = @"http://www.flickr.com/tn/two.jpg";
            _photoTwo.Owner = _oAuthUserOne;
            _photoTwo.Tags = new List<string> { "parents" };
            _photoThree = RMM.GenerateStub<IPhoto>();
            _photoThree.Id = @"PhotoIdThree";
            _photoThree.Name = @"PhotoIdThree";
            _photoThree.LargeUrl = @"http://www.flickr.com/large/three.jpg";
            _photoThree.ThumbNailUrl = @"http://www.flickr.com/tn/three.jpg";
            _photoThree.Owner = _oAuthUserOne;
            _photoThree.Tags = new List<string> { "parents", "school" };

            _photosUserOne = new List<IPhoto> { _photoOne, _photoTwo, _photoThree };

            _photoService = RMM.GenerateMock<IPhotoService>();
            _photoService.Stub(s => s.GetPhotos(_oAuthUserOne, String.Empty)).Return(_photosUserOne);
            _photoService.Stub(s => s.GetPhotos(_oAuthUserOne, "school")).Return(_photosUserOne.Where(p => p.Tags.Contains("school")));
            _photoService.Stub(s => s.GetAllTags(_oAuthUserOne)).Return(_userOneTags);

            _builder = new TestControllerBuilder();
            _controller = new HomeController();
            _builder.InitializeController(_controller);

            ObjectFactory.Inject<IOAuthService>(_oAuthService);
            ObjectFactory.Inject<IPhotoService>(_photoService);
        }
 private static TUserMetadata CreateMetadata(IRepositoryConductor <TUserMetadata> conductor, long userId, IOAuthUser oauthUser)
 => CreateMetadata(conductor, UserMetadataTypes.ExternalUserId, oauthUser.UserMetadataName, userId, oauthUser.Id);
        private static TUser FindUserByMetadata(IRepositoryConductor <TUserMetadata> metadataConductor, IOAuthUser oauthUser)
        {
            var externalIdMetadataResult = metadataConductor
                                           .FindAll(e =>
                                                    e.Name == oauthUser.UserMetadataName &&
                                                    e.Type == UserMetadataTypes.ExternalUserId &&
                                                    e.Value == oauthUser.Id,
                                                    includeProperties: nameof(IUserMetadata.User)
                                                    )
                                           .ThrowIfAnyErrors()
                                           .ResultObject;

            return(externalIdMetadataResult.FirstOrDefault()?.User as TUser);
        }
 private static TUser CreateUser(IRepositoryConductor <TUser> conductor, IOAuthUser oauthUser)
 => CreateOrThrow(conductor, InstantiateUser(oauthUser));
Exemplo n.º 9
0
 IEnumerable<string> IPhotoService.GetAllTags(IOAuthUser owner)
 {
     return PeopleGetPhotos(owner.Id, PhotoSearchExtras.Tags).SelectMany(p => p.Tags).Where(t => !String.IsNullOrWhiteSpace(t)).Distinct();
 }