1
0
mirror of https://github.com/bitwarden/server.git synced 2024-11-24 12:35:25 +01:00

Turn on file scoped namespaces (#2225)

This commit is contained in:
Justin Baur 2022-08-29 14:53:16 -04:00 committed by GitHub
parent 7c4521e0b4
commit 34fb4cca2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1206 changed files with 73816 additions and 75022 deletions

View File

@ -114,6 +114,9 @@ csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true csharp_new_line_before_members_in_anonymous_types = true
# Namespace settigns
csharp_style_namespace_declarations = file_scoped:warning
# All files # All files
[*] [*]
guidelines = 120 guidelines = 120

View File

@ -13,10 +13,10 @@ using Bit.Core.Settings;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.DataProtection;
namespace Bit.Commercial.Core.Services namespace Bit.Commercial.Core.Services;
public class ProviderService : IProviderService
{ {
public class ProviderService : IProviderService
{
public static PlanType[] ProviderDisllowedOrganizationTypes = new[] { PlanType.Free, PlanType.FamiliesAnnually, PlanType.FamiliesAnnually2019 }; public static PlanType[] ProviderDisllowedOrganizationTypes = new[] { PlanType.Free, PlanType.FamiliesAnnually, PlanType.FamiliesAnnually2019 };
private readonly IDataProtector _dataProtector; private readonly IDataProtector _dataProtector;
@ -505,5 +505,4 @@ namespace Bit.Commercial.Core.Services
throw new BadRequestException($"Providers cannot manage organizations with the requested plan type ({requestedType}). Only Teams and Enterprise accounts are allowed."); throw new BadRequestException($"Providers cannot manage organizations with the requested plan type ({requestedType}). Only Teams and Enterprise accounts are allowed.");
} }
} }
}
} }

View File

@ -2,13 +2,12 @@
using Bit.Core.Services; using Bit.Core.Services;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
namespace Bit.Commercial.Core.Utilities namespace Bit.Commercial.Core.Utilities;
public static class ServiceCollectionExtensions
{ {
public static class ServiceCollectionExtensions
{
public static void AddCommCoreServices(this IServiceCollection services) public static void AddCommCoreServices(this IServiceCollection services)
{ {
services.AddScoped<IProviderService, ProviderService>(); services.AddScoped<IProviderService, ProviderService>();
} }
}
} }

View File

@ -4,10 +4,10 @@ using Bit.Core.Models.OrganizationConnectionConfigs;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Bit.Core.Settings; using Bit.Core.Settings;
namespace Bit.Scim.Context namespace Bit.Scim.Context;
public interface IScimContext
{ {
public interface IScimContext
{
ScimProviderType RequestScimProvider { get; set; } ScimProviderType RequestScimProvider { get; set; }
ScimConfig ScimConfiguration { get; set; } ScimConfig ScimConfiguration { get; set; }
Guid? OrganizationId { get; set; } Guid? OrganizationId { get; set; }
@ -17,5 +17,4 @@ namespace Bit.Scim.Context
GlobalSettings globalSettings, GlobalSettings globalSettings,
IOrganizationRepository organizationRepository, IOrganizationRepository organizationRepository,
IOrganizationConnectionRepository organizationConnectionRepository); IOrganizationConnectionRepository organizationConnectionRepository);
}
} }

View File

@ -4,10 +4,10 @@ using Bit.Core.Models.OrganizationConnectionConfigs;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Bit.Core.Settings; using Bit.Core.Settings;
namespace Bit.Scim.Context namespace Bit.Scim.Context;
public class ScimContext : IScimContext
{ {
public class ScimContext : IScimContext
{
private bool _builtHttpContext; private bool _builtHttpContext;
public ScimProviderType RequestScimProvider { get; set; } = ScimProviderType.Default; public ScimProviderType RequestScimProvider { get; set; } = ScimProviderType.Default;
@ -60,5 +60,4 @@ namespace Bit.Scim.Context
RequestScimProvider = ScimProviderType.AzureAd; RequestScimProvider = ScimProviderType.AzureAd;
} }
} }
}
} }

View File

@ -2,11 +2,11 @@
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Scim.Controllers namespace Bit.Scim.Controllers;
[AllowAnonymous]
public class InfoController : Controller
{ {
[AllowAnonymous]
public class InfoController : Controller
{
[HttpGet("~/alive")] [HttpGet("~/alive")]
[HttpGet("~/now")] [HttpGet("~/now")]
public DateTime GetAlive() public DateTime GetAlive()
@ -19,5 +19,4 @@ namespace Bit.Scim.Controllers
{ {
return Json(CoreHelpers.GetVersion()); return Json(CoreHelpers.GetVersion());
} }
}
} }

View File

@ -8,12 +8,12 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
namespace Bit.Scim.Controllers.v2 namespace Bit.Scim.Controllers.v2;
[Authorize("Scim")]
[Route("v2/{organizationId}/groups")]
public class GroupsController : Controller
{ {
[Authorize("Scim")]
[Route("v2/{organizationId}/groups")]
public class GroupsController : Controller
{
private readonly ScimSettings _scimSettings; private readonly ScimSettings _scimSettings;
private readonly IGroupRepository _groupRepository; private readonly IGroupRepository _groupRepository;
private readonly IGroupService _groupService; private readonly IGroupService _groupService;
@ -324,5 +324,4 @@ namespace Bit.Scim.Controllers.v2
await _groupRepository.UpdateUsersAsync(group.Id, memberIds); await _groupRepository.UpdateUsersAsync(group.Id, memberIds);
} }
}
} }

View File

@ -9,12 +9,12 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
namespace Bit.Scim.Controllers.v2 namespace Bit.Scim.Controllers.v2;
[Authorize("Scim")]
[Route("v2/{organizationId}/users")]
public class UsersController : Controller
{ {
[Authorize("Scim")]
[Route("v2/{organizationId}/users")]
public class UsersController : Controller
{
private readonly IUserService _userService; private readonly IUserService _userService;
private readonly IUserRepository _userRepository; private readonly IUserRepository _userRepository;
private readonly IOrganizationUserRepository _organizationUserRepository; private readonly IOrganizationUserRepository _organizationUserRepository;
@ -291,5 +291,4 @@ namespace Bit.Scim.Controllers.v2
} }
return false; return false;
} }
}
} }

View File

@ -1,9 +1,9 @@
using Bit.Scim.Utilities; using Bit.Scim.Utilities;
namespace Bit.Scim.Models namespace Bit.Scim.Models;
public abstract class BaseScimGroupModel : BaseScimModel
{ {
public abstract class BaseScimGroupModel : BaseScimModel
{
public BaseScimGroupModel(bool initSchema = false) public BaseScimGroupModel(bool initSchema = false)
{ {
if (initSchema) if (initSchema)
@ -14,5 +14,4 @@ namespace Bit.Scim.Models
public string DisplayName { get; set; } public string DisplayName { get; set; }
public string ExternalId { get; set; } public string ExternalId { get; set; }
}
} }

View File

@ -1,7 +1,7 @@
namespace Bit.Scim.Models namespace Bit.Scim.Models;
public abstract class BaseScimModel
{ {
public abstract class BaseScimModel
{
public BaseScimModel() public BaseScimModel()
{ } { }
@ -11,5 +11,4 @@
} }
public List<string> Schemas { get; set; } public List<string> Schemas { get; set; }
}
} }

View File

@ -1,9 +1,9 @@
using Bit.Scim.Utilities; using Bit.Scim.Utilities;
namespace Bit.Scim.Models namespace Bit.Scim.Models;
public abstract class BaseScimUserModel : BaseScimModel
{ {
public abstract class BaseScimUserModel : BaseScimModel
{
public BaseScimUserModel(bool initSchema = false) public BaseScimUserModel(bool initSchema = false)
{ {
if (initSchema) if (initSchema)
@ -52,5 +52,4 @@ namespace Bit.Scim.Models
public string Value { get; set; } public string Value { get; set; }
public string Type { get; set; } public string Type { get; set; }
} }
}
} }

View File

@ -1,14 +1,13 @@
using Bit.Scim.Utilities; using Bit.Scim.Utilities;
namespace Bit.Scim.Models namespace Bit.Scim.Models;
public class ScimErrorResponseModel : BaseScimModel
{ {
public class ScimErrorResponseModel : BaseScimModel
{
public ScimErrorResponseModel() public ScimErrorResponseModel()
: base(ScimConstants.Scim2SchemaError) : base(ScimConstants.Scim2SchemaError)
{ } { }
public string Detail { get; set; } public string Detail { get; set; }
public int Status { get; set; } public int Status { get; set; }
}
} }

View File

