diff --git a/src/Api/Startup.cs b/src/Api/Startup.cs index c7d7d44436..6f06d4797a 100644 --- a/src/Api/Startup.cs +++ b/src/Api/Startup.cs @@ -178,9 +178,9 @@ namespace Bit.Api { var options = new IdentityServerAuthenticationOptions { - Authority = globalSettings.BaseIdentityUri, + Authority = globalSettings.BaseServiceUri.InternalIdentity, AllowedScopes = new string[] { "api" }, - RequireHttpsMetadata = !env.IsDevelopment(), + RequireHttpsMetadata = false && !env.IsDevelopment(), ApiName = "api", NameClaimType = ClaimTypes.Email, // Suffix until we retire the old jwt schemes. diff --git a/src/Api/settings.Preview.json b/src/Api/settings.Preview.json index 9529228dc7..ddc6d3c3d8 100644 --- a/src/Api/settings.Preview.json +++ b/src/Api/settings.Preview.json @@ -1,10 +1,10 @@ { "globalSettings": { - "baseVaultUri": "https://preview-vault.bitwarden.com/#", - "baseApiUri": "https://preview-api.bitwarden.com", - "baseIdentityUri": "https://preview-identity.bitwarden.com", - "u2f": { - "appId": "https://preview-vault.bitwarden.com/app-id.json" + "baseServiceUri": { + "vault": "https://preview-vault.bitwarden.com", + "api": "https://preview-api.bitwarden.com", + "identity": "https://preview-identity.bitwarden.com", + "identityInternal": "https://preview-identity.bitwarden.com" } } } diff --git a/src/Api/settings.Production.json b/src/Api/settings.Production.json index 8b5e6db1b0..58866c8fc9 100644 --- a/src/Api/settings.Production.json +++ b/src/Api/settings.Production.json @@ -1,10 +1,10 @@ { "globalSettings": { - "baseVaultUri": "https://vault.bitwarden.com/#", - "baseApiUri": "https://api.bitwarden.com", - "baseIdentityUri": "https://identity.bitwarden.com", - "u2f": { - "appId": "https://vault.bitwarden.com/app-id.json" + "baseServiceUri": { + "vault": "https://vault.bitwarden.com", + "api": "https://api.bitwarden.com", + "identity": "https://identity.bitwarden.com", + "identityInternal": "https://identity.bitwarden.com" }, "braintree": { "production": true diff --git a/src/Api/settings.Staging.json b/src/Api/settings.Staging.json index 184f1d0f77..5d31355e3f 100644 --- a/src/Api/settings.Staging.json +++ b/src/Api/settings.Staging.json @@ -1,10 +1,10 @@ { "globalSettings": { - "baseVaultUri": "https://vault.bitwarden.com/#", - "baseApiUri": "https://api.bitwarden.com", - "baseIdentityUri": "https://identity.bitwarden.com", - "u2f": { - "appId": "https://vault.bitwarden.com/app-id.json" + "baseServiceUri": { + "vault": "https://vault.bitwarden.com", + "api": "https://api.bitwarden.com", + "identity": "https://identity.bitwarden.com", + "identityInternal": "https://identity.bitwarden.com" } } } diff --git a/src/Api/settings.json b/src/Api/settings.json index 58e788b782..475edd56a3 100644 --- a/src/Api/settings.json +++ b/src/Api/settings.json @@ -2,9 +2,12 @@ "globalSettings": { "selfHosted": false, "siteName": "bitwarden", - "baseVaultUri": "http://localhost:4001/#", - "baseApiUri": "http://localhost:4000", - "baseIdentityUri": "http://localhost:33656", + "baseServiceUri": { + "vault": "http://localhost:4001", + "api": "http://localhost:4000", + "identity": "http://localhost:33656", + "identityInternal": "http://localhost:33656" + }, "stripeApiKey": "SECRET", "sqlServer": { "connectionString": "SECRET" @@ -41,9 +44,6 @@ "duo": { "aKey": "SECRET" }, - "u2f": { - "appId": "https://localhost:4001/app-id.json" - }, "braintree": { "production": false, "merchantId": "SECRET", diff --git a/src/Billing/settings.Production.json b/src/Billing/settings.Production.json index 1bc0918ebc..58866c8fc9 100644 --- a/src/Billing/settings.Production.json +++ b/src/Billing/settings.Production.json @@ -1,8 +1,11 @@ { "globalSettings": { - "baseVaultUri": "https://vault.bitwarden.com/#", - "baseApiUri": "https://api.bitwarden.com", - "baseIdentityUri": "https://identity.bitwarden.com", + "baseServiceUri": { + "vault": "https://vault.bitwarden.com", + "api": "https://api.bitwarden.com", + "identity": "https://identity.bitwarden.com", + "identityInternal": "https://identity.bitwarden.com" + }, "braintree": { "production": true } diff --git a/src/Billing/settings.json b/src/Billing/settings.json index 69c6708f07..2d9a0534d9 100644 --- a/src/Billing/settings.json +++ b/src/Billing/settings.json @@ -2,9 +2,12 @@ "globalSettings": { "selfHosted": false, "siteName": "bitwarden", - "baseVaultUri": "http://localhost:4001/#", - "baseApiUri": "http://localhost:4000", - "baseIdentityUri": "http://localhost:33656", + "baseServiceUri": { + "vault": "http://localhost:4001", + "api": "http://localhost:4000", + "identity": "http://localhost:33656", + "identityInternal": "http://localhost:33656" + }, "stripeApiKey": "SECRET", "sqlServer": { "connectionString": "SECRET" diff --git a/src/Core/GlobalSettings.cs b/src/Core/GlobalSettings.cs index 24c225642a..22fc0374b4 100644 --- a/src/Core/GlobalSettings.cs +++ b/src/Core/GlobalSettings.cs @@ -4,10 +4,8 @@ { public bool SelfHosted { get; set; } public virtual string SiteName { get; set; } - public virtual string BaseVaultUri { get; set; } - public virtual string BaseApiUri { get; set; } - public virtual string BaseIdentityUri { get; set; } public virtual string StripeApiKey { get; set; } + public virtual BaseServiceUriSettings BaseServiceUri { get; set; } = new BaseServiceUriSettings(); public virtual SqlServerSettings SqlServer { get; set; } = new SqlServerSettings(); public virtual MailSettings Mail { get; set; } = new MailSettings(); public virtual StorageSettings Storage { get; set; } = new StorageSettings(); @@ -18,9 +16,16 @@ public virtual NotificationHubSettings NotificationHub { get; set; } = new NotificationHubSettings(); public virtual YubicoSettings Yubico { get; set; } = new YubicoSettings(); public virtual DuoSettings Duo { get; set; } = new DuoSettings(); - public virtual U2fSettings U2f { get; set; } = new U2fSettings(); public virtual BraintreeSettings Braintree { get; set; } = new BraintreeSettings(); + public class BaseServiceUriSettings + { + public string Vault { get; set; } + public string Api { get; set; } + public string Identity { get; set; } + public string InternalIdentity { get; set; } + } + public class SqlServerSettings { public string ConnectionString { get; set; } @@ -86,11 +91,6 @@ public string AKey { get; set; } } - public class U2fSettings - { - public string AppId { get; set; } - } - public class BraintreeSettings { public bool Production { get; set; } diff --git a/src/Core/Models/Mail/BaseMailModel.cs b/src/Core/Models/Mail/BaseMailModel.cs index 914a48ca1d..da7ff867bc 100644 --- a/src/Core/Models/Mail/BaseMailModel.cs +++ b/src/Core/Models/Mail/BaseMailModel.cs @@ -1,14 +1,20 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Bit.Core.Models.Mail +namespace Bit.Core.Models.Mail { public class BaseMailModel { + private string _webVaultUrl; + public string SiteName { get; set; } - public string WebVaultUrl { get; set; } + public string WebVaultUrl + { + get + { + return _webVaultUrl; + } + set + { + _webVaultUrl = string.Concat(value, "/#"); + } + } } } diff --git a/src/Core/Services/Implementations/RazorViewMailService.cs b/src/Core/Services/Implementations/RazorViewMailService.cs index 6231d79188..6664d76e28 100644 --- a/src/Core/Services/Implementations/RazorViewMailService.cs +++ b/src/Core/Services/Implementations/RazorViewMailService.cs @@ -37,7 +37,7 @@ namespace Bit.Core.Services { Token = WebUtility.UrlEncode(token), UserId = userId, - WebVaultUrl = _globalSettings.BaseVaultUri, + WebVaultUrl = _globalSettings.BaseServiceUri.Vault, SiteName = _globalSettings.SiteName }; message.HtmlContent = _engine.Parse("VerifyEmail", model); @@ -54,7 +54,7 @@ namespace Bit.Core.Services { FromEmail = fromEmail, ToEmail = toEmail, - WebVaultUrl = _globalSettings.BaseVaultUri, + WebVaultUrl = _globalSettings.BaseServiceUri.Vault, SiteName = _globalSettings.SiteName }; message.HtmlContent = _engine.Parse("ChangeEmailAlreadyExists", model); @@ -68,7 +68,7 @@ namespace Bit.Core.Services var model = new EmailTokenViewModel { Token = token, - WebVaultUrl = _globalSettings.BaseVaultUri, + WebVaultUrl = _globalSettings.BaseServiceUri.Vault, SiteName = _globalSettings.SiteName }; message.HtmlContent = _engine.Parse("ChangeEmail", model); @@ -84,7 +84,7 @@ namespace Bit.Core.Services var model = new EmailTokenViewModel { Token = token, - WebVaultUrl = _globalSettings.BaseVaultUri, + WebVaultUrl = _globalSettings.BaseServiceUri.Vault, SiteName = _globalSettings.SiteName }; message.HtmlContent = _engine.Parse("TwoFactorEmail", model); @@ -100,7 +100,7 @@ namespace Bit.Core.Services var model = new MasterPasswordHintViewModel { Hint = hint, - WebVaultUrl = _globalSettings.BaseVaultUri, + WebVaultUrl = _globalSettings.BaseServiceUri.Vault, SiteName = _globalSettings.SiteName }; message.HtmlContent = _engine.Parse("MasterPasswordHint", model); @@ -113,7 +113,7 @@ namespace Bit.Core.Services var message = CreateDefaultMessage("Your Master Password Hint", email); var model = new BaseMailModel { - WebVaultUrl = _globalSettings.BaseVaultUri, + WebVaultUrl = _globalSettings.BaseServiceUri.Vault, SiteName = _globalSettings.SiteName }; message.HtmlContent = _engine.Parse("NoMasterPasswordHint", model); @@ -129,7 +129,7 @@ namespace Bit.Core.Services { OrganizationName = organizationName, UserEmail = userEmail, - WebVaultUrl = _globalSettings.BaseVaultUri, + WebVaultUrl = _globalSettings.BaseServiceUri.Vault, SiteName = _globalSettings.SiteName }; message.HtmlContent = _engine.Parse("OrganizationUserInvited", model); @@ -143,7 +143,7 @@ namespace Bit.Core.Services var model = new OrganizationUserConfirmedViewModel { OrganizationName = organizationName, - WebVaultUrl = _globalSettings.BaseVaultUri, + WebVaultUrl = _globalSettings.BaseServiceUri.Vault, SiteName = _globalSettings.SiteName }; message.HtmlContent = _engine.Parse("OrganizationUserConfirmed", model); @@ -162,7 +162,7 @@ namespace Bit.Core.Services OrganizationUserId = orgUser.Id.ToString(), Token = token, OrganizationNameUrlEncoded = WebUtility.UrlEncode(organizationName), - WebVaultUrl = _globalSettings.BaseVaultUri, + WebVaultUrl = _globalSettings.BaseServiceUri.Vault, SiteName = _globalSettings.SiteName }; message.HtmlContent = _engine.Parse("OrganizationUserInvited", model); @@ -175,7 +175,7 @@ namespace Bit.Core.Services var message = CreateDefaultMessage("Welcome", user.Email); var model = new BaseMailModel { - WebVaultUrl = _globalSettings.BaseVaultUri, + WebVaultUrl = _globalSettings.BaseServiceUri.Vault, SiteName = _globalSettings.SiteName }; message.HtmlContent = _engine.Parse("Welcome", model); diff --git a/src/Core/Services/Implementations/SendGridTemplateMailService.cs b/src/Core/Services/Implementations/SendGridTemplateMailService.cs index 9d799de217..736b959185 100644 --- a/src/Core/Services/Implementations/SendGridTemplateMailService.cs +++ b/src/Core/Services/Implementations/SendGridTemplateMailService.cs @@ -40,7 +40,7 @@ namespace Bit.Core.Services "Welcome", user.Email, WelcomeTemplateId); - + AddCategories(message, new List { AdministrativeCategoryName, "Welcome" }); await _mailDeliveryService.SendEmailAsync(message); @@ -196,7 +196,7 @@ namespace Bit.Core.Services } AddSubstitution(message, "{{siteName}}", _globalSettings.SiteName); - AddSubstitution(message, "{{baseVaultUri}}", _globalSettings.BaseVaultUri); + AddSubstitution(message, "{{baseVaultUri}}", string.Concat(_globalSettings.BaseServiceUri.Vault, "/#")); return message; } diff --git a/src/Core/Utilities/CoreHelpers.cs b/src/Core/Utilities/CoreHelpers.cs index c942324894..87784fe73d 100644 --- a/src/Core/Utilities/CoreHelpers.cs +++ b/src/Core/Utilities/CoreHelpers.cs @@ -125,7 +125,7 @@ namespace Bit.Core.Utilities public static string U2fAppIdUrl(GlobalSettings globalSettings) { - return globalSettings.U2f.AppId; + return string.Concat(globalSettings.BaseServiceUri.Vault, "/app-id.json"); } public static string RandomString(int length, bool alpha = true, bool upper = true, bool lower = true, diff --git a/src/Identity/settings.Preview.json b/src/Identity/settings.Preview.json index 9529228dc7..ddc6d3c3d8 100644 --- a/src/Identity/settings.Preview.json +++ b/src/Identity/settings.Preview.json @@ -1,10 +1,10 @@ { "globalSettings": { - "baseVaultUri": "https://preview-vault.bitwarden.com/#", - "baseApiUri": "https://preview-api.bitwarden.com", - "baseIdentityUri": "https://preview-identity.bitwarden.com", - "u2f": { - "appId": "https://preview-vault.bitwarden.com/app-id.json" + "baseServiceUri": { + "vault": "https://preview-vault.bitwarden.com", + "api": "https://preview-api.bitwarden.com", + "identity": "https://preview-identity.bitwarden.com", + "identityInternal": "https://preview-identity.bitwarden.com" } } } diff --git a/src/Identity/settings.Production.json b/src/Identity/settings.Production.json index 8b5e6db1b0..58866c8fc9 100644 --- a/src/Identity/settings.Production.json +++ b/src/Identity/settings.Production.json @@ -1,10 +1,10 @@ { "globalSettings": { - "baseVaultUri": "https://vault.bitwarden.com/#", - "baseApiUri": "https://api.bitwarden.com", - "baseIdentityUri": "https://identity.bitwarden.com", - "u2f": { - "appId": "https://vault.bitwarden.com/app-id.json" + "baseServiceUri": { + "vault": "https://vault.bitwarden.com", + "api": "https://api.bitwarden.com", + "identity": "https://identity.bitwarden.com", + "identityInternal": "https://identity.bitwarden.com" }, "braintree": { "production": true diff --git a/src/Identity/settings.Staging.json b/src/Identity/settings.Staging.json index 184f1d0f77..5d31355e3f 100644 --- a/src/Identity/settings.Staging.json +++ b/src/Identity/settings.Staging.json @@ -1,10 +1,10 @@ { "globalSettings": { - "baseVaultUri": "https://vault.bitwarden.com/#", - "baseApiUri": "https://api.bitwarden.com", - "baseIdentityUri": "https://identity.bitwarden.com", - "u2f": { - "appId": "https://vault.bitwarden.com/app-id.json" + "baseServiceUri": { + "vault": "https://vault.bitwarden.com", + "api": "https://api.bitwarden.com", + "identity": "https://identity.bitwarden.com", + "identityInternal": "https://identity.bitwarden.com" } } } diff --git a/src/Identity/settings.json b/src/Identity/settings.json index 9edf9bd15f..d05173cba7 100644 --- a/src/Identity/settings.json +++ b/src/Identity/settings.json @@ -2,9 +2,12 @@ "globalSettings": { "selfHosted": false, "siteName": "bitwarden", - "baseVaultUri": "http://localhost:4001/#", - "baseApiUri": "http://localhost:4000", - "baseIdentityUri": "http://localhost:33656", + "baseServiceUri": { + "vault": "http://localhost:4001", + "api": "http://localhost:4000", + "identity": "http://localhost:33656", + "identityInternal": "http://localhost:33656" + }, "stripeApiKey": "SECRET", "sqlServer": { "connectionString": "SECRET" @@ -37,9 +40,6 @@ "duo": { "aKey": "SECRET" }, - "u2f": { - "appId": "https://localhost:4001/app-id.json" - }, "braintree": { "production": false, "merchantId": "SECRET",