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

Feature/self hosted development (#1921)

* Add self-host option to migration runner

* Add Self-host launch options

* Add self-hosted settings override

Let's a single secrets/env config file control both
cloud and self-hosted settings by allowing
overrides to cloud settings with self-hosted

* Allow dev-signed licenses on dev self-hosted

* Allow setting bitwarden cloud api url

Useful for testing api integration between installations and cloud

* Remove testing echoes

* Remove run config property groups

* Use `getopts` for options

* Pass in full environment
This commit is contained in:
Matt Gibson 2022-03-21 18:13:00 -04:00 committed by GitHub
parent dea1427ba2
commit 4814cef245
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 564 additions and 28 deletions

347
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,347 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"compounds": [
{
"name": "Min Server",
"configurations": [
"Identity",
"API"
],
"presentation": {
"hidden": false,
"group": "AA_compounds",
"order": 1
},
"stopAll": true
},
{
"name": "Admin, API, Identity",
"configurations": [
"Admin",
"API",
"Identity"
],
"presentation": {
"hidden": false,
"group": "AA_compounds",
"order": 3
},
"stopAll": true
},
{
"name": "Full Server",
"configurations": [
"Admin",
"API",
"EventsProcessor",
"Identity",
"Sso",
"Icons",
],
"presentation": {
"hidden": false,
"group": "AA_compounds",
"order": 4
},
"stopAll": true
},
{
"name": "Self Host: Bit",
"configurations": [
"Admin-SelfHost",
"API-SelfHost",
"EventsProcessor-SelfHost",
"Identity-SelfHost",
"Sso-SelfHost",
],
"presentation": {
"hidden": false,
"group": "AA_compounds",
"order": 2
},
"stopAll": true
},
{
"name": "Self Host: OSS",
"configurations": [
"Admin-SelfHost",
"API-SelfHost",
"EventsProcessor-SelfHost",
"Identity-SelfHost",
],
"presentation": {
"hidden": false,
"group": "AA_compounds",
"order": 99
},
"stopAll": true
}
],
"configurations": [
{
"name": "Identity",
"presentation": {
"hidden": false,
"group": "cloud",
"order": 10
},
"requireExactSource": true,
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildIdentity",
"program": "${workspaceFolder}/src/Identity/bin/Debug/net5.0/Identity.dll",
"args": [],
"cwd": "${workspaceFolder}/src/Identity",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": "API",
"presentation": {
"hidden": false,
"group": "cloud",
"order": 10
},
"requireExactSource": true,
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildAPI",
"program": "${workspaceFolder}/src/Api/bin/Debug/net5.0/Api.dll",
"args": [],
"cwd": "${workspaceFolder}/src/Api",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": "Admin",
"presentation": {
"hidden": false,
"group": "cloud",
"order": 20
},
"requireExactSource": true,
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildAdmin",
"OS-COMMENT4": "If you have changed target frameworks, make sure to update the program path.",
"program": "${workspaceFolder}/src/Admin/bin/Debug/net5.0/Admin.dll",
"args": [],
"cwd": "${workspaceFolder}/src/Admin",
"stopAtEntry": false,
"OS-COMMENT5": "Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser",
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": "Sso",
"presentation": {
"hidden": false,
"group": "cloud",
"order": 50
},
"requireExactSource": true,
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildSso",
"program": "${workspaceFolder}/bitwarden_license/src/Sso/bin/Debug/net5.0/Sso.dll",
"args": [],
"cwd": "${workspaceFolder}/bitwarden_license/src/Sso",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": "EventsProcessor",
"presentation": {
"hidden": false,
"group": "cloud",
"order": 90
},
"requireExactSource": true,
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildEventsProcessor",
"program": "${workspaceFolder}/src/EventsProcessor/bin/Debug/net5.0/EventsProcessor.dll",
"args": [],
"cwd": "${workspaceFolder}/src/EventsProcessor",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": "Icons",
"presentation": {
"hidden": false,
"group": "cloud",
"order": 90
},
"requireExactSource": true,
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildIcons",
"program": "${workspaceFolder}/src/Icons/bin/Debug/net5.0/Icons.dll",
"args": [],
"cwd": "${workspaceFolder}/src/Icons",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": "Identity-SelfHost",
"presentation": {
"hidden": true,
"group": "self-host",
"order": 999
},
"requireExactSource": true,
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildIdentity",
"program": "${workspaceFolder}/src/Identity/bin/Debug/net5.0/Identity.dll",
"args": [],
"cwd": "${workspaceFolder}/src/Identity",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "http://localhost:33657",
"developSelfHosted": "true"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": "API-SelfHost",
"presentation": {
"hidden": true,
"group": "self-host",
"order": 999
},
"requireExactSource": true,
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildAPI",
"program": "${workspaceFolder}/src/Api/bin/Debug/net5.0/Api.dll",
"args": [],
"cwd": "${workspaceFolder}/src/Api",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "http://localhost:4001",
"developSelfHosted": "true"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": "Admin-SelfHost",
"presentation": {
"hidden": true,
"group": "self-host",
"order": 999
},
"requireExactSource": true,
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildAdmin",
"OS-COMMENT4": "If you have changed target frameworks, make sure to update the program path.",
"program": "${workspaceFolder}/src/Admin/bin/Debug/net5.0/Admin.dll",
"args": [],
"cwd": "${workspaceFolder}/src/Admin",
"stopAtEntry": false,
"OS-COMMENT5": "Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser",
"env": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "http://localhost:62912",
"developSelfHosted": "true"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": "Sso-SelfHost",
"presentation": {
"hidden": true,
"group": "self-host",
"order": 999
},
"requireExactSource": true,
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildSso",
"program": "${workspaceFolder}/bitwarden_license/src/Sso/bin/Debug/net5.0/Sso.dll",
"args": [],
"cwd": "${workspaceFolder}/bitwarden_license/src/Sso",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "http://localhost:51822",
"developSelfHosted": "true"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": "EventsProcessor-SelfHost",
"presentation": {
"hidden": true,
"group": "self-host",
"order": 999
},
"requireExactSource": true,
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildEventsProcessor",
"program": "${workspaceFolder}/src/EventsProcessor/bin/Debug/net5.0/EventsProcessor.dll",
"args": [],
"cwd": "${workspaceFolder}/src/EventsProcessor",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "http://localhost:46274",
"developSelfHosted": "true"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
],
}

125
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,125 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "buildIcons",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/src/Icons/Icons.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "buildPortal",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/bitwarden_license/src/Portal/Portal.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "buildSso",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/bitwarden_license/src/Sso/Sso.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "buildEventsProcessor",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/src/EventsProcessor/EventsProcessor.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "buildAdmin",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/src/Admin/Admin.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "buildIdentity",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/src/Identity/Identity.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "buildAPI",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/src/Api/Api.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile",
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "clean",
"type": "shell",
"command": "dotnet clean",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": false
},
"problemMatcher": "$msCompile"
},
{
"label": "test",
"type": "shell",
"command": "dotnet test",
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": false
},
"problemMatcher": "$msCompile"
}
]
}