@ -1,10 +1,10 @@
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Utilities; using Bit.Core.Utilities;
namespace Bit.Scim.Models namespace Bit.Scim.Models;
public class ScimGroupRequestModel : BaseScimGroupModel
{ {
public class ScimGroupRequestModel : BaseScimGroupModel
{
public ScimGroupRequestModel() public ScimGroupRequestModel()
: base(false) : base(false)
{ } { }
@ -27,5 +27,4 @@ namespace Bit.Scim.Models
public string Value { get; set; } public string Value { get; set; }
public string Display { get; set; } public string Display { get; set; }
} }
}
} }

View File

@ -1,9 +1,9 @@
using Bit.Core.Entities; using Bit.Core.Entities;
namespace Bit.Scim.Models namespace Bit.Scim.Models;
public class ScimGroupResponseModel : BaseScimGroupModel
{ {
public class ScimGroupResponseModel : BaseScimGroupModel
{
public ScimGroupResponseModel() public ScimGroupResponseModel()
: base(true) : base(true)
{ {
@ -22,5 +22,4 @@ namespace Bit.Scim.Models
public string Id { get; set; } public string Id { get; set; }
public ScimMetaModel Meta { get; private set; } public ScimMetaModel Meta { get; private set; }
}
} }

View File

@ -1,9 +1,9 @@
using Bit.Scim.Utilities; using Bit.Scim.Utilities;
namespace Bit.Scim.Models namespace Bit.Scim.Models;
public class ScimListResponseModel<T> : BaseScimModel
{ {
public class ScimListResponseModel<T> : BaseScimModel
{
public ScimListResponseModel() public ScimListResponseModel()
: base(ScimConstants.Scim2SchemaListResponse) : base(ScimConstants.Scim2SchemaListResponse)
{ } { }
@ -12,5 +12,4 @@ namespace Bit.Scim.Models
public int StartIndex { get; set; } public int StartIndex { get; set; }
public int ItemsPerPage { get; set; } public int ItemsPerPage { get; set; }
public List<T> Resources { get; set; } public List<T> Resources { get; set; }
}
} }

View File

@ -1,7 +1,7 @@
namespace Bit.Scim.Models namespace Bit.Scim.Models;
public class ScimMetaModel
{ {
public class ScimMetaModel
{
public ScimMetaModel(string resourceType) public ScimMetaModel(string resourceType)
{ {
ResourceType = resourceType; ResourceType = resourceType;
@ -10,5 +10,4 @@
public string ResourceType { get; set; } public string ResourceType { get; set; }
public DateTime? Created { get; set; } public DateTime? Created { get; set; }
public DateTime? LastModified { get; set; } public DateTime? LastModified { get; set; }
}
} }

View File

@ -1,9 +1,9 @@
using System.Text.Json; using System.Text.Json;
namespace Bit.Scim.Models namespace Bit.Scim.Models;
public class ScimPatchModel : BaseScimModel
{ {
public class ScimPatchModel : BaseScimModel
{
public ScimPatchModel() public ScimPatchModel()
: base() { } : base() { }
@ -15,5 +15,4 @@ namespace Bit.Scim.Models
public string Path { get; set; } public string Path { get; set; }
public JsonElement Value { get; set; } public JsonElement Value { get; set; }
} }
}
} }

View File

@ -1,9 +1,8 @@
namespace Bit.Scim.Models namespace Bit.Scim.Models;
public class ScimUserRequestModel : BaseScimUserModel
{ {
public class ScimUserRequestModel : BaseScimUserModel
{
public ScimUserRequestModel() public ScimUserRequestModel()
: base(false) : base(false)
{ } { }
}
} }

View File

@ -1,9 +1,9 @@
using Bit.Core.Models.Data.Organizations.OrganizationUsers; using Bit.Core.Models.Data.Organizations.OrganizationUsers;
namespace Bit.Scim.Models namespace Bit.Scim.Models;
public class ScimUserResponseModel : BaseScimUserModel
{ {
public class ScimUserResponseModel : BaseScimUserModel
{
public ScimUserResponseModel() public ScimUserResponseModel()
: base(true) : base(true)
{ {
@ -25,5 +25,4 @@ namespace Bit.Scim.Models
public string Id { get; set; } public string Id { get; set; }
public ScimMetaModel Meta { get; private set; } public ScimMetaModel Meta { get; private set; }
}
} }

View File

@ -1,10 +1,10 @@
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Serilog.Events; using Serilog.Events;
namespace Bit.Scim namespace Bit.Scim;
public class Program
{ {
public class Program
{
public static void Main(string[] args) public static void Main(string[] args)
{ {
Host Host
@ -30,5 +30,4 @@ namespace Bit.Scim
.Build() .Build()
.Run(); .Run();
} }
}
} }

View File

@ -1,6 +1,5 @@
namespace Bit.Scim namespace Bit.Scim;
public class ScimSettings
{ {
public class ScimSettings
{
}
} }

View File

@ -9,10 +9,10 @@ using IdentityModel;
using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.DependencyInjection.Extensions;
using Stripe; using Stripe;
namespace Bit.Scim namespace Bit.Scim;
public class Startup
{ {
public class Startup
{
public Startup(IWebHostEnvironment env, IConfiguration configuration) public Startup(IWebHostEnvironment env, IConfiguration configuration)
{ {
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US"); CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
@ -112,5 +112,4 @@ namespace Bit.Scim
// Add MVC to the request pipeline. // Add MVC to the request pipeline.
app.UseEndpoints(endpoints => endpoints.MapDefaultControllerRoute()); app.UseEndpoints(endpoints => endpoints.MapDefaultControllerRoute());
} }
}
} }

View File

@ -8,10 +8,10 @@ using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
namespace Bit.Scim.Utilities namespace Bit.Scim.Utilities;
public class ApiKeyAuthenticationHandler : AuthenticationHandler<ApiKeyAuthenticationOptions>
{ {
public class ApiKeyAuthenticationHandler : AuthenticationHandler<ApiKeyAuthenticationOptions>
{
private readonly IOrganizationRepository _organizationRepository; private readonly IOrganizationRepository _organizationRepository;
private readonly IOrganizationApiKeyRepository _organizationApiKeyRepository; private readonly IOrganizationApiKeyRepository _organizationApiKeyRepository;
private readonly IScimContext _scimContext; private readonly IScimContext _scimContext;
@ -86,5 +86,4 @@ namespace Bit.Scim.Utilities
return AuthenticateResult.Success(ticket); return AuthenticateResult.Success(ticket);
} }
}
} }

View File

@ -1,9 +1,8 @@
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication;
namespace Bit.Scim.Utilities namespace Bit.Scim.Utilities;
public class ApiKeyAuthenticationOptions : AuthenticationSchemeOptions
{ {
public class ApiKeyAuthenticationOptions : AuthenticationSchemeOptions
{
public const string DefaultScheme = "ScimApiKey"; public const string DefaultScheme = "ScimApiKey";
}
} }

View File

@ -1,10 +1,9 @@
namespace Bit.Scim.Utilities namespace Bit.Scim.Utilities;
public static class ScimConstants
{ {
public static class ScimConstants
{
public const string Scim2SchemaListResponse = "urn:ietf:params:scim:api:messages:2.0:ListResponse"; public const string Scim2SchemaListResponse = "urn:ietf:params:scim:api:messages:2.0:ListResponse";
public const string Scim2SchemaError = "urn:ietf:params:scim:api:messages:2.0:Error"; public const string Scim2SchemaError = "urn:ietf:params:scim:api:messages:2.0:Error";
public const string Scim2SchemaUser = "urn:ietf:params:scim:schemas:core:2.0:User"; public const string Scim2SchemaUser = "urn:ietf:params:scim:schemas:core:2.0:User";
public const string Scim2SchemaGroup = "urn:ietf:params:scim:schemas:core:2.0:Group"; public const string Scim2SchemaGroup = "urn:ietf:params:scim:schemas:core:2.0:Group";
}
} }

View File

@ -2,10 +2,10 @@
using Bit.Core.Settings; using Bit.Core.Settings;
using Bit.Scim.Context; using Bit.Scim.Context;
namespace Bit.Scim.Utilities namespace Bit.Scim.Utilities;
public class ScimContextMiddleware
{ {
public class ScimContextMiddleware
{
private readonly RequestDelegate _next; private readonly RequestDelegate _next;
public ScimContextMiddleware(RequestDelegate next) public ScimContextMiddleware(RequestDelegate next)
@ -19,5 +19,4 @@ namespace Bit.Scim.Utilities
await scimContext.BuildAsync(httpContext, globalSettings, organizationRepository, organizationConnectionRepository); await scimContext.BuildAsync(httpContext, globalSettings, organizationRepository, organizationConnectionRepository);
await _next.Invoke(httpContext); await _next.Invoke(httpContext);
} }
}
} }

View File

