From dac8b4c476a580a7b1d74cd83ee9a13fda0611d7 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Sat, 13 May 2017 15:13:34 -0400 Subject: [PATCH] get profile api --- src/Core/Core.csproj | 4 +++ src/Core/Enums/OrganizationUserStatusType.cs | 15 ++++++++ src/Core/Enums/OrganizationUserType.cs | 15 ++++++++ .../Models/ProfileOrganizationResponse.cs | 20 +++++++++++ src/Core/Models/ProfileResponse.cs | 20 +++++++++++ src/Core/Services/ApiService.cs | 36 ++++++++++++++++++- 6 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 src/Core/Enums/OrganizationUserStatusType.cs create mode 100644 src/Core/Enums/OrganizationUserType.cs create mode 100644 src/Core/Models/ProfileOrganizationResponse.cs create mode 100644 src/Core/Models/ProfileResponse.cs diff --git a/src/Core/Core.csproj b/src/Core/Core.csproj index f7b1b237..9ed20f81 100644 --- a/src/Core/Core.csproj +++ b/src/Core/Core.csproj @@ -49,15 +49,19 @@ + + + + diff --git a/src/Core/Enums/OrganizationUserStatusType.cs b/src/Core/Enums/OrganizationUserStatusType.cs new file mode 100644 index 00000000..c370a013 --- /dev/null +++ b/src/Core/Enums/OrganizationUserStatusType.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bit.Core.Enums +{ + public enum OrganizationUserStatusType : byte + { + Invited = 0, + Accepted = 1, + Confirmed = 2 + } +} diff --git a/src/Core/Enums/OrganizationUserType.cs b/src/Core/Enums/OrganizationUserType.cs new file mode 100644 index 00000000..73ddfd7d --- /dev/null +++ b/src/Core/Enums/OrganizationUserType.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bit.Core.Enums +{ + public enum OrganizationUserType : byte + { + Owner = 0, + Admin = 1, + User = 2 + } +} diff --git a/src/Core/Models/ProfileOrganizationResponse.cs b/src/Core/Models/ProfileOrganizationResponse.cs new file mode 100644 index 00000000..ac823ead --- /dev/null +++ b/src/Core/Models/ProfileOrganizationResponse.cs @@ -0,0 +1,20 @@ +using Bit.Core.Enums; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bit.Core.Models +{ + public class ProfileOrganizationResponseModel + { + public string Id { get; set; } + public string Name { get; set; } + public string Key { get; set; } + public OrganizationUserStatusType Status { get; set; } + public OrganizationUserType Type { get; set; } + public bool Enabled { get; set; } + } +} diff --git a/src/Core/Models/ProfileResponse.cs b/src/Core/Models/ProfileResponse.cs new file mode 100644 index 00000000..b7afc2ff --- /dev/null +++ b/src/Core/Models/ProfileResponse.cs @@ -0,0 +1,20 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bit.Core.Models +{ + public class ProfileResponse + { + public string Id { get; set; } + public string Name { get; set; } + public string Email { get; set; } + public string MasterPasswordHint { get; set; } + public string Culture { get; set; } + public bool TwoFactorEnabled { get; set; } + public IEnumerable Organizations { get; set; } + } +} diff --git a/src/Core/Services/ApiService.cs b/src/Core/Services/ApiService.cs index a8b532c4..a02f4582 100644 --- a/src/Core/Services/ApiService.cs +++ b/src/Core/Services/ApiService.cs @@ -111,7 +111,7 @@ namespace Bit.Core.Services { return await HandleErrorAsync(response).ConfigureAwait(false); } - + return ApiResult.Success(response.StatusCode); } catch @@ -120,6 +120,40 @@ namespace Bit.Core.Services } } + public virtual async Task> GetProfileAsync() + { + var tokenStateResponse = await HandleTokenStateAsync(); + if(!tokenStateResponse.Succeeded) + { + return tokenStateResponse; + } + + var requestMessage = new HttpRequestMessage() + { + Method = HttpMethod.Get, + RequestUri = new Uri(ApiClient.BaseAddress, "accounts/profile"), + }; + + requestMessage.Headers.Add("Authorization", $"Bearer3 {TokenService.Instance.AccessToken}"); + + try + { + var response = await ApiClient.SendAsync(requestMessage).ConfigureAwait(false); + if(!response.IsSuccessStatusCode) + { + return await HandleErrorAsync(response).ConfigureAwait(false); + } + + var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var responseObj = JsonConvert.DeserializeObject(responseContent); + return ApiResult.Success(responseObj, response.StatusCode); + } + catch + { + return HandledWebException(); + } + } + protected ApiResult HandledWebException() { return ApiResult.Failed(HttpStatusCode.BadGateway,