1
0
mirror of https://github.com/bitwarden/server.git synced 2025-05-20 11:04:31 -05:00

device apis and models

This commit is contained in:
Kyle Spearrin 2016-06-18 16:03:33 -04:00
parent 25793e0523
commit 4fd65f974d
3 changed files with 152 additions and 0 deletions

View File

@ -0,0 +1,88 @@
using System;
using System.Collections.Generic;
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.Domains;
using Microsoft.AspNetCore.Identity;
namespace Bit.Api.Controllers
{
[Route("devices")]
[Authorize("Application")]
public class DevicesController : Controller
{
private readonly IDeviceRepository _deviceRepository;
private readonly UserManager<User> _userManager;
public DevicesController(
IDeviceRepository deviceRepository,
UserManager<User> userManager)
{
_deviceRepository = deviceRepository;
_userManager = userManager;
}
[HttpGet("{id}")]
public async Task<DeviceResponseModel> Get(string id)
{
var device = await _deviceRepository.GetByIdAsync(new Guid(id), new Guid(_userManager.GetUserId(User)));
if(device == null)
{
throw new NotFoundException();
}
var response = new DeviceResponseModel(device);
return response;
}
[HttpGet("")]
public async Task<ListResponseModel<DeviceResponseModel>> Get()
{
ICollection<Device> devices = await _deviceRepository.GetManyByUserIdAsync(new Guid(_userManager.GetUserId(User)));
var responses = devices.Select(d => new DeviceResponseModel(d));
return new ListResponseModel<DeviceResponseModel>(responses);
}
[HttpPost("")]
public async Task<DeviceResponseModel> Post([FromBody]DeviceRequestModel model)
{
var device = model.ToDevice(_userManager.GetUserId(User));
await _deviceRepository.CreateAsync(device);
var response = new DeviceResponseModel(device);
return response;
}
[HttpPut("{id}")]
public async Task<DeviceResponseModel> Put(string id, [FromBody]DeviceRequestModel model)
{
var device = await _deviceRepository.GetByIdAsync(new Guid(id), new Guid(_userManager.GetUserId(User)));
if(device == null)
{
throw new NotFoundException();
}
await _deviceRepository.ReplaceAsync(model.ToDevice(device));
var response = new DeviceResponseModel(device);
return response;
}
[HttpDelete("{id}")]
public async Task Delete(string id)
{
var device = await _deviceRepository.GetByIdAsync(new Guid(id), new Guid(_userManager.GetUserId(User)));
if(device == null)
{
throw new NotFoundException();
}
await _deviceRepository.DeleteAsync(device);
}
}
}

View File

@ -0,0 +1,36 @@
using System;
using System.ComponentModel.DataAnnotations;
using Bit.Core.Domains;
using Bit.Core.Enums;
using Newtonsoft.Json;
namespace Bit.Api.Models
{
public class DeviceRequestModel
{
[Required]
public DeviceType? Type { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
[StringLength(255)]
public string PushToken { get; set; }
public Device ToDevice(string userId = null)
{
return ToDevice(new Device
{
UserId = new Guid(userId)
});
}
public Device ToDevice(Device existingDevice)
{
existingDevice.Name = Name;
existingDevice.PushToken = PushToken;
existingDevice.Type = Type.Value;
return existingDevice;
}
}
}

View File

@ -0,0 +1,28 @@
using System;
using Bit.Core.Domains;
using Bit.Core.Enums;
namespace Bit.Api.Models
{
public class DeviceResponseModel : ResponseModel
{
public DeviceResponseModel(Device device)
: base("device")
{
if(device == null)
{
throw new ArgumentNullException(nameof(device));
}
Id = device.Id.ToString();
Name = device.Name;
Type = device.Type;
CreationDate = device.CreationDate;
}
public string Id { get; set; }
public string Name { get; set; }
public DeviceType Type { get; set; }
public DateTime CreationDate { get; set; }
}
}