@ -22,10 +22,10 @@ using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Sso.Controllers namespace Bit.Sso.Controllers;
public class AccountController : Controller
{ {
public class AccountController : Controller
{
private readonly IAuthenticationSchemeProvider _schemeProvider; private readonly IAuthenticationSchemeProvider _schemeProvider;
private readonly IClientStore _clientStore; private readonly IClientStore _clientStore;
@ -706,5 +706,4 @@ namespace Bit.Sso.Controllers
return !context.RedirectUri.StartsWith("https", StringComparison.Ordinal) return !context.RedirectUri.StartsWith("https", StringComparison.Ordinal)
&& !context.RedirectUri.StartsWith("http", StringComparison.Ordinal); && !context.RedirectUri.StartsWith("http", StringComparison.Ordinal);
} }
}
} }

View File

@ -5,10 +5,10 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Sso.Controllers namespace Bit.Sso.Controllers;
public class HomeController : Controller
{ {
public class HomeController : Controller
{
private readonly IIdentityServerInteractionService _interaction; private readonly IIdentityServerInteractionService _interaction;
public HomeController(IIdentityServerInteractionService interaction) public HomeController(IIdentityServerInteractionService interaction)
@ -51,5 +51,4 @@ namespace Bit.Sso.Controllers
return View("Error", vm); return View("Error", vm);
} }
}
} }

View File

@ -1,10 +1,10 @@
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Sso.Controllers namespace Bit.Sso.Controllers;
public class InfoController : Controller
{ {
public class InfoController : Controller
{
[HttpGet("~/alive")] [HttpGet("~/alive")]
[HttpGet("~/now")] [HttpGet("~/now")]
public DateTime GetAlive() public DateTime GetAlive()
@ -17,5 +17,4 @@ namespace Bit.Sso.Controllers
{ {
return Json(CoreHelpers.GetVersion()); return Json(CoreHelpers.GetVersion());
} }
}
} }

View File

@ -5,10 +5,10 @@ using Microsoft.AspNetCore.Mvc;
using Sustainsys.Saml2.AspNetCore2; using Sustainsys.Saml2.AspNetCore2;
using Sustainsys.Saml2.WebSso; using Sustainsys.Saml2.WebSso;
namespace Bit.Sso.Controllers namespace Bit.Sso.Controllers;
public class MetadataController : Controller
{ {
public class MetadataController : Controller
{
private readonly IAuthenticationSchemeProvider _schemeProvider; private readonly IAuthenticationSchemeProvider _schemeProvider;
public MetadataController( public MetadataController(
@ -66,5 +66,4 @@ namespace Bit.Sso.Controllers
ContentType = "text/xml", ContentType = "text/xml",
}; };
} }
}
} }

View File

@ -1,9 +1,9 @@
using IdentityServer4.Models; using IdentityServer4.Models;
namespace Bit.Sso.Models namespace Bit.Sso.Models;
public class ErrorViewModel
{ {
public class ErrorViewModel
{
private string _requestId; private string _requestId;
public ErrorMessage Error { get; set; } public ErrorMessage Error { get; set; }
@ -23,5 +23,4 @@ namespace Bit.Sso.Models
_requestId = value; _requestId = value;
} }
} }
}
} }

View File

@ -1,7 +1,6 @@
namespace Bit.Sso.Models namespace Bit.Sso.Models;
public class RedirectViewModel
{ {
public class RedirectViewModel
{
public string RedirectUrl { get; set; } public string RedirectUrl { get; set; }
}
} }

View File

@ -1,9 +1,8 @@
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
namespace Bit.Sso.Models namespace Bit.Sso.Models;
public class SamlEnvironment
{ {
public class SamlEnvironment
{
public X509Certificate2 SpSigningCertificate { get; set; } public X509Certificate2 SpSigningCertificate { get; set; }
}
} }

View File

@ -1,13 +1,12 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Sso.Models namespace Bit.Sso.Models;
public class SsoPreValidateResponseModel : JsonResult
{ {
public class SsoPreValidateResponseModel : JsonResult
{
public SsoPreValidateResponseModel(string token) : base(new public SsoPreValidateResponseModel(string token) : base(new
{ {
token token
}) })
{ } { }
}
} }

View File

@ -2,10 +2,10 @@
using Serilog; using Serilog;
using Serilog.Events; using Serilog.Events;
namespace Bit.Sso namespace Bit.Sso;
public class Program
{ {
public class Program
{
public static void Main(string[] args) public static void Main(string[] args)
{ {
Host Host
@ -30,5 +30,4 @@ namespace Bit.Sso
.Build() .Build()
.Run(); .Run();
} }
}
} }

View File

@ -8,10 +8,10 @@ using IdentityServer4.Extensions;
using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Logging;
using Stripe; using Stripe;
namespace Bit.Sso namespace Bit.Sso;
public class Startup
{ {
public class Startup
{
public Startup(IWebHostEnvironment env, IConfiguration configuration) public Startup(IWebHostEnvironment env, IConfiguration configuration)
{ {
Configuration = configuration; Configuration = configuration;
@ -151,5 +151,4 @@ namespace Bit.Sso
// Log startup // Log startup
logger.LogInformation(Constants.BypassFiltersEventId, globalSettings.ProjectName + " started."); logger.LogInformation(Constants.BypassFiltersEventId, globalSettings.ProjectName + " started.");
} }
}
} }

View File

@ -1,10 +1,10 @@
using System.Security.Claims; using System.Security.Claims;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public static class ClaimsExtensions
{ {
public static class ClaimsExtensions
{
private static readonly Regex _normalizeTextRegEx = private static readonly Regex _normalizeTextRegEx =
new Regex(@"[^a-zA-Z]", RegexOptions.CultureInvariant | RegexOptions.Singleline); new Regex(@"[^a-zA-Z]", RegexOptions.CultureInvariant | RegexOptions.Singleline);
@ -42,5 +42,4 @@ namespace Bit.Sso.Utilities
} }
return _normalizeTextRegEx.Replace(text, string.Empty); return _normalizeTextRegEx.Replace(text, string.Empty);
} }
}
} }

View File

@ -5,10 +5,10 @@ using IdentityServer4.Services;
using IdentityServer4.Stores; using IdentityServer4.Stores;
using IdentityServer4.Validation; using IdentityServer4.Validation;
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public class DiscoveryResponseGenerator : IdentityServer4.ResponseHandling.DiscoveryResponseGenerator
{ {
public class DiscoveryResponseGenerator : IdentityServer4.ResponseHandling.DiscoveryResponseGenerator
{
private readonly GlobalSettings _globalSettings; private readonly GlobalSettings _globalSettings;
public DiscoveryResponseGenerator( public DiscoveryResponseGenerator(
@ -32,5 +32,4 @@ namespace Bit.Sso.Utilities
return CoreHelpers.AdjustIdentityServerConfig(dict, _globalSettings.BaseServiceUri.Sso, return CoreHelpers.AdjustIdentityServerConfig(dict, _globalSettings.BaseServiceUri.Sso,
_globalSettings.BaseServiceUri.InternalSso); _globalSettings.BaseServiceUri.InternalSso);
} }
}
} }

View File

@ -3,10 +3,10 @@ using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Sustainsys.Saml2.AspNetCore2; using Sustainsys.Saml2.AspNetCore2;
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public class DynamicAuthenticationScheme : AuthenticationScheme, IDynamicAuthenticationScheme
{ {
public class DynamicAuthenticationScheme : AuthenticationScheme, IDynamicAuthenticationScheme
{
public DynamicAuthenticationScheme(string name, string displayName, Type handlerType, public DynamicAuthenticationScheme(string name, string displayName, Type handlerType,
AuthenticationSchemeOptions options) AuthenticationSchemeOptions options)
: base(name, displayName, handlerType) : base(name, displayName, handlerType)
@ -86,5 +86,4 @@ namespace Bit.Sso.Utilities
throw new Exception("NoOpenIdConnectMetadataError"); throw new Exception("NoOpenIdConnectMetadataError");
} }
} }
}
} }

View File

@ -18,10 +18,10 @@ using Sustainsys.Saml2.AspNetCore2;
using Sustainsys.Saml2.Configuration; using Sustainsys.Saml2.Configuration;
using Sustainsys.Saml2.Saml2P; using Sustainsys.Saml2.Saml2P;
namespace Bit.Core.Business.Sso namespace Bit.Core.Business.Sso;
public class DynamicAuthenticationSchemeProvider : AuthenticationSchemeProvider
{ {
public class DynamicAuthenticationSchemeProvider : AuthenticationSchemeProvider
{
private readonly IPostConfigureOptions<OpenIdConnectOptions> _oidcPostConfigureOptions; private readonly IPostConfigureOptions<OpenIdConnectOptions> _oidcPostConfigureOptions;
private readonly IExtendedOptionsMonitorCache<OpenIdConnectOptions> _extendedOidcOptionsMonitorCache; private readonly IExtendedOptionsMonitorCache<OpenIdConnectOptions> _extendedOidcOptionsMonitorCache;
private readonly IPostConfigureOptions<Saml2Options> _saml2PostConfigureOptions; private readonly IPostConfigureOptions<Saml2Options> _saml2PostConfigureOptions;
@ -454,5 +454,4 @@ namespace Bit.Core.Business.Sso
_ => Sustainsys.Saml2.WebSso.Saml2BindingType.HttpPost, _ => Sustainsys.Saml2.WebSso.Saml2BindingType.HttpPost,
}; };
} }
}
} }

