1
0
mirror of https://github.com/bitwarden/server.git synced 2025-02-16 01:51:21 +01:00

Device repository and cascase device delete on user delete

This commit is contained in:
Kyle Spearrin 2016-06-18 14:02:25 -04:00
parent 3e32a55640
commit ca8ba6ac92
6 changed files with 95 additions and 0 deletions

View File

@ -67,6 +67,7 @@ namespace Bit.Api
// Repositories
services.AddSingleton<IUserRepository, Repos.UserRepository>();
services.AddSingleton<ICipherRepository, Repos.CipherRepository>();
services.AddSingleton<IDeviceRepository, Repos.DeviceRepository>();
// Context
services.AddScoped<CurrentContext>();

View File

@ -0,0 +1,21 @@
using System;
using Bit.Core.Utilities;
namespace Bit.Core.Domains
{
public class Device : IDataObject<Guid>
{
public Guid Id { get; set; }
public Guid UserId { get; set; }
public string Name { get; set; }
public Enums.DeviceType Type { get; set; }
public string PushToken { get; set; }
public DateTime CreationDate { get; internal set; } = DateTime.UtcNow;
public DateTime RevisionDate { get; internal set; } = DateTime.UtcNow;
public void SetNewId()
{
Id = CoreHelpers.GenerateComb();
}
}
}

View File

@ -0,0 +1,8 @@
namespace Bit.Core.Enums
{
public enum DeviceType : short
{
iOS = 0,
Android = 1
}
}

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Bit.Core.Domains;
namespace Bit.Core.Repositories
{
public interface IDeviceRepository : IRepository<Device, Guid>
{
Task<Device> GetByIdAsync(Guid id, Guid userId);
Task<ICollection<Device>> GetManyByUserIdAsync(Guid userId);
}
}

View File

@ -0,0 +1,46 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Threading.Tasks;
using Bit.Core.Domains;
using System.Data;
using Dapper;
namespace Bit.Core.Repositories.SqlServer
{
public class DeviceRepository : Repository<Device, Guid>, IDeviceRepository
{
public DeviceRepository(GlobalSettings globalSettings)
: this(globalSettings.SqlServer.ConnectionString)
{ }
public DeviceRepository(string connectionString)
: base(connectionString)
{ }
public async Task<Device> GetByIdAsync(Guid id, Guid userId)
{
var device = await GetByIdAsync(id);
if(device == null || device.UserId != userId)
{
return null;
}
return device;
}
public async Task<ICollection<Device>> GetManyByUserIdAsync(Guid userId)
{
using(var connection = new SqlConnection(ConnectionString))
{
var results = await connection.QueryAsync<Device>(
$"[{Schema}].[{Table}_ReadByUserId]",
new { UserId = userId },
commandType: CommandType.StoredProcedure);
return results.ToList();
}
}
}
}

View File

@ -12,6 +12,12 @@ BEGIN
WHERE
[UserId] = @Id
DELETE
FROM
[dbo].[Device]
WHERE
[UserId] = @Id
DELETE
FROM
[dbo].[User]