View File

@ -22,6 +22,15 @@
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
} }
},
"Sso-SelfHost": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "http://localhost:51823",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"developSelfHosted": "true"
}
} }
} }
} }

View File

@ -4,7 +4,6 @@
<UserSecretsId>bitwarden-Sso</UserSecretsId> <UserSecretsId>bitwarden-Sso</UserSecretsId>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(RunConfiguration)' == 'Sso' " />
<ItemGroup> <ItemGroup>
<PackageReference Include="NewRelic.Agent" Version="8.41.0" /> <PackageReference Include="NewRelic.Agent" Version="8.41.0" />
<PackageReference Include="Sustainsys.Saml2.AspNetCore2" Version="2.8.0" /> <PackageReference Include="Sustainsys.Saml2.AspNetCore2" Version="2.8.0" />

View File

@ -34,7 +34,7 @@ namespace Bit.Sso
services.AddOptions(); services.AddOptions();
// Settings // Settings
var globalSettings = services.AddGlobalSettingsServices(Configuration); var globalSettings = services.AddGlobalSettingsServices(Configuration, Environment);
// Stripe Billing // Stripe Billing
StripeConfiguration.ApiKey = globalSettings.Stripe.ApiKey; StripeConfiguration.ApiKey = globalSettings.Stripe.ApiKey;