View File

@ -1,10 +1,10 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public class ExtendedOptionsMonitorCache<TOptions> : IExtendedOptionsMonitorCache<TOptions> where TOptions : class
{ {
public class ExtendedOptionsMonitorCache<TOptions> : IExtendedOptionsMonitorCache<TOptions> where TOptions : class
{
private readonly ConcurrentDictionary<string, Lazy<TOptions>> _cache = private readonly ConcurrentDictionary<string, Lazy<TOptions>> _cache =
new ConcurrentDictionary<string, Lazy<TOptions>>(StringComparer.Ordinal); new ConcurrentDictionary<string, Lazy<TOptions>>(StringComparer.Ordinal);
@ -33,5 +33,4 @@ namespace Bit.Sso.Utilities
{ {
return _cache.TryRemove(name ?? Options.DefaultName, out _); return _cache.TryRemove(name ?? Options.DefaultName, out _);
} }
}
} }

View File

@ -1,13 +1,12 @@
using Bit.Core.Enums; using Bit.Core.Enums;
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication;
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public interface IDynamicAuthenticationScheme
{ {
public interface IDynamicAuthenticationScheme
{
AuthenticationSchemeOptions Options { get; set; } AuthenticationSchemeOptions Options { get; set; }
SsoType SsoType { get; set; } SsoType SsoType { get; set; }
Task Validate(); Task Validate();
}
} }

View File

@ -1,9 +1,8 @@
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public interface IExtendedOptionsMonitorCache<TOptions> : IOptionsMonitorCache<TOptions> where TOptions : class
{ {
public interface IExtendedOptionsMonitorCache<TOptions> : IOptionsMonitorCache<TOptions> where TOptions : class
{
void AddOrUpdate(string name, TOptions options); void AddOrUpdate(string name, TOptions options);
}
} }

View File

@ -1,10 +1,10 @@
using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.IdentityModel.Protocols.OpenIdConnect; using Microsoft.IdentityModel.Protocols.OpenIdConnect;
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public static class OpenIdConnectOptionsExtensions
{ {
public static class OpenIdConnectOptionsExtensions
{
public static async Task<bool> CouldHandleAsync(this OpenIdConnectOptions options, string scheme, HttpContext context) public static async Task<bool> CouldHandleAsync(this OpenIdConnectOptions options, string scheme, HttpContext context)
{ {
// Determine this is a valid request for our handler // Determine this is a valid request for our handler
@ -59,5 +59,4 @@ namespace Bit.Sso.Utilities
// This is likely not an appropriate handler // This is likely not an appropriate handler
return false; return false;
} }
}
} }

View File

@ -1,15 +1,15 @@
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
/// <summary>
/// OpenID Connect Clients use scope values as defined in 3.3 of OAuth 2.0
/// [RFC6749]. These values represent the standard scope values supported
/// by OAuth 2.0 and therefore OIDC.
/// </summary>
/// <remarks>
/// See: https://openid.net/specs/openid-connect-basic-1_0.html#Scopes
/// </remarks>
public static class OpenIdConnectScopes
{ {
/// <summary>
/// OpenID Connect Clients use scope values as defined in 3.3 of OAuth 2.0
/// [RFC6749]. These values represent the standard scope values supported
/// by OAuth 2.0 and therefore OIDC.
/// </summary>
/// <remarks>
/// See: https://openid.net/specs/openid-connect-basic-1_0.html#Scopes
/// </remarks>
public static class OpenIdConnectScopes
{
/// <summary> /// <summary>
/// REQUIRED. Informs the Authorization Server that the Client is making /// REQUIRED. Informs the Authorization Server that the Client is making
/// an OpenID Connect request. If the openid scope value is not present, /// an OpenID Connect request. If the openid scope value is not present,
@ -60,5 +60,4 @@
/// See: https://openid.net/specs/openid-connect-core-1_0.html#rfc.section.2 /// See: https://openid.net/specs/openid-connect-core-1_0.html#rfc.section.2
/// </remarks> /// </remarks>
public const string Acr = "acr"; public const string Acr = "acr";
}
} }

View File

@ -4,10 +4,10 @@ using System.Xml;
using Sustainsys.Saml2; using Sustainsys.Saml2;
using Sustainsys.Saml2.AspNetCore2; using Sustainsys.Saml2.AspNetCore2;
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public static class Saml2OptionsExtensions
{ {
public static class Saml2OptionsExtensions
{
public static async Task<bool> CouldHandleAsync(this Saml2Options options, string scheme, HttpContext context) public static async Task<bool> CouldHandleAsync(this Saml2Options options, string scheme, HttpContext context)
{ {
// Determine this is a valid request for our handler // Determine this is a valid request for our handler
@ -101,5 +101,4 @@ namespace Bit.Sso.Utilities
return true; return true;
} }
}
} }

View File

@ -1,12 +1,11 @@
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public static class SamlClaimTypes
{ {
public static class SamlClaimTypes
{
public const string Email = "urn:oid:0.9.2342.19200300.100.1.3"; public const string Email = "urn:oid:0.9.2342.19200300.100.1.3";
public const string GivenName = "urn:oid:2.5.4.42"; public const string GivenName = "urn:oid:2.5.4.42";
public const string Surname = "urn:oid:2.5.4.4"; public const string Surname = "urn:oid:2.5.4.4";
public const string DisplayName = "urn:oid:2.16.840.1.113730.3.1.241"; public const string DisplayName = "urn:oid:2.16.840.1.113730.3.1.241";
public const string CommonName = "urn:oid:2.5.4.3"; public const string CommonName = "urn:oid:2.5.4.3";
public const string UserId = "urn:oid:0.9.2342.19200300.100.1.1"; public const string UserId = "urn:oid:0.9.2342.19200300.100.1.1";
}
} }

View File

@ -1,7 +1,7 @@
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public static class SamlNameIdFormats
{ {
public static class SamlNameIdFormats
{
// Common // Common
public const string Unspecified = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"; public const string Unspecified = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified";
public const string Email = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"; public const string Email = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress";
@ -14,5 +14,4 @@
public const string WindowsQualifiedDomainName = "urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName"; public const string WindowsQualifiedDomainName = "urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName";
public const string KerberosPrincipalName = "urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos"; public const string KerberosPrincipalName = "urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos";
public const string EntityIdentifier = "urn:oasis:names:tc:SAML:2.0:nameid-format:entity"; public const string EntityIdentifier = "urn:oasis:names:tc:SAML:2.0:nameid-format:entity";
}
} }

View File

@ -1,7 +1,6 @@
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public static class SamlPropertyKeys
{ {
public static class SamlPropertyKeys
{
public const string ClaimFormat = "http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"; public const string ClaimFormat = "http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format";
}
} }

View File

@ -9,10 +9,10 @@ using IdentityServer4.ResponseHandling;
using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Sustainsys.Saml2.AspNetCore2; using Sustainsys.Saml2.AspNetCore2;
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public static class ServiceCollectionExtensions
{ {
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddSsoServices(this IServiceCollection services, public static IServiceCollection AddSsoServices(this IServiceCollection services,
GlobalSettings globalSettings) GlobalSettings globalSettings)
{ {
@ -74,5 +74,4 @@ namespace Bit.Sso.Utilities
return identityServerBuilder; return identityServerBuilder;
} }
}
} }

View File

@ -3,10 +3,10 @@ using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Sustainsys.Saml2.AspNetCore2; using Sustainsys.Saml2.AspNetCore2;
namespace Bit.Sso.Utilities namespace Bit.Sso.Utilities;
public class SsoAuthenticationMiddleware
{ {
public class SsoAuthenticationMiddleware
{
private readonly RequestDelegate _next; private readonly RequestDelegate _next;
public SsoAuthenticationMiddleware(RequestDelegate next, IAuthenticationSchemeProvider schemes) public SsoAuthenticationMiddleware(RequestDelegate next, IAuthenticationSchemeProvider schemes)
@ -81,5 +81,4 @@ namespace Bit.Sso.Utilities
await _next(context); await _next(context);
} }
}
} }

View File

