Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion src/Api/Tools/Controllers/ReceivesController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Bit.Core.Billing.Premium.Queries;
using Bit.Core.Exceptions;
using Bit.Core.Platform.Push;
using Bit.Core.Repositories;
using Bit.Core.Services;
using Bit.Core.Tools.ReceiveFeatures.Commands.Interfaces;
using Bit.Core.Tools.ReceiveFeatures.Queries.Interfaces;
Expand All @@ -22,6 +23,7 @@ public class ReceivesController : Controller
private readonly IReceiveRepository _receiveRepository;
private readonly IReceiveAuthorizationService _receiveAuthorizationService;
private readonly IReceiveFileStorageService _receiveFileStorageService;
private readonly IUserRepository _userRepository;
private readonly IReceiveValidationService _receiveValidationService;
private readonly IUserService _userService;
private readonly ILogger<ReceivesController> _logger;
Expand All @@ -48,6 +50,7 @@ public ReceivesController(
IUploadReceiveFileCommand uploadReceiveFileCommand,
IHasPremiumAccessQuery hasPremiumAccessQuery,
IReceiveOwnerQuery receiveOwnerQuery,
IUserRepository userRepository,
IGetReceiveFileDownloadQuery getReceiveFileDownloadQuery
)
{
Expand All @@ -65,6 +68,7 @@ IGetReceiveFileDownloadQuery getReceiveFileDownloadQuery
_uploadReceiveFileCommand = uploadReceiveFileCommand;
_receiveOwnerQuery = receiveOwnerQuery;
_getReceiveFileDownloadQuery = getReceiveFileDownloadQuery;
_userRepository = userRepository;
}

[Authorize(Policies.Application)]
Expand Down Expand Up @@ -98,7 +102,8 @@ public async Task<ReceiveFileDownloadDataResponseModel> GetFileDownloadData(Guid
public async Task<SharedReceiveResponseModel> GetShared(Guid id)
{
var receive = await GetReceiveWithSecretValidationAsync(id);
return new SharedReceiveResponseModel(receive);
var user = await _userRepository.GetByIdAsync(receive.UserId) ?? throw new NotFoundException();
return new SharedReceiveResponseModel(receive, user.Email);
}

[AllowAnonymous]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,21 @@ namespace Bit.Api.Tools.Models.Response;

public class SharedReceiveResponseModel : ResponseModel
{
public SharedReceiveResponseModel(Receive receive) : base("receiveShared")
public SharedReceiveResponseModel(Receive receive, string email) : base("receiveShared")
{
Name = receive.Name;
ScekWrappedPublicKey = receive.ScekWrappedPublicKey;
OwnerEmail = email;
}

/// <summary>Label for the Receive. Encrypted.</summary>
public string Name { get; set; }

/// <summary>Public key (SCEK-wrapped) used by uploaders to encrypt file content.</summary>
public string ScekWrappedPublicKey { get; set; }

/// <summary>
/// The Receive owner's email
/// </summary>
public string OwnerEmail { get; set; }
}
6 changes: 6 additions & 0 deletions test/Api.Test/Tools/Controllers/ReceivesControllerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
using Bit.Api.Tools.Controllers;
using Bit.Api.Tools.Models.Request;
using Bit.Api.Tools.Models.Response;
using Bit.Core.Entities;
using Bit.Core.Exceptions;
using Bit.Core.Repositories;
using Bit.Core.Tools.Entities;
using Bit.Core.Tools.Models.Data;
using Bit.Core.Tools.ReceiveFeatures.Commands.Interfaces;
Expand Down Expand Up @@ -105,11 +107,14 @@ await Assert.ThrowsAsync<NotFoundException>(
public async Task GetShared_ValidRequest_ReturnsSharedModel(
Guid receiveId,
Receive receive,
User user,
SutProvider<ReceivesController> sutProvider)
{
receive.Secret = "correct-secret";
receive.Data = JsonSerializer.Serialize(new ReceiveData());
user.Id = receive.UserId;
SetupHttpContext(sutProvider, CoreHelpers.Base64UrlEncode(Encoding.UTF8.GetBytes(receive.Secret)));
sutProvider.GetDependency<IUserRepository>().GetByIdAsync(receive.UserId).Returns(user);
sutProvider.GetDependency<IReceiveRepository>()
.GetByIdAsync(receiveId)
.Returns(receive);
Expand All @@ -122,6 +127,7 @@ public async Task GetShared_ValidRequest_ReturnsSharedModel(
Assert.IsType<SharedReceiveResponseModel>(result);
Assert.Equal(receive.Name, result.Name);
Assert.Equal(receive.ScekWrappedPublicKey, result.ScekWrappedPublicKey);
Assert.Equal(user.Email, result.OwnerEmail);
}

[Theory, BitAutoData]
Expand Down
Loading