View File

@ -12,6 +12,20 @@ DATABASE="vault_dev"
USER="SA" USER="SA"
PASSWD=$MSSQL_PASSWORD PASSWD=$MSSQL_PASSWORD
while getopts "rs" arg; do
case $arg in
r)
echo "Rerunning the last migration"
RERUN=1
;;
s)
echo "Running for self-host environment"
LAST_MIGRATION_FILE="/mnt/data/last_self_host_migration"
DATABASE="vault_dev_self_host"
;;
esac
done
if [ ! -f "$LAST_MIGRATION_FILE" ]; then if [ ! -f "$LAST_MIGRATION_FILE" ]; then
echo "$LAST_MIGRATION_FILE not found!" echo "$LAST_MIGRATION_FILE not found!"
echo "This will run all migrations which might cause unexpected behaviour if the database is not empty." echo "This will run all migrations which might cause unexpected behaviour if the database is not empty."
@ -30,17 +44,6 @@ fi
[ -z "$LAST_MIGRATION" ] [ -z "$LAST_MIGRATION" ]
PERFORM_MIGRATION=$? PERFORM_MIGRATION=$?
while getopts "r" arg; do
case $arg in
r)
RERUN=1
;;
esac
done
if [ -n "$RERUN" ]; then
echo "Rerunning the last migration"
fi
# Create database if it does not already exist # Create database if it does not already exist
QUERY="IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '$DATABASE') QUERY="IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '$DATABASE')

View File

@ -22,6 +22,15 @@
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
}, },
"applicationUrl": "http://localhost:62911/" "applicationUrl": "http://localhost:62911/"
},
"Admin-SelfHost": {
"commandName": "Project",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"developSelfHosted": "true"
},
"applicationUrl": "http://localhost:62912/"
} }
} }
} }

View File

@ -38,7 +38,7 @@ namespace Bit.Admin
services.AddOptions(); services.AddOptions();
// Settings // Settings
var globalSettings = services.AddGlobalSettingsServices(Configuration); var globalSettings = services.AddGlobalSettingsServices(Configuration, Environment);
services.Configure<AdminSettings>(Configuration.GetSection("AdminSettings")); services.Configure<AdminSettings>(Configuration.GetSection("AdminSettings"));
// Data Protection // Data Protection

View File

@ -22,6 +22,15 @@
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
} }
},
"Api-SelfHost": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "http://localhost:4000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"developSelfHosted": "true"
}
} }
} }
} }

View File

@ -43,7 +43,7 @@ namespace Bit.Api
services.AddOptions(); services.AddOptions();
// Settings // Settings
var globalSettings = services.AddGlobalSettingsServices(Configuration); var globalSettings = services.AddGlobalSettingsServices(Configuration, Environment);
if (!globalSettings.SelfHosted) if (!globalSettings.SelfHosted)
{ {
services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimitOptions")); services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimitOptions"));

View File

