Example #1
0
            public void DoesNotSendNoticeIfUserDoesNotAllowEmails()
            {
                var requestingOwner = new User {
                    Username = "******", EmailAddress = "*****@*****.**"
                };
                var newOwner = new User {
                    Username = "******", EmailAddress = "*****@*****.**"
                };
                var package = new PackageRegistration {
                    Id = "CoolStuff"
                };

                var request = new PackageOwnerRequest
                {
                    PackageRegistration = package,
                    RequestingOwner     = requestingOwner,
                    NewOwner            = newOwner
                };

                var messageService = TestableMessageService.Create(
                    GetService <AuthenticationService>(),
                    GetConfigurationService());

                messageService.SendPackageOwnerRequestCancellationNotice(requestingOwner, newOwner, package);

                Assert.Empty(messageService.MockMailSender.Sent);
            }
Example #2
0
            public void SendsNotice()
            {
                var requestingOwner = new User {
                    Username = "******", EmailAddress = "*****@*****.**", EmailAllowed = true
                };
                var newOwner = new User {
                    Username = "******", EmailAddress = "*****@*****.**"
                };
                var package = new PackageRegistration {
                    Id = "CoolStuff"
                };

                var request = new PackageOwnerRequest
                {
                    PackageRegistration = package,
                    RequestingOwner     = requestingOwner,
                    NewOwner            = newOwner
                };

                var messageService = TestableMessageService.Create(
                    GetService <AuthenticationService>(),
                    GetConfigurationService());

                messageService.SendPackageOwnerRequestRejectionNotice(requestingOwner, newOwner, package);
                var message = messageService.MockMailSender.Sent.Last();

                Assert.Equal(requestingOwner.EmailAddress, message.To[0].Address);
                Assert.Equal(TestGalleryNoReplyAddress.Address, message.From.Address);
                Assert.Equal(newOwner.EmailAddress, message.ReplyToList.Single().Address);
                Assert.Equal("[Joe Shmoe] The user 'Noob' has rejected your request to add them as an owner of the package 'CoolStuff'.", message.Subject);
                Assert.Contains("The user 'Noob' has rejected your request to add them as an owner of the package 'CoolStuff'.", message.Body);
            }
        public async Task DeletePackageOwnershipRequest(PackageOwnerRequest request, bool commitChanges = true)
        {
            _packageOwnerRequestRepository.DeleteOnCommit(request);

            if (commitChanges)
            {
                await _packageOwnerRequestRepository.CommitChangesAsync();
            }
        }
Example #4
0
        public OwnerRequestsListItemViewModel(PackageOwnerRequest request, IPackageService packageService, User currentUser)
        {
            Request = request;

            var package = packageService.FindPackageByIdAndVersion(request.PackageRegistration.Id, version: null, semVerLevelKey: SemVerLevelKey.SemVer2, allowPrerelease: true);

            Package = new ListPackageItemViewModel(package, currentUser);

            CanAccept = ActionsRequiringPermissions.HandlePackageOwnershipRequest.CheckPermissions(currentUser, Request.NewOwner) == PermissionsCheckResult.Allowed;
            CanCancel = Package.CanManageOwners;
        }
Example #5
0
        private OwnerRequestsListItemViewModel CreateOwnerRequestsListItemViewModel(PackageOwnerRequest request, User currentUser)
        {
            var package          = PackageService.FindPackageByIdAndVersion(request.PackageRegistration.Id, version: null, semVerLevelKey: SemVerLevelKey.SemVer2, allowPrerelease: true);
            var packageViewModel = _listPackageItemViewModelFactory.Create(package, currentUser);

            return(new OwnerRequestsListItemViewModel
            {
                Request = request,
                Package = packageViewModel,
                CanAccept = ActionsRequiringPermissions.HandlePackageOwnershipRequest.CheckPermissions(currentUser, request.NewOwner) == PermissionsCheckResult.Allowed,
                CanCancel = packageViewModel.CanManageOwners,
            });
        }