@ -3,10 +3,10 @@ using AutoFixture;
using AutoFixture.Xunit2; using AutoFixture.Xunit2;
using Bit.Core.Enums.Provider; using Bit.Core.Enums.Provider;
namespace Bit.Commercial.Core.Test.AutoFixture namespace Bit.Commercial.Core.Test.AutoFixture;
internal class ProviderUser : ICustomization
{ {
internal class ProviderUser : ICustomization
{
public ProviderUserStatusType Status { get; set; } public ProviderUserStatusType Status { get; set; }
public ProviderUserType Type { get; set; } public ProviderUserType Type { get; set; }
@ -22,10 +22,10 @@ namespace Bit.Commercial.Core.Test.AutoFixture
.With(o => o.Type, Type) .With(o => o.Type, Type)
.With(o => o.Status, Status)); .With(o => o.Status, Status));
} }
} }
public class ProviderUserAttribute : CustomizeAttribute public class ProviderUserAttribute : CustomizeAttribute
{ {
private readonly ProviderUserStatusType _status; private readonly ProviderUserStatusType _status;
private readonly ProviderUserType _type; private readonly ProviderUserType _type;
@ -41,5 +41,4 @@ namespace Bit.Commercial.Core.Test.AutoFixture
{ {
return new ProviderUser(_status, _type); return new ProviderUser(_status, _type);
} }
}
} }

View File

@ -19,10 +19,10 @@ using NSubstitute.ReturnsExtensions;
using Xunit; using Xunit;
using ProviderUser = Bit.Core.Entities.Provider.ProviderUser; using ProviderUser = Bit.Core.Entities.Provider.ProviderUser;
namespace Bit.Commercial.Core.Test.Services namespace Bit.Commercial.Core.Test.Services;
public class ProviderServiceTests
{ {
public class ProviderServiceTests
{
[Theory, CustomAutoData(typeof(SutProviderCustomization))] [Theory, CustomAutoData(typeof(SutProviderCustomization))]
public async Task CreateAsync_UserIdIsInvalid_Throws(SutProvider<ProviderService> sutProvider) public async Task CreateAsync_UserIdIsInvalid_Throws(SutProvider<ProviderService> sutProvider)
{ {
@ -546,5 +546,4 @@ namespace Bit.Commercial.Core.Test.Services
await sutProvider.GetDependency<IEventService>().Received() await sutProvider.GetDependency<IEventService>().Received()
.LogProviderOrganizationEventAsync(providerOrganization, EventType.ProviderOrganization_Removed); .LogProviderOrganizationEventAsync(providerOrganization, EventType.ProviderOrganization_Removed);
} }
}
} }

View File

@ -1,7 +1,7 @@
namespace Bit.Admin namespace Bit.Admin;
public class AdminSettings
{ {
public class AdminSettings
{
public virtual string Admins { get; set; } public virtual string Admins { get; set; }
public virtual CloudflareSettings Cloudflare { get; set; } public virtual CloudflareSettings Cloudflare { get; set; }
public int? DeleteTrashDaysAgo { get; set; } public int? DeleteTrashDaysAgo { get; set; }
@ -12,5 +12,4 @@
public string AuthEmail { get; set; } public string AuthEmail { get; set; }
public string AuthKey { get; set; } public string AuthKey { get; set; }
} }
}
} }

View File

@ -1,10 +1,10 @@
using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Admin.Controllers namespace Bit.Admin.Controllers;
public class ErrorController : Controller
{ {
public class ErrorController : Controller
{
[Route("/error")] [Route("/error")]
public IActionResult Error(int? statusCode = null) public IActionResult Error(int? statusCode = null)
{ {
@ -20,5 +20,4 @@ namespace Bit.Admin.Controllers
return Redirect("/Home"); return Redirect("/Home");
} }
} }
}
} }

View File

@ -6,10 +6,10 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace Bit.Admin.Controllers namespace Bit.Admin.Controllers;
public class HomeController : Controller
{ {
public class HomeController : Controller
{
private readonly GlobalSettings _globalSettings; private readonly GlobalSettings _globalSettings;
private readonly HttpClient _httpClient = new HttpClient(); private readonly HttpClient _httpClient = new HttpClient();
private readonly ILogger<HomeController> _logger; private readonly ILogger<HomeController> _logger;
@ -104,11 +104,10 @@ namespace Bit.Admin.Controllers
[JsonProperty("keyConnectorVersion")] [JsonProperty("keyConnectorVersion")]
public string KeyConnectorVersion { get; set; } public string KeyConnectorVersion { get; set; }
} }
} }
public enum ProjectType public enum ProjectType
{ {
Core, Core,
Web, Web,
}
} }

View File

@ -1,10 +1,10 @@
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Admin.Controllers namespace Bit.Admin.Controllers;
public class InfoController : Controller
{ {
public class InfoController : Controller
{
[HttpGet("~/alive")] [HttpGet("~/alive")]
[HttpGet("~/now")] [HttpGet("~/now")]
public DateTime GetAlive() public DateTime GetAlive()
@ -17,5 +17,4 @@ namespace Bit.Admin.Controllers
{ {
return Json(CoreHelpers.GetVersion()); return Json(CoreHelpers.GetVersion());
} }
}
} }

View File

@ -3,10 +3,10 @@ using Bit.Core.Identity;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Admin.Controllers namespace Bit.Admin.Controllers;
public class LoginController : Controller
{ {
public class LoginController : Controller
{
private readonly PasswordlessSignInManager<IdentityUser> _signInManager; private readonly PasswordlessSignInManager<IdentityUser> _signInManager;
public LoginController( public LoginController(
@ -89,5 +89,4 @@ namespace Bit.Admin.Controllers
_ => null, _ => null,
}; };
} }
}
} }

View File

@ -7,12 +7,12 @@ using Microsoft.Azure.Cosmos;
using Microsoft.Azure.Cosmos.Linq; using Microsoft.Azure.Cosmos.Linq;
using Serilog.Events; using Serilog.Events;
namespace Bit.Admin.Controllers namespace Bit.Admin.Controllers;
[Authorize]
[SelfHosted(NotSelfHostedOnly = true)]
public class LogsController : Controller
{ {
[Authorize]
[SelfHosted(NotSelfHostedOnly = true)]
public class LogsController : Controller
{
private const string Database = "Diagnostics"; private const string Database = "Diagnostics";
private const string Container = "Logs"; private const string Container = "Logs";
@ -89,5 +89,4 @@ namespace Bit.Admin.Controllers
return View(response.First()); return View(response.First());
} }
} }
}
} }

View File

@ -11,11 +11,11 @@ using Bit.Core.Utilities;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Admin.Controllers namespace Bit.Admin.Controllers;
[Authorize]
public class OrganizationsController : Controller
{ {
[Authorize]
public class OrganizationsController : Controller
{
private readonly IOrganizationRepository _organizationRepository; private readonly IOrganizationRepository _organizationRepository;
private readonly IOrganizationUserRepository _organizationUserRepository; private readonly IOrganizationUserRepository _organizationUserRepository;
private readonly IOrganizationConnectionRepository _organizationConnectionRepository; private readonly IOrganizationConnectionRepository _organizationConnectionRepository;
@ -213,5 +213,4 @@ namespace Bit.Admin.Controllers
return RedirectToAction("Index"); return RedirectToAction("Index");
} }
}
} }

View File

@ -7,12 +7,12 @@ using Bit.Core.Utilities;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Admin.Controllers namespace Bit.Admin.Controllers;
[Authorize]
[SelfHosted(NotSelfHostedOnly = true)]
public class ProvidersController : Controller
{ {
[Authorize]
[SelfHosted(NotSelfHostedOnly = true)]
public class ProvidersController : Controller
{
private readonly IProviderRepository _providerRepository; private readonly IProviderRepository _providerRepository;
private readonly IProviderUserRepository _providerUserRepository; private readonly IProviderUserRepository _providerUserRepository;
private readonly IProviderOrganizationRepository _providerOrganizationRepository; private readonly IProviderOrganizationRepository _providerOrganizationRepository;
@ -130,5 +130,4 @@ namespace Bit.Admin.Controllers
TempData["InviteResentTo"] = ownerId; TempData["InviteResentTo"] = ownerId;
return RedirectToAction("Edit", new { id = providerId }); return RedirectToAction("Edit", new { id = providerId });
} }
}
} }

View File

@ -10,12 +10,12 @@ using Bit.Core.Utilities;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Admin.Controllers namespace Bit.Admin.Controllers;
[Authorize]
[SelfHosted(NotSelfHostedOnly = true)]
public class ToolsController : Controller
{ {
[Authorize]
[SelfHosted(NotSelfHostedOnly = true)]
public class ToolsController : Controller
{
private readonly GlobalSettings _globalSettings; private readonly GlobalSettings _globalSettings;
private readonly IOrganizationRepository _organizationRepository; private readonly IOrganizationRepository _organizationRepository;
private readonly IOrganizationService _organizationService; private readonly IOrganizationService _organizationService;
@ -555,5 +555,4 @@ namespace Bit.Admin.Controllers
var bytes = Encoding.UTF8.GetBytes(result); var bytes = Encoding.UTF8.GetBytes(result);
return File(bytes, "application/json", "StripeSubscriptionsSearch.json"); return File(bytes, "application/json", "StripeSubscriptionsSearch.json");
} }
}
} }

View File

