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

share api

This commit is contained in:
Kyle Spearrin
2017-02-21 23:18:12 -05:00
parent 900e71d4dd
commit 0caea4ab8b
9 changed files with 160 additions and 1 deletions

View File

@ -0,0 +1,66 @@
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;
namespace Bit.Api.Controllers
{
[Route("shares")]
[Authorize("Application")]
public class SharesController : Controller
{
private readonly IShareRepository _shareRepository;
private readonly IUserService _userService;
public SharesController(
IShareRepository shareRepository,
IUserService userService)
{
_shareRepository = shareRepository;
_userService = userService;
}
[HttpGet("{id}")]
public async Task<ShareResponseModel> 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);
}
[HttpPost("")]
public async Task<ShareResponseModel> Post([FromBody]ShareRequestModel model)
{
var share = model.ToShare(_userService.GetProperUserId(User).Value);
await _shareRepository.CreateAsync(share);
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);
}
}
}

View File

@ -0,0 +1,35 @@
using System;
using System.ComponentModel.DataAnnotations;
using Bit.Core.Domains;
using Newtonsoft.Json;
namespace Bit.Api.Models
{
public class ShareRequestModel
{
[Required]
[StringLength(36)]
public string UserId { 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.UserId = new Guid(UserId);
existingShare.CipherId = new Guid(CipherId);
existingShare.Key = Key;
return existingShare;
}
}
}

View File

@ -0,0 +1,36 @@
using System;
using Bit.Core.Domains;
using System.Collections.Generic;
using Newtonsoft.Json;
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;
Permissions = share.Permissions == null ? null :
JsonConvert.DeserializeObject<IEnumerable<Core.Enums.SharePermissionType>>(share.Permissions);
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 IEnumerable<Core.Enums.SharePermissionType> Permissions { get; set; }
public Core.Enums.ShareStatusType? Status { get; set; }
}
}