@ -18,13 +18,15 @@ namespace Bit.Billing
{ {
public class Startup public class Startup
{ {
public Startup(IConfiguration configuration) public Startup(IWebHostEnvironment env, IConfiguration configuration)
{ {
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US"); CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
Configuration = configuration; Configuration = configuration;
Environment = env;
} }
public IConfiguration Configuration { get; } public IConfiguration Configuration { get; }
public IWebHostEnvironment Environment { get; set; }
public void ConfigureServices(IServiceCollection services) public void ConfigureServices(IServiceCollection services)
{ {
@ -32,7 +34,7 @@ namespace Bit.Billing
services.AddOptions(); services.AddOptions();
// Settings // Settings
var globalSettings = services.AddGlobalSettingsServices(Configuration); var globalSettings = services.AddGlobalSettingsServices(Configuration, Environment);
services.Configure<BillingSettings>(Configuration.GetSection("BillingSettings")); services.Configure<BillingSettings>(Configuration.GetSection("BillingSettings"));
// Stripe Billing // Stripe Billing

View File

@ -15,6 +15,7 @@
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="licensing.cer" /> <EmbeddedResource Include="licensing.cer" />
<EmbeddedResource Include="licensing_dev.cer" />
<EmbeddedResource Include="MailTemplates\Handlebars\**\*.hbs" /> <EmbeddedResource Include="MailTemplates\Handlebars\**\*.hbs" />
</ItemGroup> </ItemGroup>

View File

@ -45,12 +45,12 @@ namespace Bit.Core.Services
_logger = logger; _logger = logger;
_globalSettings = globalSettings; _globalSettings = globalSettings;
var certThumbprint = environment.IsDevelopment() && !_globalSettings.SelfHosted ? var certThumbprint = environment.IsDevelopment() ?
"207E64A231E8AA32AAF68A61037C075EBEBD553F" : "207E64A231E8AA32AAF68A61037C075EBEBD553F" :
"B34876439FCDA2846505B2EFBBA6C4A951313EBE"; "B34876439FCDA2846505B2EFBBA6C4A951313EBE";
if (_globalSettings.SelfHosted) if (_globalSettings.SelfHosted)
{ {
_certificate = CoreHelpers.GetEmbeddedCertificateAsync("licensing.cer", null) _certificate = CoreHelpers.GetEmbeddedCertificateAsync(environment.IsDevelopment() ? "licensing_dev.cer" : "licensing.cer", null)
.GetAwaiter().GetResult(); .GetAwaiter().GetResult();
} }
else if (CoreHelpers.SettingHasValue(_globalSettings.Storage?.ConnectionString) && else if (CoreHelpers.SettingHasValue(_globalSettings.Storage?.ConnectionString) &&

View File

@ -424,6 +424,7 @@ namespace Bit.Core.Settings
public class InstallationSettings public class InstallationSettings
{ {
private string _identityUri; private string _identityUri;
private string _apiUri;
public Guid Id { get; set; } public Guid Id { get; set; }
public string Key { get; set; } public string Key { get; set; }
@ -432,6 +433,10 @@ namespace Bit.Core.Settings
get => string.IsNullOrWhiteSpace(_identityUri) ? "https://identity.bitwarden.com" : _identityUri; get => string.IsNullOrWhiteSpace(_identityUri) ? "https://identity.bitwarden.com" : _identityUri;
set => _identityUri = value; set => _identityUri = value;
} }
public string ApiUri
{
get => string.IsNullOrWhiteSpace(_apiUri) ? "https://api.biwarden.com" : _apiUri;
}
} }
public class AmazonSettings public class AmazonSettings

BIN
src/Core/licensing_dev.cer Normal file

Binary file not shown.

View File

@ -22,6 +22,15 @@
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
}, },
"applicationUrl": "http://localhost:46273/" "applicationUrl": "http://localhost:46273/"
},
"Events-SelfHost": {
"commandName": "Project",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"developSelfHosted": "true"
},
"applicationUrl": "http://localhost:46274/"
} }
} }
} }

View File

@ -31,7 +31,7 @@ namespace Bit.Events
services.AddOptions(); services.AddOptions();
// Settings // Settings
var globalSettings = services.AddGlobalSettingsServices(Configuration); var globalSettings = services.AddGlobalSettingsServices(Configuration, Environment);
// Repositories // Repositories
services.AddSqlServerRepositories(globalSettings); services.AddSqlServerRepositories(globalSettings);

View File