@ -7,11 +7,11 @@ using Bit.Core.Utilities;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace Bit.Admin.Controllers namespace Bit.Admin.Controllers;
[Authorize]
public class UsersController : Controller
{ {
[Authorize]
public class UsersController : Controller
{
private readonly IUserRepository _userRepository; private readonly IUserRepository _userRepository;
private readonly ICipherRepository _cipherRepository; private readonly ICipherRepository _cipherRepository;
private readonly IPaymentService _paymentService; private readonly IPaymentService _paymentService;
@ -107,5 +107,4 @@ namespace Bit.Admin.Controllers
return RedirectToAction("Index"); return RedirectToAction("Index");
} }
}
} }

View File

@ -4,10 +4,10 @@ using Amazon.SQS.Model;
using Bit.Core.Settings; using Bit.Core.Settings;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
namespace Bit.Admin.HostedServices namespace Bit.Admin.HostedServices;
public class AmazonSqsBlockIpHostedService : BlockIpHostedService
{ {
public class AmazonSqsBlockIpHostedService : BlockIpHostedService
{
private AmazonSQSClient _client; private AmazonSQSClient _client;
public AmazonSqsBlockIpHostedService( public AmazonSqsBlockIpHostedService(
@ -80,5 +80,4 @@ namespace Bit.Admin.HostedServices
await Task.Delay(TimeSpan.FromSeconds(15)); await Task.Delay(TimeSpan.FromSeconds(15));
} }
} }
}
} }

View File

@ -2,10 +2,10 @@
using Bit.Core.Settings; using Bit.Core.Settings;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
namespace Bit.Admin.HostedServices namespace Bit.Admin.HostedServices;
public class AzureQueueBlockIpHostedService : BlockIpHostedService
{ {
public class AzureQueueBlockIpHostedService : BlockIpHostedService
{
private QueueClient _blockIpQueueClient; private QueueClient _blockIpQueueClient;
private QueueClient _unblockIpQueueClient; private QueueClient _unblockIpQueueClient;
@ -60,5 +60,4 @@ namespace Bit.Admin.HostedServices
await Task.Delay(TimeSpan.FromSeconds(15)); await Task.Delay(TimeSpan.FromSeconds(15));
} }
} }
}
} }

View File

@ -6,10 +6,10 @@ using Bit.Core.Services;
using Bit.Core.Settings; using Bit.Core.Settings;
using Bit.Core.Utilities; using Bit.Core.Utilities;
namespace Bit.Admin.HostedServices namespace Bit.Admin.HostedServices;
public class AzureQueueMailHostedService : IHostedService
{ {
public class AzureQueueMailHostedService : IHostedService
{
private readonly ILogger<AzureQueueMailHostedService> _logger; private readonly ILogger<AzureQueueMailHostedService> _logger;
private readonly GlobalSettings _globalSettings; private readonly GlobalSettings _globalSettings;
private readonly IMailService _mailService; private readonly IMailService _mailService;
@ -98,5 +98,4 @@ namespace Bit.Admin.HostedServices
{ {
return (await _mailQueueClient.ReceiveMessagesAsync(maxMessages: 32))?.Value ?? new QueueMessage[] { }; return (await _mailQueueClient.ReceiveMessagesAsync(maxMessages: 32))?.Value ?? new QueueMessage[] { };
} }
}
} }

View File

@ -1,10 +1,10 @@
using Bit.Core.Settings; using Bit.Core.Settings;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
namespace Bit.Admin.HostedServices namespace Bit.Admin.HostedServices;
public abstract class BlockIpHostedService : IHostedService, IDisposable
{ {
public abstract class BlockIpHostedService : IHostedService, IDisposable
{
protected readonly ILogger<BlockIpHostedService> _logger; protected readonly ILogger<BlockIpHostedService> _logger;
protected readonly GlobalSettings _globalSettings; protected readonly GlobalSettings _globalSettings;
private readonly AdminSettings _adminSettings; private readonly AdminSettings _adminSettings;
@ -161,5 +161,4 @@ namespace Bit.Admin.HostedServices
public string Value { get; set; } public string Value { get; set; }
} }
} }
}
} }

View File

@ -3,10 +3,10 @@ using Bit.Core.Jobs;
using Bit.Core.Settings; using Bit.Core.Settings;
using Bit.Migrator; using Bit.Migrator;
namespace Bit.Admin.HostedServices namespace Bit.Admin.HostedServices;
public class DatabaseMigrationHostedService : IHostedService, IDisposable
{ {
public class DatabaseMigrationHostedService : IHostedService, IDisposable
{
private readonly GlobalSettings _globalSettings; private readonly GlobalSettings _globalSettings;
private readonly ILogger<DatabaseMigrationHostedService> _logger; private readonly ILogger<DatabaseMigrationHostedService> _logger;
private readonly DbMigrator _dbMigrator; private readonly DbMigrator _dbMigrator;
@ -60,5 +60,4 @@ namespace Bit.Admin.HostedServices
public virtual void Dispose() public virtual void Dispose()
{ } { }
}
} }

View File

@ -3,10 +3,10 @@ using Bit.Core.Jobs;
using Bit.Core.Settings; using Bit.Core.Settings;
using Quartz; using Quartz;
namespace Bit.Admin.Jobs namespace Bit.Admin.Jobs;
public class AliveJob : BaseJob
{ {
public class AliveJob : BaseJob
{
private readonly GlobalSettings _globalSettings; private readonly GlobalSettings _globalSettings;
private HttpClient _httpClient = new HttpClient(); private HttpClient _httpClient = new HttpClient();
@ -25,5 +25,4 @@ namespace Bit.Admin.Jobs
_logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: Keep alive, " + _logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: Keep alive, " +
response.StatusCode); response.StatusCode);
} }
}
} }

View File

@ -3,10 +3,10 @@ using Bit.Core.Jobs;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Quartz; using Quartz;
namespace Bit.Admin.Jobs namespace Bit.Admin.Jobs;
public class DatabaseExpiredGrantsJob : BaseJob
{ {
public class DatabaseExpiredGrantsJob : BaseJob
{
private readonly IMaintenanceRepository _maintenanceRepository; private readonly IMaintenanceRepository _maintenanceRepository;
public DatabaseExpiredGrantsJob( public DatabaseExpiredGrantsJob(
@ -23,5 +23,4 @@ namespace Bit.Admin.Jobs
await _maintenanceRepository.DeleteExpiredGrantsAsync(); await _maintenanceRepository.DeleteExpiredGrantsAsync();
_logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: DeleteExpiredGrantsAsync"); _logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: DeleteExpiredGrantsAsync");
} }
}
} }

View File

@ -4,10 +4,10 @@ using Bit.Core.Repositories;
using Bit.Core.Settings; using Bit.Core.Settings;
using Quartz; using Quartz;
namespace Bit.Admin.Jobs namespace Bit.Admin.Jobs;
public class DatabaseExpiredSponsorshipsJob : BaseJob
{ {
public class DatabaseExpiredSponsorshipsJob : BaseJob
{
private GlobalSettings _globalSettings; private GlobalSettings _globalSettings;
private readonly IMaintenanceRepository _maintenanceRepository; private readonly IMaintenanceRepository _maintenanceRepository;
@ -35,5 +35,4 @@ namespace Bit.Admin.Jobs
await _maintenanceRepository.DeleteExpiredSponsorshipsAsync(deleteDate); await _maintenanceRepository.DeleteExpiredSponsorshipsAsync(deleteDate);
_logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: DeleteExpiredSponsorshipsAsync"); _logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: DeleteExpiredSponsorshipsAsync");
} }
}
} }

View File

@ -3,10 +3,10 @@ using Bit.Core.Jobs;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Quartz; using Quartz;
namespace Bit.Admin.Jobs namespace Bit.Admin.Jobs;
public class DatabaseRebuildlIndexesJob : BaseJob
{ {
public class DatabaseRebuildlIndexesJob : BaseJob
{
private readonly IMaintenanceRepository _maintenanceRepository; private readonly IMaintenanceRepository _maintenanceRepository;
public DatabaseRebuildlIndexesJob( public DatabaseRebuildlIndexesJob(
@ -23,5 +23,4 @@ namespace Bit.Admin.Jobs
await _maintenanceRepository.RebuildIndexesAsync(); await _maintenanceRepository.RebuildIndexesAsync();
_logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: RebuildIndexesAsync"); _logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: RebuildIndexesAsync");
} }
}
} }

View File

@ -3,10 +3,10 @@ using Bit.Core.Jobs;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Quartz; using Quartz;
namespace Bit.Admin.Jobs namespace Bit.Admin.Jobs;
public class DatabaseUpdateStatisticsJob : BaseJob
{ {
public class DatabaseUpdateStatisticsJob : BaseJob
{
private readonly IMaintenanceRepository _maintenanceRepository; private readonly IMaintenanceRepository _maintenanceRepository;
public DatabaseUpdateStatisticsJob( public DatabaseUpdateStatisticsJob(
@ -26,5 +26,4 @@ namespace Bit.Admin.Jobs
await _maintenanceRepository.DisableCipherAutoStatsAsync(); await _maintenanceRepository.DisableCipherAutoStatsAsync();
_logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: DisableCipherAutoStatsAsync"); _logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: DisableCipherAutoStatsAsync");
} }
}
} }

