From acb1fc0be53539a99d978abb31f5f0249b60afc3 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Tue, 28 Feb 2017 22:51:29 -0500 Subject: [PATCH] remove old share solution code --- src/Api/Controllers/CiphersController.cs | 14 ++-- src/Api/Controllers/LoginsController.cs | 18 ++-- src/Api/Controllers/SharesController.cs | 83 ------------------- src/Api/Models/Request/ShareRequestModel.cs | 33 -------- .../Models/Response/CipherResponseModel.cs | 16 ---- src/Api/Models/Response/LoginResponseModel.cs | 18 +--- src/Api/Models/Response/ShareResponseModel.cs | 33 -------- src/Api/Startup.cs | 1 - src/Core/Domains/Cipher.cs | 1 - src/Core/Domains/Share.cs | 23 ----- src/Core/Models/Data/CipherShare.cs | 10 --- src/Core/Repositories/ICipherRepository.cs | 8 +- src/Core/Repositories/IShareRepository.cs | 13 --- .../SqlServer/CipherRepository.cs | 44 ---------- .../Repositories/SqlServer/ShareRepository.cs | 46 ---------- src/Core/Services/ICipherService.cs | 1 - .../Services/Implementations/CipherService.cs | 22 ----- 17 files changed, 19 insertions(+), 365 deletions(-) delete mode 100644 src/Api/Controllers/SharesController.cs delete mode 100644 src/Api/Models/Request/ShareRequestModel.cs delete mode 100644 src/Api/Models/Response/ShareResponseModel.cs delete mode 100644 src/Core/Domains/Share.cs delete mode 100644 src/Core/Models/Data/CipherShare.cs delete mode 100644 src/Core/Repositories/IShareRepository.cs delete mode 100644 src/Core/Repositories/SqlServer/ShareRepository.cs diff --git a/src/Api/Controllers/CiphersController.cs b/src/Api/Controllers/CiphersController.cs index 55f25c2ac..3445f6d79 100644 --- a/src/Api/Controllers/CiphersController.cs +++ b/src/Api/Controllers/CiphersController.cs @@ -31,25 +31,25 @@ namespace Bit.Api.Controllers } [HttpGet("{id}")] - public async Task Get(string id) + public async Task Get(string id) { var userId = _userService.GetProperUserId(User).Value; - var cipher = await _cipherRepository.GetShareByIdAsync(new Guid(id), userId); + var cipher = await _cipherRepository.GetByIdAsync(new Guid(id), userId); if(cipher == null) { throw new NotFoundException(); } - return new CipherShareResponseModel(cipher, userId); + return new CipherResponseModel(cipher, userId); } [HttpGet("")] - public async Task> Get() + public async Task> Get() { var userId = _userService.GetProperUserId(User).Value; - var ciphers = await _cipherRepository.GetManyShareByUserIdAsync(userId); - var responses = ciphers.Select(c => new CipherShareResponseModel(c, userId)); - return new ListResponseModel(responses); + var ciphers = await _cipherRepository.GetManyByUserIdAsync(userId); + var responses = ciphers.Select(c => new CipherResponseModel(c, userId)); + return new ListResponseModel(responses); } [Obsolete] diff --git a/src/Api/Controllers/LoginsController.cs b/src/Api/Controllers/LoginsController.cs index da377bab6..5063a89d2 100644 --- a/src/Api/Controllers/LoginsController.cs +++ b/src/Api/Controllers/LoginsController.cs @@ -33,29 +33,29 @@ namespace Bit.Api.Controllers } [HttpGet("{id}")] - public async Task Get(string id, string[] expand = null) + public async Task Get(string id, string[] expand = null) { var userId = _userService.GetProperUserId(User).Value; - var login = await _cipherRepository.GetShareByIdAsync(new Guid(id), userId); + var login = await _cipherRepository.GetByIdAsync(new Guid(id), userId); if(login == null || login.Type != Core.Enums.CipherType.Login) { throw new NotFoundException(); } - var response = new LoginShareResponseModel(login, userId); + var response = new LoginResponseModel(login, userId); await ExpandAsync(login, response, expand, null, userId); return response; } [HttpGet("")] - public async Task> Get(string[] expand = null) + public async Task> Get(string[] expand = null) { var userId = _userService.GetProperUserId(User).Value; - var logins = await _cipherRepository.GetManyShareByTypeAndUserIdAsync(Core.Enums.CipherType.Login, + var logins = await _cipherRepository.GetManyByTypeAndUserIdAsync(Core.Enums.CipherType.Login, userId); - var responses = logins.Select(s => new LoginShareResponseModel(s, userId)).ToList(); + var responses = logins.Select(s => new LoginResponseModel(s, userId)).ToList(); await ExpandManyAsync(logins, responses, expand, null, userId); - return new ListResponseModel(responses); + return new ListResponseModel(responses); } [HttpPost("")] @@ -119,8 +119,8 @@ namespace Bit.Api.Controllers } } - private async Task ExpandManyAsync(IEnumerable logins, ICollection responses, - string[] expand, IEnumerable folders, Guid userId) where TResponseModel : LoginResponseModel + private async Task ExpandManyAsync(IEnumerable logins, ICollection responses, + string[] expand, IEnumerable folders, Guid userId) { if(expand == null || expand.Count() == 0) { diff --git a/src/Api/Controllers/SharesController.cs b/src/Api/Controllers/SharesController.cs deleted file mode 100644 index 996017981..000000000 --- a/src/Api/Controllers/SharesController.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Bit.Core.Repositories; -using Microsoft.AspNetCore.Authorization; -using Bit.Api.Models; -using Bit.Core.Exceptions; -using Bit.Core.Services; -using System.Collections.Generic; - -namespace Bit.Api.Controllers -{ - [Route("shares")] - [Authorize("Application")] - public class SharesController : Controller - { - private readonly IShareRepository _shareRepository; - private readonly IUserService _userService; - private readonly ICipherService _cipherService; - - public SharesController( - IShareRepository shareRepository, - IUserService userService, - ICipherService cipherService) - { - _shareRepository = shareRepository; - _userService = userService; - _cipherService = cipherService; - } - - [HttpGet("{id}")] - public async Task Get(string id) - { - var userId = _userService.GetProperUserId(User).Value; - var share = await _shareRepository.GetByIdAsync(new Guid(id), userId); - if(share == null) - { - throw new NotFoundException(); - } - - return new ShareResponseModel(share); - } - - //[HttpGet("cipher/{cipherId}")] - //public async Task> GetCipher(string cipherId) - //{ - // var userId = _userService.GetProperUserId(User).Value; - // var share = await _shareRepository.GetByIdAsync(new Guid(cipherId), userId); - // if(share == null) - // { - // throw new NotFoundException(); - // } - - // return new ShareResponseModel(share); - //} - - [HttpPost("")] - public async Task Post([FromBody]ShareRequestModel model) - { - var share = model.ToShare(_userService.GetProperUserId(User).Value); - await _cipherService.ShareAsync(share, model.Email); - - var response = new ShareResponseModel(share); - return response; - } - - [HttpDelete("{id}")] - [HttpPost("{id}/delete")] - public async Task Delete(string id) - { - var share = await _shareRepository.GetByIdAsync(new Guid(id), _userService.GetProperUserId(User).Value); - if(share == null) - { - throw new NotFoundException(); - } - - // TODO: permission checks - - await _shareRepository.DeleteAsync(share); - } - } -} diff --git a/src/Api/Models/Request/ShareRequestModel.cs b/src/Api/Models/Request/ShareRequestModel.cs deleted file mode 100644 index c66b8ec90..000000000 --- a/src/Api/Models/Request/ShareRequestModel.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.ComponentModel.DataAnnotations; -using Bit.Core.Domains; -using Newtonsoft.Json; - -namespace Bit.Api.Models -{ - public class ShareRequestModel - { - [Required] - public string Email { get; set; } - [Required] - [StringLength(36)] - public string CipherId { get; set; } - public string Key { get; set; } - - public Share ToShare(Guid sharerUserId) - { - return ToShare(new Share - { - SharerUserId = sharerUserId - }); - } - - public Share ToShare(Share existingShare) - { - existingShare.CipherId = new Guid(CipherId); - existingShare.Key = Key; - - return existingShare; - } - } -} diff --git a/src/Api/Models/Response/CipherResponseModel.cs b/src/Api/Models/Response/CipherResponseModel.cs index 522340dd8..f51047302 100644 --- a/src/Api/Models/Response/CipherResponseModel.cs +++ b/src/Api/Models/Response/CipherResponseModel.cs @@ -1,6 +1,5 @@ using System; using Bit.Core.Domains; -using Bit.Core.Models.Data; namespace Bit.Api.Models { @@ -19,7 +18,6 @@ namespace Bit.Api.Models Type = cipher.Type; Favorite = cipher.Favorite; RevisionDate = cipher.RevisionDate; - Key = cipher.Key; switch(cipher.Type) { @@ -38,21 +36,7 @@ namespace Bit.Api.Models public string FolderId { get; set; } public Core.Enums.CipherType Type { get; set; } public bool Favorite { get; set; } - public string Key { get; set; } public dynamic Data { get; set; } public DateTime RevisionDate { get; set; } } - - public class CipherShareResponseModel : CipherResponseModel - { - public CipherShareResponseModel(CipherShare cipherShare, Guid userId) - : base(cipherShare, userId, "cipherShare") - { - ReadOnly = cipherShare.ReadOnly; - Status = cipherShare.Status; - } - - public bool ReadOnly { get; set; } - public Core.Enums.ShareStatusType? Status { get; set; } - } } diff --git a/src/Api/Models/Response/LoginResponseModel.cs b/src/Api/Models/Response/LoginResponseModel.cs index 924cd6216..d71107ab8 100644 --- a/src/Api/Models/Response/LoginResponseModel.cs +++ b/src/Api/Models/Response/LoginResponseModel.cs @@ -1,13 +1,12 @@ using System; using Bit.Core.Domains; -using Bit.Core.Models.Data; namespace Bit.Api.Models { public class LoginResponseModel : ResponseModel { public LoginResponseModel(Cipher cipher, Guid userId, string obj = "login") - : base("login") + : base(obj) { if(cipher == null) { @@ -30,7 +29,6 @@ namespace Bit.Api.Models Password = data.Password; Notes = data.Notes; RevisionDate = cipher.RevisionDate; - Key = cipher.Key; } public string Id { get; set; } @@ -42,22 +40,8 @@ namespace Bit.Api.Models public string Password { get; set; } public string Notes { get; set; } public DateTime RevisionDate { get; set; } - public string Key { get; set; } // Expandables public FolderResponseModel Folder { get; set; } } - - public class LoginShareResponseModel : LoginResponseModel - { - public LoginShareResponseModel(CipherShare cipherShare, Guid userId) - : base(cipherShare, userId, "loginShare") - { - ReadOnly = cipherShare.ReadOnly; - Status = cipherShare.Status; - } - - public bool ReadOnly { get; set; } - public Core.Enums.ShareStatusType? Status { get; set; } - } } diff --git a/src/Api/Models/Response/ShareResponseModel.cs b/src/Api/Models/Response/ShareResponseModel.cs deleted file mode 100644 index 740fa1b60..000000000 --- a/src/Api/Models/Response/ShareResponseModel.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using Bit.Core.Domains; - -namespace Bit.Api.Models -{ - public class ShareResponseModel : ResponseModel - { - public ShareResponseModel(Share share) - : base("share") - { - if(share == null) - { - throw new ArgumentNullException(nameof(share)); - } - - Id = share.Id.ToString(); - UserId = share.UserId.ToString(); - SharerUserId = share.SharerUserId.ToString(); - CipherId = share.CipherId.ToString(); - Key = Key; - ReadOnly = share.ReadOnly; - Status = share.Status; - } - - public string Id { get; set; } - public string UserId { get; set; } - public string SharerUserId { get; set; } - public string CipherId { get; set; } - public string Key { get; set; } - public bool ReadOnly { get; set; } - public Core.Enums.ShareStatusType? Status { get; set; } - } -} diff --git a/src/Api/Startup.cs b/src/Api/Startup.cs index cc91f10d3..9b68be85e 100644 --- a/src/Api/Startup.cs +++ b/src/Api/Startup.cs @@ -79,7 +79,6 @@ namespace Bit.Api services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); - services.AddSingleton(); // Context services.AddScoped(); diff --git a/src/Core/Domains/Cipher.cs b/src/Core/Domains/Cipher.cs index fcfb740fe..46accfb29 100644 --- a/src/Core/Domains/Cipher.cs +++ b/src/Core/Domains/Cipher.cs @@ -10,7 +10,6 @@ namespace Bit.Core.Domains public Guid? FolderId { get; set; } public Enums.CipherType Type { get; set; } public bool Favorite { get; set; } - public string Key { get; set; } public string Data { get; set; } public DateTime CreationDate { get; internal set; } = DateTime.UtcNow; public DateTime RevisionDate { get; internal set; } = DateTime.UtcNow; diff --git a/src/Core/Domains/Share.cs b/src/Core/Domains/Share.cs deleted file mode 100644 index 96c2e7252..000000000 --- a/src/Core/Domains/Share.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using Bit.Core.Utilities; - -namespace Bit.Core.Domains -{ - public class Share : IDataObject - { - public Guid Id { get; set; } - public Guid UserId { get; set; } - public Guid SharerUserId { get; set; } - public Guid CipherId { get; set; } - public string Key { get; set; } - public bool ReadOnly { get; set; } - public Enums.ShareStatusType Status { get; set; } - public DateTime CreationDate { get; internal set; } = DateTime.UtcNow; - public DateTime RevisionDate { get; internal set; } = DateTime.UtcNow; - - public void SetNewId() - { - Id = CoreHelpers.GenerateComb(); - } - } -} diff --git a/src/Core/Models/Data/CipherShare.cs b/src/Core/Models/Data/CipherShare.cs deleted file mode 100644 index af324a5b7..000000000 --- a/src/Core/Models/Data/CipherShare.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Bit.Core.Domains; - -namespace Bit.Core.Models.Data -{ - public class CipherShare : Cipher - { - public bool ReadOnly { get; internal set; } - public Enums.ShareStatusType? Status { get; internal set; } - } -} diff --git a/src/Core/Repositories/ICipherRepository.cs b/src/Core/Repositories/ICipherRepository.cs index 887c3ed6b..10e1fada2 100644 --- a/src/Core/Repositories/ICipherRepository.cs +++ b/src/Core/Repositories/ICipherRepository.cs @@ -2,20 +2,16 @@ using System.Collections.Generic; using System.Threading.Tasks; using Bit.Core.Domains; -using Bit.Core.Models.Data; namespace Bit.Core.Repositories { public interface ICipherRepository : IRepository { Task GetByIdAsync(Guid id, Guid userId); - Task GetShareByIdAsync(Guid id, Guid userId); Task> GetManyByUserIdAsync(Guid userId); - Task> GetManyShareByUserIdAsync(Guid userId); Task> GetManyByTypeAndUserIdAsync(Enums.CipherType type, Guid userId); - Task> GetManyShareByTypeAndUserIdAsync(Enums.CipherType type, Guid userId); - Task, ICollection>> - GetManySinceRevisionDateAndUserIdWithDeleteHistoryAsync(DateTime sinceRevisionDate, Guid userId); + Task, ICollection>> GetManySinceRevisionDateAndUserIdWithDeleteHistoryAsync( + DateTime sinceRevisionDate, Guid userId); Task UpdateUserEmailPasswordAndCiphersAsync(User user, IEnumerable ciphers); Task CreateAsync(IEnumerable ciphers); } diff --git a/src/Core/Repositories/IShareRepository.cs b/src/Core/Repositories/IShareRepository.cs deleted file mode 100644 index 570ce2a92..000000000 --- a/src/Core/Repositories/IShareRepository.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using Bit.Core.Domains; -using System.Threading.Tasks; -using System.Collections.Generic; - -namespace Bit.Core.Repositories -{ - public interface IShareRepository : IRepository - { - Task GetByIdAsync(Guid id, Guid userId); - Task> GetManyByCipherId(Guid id); - } -} diff --git a/src/Core/Repositories/SqlServer/CipherRepository.cs b/src/Core/Repositories/SqlServer/CipherRepository.cs index 4b0506ae2..774cb3f34 100644 --- a/src/Core/Repositories/SqlServer/CipherRepository.cs +++ b/src/Core/Repositories/SqlServer/CipherRepository.cs @@ -7,7 +7,6 @@ using DataTableProxy; using Bit.Core.Domains; using System.Data; using Dapper; -using Bit.Core.Models.Data; namespace Bit.Core.Repositories.SqlServer { @@ -32,19 +31,6 @@ namespace Bit.Core.Repositories.SqlServer return cipher; } - public async Task GetShareByIdAsync(Guid id, Guid userId) - { - using(var connection = new SqlConnection(ConnectionString)) - { - var results = await connection.QueryAsync( - $"[{Schema}].[CipherShare_ReadById]", - new { UserId = userId }, - commandType: CommandType.StoredProcedure); - - return results.FirstOrDefault(c => c.UserId == userId); - } - } - public async Task> GetManyByUserIdAsync(Guid userId) { using(var connection = new SqlConnection(ConnectionString)) @@ -58,19 +44,6 @@ namespace Bit.Core.Repositories.SqlServer } } - public async Task> GetManyShareByUserIdAsync(Guid userId) - { - using(var connection = new SqlConnection(ConnectionString)) - { - var results = await connection.QueryAsync( - $"[{Schema}].[CipherShare_ReadByUserId]", - new { UserId = userId }, - commandType: CommandType.StoredProcedure); - - return results.ToList(); - } - } - public async Task> GetManyByTypeAndUserIdAsync(Enums.CipherType type, Guid userId) { using(var connection = new SqlConnection(ConnectionString)) @@ -88,23 +61,6 @@ namespace Bit.Core.Repositories.SqlServer } } - public async Task> GetManyShareByTypeAndUserIdAsync(Enums.CipherType type, Guid userId) - { - using(var connection = new SqlConnection(ConnectionString)) - { - var results = await connection.QueryAsync( - $"[{Schema}].[CipherShare_ReadByTypeUserId]", - new - { - Type = type, - UserId = userId - }, - commandType: CommandType.StoredProcedure); - - return results.ToList(); - } - } - public async Task, ICollection>> GetManySinceRevisionDateAndUserIdWithDeleteHistoryAsync(DateTime sinceRevisionDate, Guid userId) { diff --git a/src/Core/Repositories/SqlServer/ShareRepository.cs b/src/Core/Repositories/SqlServer/ShareRepository.cs deleted file mode 100644 index 2a461b9ed..000000000 --- a/src/Core/Repositories/SqlServer/ShareRepository.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using Bit.Core.Domains; -using System.Threading.Tasks; -using System.Collections.Generic; -using System.Data.SqlClient; -using Dapper; -using System.Data; -using System.Linq; - -namespace Bit.Core.Repositories.SqlServer -{ - public class ShareRepository : Repository, IShareRepository - { - public ShareRepository(GlobalSettings globalSettings) - : this(globalSettings.SqlServer.ConnectionString) - { } - - public ShareRepository(string connectionString) - : base(connectionString) - { } - - public async Task GetByIdAsync(Guid id, Guid userId) - { - var share = await GetByIdAsync(id); - if(share == null || (share.UserId != userId && share.SharerUserId != userId)) - { - return null; - } - - return share; - } - - public async Task> GetManyByCipherId(Guid cipherId) - { - using(var connection = new SqlConnection(ConnectionString)) - { - var results = await connection.QueryAsync( - $"[{Schema}].[Share_ReadByCipherId]", - new { CipherId = cipherId }, - commandType: CommandType.StoredProcedure); - - return results.ToList(); - } - } - } -} diff --git a/src/Core/Services/ICipherService.cs b/src/Core/Services/ICipherService.cs index 2e9cad990..0e3320755 100644 --- a/src/Core/Services/ICipherService.cs +++ b/src/Core/Services/ICipherService.cs @@ -10,6 +10,5 @@ namespace Bit.Core.Services Task DeleteAsync(Cipher cipher); Task ImportCiphersAsync(List folders, List ciphers, IEnumerable> folderRelationships); - Task ShareAsync(Share share, string email); } } diff --git a/src/Core/Services/Implementations/CipherService.cs b/src/Core/Services/Implementations/CipherService.cs index 5d58e425b..fbfc53200 100644 --- a/src/Core/Services/Implementations/CipherService.cs +++ b/src/Core/Services/Implementations/CipherService.cs @@ -10,18 +10,15 @@ namespace Bit.Core.Services public class CipherService : ICipherService { private readonly ICipherRepository _cipherRepository; - private readonly IShareRepository _shareRepository; private readonly IUserRepository _userRepository; private readonly IPushService _pushService; public CipherService( ICipherRepository cipherRepository, - IShareRepository shareRepository, IUserRepository userRepository, IPushService pushService) { _cipherRepository = cipherRepository; - _shareRepository = shareRepository; _userRepository = userRepository; _pushService = pushService; } @@ -90,24 +87,5 @@ namespace Bit.Core.Services await _pushService.PushSyncCiphersAsync(userId.Value); } } - - public async Task ShareAsync(Share share, string email) - { - // TODO: Make sure share does not already exist between these two users. - - var user = await _userRepository.GetByEmailAsync(email); - if(user == null) - { - return; - } - - share.UserId = user.Id; - - // TODO: Permissions and status - share.ReadOnly = false; - share.Status = Enums.ShareStatusType.Accepted; - - await _shareRepository.CreateAsync(share); - } } }