From a2dc1602f89707b0f2438eaee7317607897d8eef Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Tue, 15 Aug 2017 16:31:19 -0400 Subject: [PATCH] api for requesting installation ids --- .../Controllers/InstallationsController.cs | 32 +++++++++++++++++++ src/Api/settings.json | 7 +++- .../Api/Request/InstallationRequestModel.cs | 22 +++++++++++++ .../Api/Response/InstallationResponseModel.cs | 18 +++++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 src/Api/Controllers/InstallationsController.cs create mode 100644 src/Core/Models/Api/Request/InstallationRequestModel.cs create mode 100644 src/Core/Models/Api/Response/InstallationResponseModel.cs diff --git a/src/Api/Controllers/InstallationsController.cs b/src/Api/Controllers/InstallationsController.cs new file mode 100644 index 000000000..c4ee72f09 --- /dev/null +++ b/src/Api/Controllers/InstallationsController.cs @@ -0,0 +1,32 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Bit.Core.Repositories; +using Bit.Core.Models.Api; +using Bit.Api.Utilities; +using Microsoft.AspNetCore.Authorization; + +namespace Bit.Api.Controllers +{ + [Route("installations")] + [SelfHosted(NotSelfHostedOnly = true)] + public class InstallationsController : Controller + { + private readonly IInstallationRepository _installationRepository; + + public InstallationsController( + IInstallationRepository installationRepository) + { + _installationRepository = installationRepository; + } + + [HttpPost("")] + [AllowAnonymous] + public async Task Post([FromBody] InstallationRequestModel model) + { + var installation = model.ToInstallation(); + await _installationRepository.CreateAsync(installation); + return new InstallationResponseModel(installation); + } + } +} diff --git a/src/Api/settings.json b/src/Api/settings.json index 650f6fa03..0734f64bf 100644 --- a/src/Api/settings.json +++ b/src/Api/settings.json @@ -2,7 +2,7 @@ "globalSettings": { "selfHosted": false, "siteName": "bitwarden", - "projectName": "Api", + "projectName": "Api", "stripeApiKey": "SECRET", "baseServiceUri": { "vault": "http://localhost:4001", @@ -111,6 +111,11 @@ "Endpoint": "get:/alive", "Period": "1m", "Limit": 5 + }, + { + "Endpoint": "post:/installations", + "Period": "2m", + "Limit": 2 } ] }, diff --git a/src/Core/Models/Api/Request/InstallationRequestModel.cs b/src/Core/Models/Api/Request/InstallationRequestModel.cs new file mode 100644 index 000000000..ddf94d4e8 --- /dev/null +++ b/src/Core/Models/Api/Request/InstallationRequestModel.cs @@ -0,0 +1,22 @@ +using Bit.Core.Models.Table; +using System.ComponentModel.DataAnnotations; + +namespace Bit.Core.Models.Api +{ + public class InstallationRequestModel + { + [Required] + [EmailAddress] + public string Email { get; set; } + + public Installation ToInstallation() + { + return new Installation + { + Key = Utilities.CoreHelpers.SecureRandomString(20), + Email = Email, + Enabled = true + }; + } + } +} diff --git a/src/Core/Models/Api/Response/InstallationResponseModel.cs b/src/Core/Models/Api/Response/InstallationResponseModel.cs new file mode 100644 index 000000000..9db1567c7 --- /dev/null +++ b/src/Core/Models/Api/Response/InstallationResponseModel.cs @@ -0,0 +1,18 @@ +using System; +using Bit.Core.Models.Table; + +namespace Bit.Core.Models.Api +{ + public class InstallationResponseModel : ResponseModel + { + public InstallationResponseModel(Installation installation) + : base("installation") + { + Id = installation.Id.ToString(); + Key = installation.Key; + } + + public string Id { get; set; } + public string Key { get; set; } + } +}