View File

@ -4,10 +4,10 @@ using Bit.Core.Repositories;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Quartz; using Quartz;
namespace Bit.Admin.Jobs namespace Bit.Admin.Jobs;
public class DeleteCiphersJob : BaseJob
{ {
public class DeleteCiphersJob : BaseJob
{
private readonly ICipherRepository _cipherRepository; private readonly ICipherRepository _cipherRepository;
private readonly AdminSettings _adminSettings; private readonly AdminSettings _adminSettings;
@ -33,5 +33,4 @@ namespace Bit.Admin.Jobs
await _cipherRepository.DeleteDeletedAsync(deleteDate); await _cipherRepository.DeleteDeletedAsync(deleteDate);
_logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: DeleteDeletedAsync"); _logger.LogInformation(Constants.BypassFiltersEventId, "Finished job task: DeleteDeletedAsync");
} }
}
} }

View File

@ -4,10 +4,10 @@ using Bit.Core.Repositories;
using Bit.Core.Services; using Bit.Core.Services;
using Quartz; using Quartz;
namespace Bit.Admin.Jobs namespace Bit.Admin.Jobs;
public class DeleteSendsJob : BaseJob
{ {
public class DeleteSendsJob : BaseJob
{
private readonly ISendRepository _sendRepository; private readonly ISendRepository _sendRepository;
private readonly IServiceProvider _serviceProvider; private readonly IServiceProvider _serviceProvider;
@ -38,5 +38,4 @@ namespace Bit.Admin.Jobs
} }
} }
} }
}
} }

View File

@ -3,10 +3,10 @@ using Bit.Core.Jobs;
using Bit.Core.Settings; using Bit.Core.Settings;
using Quartz; using Quartz;
namespace Bit.Admin.Jobs namespace Bit.Admin.Jobs;
public class JobsHostedService : BaseJobsHostedService
{ {
public class JobsHostedService : BaseJobsHostedService
{
public JobsHostedService( public JobsHostedService(
GlobalSettings globalSettings, GlobalSettings globalSettings,
IServiceProvider serviceProvider, IServiceProvider serviceProvider,
@ -92,5 +92,4 @@ namespace Bit.Admin.Jobs
services.AddTransient<DeleteSendsJob>(); services.AddTransient<DeleteSendsJob>();
services.AddTransient<DeleteCiphersJob>(); services.AddTransient<DeleteCiphersJob>();
} }
}
} }

View File

@ -1,11 +1,10 @@
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class BillingInformationModel
{ {
public class BillingInformationModel
{
public BillingInfo BillingInfo { get; set; } public BillingInfo BillingInfo { get; set; }
public Guid? UserId { get; set; } public Guid? UserId { get; set; }
public Guid? OrganizationId { get; set; } public Guid? OrganizationId { get; set; }
}
} }

View File

@ -1,9 +1,9 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class ChargeBraintreeModel : IValidatableObject
{ {
public class ChargeBraintreeModel : IValidatableObject
{
[Required] [Required]
[Display(Name = "Braintree Customer Id")] [Display(Name = "Braintree Customer Id")]
public string Id { get; set; } public string Id { get; set; }
@ -24,5 +24,4 @@ namespace Bit.Admin.Models
} }
} }
} }
}
} }

View File

@ -1,13 +1,12 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class CreateProviderModel
{ {
public class CreateProviderModel
{
public CreateProviderModel() { } public CreateProviderModel() { }
[Display(Name = "Owner Email")] [Display(Name = "Owner Email")]
[Required] [Required]
public string OwnerEmail { get; set; } public string OwnerEmail { get; set; }
}
} }

View File

@ -2,10 +2,10 @@
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class CreateUpdateTransactionModel : IValidatableObject
{ {
public class CreateUpdateTransactionModel : IValidatableObject
{
public CreateUpdateTransactionModel() { } public CreateUpdateTransactionModel() { }
public CreateUpdateTransactionModel(Transaction transaction) public CreateUpdateTransactionModel(Transaction transaction)
@ -74,5 +74,4 @@ namespace Bit.Admin.Models
Type = Type.Value Type = Type.Value
}; };
} }
}
} }

View File

@ -1,10 +1,9 @@
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class CursorPagedModel<T>
{ {
public class CursorPagedModel<T>
{
public List<T> Items { get; set; } public List<T> Items { get; set; }
public int Count { get; set; } public int Count { get; set; }
public string Cursor { get; set; } public string Cursor { get; set; }
public string NextCursor { get; set; } public string NextCursor { get; set; }
}
} }

View File

@ -1,9 +1,8 @@
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class ErrorViewModel
{ {
public class ErrorViewModel
{
public string RequestId { get; set; } public string RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
} }

View File

@ -1,10 +1,9 @@
using Bit.Core.Settings; using Bit.Core.Settings;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class HomeModel
{ {
public class HomeModel
{
public string CurrentVersion { get; set; } public string CurrentVersion { get; set; }
public GlobalSettings GlobalSettings { get; set; } public GlobalSettings GlobalSettings { get; set; }
}
} }

View File

@ -1,9 +1,9 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class LicenseModel : IValidatableObject
{ {
public class LicenseModel : IValidatableObject
{
[Display(Name = "User Id")] [Display(Name = "User Id")]
public Guid? UserId { get; set; } public Guid? UserId { get; set; }
[Display(Name = "Organization Id")] [Display(Name = "Organization Id")]
@ -31,5 +31,4 @@ namespace Bit.Admin.Models
yield return new ValidationResult("Installation Id is required for organization licenses."); yield return new ValidationResult("Installation Id is required for organization licenses.");
} }
} }
}
} }

View File

@ -1,10 +1,10 @@
using Microsoft.Azure.Documents; using Microsoft.Azure.Documents;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class LogModel : Resource
{ {
public class LogModel : Resource
{
public long EventIdHash { get; set; } public long EventIdHash { get; set; }
public string Level { get; set; } public string Level { get; set; }
public string Message { get; set; } public string Message { get; set; }
@ -12,10 +12,10 @@ namespace Bit.Admin.Models
public string MessageTemplate { get; set; } public string MessageTemplate { get; set; }
public IDictionary<string, object> Properties { get; set; } public IDictionary<string, object> Properties { get; set; }
public string Project => Properties?.ContainsKey("Project") ?? false ? Properties["Project"].ToString() : null; public string Project => Properties?.ContainsKey("Project") ?? false ? Properties["Project"].ToString() : null;
} }
public class LogDetailsModel : LogModel public class LogDetailsModel : LogModel
{ {
public JObject Exception { get; set; } public JObject Exception { get; set; }
public string ExceptionToString(JObject e) public string ExceptionToString(JObject e)
@ -51,5 +51,4 @@ namespace Bit.Admin.Models
return val; return val;
} }
}
} }

View File

@ -1,14 +1,13 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class LoginModel
{ {
public class LoginModel
{
[Required] [Required]
[EmailAddress] [EmailAddress]
public string Email { get; set; } public string Email { get; set; }
public string ReturnUrl { get; set; } public string ReturnUrl { get; set; }
public string Error { get; set; } public string Error { get; set; }
public string Success { get; set; } public string Success { get; set; }
}
} }

View File

@ -1,12 +1,11 @@
using Serilog.Events; using Serilog.Events;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class LogsModel : CursorPagedModel<LogModel>
{ {
public class LogsModel : CursorPagedModel<LogModel>
{
public LogEventLevel? Level { get; set; } public LogEventLevel? Level { get; set; }
public string Project { get; set; } public string Project { get; set; }
public DateTime? Start { get; set; } public DateTime? Start { get; set; }
public DateTime? End { get; set; } public DateTime? End { get; set; }
}
} }

View File

@ -6,10 +6,10 @@ using Bit.Core.Models.Data.Organizations.OrganizationUsers;
using Bit.Core.Settings; using Bit.Core.Settings;
using Bit.Core.Utilities; using Bit.Core.Utilities;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class OrganizationEditModel : OrganizationViewModel
{ {
public class OrganizationEditModel : OrganizationViewModel
{
public OrganizationEditModel() { } public OrganizationEditModel() { }
public OrganizationEditModel(Organization org, IEnumerable<OrganizationUserUserDetails> orgUsers, public OrganizationEditModel(Organization org, IEnumerable<OrganizationUserUserDetails> orgUsers,
@ -149,5 +149,4 @@ namespace Bit.Admin.Models
existingOrganization.MaxAutoscaleSeats = MaxAutoscaleSeats; existingOrganization.MaxAutoscaleSeats = MaxAutoscaleSeats;
return existingOrganization; return existingOrganization;
} }
}
} }

View File

