mirror of
https://github.com/bitwarden/server.git
synced 2025-04-05 13:08:17 -05:00

* Get limited life attachment download URL This change limits url download to a 1min lifetime. This requires moving to a new container to allow for non-public blob access. Clients will have to call GetAttachmentData api function to receive the download URL. For backwards compatibility, attachment URLs are still present, but will not work for attachments stored in non-public access blobs. * Make GlobalSettings interface for testing * Test LocalAttachmentStorageService equivalence * Remove comment * Add missing globalSettings using * Simplify default attachment container * Default to attachments containe for existing methods A new upload method will be made for uploading to attachments-v2. For compatibility for clients which don't use these new methods, we need to still use the old container. The new container will be used only for new uploads * Remove Default MetaData fixture. * Keep attachments container blob-level security for all instances * Close unclosed FileStream * Favor default value for noop services
116 lines
5.0 KiB
C#
116 lines
5.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Bit.Core.Models.Table;
|
|
using Bit.Core.Repositories;
|
|
using Bit.Core.Services;
|
|
using Bit.Core.Settings;
|
|
using Microsoft.AspNetCore.DataProtection;
|
|
using Microsoft.AspNetCore.Identity;
|
|
using Microsoft.Extensions.Options;
|
|
using Microsoft.Extensions.Logging;
|
|
using NSubstitute;
|
|
using Xunit;
|
|
using Bit.Core.Context;
|
|
|
|
namespace Bit.Core.Test.Services
|
|
{
|
|
public class UserServiceTests
|
|
{
|
|
private readonly UserService _sut;
|
|
|
|
private readonly IUserRepository _userRepository;
|
|
private readonly ICipherRepository _cipherRepository;
|
|
private readonly IOrganizationUserRepository _organizationUserRepository;
|
|
private readonly IOrganizationRepository _organizationRepository;
|
|
private readonly IU2fRepository _u2fRepository;
|
|
private readonly IMailService _mailService;
|
|
private readonly IPushNotificationService _pushService;
|
|
private readonly IUserStore<User> _userStore;
|
|
private readonly IOptions<IdentityOptions> _optionsAccessor;
|
|
private readonly IPasswordHasher<User> _passwordHasher;
|
|
private readonly IEnumerable<IUserValidator<User>> _userValidators;
|
|
private readonly IEnumerable<IPasswordValidator<User>> _passwordValidators;
|
|
private readonly ILookupNormalizer _keyNormalizer;
|
|
private readonly IdentityErrorDescriber _errors;
|
|
private readonly IServiceProvider _services;
|
|
private readonly ILogger<UserManager<User>> _logger;
|
|
private readonly ILicensingService _licenseService;
|
|
private readonly IEventService _eventService;
|
|
private readonly IApplicationCacheService _applicationCacheService;
|
|
private readonly IDataProtectionProvider _dataProtectionProvider;
|
|
private readonly IPaymentService _paymentService;
|
|
private readonly IPolicyRepository _policyRepository;
|
|
private readonly IReferenceEventService _referenceEventService;
|
|
private readonly CurrentContext _currentContext;
|
|
private readonly GlobalSettings _globalSettings;
|
|
private readonly IOrganizationService _organizationService;
|
|
|
|
public UserServiceTests()
|
|
{
|
|
_userRepository = Substitute.For<IUserRepository>();
|
|
_cipherRepository = Substitute.For<ICipherRepository>();
|
|
_organizationUserRepository = Substitute.For<IOrganizationUserRepository>();
|
|
_organizationRepository = Substitute.For<IOrganizationRepository>();
|
|
_u2fRepository = Substitute.For<IU2fRepository>();
|
|
_mailService = Substitute.For<IMailService>();
|
|
_pushService = Substitute.For<IPushNotificationService>();
|
|
_userStore = Substitute.For<IUserStore<User>>();
|
|
_optionsAccessor = Substitute.For<IOptions<IdentityOptions>>();
|
|
_passwordHasher = Substitute.For<IPasswordHasher<User>>();
|
|
_userValidators = new List<IUserValidator<User>>();
|
|
_passwordValidators = new List<IPasswordValidator<User>>();
|
|
_keyNormalizer = Substitute.For<ILookupNormalizer>();
|
|
_errors = new IdentityErrorDescriber();
|
|
_services = Substitute.For<IServiceProvider>();
|
|
_logger = Substitute.For<ILogger<UserManager<User>>>();
|
|
_licenseService = Substitute.For<ILicensingService>();
|
|
_eventService = Substitute.For<IEventService>();
|
|
_applicationCacheService = Substitute.For<IApplicationCacheService>();
|
|
_dataProtectionProvider = Substitute.For<IDataProtectionProvider>();
|
|
_paymentService = Substitute.For<IPaymentService>();
|
|
_policyRepository = Substitute.For<IPolicyRepository>();
|
|
_referenceEventService = Substitute.For<IReferenceEventService>();
|
|
_currentContext = new CurrentContext();
|
|
_globalSettings = new GlobalSettings();
|
|
_organizationService = Substitute.For<IOrganizationService>();
|
|
|
|
_sut = new UserService(
|
|
_userRepository,
|
|
_cipherRepository,
|
|
_organizationUserRepository,
|
|
_organizationRepository,
|
|
_u2fRepository,
|
|
_mailService,
|
|
_pushService,
|
|
_userStore,
|
|
_optionsAccessor,
|
|
_passwordHasher,
|
|
_userValidators,
|
|
_passwordValidators,
|
|
_keyNormalizer,
|
|
_errors,
|
|
_services,
|
|
_logger,
|
|
_licenseService,
|
|
_eventService,
|
|
_applicationCacheService,
|
|
_dataProtectionProvider,
|
|
_paymentService,
|
|
_policyRepository,
|
|
_referenceEventService,
|
|
_currentContext,
|
|
_globalSettings,
|
|
_organizationService
|
|
);
|
|
}
|
|
|
|
// Remove this test when we add actual tests. It only proves that
|
|
// we've properly constructed the system under test.
|
|
[Fact]
|
|
public void ServiceExists()
|
|
{
|
|
Assert.NotNull(_sut);
|
|
}
|
|
}
|
|
}
|