Example #6
0
        public async Task<PackageOwnerRequest> CreatePackageOwnerRequestAsync(PackageRegistration package, User currentOwner, User newOwner)
        {
            var existingRequest = FindExistingPackageOwnerRequest(package, newOwner);
            if (existingRequest != null)
            {
                return existingRequest;
            }

            var newRequest = new PackageOwnerRequest
            {
                PackageRegistrationKey = package.Key,
                RequestingOwnerKey = currentOwner.Key,
                NewOwnerKey = newOwner.Key,
                ConfirmationCode = CryptographyService.GenerateToken(),
                RequestDate = DateTime.UtcNow
            };

            _packageOwnerRequestRepository.InsertOnCommit(newRequest);
            await _packageOwnerRequestRepository.CommitChangesAsync();
            return newRequest;
        }
Example #7
0
        public PackageOwnerRequest CreatePackageOwnerRequest(PackageRegistration package, User currentOwner, User newOwner)
        {
            var existingRequest = FindExistingPackageOwnerRequest(package, newOwner);

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

            var newRequest = new PackageOwnerRequest
            {
                PackageRegistrationKey = package.Key,
                RequestingOwnerKey     = currentOwner.Key,
                NewOwnerKey            = newOwner.Key,
                ConfirmationCode       = Crypto.GenerateToken(),
                RequestDate            = DateTime.UtcNow
            };

            _packageOwnerRequestRepository.InsertOnCommit(newRequest);
            _packageOwnerRequestRepository.CommitChanges();
            return(newRequest);
        }
        public async Task <PackageOwnerRequest> AddPackageOwnershipRequest(PackageRegistration package, User requestingOwner, User newOwner)
        {
            if (package == null)
            {
                throw new ArgumentNullException(nameof(package));
            }

            if (requestingOwner == null)
            {
                throw new ArgumentNullException(nameof(requestingOwner));
            }

            if (newOwner == null)
            {
                throw new ArgumentNullException(nameof(newOwner));
            }

            var existingRequest = GetPackageOwnershipRequests(package: package, newOwner: newOwner).FirstOrDefault();

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

            var newRequest = new PackageOwnerRequest
            {
                PackageRegistrationKey = package.Key,
                RequestingOwnerKey     = requestingOwner.Key,
                NewOwnerKey            = newOwner.Key,
                ConfirmationCode       = CryptographyService.GenerateToken(),
                RequestDate            = DateTime.UtcNow
            };

            _packageOwnerRequestRepository.InsertOnCommit(newRequest);
            await _packageOwnerRequestRepository.CommitChangesAsync();

            return(newRequest);
        }
            public async Task RequestIsDeletedSuccessfully()
            {
                var package = new PackageRegistration {
                    Key = 2, Id = "pkg42"
                };
                var user1 = new User {
                    Key = 101, Username = "******"
                };
                var packageOwnerRequestService = new Mock <IPackageOwnerRequestService>();
                var pendingRequest             = new PackageOwnerRequest
                {
                    PackageRegistration = package,
                    NewOwner            = user1,
                    ConfirmationCode    = "token"
                };

                packageOwnerRequestService.Setup(x => x.GetPackageOwnershipRequests(It.IsAny <PackageRegistration>(), It.IsAny <User>(), It.IsAny <User>())).Returns(new[] { pendingRequest }).Verifiable();
                packageOwnerRequestService.Setup(x => x.DeletePackageOwnershipRequest(It.IsAny <PackageOwnerRequest>(), true)).Returns(Task.CompletedTask).Verifiable();
                var service = CreateService(packageOwnerRequestService: packageOwnerRequestService, useDefaultSetup: false);
                await service.DeletePackageOwnershipRequestAsync(packageRegistration : package, newOwner : user1);

                packageOwnerRequestService.Verify(x => x.DeletePackageOwnershipRequest(pendingRequest, true));
            }
            public void RemovesRelatedPendingOwnerRequest()
            {
                var packageOwnerRequest = new PackageOwnerRequest { PackageRegistrationKey = 2, NewOwnerKey = 100, ConfirmationCode = "secret-token" };
                var package = new PackageRegistration { Key = 2, Id = "pkg42" };
                var pendingOwner = new User { Key = 100, Username = "******" };
                var repository = new Mock<IEntityRepository<PackageOwnerRequest>>();
                repository.Setup(r => r.DeleteOnCommit(packageOwnerRequest)).Verifiable();
                repository.Setup(r => r.CommitChanges()).Verifiable();
                repository.Setup(r => r.GetAll()).Returns(
                    new[]
                        {
                            new PackageOwnerRequest { PackageRegistrationKey = 1, NewOwnerKey = 100, ConfirmationCode = "super-secret-token" },
                            packageOwnerRequest
                        }.AsQueryable());
                var service = CreateService(packageOwnerRequestRepo: repository);

                service.AddPackageOwner(package, pendingOwner);

                repository.VerifyAll();
            }
            public void RemovesPendingPackageOwner()
            {
                var packageOwnerRequest = new PackageOwnerRequest
                    {
                        PackageRegistrationKey = 1,
                        RequestingOwnerKey = 99,
                        NewOwnerKey = 200
                    };
                var packageOwnerRequestRepository = new Mock<IEntityRepository<PackageOwnerRequest>>();
                packageOwnerRequestRepository.Setup(r => r.GetAll()).Returns(new[] { packageOwnerRequest }.AsQueryable());
                packageOwnerRequestRepository.Setup(r => r.DeleteOnCommit(packageOwnerRequest)).Verifiable();
                packageOwnerRequestRepository.Setup(r => r.CommitChanges()).Verifiable();
                var service = CreateService(packageOwnerRequestRepo: packageOwnerRequestRepository);
                var pendingOwner = new User { Key = 200 };
                var owner = new User();
                var package = new PackageRegistration { Key = 1, Owners = new List<User> { owner } };

                service.RemovePackageOwner(package, pendingOwner);

                Assert.Contains(owner, package.Owners);
                packageOwnerRequestRepository.VerifyAll();
            }
        public PackageOwnerRequest CreatePackageOwnerRequest(PackageRegistration package, User currentOwner, User newOwner)
        {
            var existingRequest = FindExistingPackageOwnerRequest(package, newOwner);
            if (existingRequest != null)
            {
                return existingRequest;
            }

            var newRequest = new PackageOwnerRequest
                {
                    PackageRegistrationKey = package.Key,
                    RequestingOwnerKey = currentOwner.Key,
                    NewOwnerKey = newOwner.Key,
                    ConfirmationCode = Crypto.GenerateToken(),
                    RequestDate = DateTime.UtcNow
                };

            _packageOwnerRequestRepository.InsertOnCommit(newRequest);
            _packageOwnerRequestRepository.CommitChanges();
            return newRequest;
        }
 public async Task DeletePackageOwnershipRequest(PackageOwnerRequest request)
 {
     _packageOwnerRequestRepository.DeleteOnCommit(request);
     await _packageOwnerRequestRepository.CommitChangesAsync();
 }
        public PackageOwnerRequest CreatePackageOwnerRequest(PackageRegistration package, User currentOwner, User newOwner)
        {
            var existingRequest = FindExistingPackageOwnerRequest(package, newOwner);
            if (existingRequest != null) return existingRequest;

            var newRequest = new PackageOwnerRequest
            {
                PackageRegistrationKey = package.Key,
                RequestingOwnerKey = currentOwner.Key,
                NewOwnerKey = newOwner.Key,
                ConfirmationCode = cryptoSvc.GenerateToken(),
                RequestDate = DateTime.UtcNow
            };

            packageOwnerRequestRepository.InsertOnCommit(newRequest);
            packageOwnerRequestRepository.CommitChanges();
            InvalidateCache(package);
            Cache.InvalidateCacheItem(string.Format("maintainerpackages-{0}", newOwner.Username));
            NotifyIndexingService(package.Packages.FirstOrDefault());

            return newRequest;
        }
Example #15
0
 public OwnerRequestsListItemViewModel(PackageOwnerRequest request, IPackageService packageService)
 {
     Request = request;
     Package = packageService.FindPackageByIdAndVersion(request.PackageRegistration.Id, version: null, semVerLevelKey: SemVerLevelKey.SemVer2, allowPrerelease: true);
 }