1
0
mirror of https://github.com/bitwarden/server.git synced 2025-07-03 00:52:49 -05:00

subvault user apis

This commit is contained in:
Kyle Spearrin
2017-04-03 12:27:02 -04:00
parent 0961d86d65
commit f1fc7832a0
19 changed files with 230 additions and 17 deletions

View File

@ -35,7 +35,7 @@ namespace Bit.Core.Models.Api
public class OrganizationUserDetailsResponseModel : OrganizationUserResponseModel
{
public OrganizationUserDetailsResponseModel(OrganizationUserUserDetails organizationUser,
IEnumerable<SubvaultUserDetails> subvaults)
IEnumerable<SubvaultUserSubvaultDetails> subvaults)
: base(organizationUser, "organizationUserDetails")
{
Subvaults = new ListResponseModel<OrganizationUserSubvaultResponseModel>(

View File

@ -5,7 +5,7 @@ namespace Bit.Core.Models.Api
{
public class OrganizationUserSubvaultResponseModel : ResponseModel
{
public OrganizationUserSubvaultResponseModel(SubvaultUserDetails details,
public OrganizationUserSubvaultResponseModel(SubvaultUserSubvaultDetails details,
string obj = "organizationUserSubvault")
: base(obj)
{

View File

@ -0,0 +1,39 @@
using System;
using Bit.Core.Models.Table;
using Bit.Core.Models.Data;
using Bit.Core.Enums;
namespace Bit.Core.Models.Api
{
public class SubvaultUserResponseModel : ResponseModel
{
public SubvaultUserResponseModel(SubvaultUserUserDetails subvaultUser)
: base("subvaultUser")
{
if(subvaultUser == null)
{
throw new ArgumentNullException(nameof(subvaultUser));
}
Id = subvaultUser.Id.ToString();
OrganizationUserId = subvaultUser.OrganizationUserId.ToString();
SubvaultId = subvaultUser.SubvaultId.ToString();
Name = subvaultUser.Name;
Email = subvaultUser.Email;
Type = subvaultUser.Type;
Status = subvaultUser.Status;
ReadOnly = subvaultUser.ReadOnly;
Admin = subvaultUser.Admin;
}
public string Id { get; set; }
public string OrganizationUserId { get; set; }
public string SubvaultId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public OrganizationUserType Type { get; set; }
public OrganizationUserStatusType Status { get; set; }
public bool ReadOnly { get; set; }
public bool Admin { get; set; }
}
}

View File

@ -2,7 +2,7 @@
namespace Bit.Core.Models.Data
{
public class SubvaultUserDetails
public class SubvaultUserSubvaultDetails
{
public Guid Id { get; set; }
public Guid OrganizationUserId { get; set; }

View File

@ -0,0 +1,17 @@
using System;
namespace Bit.Core.Models.Data
{
public class SubvaultUserUserDetails
{
public Guid Id { get; set; }
public Guid OrganizationUserId { get; set; }
public Guid SubvaultId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public Enums.OrganizationUserStatusType Status { get; set; }
public Enums.OrganizationUserType Type { get; set; }
public bool ReadOnly { get; set; }
public bool Admin { get; set; }
}
}

View File

@ -12,7 +12,7 @@ namespace Bit.Core.Repositories
Task<OrganizationUser> GetByOrganizationAsync(Guid organizationId, Guid userId);
Task<ICollection<OrganizationUser>> GetManyByOrganizationAsync(Guid organizationId, OrganizationUserType? type);
Task<OrganizationUser> GetByOrganizationAsync(Guid organizationId, string email);
Task<Tuple<OrganizationUserUserDetails, ICollection<SubvaultUserDetails>>> GetDetailsByIdAsync(Guid id);
Task<Tuple<OrganizationUserUserDetails, ICollection<SubvaultUserSubvaultDetails>>> GetDetailsByIdAsync(Guid id);
Task<ICollection<OrganizationUserUserDetails>> GetManyDetailsByOrganizationAsync(Guid organizationId);
Task<ICollection<OrganizationUserOrganizationDetails>> GetManyDetailsByUserAsync(Guid userId,
OrganizationUserStatusType? status = null);

View File

@ -9,7 +9,8 @@ namespace Bit.Core.Repositories
public interface ISubvaultUserRepository : IRepository<SubvaultUser, Guid>
{
Task<ICollection<SubvaultUser>> GetManyByOrganizationUserIdAsync(Guid orgUserId);
Task<ICollection<SubvaultUserDetails>> GetManyDetailsByUserIdAsync(Guid userId);
Task<ICollection<SubvaultUserSubvaultDetails>> GetManyDetailsByUserIdAsync(Guid userId);
Task<ICollection<SubvaultUserUserDetails>> GetManyDetailsBySubvaultIdAsync(Guid subvaultId);
Task<ICollection<SubvaultUserPermissions>> GetPermissionsByUserIdAsync(Guid userId, IEnumerable<Guid> subvaultIds,
Guid organizationId);
Task<bool> GetCanEditByUserIdCipherIdAsync(Guid userId, Guid cipherId);

View File

@ -61,7 +61,7 @@ namespace Bit.Core.Repositories.SqlServer
}
}
public async Task<Tuple<OrganizationUserUserDetails, ICollection<SubvaultUserDetails>>> GetDetailsByIdAsync(Guid id)
public async Task<Tuple<OrganizationUserUserDetails, ICollection<SubvaultUserSubvaultDetails>>> GetDetailsByIdAsync(Guid id)
{
using(var connection = new SqlConnection(ConnectionString))
{
@ -71,8 +71,8 @@ namespace Bit.Core.Repositories.SqlServer
commandType: CommandType.StoredProcedure);
var user = (await results.ReadAsync<OrganizationUserUserDetails>()).SingleOrDefault();
var subvaults = (await results.ReadAsync<SubvaultUserDetails>()).ToList();
return new Tuple<OrganizationUserUserDetails, ICollection<SubvaultUserDetails>>(user, subvaults);
var subvaults = (await results.ReadAsync<SubvaultUserSubvaultDetails>()).ToList();
return new Tuple<OrganizationUserUserDetails, ICollection<SubvaultUserSubvaultDetails>>(user, subvaults);
}
}

View File

@ -34,12 +34,12 @@ namespace Bit.Core.Repositories.SqlServer
}
}
public async Task<ICollection<SubvaultUserDetails>> GetManyDetailsByUserIdAsync(Guid userId)
public async Task<ICollection<SubvaultUserSubvaultDetails>> GetManyDetailsByUserIdAsync(Guid userId)
{
using(var connection = new SqlConnection(ConnectionString))
{
var results = await connection.QueryAsync<SubvaultUserDetails>(
$"[{Schema}].[SubvaultUserDetails_ReadByUserId]",
var results = await connection.QueryAsync<SubvaultUserSubvaultDetails>(
$"[{Schema}].[SubvaultUserSubvaultDetails_ReadByUserId]",
new { UserId = userId },
commandType: CommandType.StoredProcedure);
@ -47,6 +47,19 @@ namespace Bit.Core.Repositories.SqlServer
}
}
public async Task<ICollection<SubvaultUserUserDetails>> GetManyDetailsBySubvaultIdAsync(Guid subvaultId)
{
using(var connection = new SqlConnection(ConnectionString))
{
var results = await connection.QueryAsync<SubvaultUserUserDetails>(
$"[{Schema}].[SubvaultUserUserDetails_ReadBySubvaultId]",
new { SubvaultId = subvaultId },
commandType: CommandType.StoredProcedure);
return results.ToList();
}
}
public async Task<ICollection<SubvaultUserPermissions>> GetPermissionsByUserIdAsync(Guid userId,
IEnumerable<Guid> subvaultIds, Guid organizationId)
{

View File

@ -0,0 +1,13 @@
using System.Threading.Tasks;
using Bit.Core.Models.Business;
using Bit.Core.Models.Table;
using System;
using System.Collections.Generic;
namespace Bit.Core.Services
{
public interface ISubvaultService
{
}
}

View File

@ -0,0 +1,40 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using Bit.Core.Repositories;
using Bit.Core.Models.Business;
using Bit.Core.Models.Table;
using Bit.Core.Utilities;
using Bit.Core.Exceptions;
using System.Collections.Generic;
namespace Bit.Core.Services
{
public class SubvaultService : ISubvaultService
{
private readonly IOrganizationRepository _organizationRepository;
private readonly IOrganizationUserRepository _organizationUserRepository;
private readonly ISubvaultRepository _subvaultRepository;
private readonly ISubvaultUserRepository _subvaultUserRepository;
private readonly IUserRepository _userRepository;
private readonly IMailService _mailService;
public SubvaultService(
IOrganizationRepository organizationRepository,
IOrganizationUserRepository organizationUserRepository,
ISubvaultRepository subvaultRepository,
ISubvaultUserRepository subvaultUserRepository,
IUserRepository userRepository,
IMailService mailService)
{
_organizationRepository = organizationRepository;
_organizationUserRepository = organizationUserRepository;
_subvaultRepository = subvaultRepository;
_subvaultUserRepository = subvaultUserRepository;
_userRepository = userRepository;
_mailService = mailService;
}
}
}