From 427ff09af0259c2aa325f5ac124764711aaa4876 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Tue, 8 Feb 2022 17:43:40 +0100 Subject: [PATCH] Client & Version headers (#1757) --- .../Pages/Accounts/LoginSsoPageViewModel.cs | 2 +- .../Services/MobilePlatformUtilsService.cs | 8 +++-- .../Abstractions/IPlatformUtilsService.cs | 3 +- src/Core/Enums/ClientType.cs | 36 +++++++++++++++++++ src/Core/Services/ApiService.cs | 5 ++- 5 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 src/Core/Enums/ClientType.cs diff --git a/src/App/Pages/Accounts/LoginSsoPageViewModel.cs b/src/App/Pages/Accounts/LoginSsoPageViewModel.cs index 319992292..18ed6ad46 100644 --- a/src/App/Pages/Accounts/LoginSsoPageViewModel.cs +++ b/src/App/Pages/Accounts/LoginSsoPageViewModel.cs @@ -116,7 +116,7 @@ namespace Bit.App.Pages var redirectUri = "bitwarden://sso-callback"; var url = _apiService.IdentityBaseUrl + "/connect/authorize?" + - "client_id=" + _platformUtilsService.IdentityClientId + "&" + + "client_id=" + _platformUtilsService.GetClientType().GetString() + "&" + "redirect_uri=" + Uri.EscapeDataString(redirectUri) + "&" + "response_type=code&scope=api%20offline_access&" + "state=" + state + "&code_challenge=" + codeChallenge + "&" + diff --git a/src/App/Services/MobilePlatformUtilsService.cs b/src/App/Services/MobilePlatformUtilsService.cs index 610b60fcd..f4e98e250 100644 --- a/src/App/Services/MobilePlatformUtilsService.cs +++ b/src/App/Services/MobilePlatformUtilsService.cs @@ -5,6 +5,7 @@ using Bit.App.Abstractions; using Bit.App.Models; using Bit.App.Resources; using Bit.Core.Abstractions; +using Bit.Core.Enums; using Plugin.Fingerprint; using Plugin.Fingerprint.Abstractions; using Xamarin.Essentials; @@ -35,8 +36,6 @@ namespace Bit.App.Services _broadcasterService = broadcasterService; } - public string IdentityClientId => "mobile"; - public void Init() { _broadcasterService.Subscribe(nameof(MobilePlatformUtilsService), (message) => @@ -80,6 +79,11 @@ namespace Bit.App.Services return DeviceInfo.Model; } + public ClientType GetClientType() + { + return ClientType.Mobile; + } + public bool IsViewOpen() { return false; diff --git a/src/Core/Abstractions/IPlatformUtilsService.cs b/src/Core/Abstractions/IPlatformUtilsService.cs index c03f3f87c..ec5b2894f 100644 --- a/src/Core/Abstractions/IPlatformUtilsService.cs +++ b/src/Core/Abstractions/IPlatformUtilsService.cs @@ -7,11 +7,10 @@ namespace Bit.Core.Abstractions { public interface IPlatformUtilsService { - string IdentityClientId { get; } - string GetApplicationVersion(); DeviceType GetDevice(); string GetDeviceString(); + ClientType GetClientType(); bool IsDev(); bool IsSelfHost(); bool IsViewOpen(); diff --git a/src/Core/Enums/ClientType.cs b/src/Core/Enums/ClientType.cs new file mode 100644 index 000000000..f6d3fd9c2 --- /dev/null +++ b/src/Core/Enums/ClientType.cs @@ -0,0 +1,36 @@ +namespace Bit.Core.Enums +{ + public enum ClientType: byte + { + Web = 1, + Browser = 2, + Desktop = 3, + Mobile = 4, + Cli = 5, + DirectoryConnector = 6, + } + + public static class ClientTypeExtensions + { + public static string GetString(this ClientType me) + { + switch (me) + { + case ClientType.Web: + return "web"; + case ClientType.Browser: + return "browser"; + case ClientType.Desktop: + return "desktop"; + case ClientType.Mobile: + return "mobile"; + case ClientType.Cli: + return "cli"; + case ClientType.DirectoryConnector: + return "connector"; + default: + return ""; + } + } + } +} diff --git a/src/Core/Services/ApiService.cs b/src/Core/Services/ApiService.cs index 93092aa93..c0b11a6a1 100644 --- a/src/Core/Services/ApiService.cs +++ b/src/Core/Services/ApiService.cs @@ -1,4 +1,5 @@ using Bit.Core.Abstractions; +using Bit.Core.Enums; using Bit.Core.Exceptions; using Bit.Core.Models.Domain; using Bit.Core.Models.Request; @@ -37,6 +38,8 @@ namespace Bit.Core.Services _logoutCallbackAsync = logoutCallbackAsync; var device = (int)_platformUtilsService.GetDevice(); _httpClient.DefaultRequestHeaders.Add("Device-Type", device.ToString()); + _httpClient.DefaultRequestHeaders.Add("Bitwarden-Client-Name", _platformUtilsService.GetClientType().GetString()); + _httpClient.DefaultRequestHeaders.Add("Bitwarden-Client-Version", _platformUtilsService.GetApplicationVersion()); if (!string.IsNullOrWhiteSpace(customUserAgent)) { _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(customUserAgent); @@ -87,7 +90,7 @@ namespace Bit.Core.Services Version = new Version(1, 0), RequestUri = new Uri(string.Concat(IdentityBaseUrl, "/connect/token")), Method = HttpMethod.Post, - Content = new FormUrlEncodedContent(request.ToIdentityToken(_platformUtilsService.IdentityClientId)) + Content = new FormUrlEncodedContent(request.ToIdentityToken(_platformUtilsService.GetClientType().GetString())) }; requestMessage.Headers.Add("Accept", "application/json"); request.AlterIdentityTokenHeaders(requestMessage.Headers);