@ -2,10 +2,10 @@
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Data.Organizations.OrganizationUsers; using Bit.Core.Models.Data.Organizations.OrganizationUsers;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class OrganizationViewModel
{ {
public class OrganizationViewModel
{
public OrganizationViewModel() { } public OrganizationViewModel() { }
public OrganizationViewModel(Organization org, IEnumerable<OrganizationConnection> connections, public OrganizationViewModel(Organization org, IEnumerable<OrganizationConnection> connections,
@ -46,5 +46,4 @@ namespace Bit.Admin.Models
public int GroupCount { get; set; } public int GroupCount { get; set; }
public int PolicyCount { get; set; } public int PolicyCount { get; set; }
public bool HasPublicPrivateKeys { get; set; } public bool HasPublicPrivateKeys { get; set; }
}
} }

View File

@ -1,13 +1,12 @@
using Bit.Core.Entities; using Bit.Core.Entities;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class OrganizationsModel : PagedModel<Organization>
{ {
public class OrganizationsModel : PagedModel<Organization>
{
public string Name { get; set; } public string Name { get; set; }
public string UserEmail { get; set; } public string UserEmail { get; set; }
public bool? Paid { get; set; } public bool? Paid { get; set; }
public string Action { get; set; } public string Action { get; set; }
public bool SelfHosted { get; set; } public bool SelfHosted { get; set; }
}
} }

View File

@ -1,11 +1,10 @@
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public abstract class PagedModel<T>
{ {
public abstract class PagedModel<T>
{
public List<T> Items { get; set; } public List<T> Items { get; set; }
public int Page { get; set; } public int Page { get; set; }
public int Count { get; set; } public int Count { get; set; }
public int? PreviousPage => Page < 2 ? (int?)null : Page - 1; public int? PreviousPage => Page < 2 ? (int?)null : Page - 1;
public int? NextPage => Items.Count < Count ? (int?)null : Page + 1; public int? NextPage => Items.Count < Count ? (int?)null : Page + 1;
}
} }

View File

@ -1,14 +1,13 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class PromoteAdminModel
{ {
public class PromoteAdminModel
{
[Required] [Required]
[Display(Name = "Admin User Id")] [Display(Name = "Admin User Id")]
public Guid? UserId { get; set; } public Guid? UserId { get; set; }
[Required] [Required]
[Display(Name = "Organization Id")] [Display(Name = "Organization Id")]
public Guid? OrganizationId { get; set; } public Guid? OrganizationId { get; set; }
}
} }

View File

@ -2,10 +2,10 @@
using Bit.Core.Entities.Provider; using Bit.Core.Entities.Provider;
using Bit.Core.Models.Data; using Bit.Core.Models.Data;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class ProviderEditModel : ProviderViewModel
{ {
public class ProviderEditModel : ProviderViewModel
{
public ProviderEditModel() { } public ProviderEditModel() { }
public ProviderEditModel(Provider provider, IEnumerable<ProviderUserUserDetails> providerUsers, IEnumerable<ProviderOrganizationOrganizationDetails> organizations) public ProviderEditModel(Provider provider, IEnumerable<ProviderUserUserDetails> providerUsers, IEnumerable<ProviderOrganizationOrganizationDetails> organizations)
@ -30,5 +30,4 @@ namespace Bit.Admin.Models
existingProvider.BillingEmail = BillingEmail?.ToLowerInvariant()?.Trim(); existingProvider.BillingEmail = BillingEmail?.ToLowerInvariant()?.Trim();
return existingProvider; return existingProvider;
} }
}
} }

View File

@ -2,10 +2,10 @@
using Bit.Core.Enums.Provider; using Bit.Core.Enums.Provider;
using Bit.Core.Models.Data; using Bit.Core.Models.Data;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class ProviderViewModel
{ {
public class ProviderViewModel
{
public ProviderViewModel() { } public ProviderViewModel() { }
public ProviderViewModel(Provider provider, IEnumerable<ProviderUserUserDetails> providerUsers, IEnumerable<ProviderOrganizationOrganizationDetails> organizations) public ProviderViewModel(Provider provider, IEnumerable<ProviderUserUserDetails> providerUsers, IEnumerable<ProviderOrganizationOrganizationDetails> organizations)
@ -21,5 +21,4 @@ namespace Bit.Admin.Models
public Provider Provider { get; set; } public Provider Provider { get; set; }
public IEnumerable<ProviderUserUserDetails> ProviderAdmins { get; set; } public IEnumerable<ProviderUserUserDetails> ProviderAdmins { get; set; }
public IEnumerable<ProviderOrganizationOrganizationDetails> ProviderOrganizations { get; set; } public IEnumerable<ProviderOrganizationOrganizationDetails> ProviderOrganizations { get; set; }
}
} }

View File

@ -1,13 +1,12 @@
using Bit.Core.Entities.Provider; using Bit.Core.Entities.Provider;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class ProvidersModel : PagedModel<Provider>
{ {
public class ProvidersModel : PagedModel<Provider>
{
public string Name { get; set; } public string Name { get; set; }
public string UserEmail { get; set; } public string UserEmail { get; set; }
public bool? Paid { get; set; } public bool? Paid { get; set; }
public string Action { get; set; } public string Action { get; set; }
public bool SelfHosted { get; set; } public bool SelfHosted { get; set; }
}
} }

View File

@ -1,10 +1,10 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Bit.Core.Models.BitStripe; using Bit.Core.Models.BitStripe;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class StripeSubscriptionRowModel
{ {
public class StripeSubscriptionRowModel
{
public Stripe.Subscription Subscription { get; set; } public Stripe.Subscription Subscription { get; set; }
public bool Selected { get; set; } public bool Selected { get; set; }
@ -13,19 +13,19 @@ namespace Bit.Admin.Models
{ {
Subscription = subscription; Subscription = subscription;
} }
} }
public enum StripeSubscriptionsAction public enum StripeSubscriptionsAction
{ {
Search, Search,
PreviousPage, PreviousPage,
NextPage, NextPage,
Export, Export,
BulkCancel BulkCancel
} }
public class StripeSubscriptionsModel : IValidatableObject public class StripeSubscriptionsModel : IValidatableObject
{ {
public List<StripeSubscriptionRowModel> Items { get; set; } public List<StripeSubscriptionRowModel> Items { get; set; }
public StripeSubscriptionsAction Action { get; set; } = StripeSubscriptionsAction.Search; public StripeSubscriptionsAction Action { get; set; } = StripeSubscriptionsAction.Search;
public string Message { get; set; } public string Message { get; set; }
@ -39,5 +39,4 @@ namespace Bit.Admin.Models
yield return new ValidationResult("Bulk cancel is currently only supported for unpaid subscriptions"); yield return new ValidationResult("Bulk cancel is currently only supported for unpaid subscriptions");
} }
} }
}
} }

View File

@ -1,11 +1,10 @@
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class TaxRateAddEditModel
{ {
public class TaxRateAddEditModel
{
public string StripeTaxRateId { get; set; } public string StripeTaxRateId { get; set; }
public string Country { get; set; } public string Country { get; set; }
public string State { get; set; } public string State { get; set; }
public string PostalCode { get; set; } public string PostalCode { get; set; }
public decimal Rate { get; set; } public decimal Rate { get; set; }
}
} }

View File

@ -1,9 +1,8 @@
using Bit.Core.Entities; using Bit.Core.Entities;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class TaxRatesModel : PagedModel<TaxRate>
{ {
public class TaxRatesModel : PagedModel<TaxRate>
{
public string Message { get; set; } public string Message { get; set; }
}
} }

View File

@ -4,10 +4,10 @@ using Bit.Core.Models.Business;
using Bit.Core.Settings; using Bit.Core.Settings;
using Bit.Core.Utilities; using Bit.Core.Utilities;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class UserEditModel : UserViewModel
{ {
public class UserEditModel : UserViewModel
{
public UserEditModel() { } public UserEditModel() { }
public UserEditModel(User user, IEnumerable<Cipher> ciphers, BillingInfo billingInfo, public UserEditModel(User user, IEnumerable<Cipher> ciphers, BillingInfo billingInfo,
@ -70,5 +70,4 @@ namespace Bit.Admin.Models
existingUser.PremiumExpirationDate = PremiumExpirationDate; existingUser.PremiumExpirationDate = PremiumExpirationDate;
return existingUser; return existingUser;
} }
}
} }

View File

@ -1,9 +1,9 @@
using Bit.Core.Entities; using Bit.Core.Entities;
namespace Bit.Admin.Models namespace Bit.Admin.Models;
public class UserViewModel
{ {
public class UserViewModel
{
public UserViewModel() { } public UserViewModel() { }
public UserViewModel(User user, IEnumerable<Cipher> ciphers) public UserViewModel(User user, IEnumerable<Cipher> ciphers)
@ -14,5 +14,4 @@ namespace Bit.Admin.Models
public User User { get; set; } public User User { get; set; }
public int CipherCount { get; set; } public int CipherCount { get; set; }
}
} }

Some files were not shown because too many files have changed in this diff Show More