mirror of
https://github.com/bitwarden/server.git
synced 2025-05-20 11:04:31 -05:00
Added device service. Added API for clearing out token for a device identifier (used for push unregister).
This commit is contained in:
parent
f456a4fca8
commit
0727b75a83
@ -9,6 +9,7 @@ using Bit.Api.Models;
|
|||||||
using Bit.Core.Exceptions;
|
using Bit.Core.Exceptions;
|
||||||
using Bit.Core.Domains;
|
using Bit.Core.Domains;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
|
using Bit.Core.Services;
|
||||||
|
|
||||||
namespace Bit.Api.Controllers
|
namespace Bit.Api.Controllers
|
||||||
{
|
{
|
||||||
@ -17,13 +18,16 @@ namespace Bit.Api.Controllers
|
|||||||
public class DevicesController : Controller
|
public class DevicesController : Controller
|
||||||
{
|
{
|
||||||
private readonly IDeviceRepository _deviceRepository;
|
private readonly IDeviceRepository _deviceRepository;
|
||||||
|
private readonly IDeviceService _deviceService;
|
||||||
private readonly UserManager<User> _userManager;
|
private readonly UserManager<User> _userManager;
|
||||||
|
|
||||||
public DevicesController(
|
public DevicesController(
|
||||||
IDeviceRepository deviceRepository,
|
IDeviceRepository deviceRepository,
|
||||||
|
IDeviceService deviceService,
|
||||||
UserManager<User> userManager)
|
UserManager<User> userManager)
|
||||||
{
|
{
|
||||||
_deviceRepository = deviceRepository;
|
_deviceRepository = deviceRepository;
|
||||||
|
_deviceService = deviceService;
|
||||||
_userManager = userManager;
|
_userManager = userManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,7 +69,7 @@ namespace Bit.Api.Controllers
|
|||||||
public async Task<DeviceResponseModel> Post([FromBody]DeviceRequestModel model)
|
public async Task<DeviceResponseModel> Post([FromBody]DeviceRequestModel model)
|
||||||
{
|
{
|
||||||
var device = model.ToDevice(_userManager.GetUserId(User));
|
var device = model.ToDevice(_userManager.GetUserId(User));
|
||||||
await _deviceRepository.CreateAsync(device);
|
await _deviceService.SaveAsync(device);
|
||||||
|
|
||||||
var response = new DeviceResponseModel(device);
|
var response = new DeviceResponseModel(device);
|
||||||
return response;
|
return response;
|
||||||
@ -81,7 +85,7 @@ namespace Bit.Api.Controllers
|
|||||||
throw new NotFoundException();
|
throw new NotFoundException();
|
||||||
}
|
}
|
||||||
|
|
||||||
await _deviceRepository.ReplaceAsync(model.ToDevice(device));
|
await _deviceService.SaveAsync(model.ToDevice(device));
|
||||||
|
|
||||||
var response = new DeviceResponseModel(device);
|
var response = new DeviceResponseModel(device);
|
||||||
return response;
|
return response;
|
||||||
@ -97,7 +101,26 @@ namespace Bit.Api.Controllers
|
|||||||
throw new NotFoundException();
|
throw new NotFoundException();
|
||||||
}
|
}
|
||||||
|
|
||||||
await _deviceRepository.ReplaceAsync(model.ToDevice(device));
|
await _deviceService.SaveAsync(model.ToDevice(device));
|
||||||
|
|
||||||
|
var response = new DeviceResponseModel(device);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
[AllowAnonymous]
|
||||||
|
[HttpPut("identifier/{identifier}/clear-token")]
|
||||||
|
[HttpPost("identifier/{identifier}/clear-token")]
|
||||||
|
public async Task<DeviceResponseModel> PutClearToken(string identifier)
|
||||||
|
{
|
||||||
|
var device = await _deviceRepository.GetByIdentifierAsync(identifier, new Guid(_userManager.GetUserId(User)));
|
||||||
|
if(device == null)
|
||||||
|
{
|
||||||
|
await Task.Delay(2000);
|
||||||
|
throw new NotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
|
device.PushToken = null;
|
||||||
|
await _deviceService.SaveAsync(device);
|
||||||
|
|
||||||
var response = new DeviceResponseModel(device);
|
var response = new DeviceResponseModel(device);
|
||||||
return response;
|
return response;
|
||||||
|
@ -123,6 +123,7 @@ namespace Bit.Api
|
|||||||
services.AddSingleton<ICipherService, CipherService>();
|
services.AddSingleton<ICipherService, CipherService>();
|
||||||
services.AddScoped<IUserService, UserService>();
|
services.AddScoped<IUserService, UserService>();
|
||||||
services.AddScoped<IPushService, PushService>();
|
services.AddScoped<IPushService, PushService>();
|
||||||
|
services.AddScoped<IDeviceService, DeviceService>();
|
||||||
|
|
||||||
// Cors
|
// Cors
|
||||||
services.AddCors(config =>
|
services.AddCors(config =>
|
||||||
|
31
src/Core/Services/DeviceService.cs
Normal file
31
src/Core/Services/DeviceService.cs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Bit.Core.Domains;
|
||||||
|
using Bit.Core.Repositories;
|
||||||
|
|
||||||
|
namespace Bit.Core.Services
|
||||||
|
{
|
||||||
|
public class DeviceService : IDeviceService
|
||||||
|
{
|
||||||
|
private readonly IDeviceRepository _deviceRepository;
|
||||||
|
|
||||||
|
public DeviceService(
|
||||||
|
IDeviceRepository deviceRepository)
|
||||||
|
{
|
||||||
|
_deviceRepository = deviceRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task SaveAsync(Device device)
|
||||||
|
{
|
||||||
|
if(device.Id == default(Guid))
|
||||||
|
{
|
||||||
|
await _deviceRepository.CreateAsync(device);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
device.RevisionDate = DateTime.UtcNow;
|
||||||
|
await _deviceRepository.ReplaceAsync(device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
10
src/Core/Services/IDeviceService.cs
Normal file
10
src/Core/Services/IDeviceService.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
using Bit.Core.Domains;
|
||||||
|
|
||||||
|
namespace Bit.Core.Services
|
||||||
|
{
|
||||||
|
public interface IDeviceService
|
||||||
|
{
|
||||||
|
Task SaveAsync(Device device);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user