@ -30,7 +30,7 @@ namespace Bit.EventsProcessor
services.AddOptions(); services.AddOptions();
// Settings // Settings
services.AddGlobalSettingsServices(Configuration); services.AddGlobalSettingsServices(Configuration, Environment);
// Hosted Services // Hosted Services
services.AddHostedService<AzureQueueHostedService>(); services.AddHostedService<AzureQueueHostedService>();

View File

@ -16,13 +16,15 @@ namespace Bit.Icons
{ {
public class Startup public class Startup
{ {
public Startup(IConfiguration configuration) public Startup(IWebHostEnvironment env, IConfiguration configuration)
{ {
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US"); CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
Configuration = configuration; Configuration = configuration;
Environment = env;
} }
public IConfiguration Configuration { get; } public IConfiguration Configuration { get; }
public IWebHostEnvironment Environment { get; }
public void ConfigureServices(IServiceCollection services) public void ConfigureServices(IServiceCollection services)
{ {
@ -30,7 +32,7 @@ namespace Bit.Icons
services.AddOptions(); services.AddOptions();
// Settings // Settings
var globalSettings = services.AddGlobalSettingsServices(Configuration); var globalSettings = services.AddGlobalSettingsServices(Configuration, Environment);
var iconsSettings = new IconsSettings(); var iconsSettings = new IconsSettings();
ConfigurationBinder.Bind(Configuration.GetSection("IconsSettings"), iconsSettings); ConfigurationBinder.Bind(Configuration.GetSection("IconsSettings"), iconsSettings);
services.AddSingleton(s => iconsSettings); services.AddSingleton(s => iconsSettings);

View File

@ -15,6 +15,15 @@
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
} }
}, },
"Identity-SelfHost": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "http://localhost:33657",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"developSelfHosted": "true"
}
},
"Identity": { "Identity": {
"commandName": "Project", "commandName": "Project",
"launchBrowser": false, "launchBrowser": false,
@ -24,4 +33,4 @@
} }
} }
} }
} }

View File

@ -38,7 +38,7 @@ namespace Bit.Identity
services.AddOptions(); services.AddOptions();
// Settings // Settings
var globalSettings = services.AddGlobalSettingsServices(Configuration); var globalSettings = services.AddGlobalSettingsServices(Configuration, Environment);
if (!globalSettings.SelfHosted) if (!globalSettings.SelfHosted)
{ {
services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimitOptions")); services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimitOptions"));

View File

@ -32,7 +32,7 @@ namespace Bit.Notifications
services.AddOptions(); services.AddOptions();
// Settings // Settings
var globalSettings = services.AddGlobalSettingsServices(Configuration); var globalSettings = services.AddGlobalSettingsServices(Configuration, Environment);
// Identity // Identity
services.AddIdentityAuthenticationServices(globalSettings, Environment, config => services.AddIdentityAuthenticationServices(globalSettings, Environment, config =>

View File

@ -462,10 +462,17 @@ namespace Bit.SharedWeb.Utilities
} }
public static GlobalSettings AddGlobalSettingsServices(this IServiceCollection services, public static GlobalSettings AddGlobalSettingsServices(this IServiceCollection services,
IConfiguration configuration) IConfiguration configuration, IWebHostEnvironment environment)
{ {
var globalSettings = new GlobalSettings(); var globalSettings = new GlobalSettings();
ConfigurationBinder.Bind(configuration.GetSection("GlobalSettings"), globalSettings); ConfigurationBinder.Bind(configuration.GetSection("GlobalSettings"), globalSettings);
if (environment.IsDevelopment() && configuration.GetValue<bool>("developSelfHosted"))
{
// Override settings with selfHostedOverride settings
ConfigurationBinder.Bind(configuration.GetSection("Dev:SelfHostOverride:GlobalSettings"), globalSettings);
}
services.AddSingleton(s => globalSettings); services.AddSingleton(s => globalSettings);
services.AddSingleton<IGlobalSettings, GlobalSettings>(s => globalSettings); services.AddSingleton<IGlobalSettings, GlobalSettings>(s => globalSettings);
return globalSettings; return globalSettings;