mirror of
https://github.com/bitwarden/server.git
synced 2025-06-20 02:48:03 -05:00
Add initial get keys endpoint
This commit is contained in:
parent
042d924d19
commit
83c84a7cc0
@ -1,33 +0,0 @@
|
|||||||
using Bit.Api.Models.Response;
|
|
||||||
using Bit.Core.Exceptions;
|
|
||||||
using Bit.Core.Repositories;
|
|
||||||
using Microsoft.AspNetCore.Authorization;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
|
|
||||||
namespace Bit.Api.Controllers;
|
|
||||||
|
|
||||||
[Route("users")]
|
|
||||||
[Authorize("Application")]
|
|
||||||
public class UsersController : Controller
|
|
||||||
{
|
|
||||||
private readonly IUserRepository _userRepository;
|
|
||||||
|
|
||||||
public UsersController(
|
|
||||||
IUserRepository userRepository)
|
|
||||||
{
|
|
||||||
_userRepository = userRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpGet("{id}/public-key")]
|
|
||||||
public async Task<UserKeyResponseModel> Get(string id)
|
|
||||||
{
|
|
||||||
var guidId = new Guid(id);
|
|
||||||
var key = await _userRepository.GetPublicKeyAsync(guidId);
|
|
||||||
if (key == null)
|
|
||||||
{
|
|
||||||
throw new NotFoundException();
|
|
||||||
}
|
|
||||||
|
|
||||||
return new UserKeyResponseModel(guidId, key);
|
|
||||||
}
|
|
||||||
}
|
|
54
src/Api/KeyManagement/Controllers/UsersController.cs
Normal file
54
src/Api/KeyManagement/Controllers/UsersController.cs
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
using Bit.Api.KeyManagement.Models.Response;
|
||||||
|
using Bit.Core.Exceptions;
|
||||||
|
using Bit.Core.KeyManagement.Repositories;
|
||||||
|
using Bit.Core.Repositories;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using UserKeyResponseModel = Bit.Api.Models.Response.UserKeyResponseModel;
|
||||||
|
|
||||||
|
namespace Bit.Api.Controllers;
|
||||||
|
|
||||||
|
[Route("users")]
|
||||||
|
[Authorize("Application")]
|
||||||
|
public class UsersController : Controller
|
||||||
|
{
|
||||||
|
private readonly IUserRepository _userRepository;
|
||||||
|
private readonly IUserSignatureKeyPairRepository _signatureKeyPairRepository;
|
||||||
|
|
||||||
|
public UsersController(
|
||||||
|
IUserRepository userRepository,
|
||||||
|
IUserSignatureKeyPairRepository signatureKeyPairRepository)
|
||||||
|
{
|
||||||
|
_userRepository = userRepository;
|
||||||
|
_signatureKeyPairRepository = signatureKeyPairRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{id}/public-key")]
|
||||||
|
public async Task<UserKeyResponseModel> Get(string id)
|
||||||
|
{
|
||||||
|
var guidId = new Guid(id);
|
||||||
|
var key = await _userRepository.GetPublicKeyAsync(guidId);
|
||||||
|
if (key == null)
|
||||||
|
{
|
||||||
|
throw new NotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return new UserKeyResponseModel(guidId, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("{id}/keys")]
|
||||||
|
public async Task<PublicKeysResponseModel> GetAccountKeys(string id)
|
||||||
|
{
|
||||||
|
var guidId = new Guid(id);
|
||||||
|
var user = await _userRepository.GetByIdAsync(guidId);
|
||||||
|
if (user == null)
|
||||||
|
{
|
||||||
|
throw new NotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
|
var signingKeys = await _signatureKeyPairRepository.GetByUserIdAsync(guidId);
|
||||||
|
var verifyingKey = signingKeys?.VerifyingKey;
|
||||||
|
|
||||||
|
return new PublicKeysResponseModel(verifyingKey, user.PublicKey, null);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
using Bit.Core.KeyManagement.Models.Data;
|
||||||
|
using Bit.Core.Models.Api;
|
||||||
|
|
||||||
|
namespace Bit.Api.Models.Response;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This response model is used to return keys of a user - downstream of the user key - to the client.
|
||||||
|
/// This includes the private keys (signature/encryption), and proof tying one to another. This could
|
||||||
|
/// also be used to contain further user-owned keys in the future (per-vault keys, etc). This should
|
||||||
|
/// not be used to contain keys not just owned by the user (e.g. organization keys).
|
||||||
|
/// </summary>
|
||||||
|
public class PrivateAccountKeysResponseModel : ResponseModel
|
||||||
|
{
|
||||||
|
public PrivateAccountKeysResponseModel(UserAccountKeysData accountKeys) : base("accountKeys")
|
||||||
|
{
|
||||||
|
if (accountKeys != null)
|
||||||
|
{
|
||||||
|
SignatureKeyPair = accountKeys.signatureKeyPairData;
|
||||||
|
}
|
||||||
|
PublicKeyEncryptionKeyPair = accountKeys.PublicKeyEncryptionKeyPairData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PrivateAccountKeysResponseModel() : base("accountKeys")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public SignatureKeyPairData SignatureKeyPair { get; set; }
|
||||||
|
public PublicKeyEncryptionKeyPairData PublicKeyEncryptionKeyPair { get; set; }
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
using Bit.Core.Models.Api;
|
||||||
|
|
||||||
|
namespace Bit.Api.KeyManagement.Models.Response;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This response model is used to return the public keys of a user, to any other registered user or entity on the server.
|
||||||
|
/// It can contain public keys (signature/encryption), and proofs between the two. It does not contain (encrypted) private keys.
|
||||||
|
/// </summary>
|
||||||
|
public class PublicKeysResponseModel : ResponseModel
|
||||||
|
{
|
||||||
|
public PublicKeysResponseModel(string verifyingKey, string publicKey, string signedPublicKey)
|
||||||
|
: base("publicKeys")
|
||||||
|
{
|
||||||
|
VerifyingKey = verifyingKey;
|
||||||
|
SignedPublicKey = signedPublicKey;
|
||||||
|
PublicKey = publicKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string VerifyingKey { get; set; }
|
||||||
|
public string SignedPublicKey { get; set; }
|
||||||
|
[System.Obsolete("Use SignedPublicKey for new code.")]
|
||||||
|
public string PublicKey { get; set; }
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
using Bit.Core.Models.Api;
|
||||||
|
|
||||||
|
namespace Bit.Api.KeyManagement.Models.Response;
|
||||||
|
|
||||||
|
public class UserKeyResponseModel : ResponseModel
|
||||||
|
{
|
||||||
|
public UserKeyResponseModel(Guid id, string key)
|
||||||
|
: base("userKey")
|
||||||
|
{
|
||||||
|
UserId = id;
|
||||||
|
PublicKey = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Guid UserId { get; set; }
|
||||||
|
public string PublicKey { get; set; }
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
namespace Bit.Core.KeyManagement.Models.Data;
|
||||||
|
|
||||||
|
public class PublicKeyEncryptionKeyPairData
|
||||||
|
{
|
||||||
|
public string WrappedPrivateKey { get; set; }
|
||||||
|
public string SignedPublicKey { get; set; }
|
||||||
|
[System.Obsolete("Use SignedPublicKey instead for new code.")]
|
||||||
|
public string PublicKey { get; set; }
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
namespace Bit.Core.KeyManagement.Models.Data;
|
||||||
|
|
||||||
|
public class UserAccountKeysData
|
||||||
|
{
|
||||||
|
public PublicKeyEncryptionKeyPairData PublicKeyEncryptionKeyPairData { get; set; }
|
||||||
|
public SignatureKeyPairData signatureKeyPairData { get; set; }
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user