public virtual async Task <ApiResult> PostSendEmailLoginAsync(TwoFactorEmailRequest requestObj)
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected());
            }

            using (var client = HttpService.ApiClient)
            {
                var requestMessage = new TokenHttpRequestMessage(requestObj)
                {
                    Method     = HttpMethod.Post,
                    RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/send-email-login")),
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync(response).ConfigureAwait(false));
                    }

                    return(ApiResult.Success(response.StatusCode));
                }
                catch
                {
                    return(HandledWebException());
                }
            }
        }
Example #2
0
        public virtual async Task <ApiResult <TResponse> > PostAsync(TRequest requestObj)
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected <TResponse>());
            }

            using (var client = new ApiHttpClient())
            {
                var requestMessage = new TokenHttpRequestMessage(requestObj)
                {
                    Method     = HttpMethod.Post,
                    RequestUri = new Uri(client.BaseAddress, ApiRoute),
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync <TResponse>(response).ConfigureAwait(false));
                    }

                    var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var responseObj = JsonConvert.DeserializeObject <TResponse>(responseContent);
                    return(ApiResult <TResponse> .Success(responseObj, response.StatusCode));
                }
                catch (WebException)
                {
                    return(HandledWebException <TResponse>());
                }
            }
        }
Example #3
0
        public async Task AddUserRegistrationOrganizationAsync(IEnumerable <string> deviceIds, string organizationId)
        {
            if (!deviceIds.Any())
            {
                return;
            }

            var tokenStateResponse = await HandleTokenStateAsync();

            if (!tokenStateResponse)
            {
                return;
            }

            var requestModel = new PushUpdateRequestModel(deviceIds, organizationId);
            var message      = new TokenHttpRequestMessage(requestModel, AccessToken)
            {
                Method     = HttpMethod.Put,
                RequestUri = new Uri(string.Concat(PushClient.BaseAddress, "/push/add-organization"))
            };

            try
            {
                await PushClient.SendAsync(message);
            }
            catch (Exception e)
            {
                _logger.LogError(12337, e, "Unable to add user org push registration.");
            }
        }
Example #4
0
        public async Task CreateOrUpdateRegistrationAsync(string pushToken, string deviceId, string userId,
                                                          string identifier, DeviceType type)
        {
            var tokenStateResponse = await HandleTokenStateAsync();

            if (!tokenStateResponse)
            {
                return;
            }

            var requestModel = new PushRegistrationRequestModel
            {
                DeviceId   = deviceId,
                Identifier = identifier,
                PushToken  = pushToken,
                Type       = type,
                UserId     = userId
            };

            var message = new TokenHttpRequestMessage(requestModel, AccessToken)
            {
                Method     = HttpMethod.Post,
                RequestUri = new Uri(string.Concat(PushClient.BaseAddress, "/push/register"))
            };

            try
            {
                await PushClient.SendAsync(message);
            }
            catch (Exception e)
            {
                _logger.LogError(12335, e, "Unable to create push registration.");
            }
        }
Example #5
0
        public virtual async Task <ApiResult> DeleteAsync(TId id)
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected());
            }

            using (var client = HttpService.Client)
            {
                var requestMessage = new TokenHttpRequestMessage()
                {
                    Method     = HttpMethod.Delete,
                    RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/", id)),
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync(response).ConfigureAwait(false));
                    }

                    return(ApiResult.Success(response.StatusCode));
                }
                catch (WebException)
                {
                    return(HandledWebException());
                }
            }
        }
        public virtual async Task <ApiResult> PutClearTokenAsync(string identifier)
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected());
            }

            using (var client = new ApiHttpClient())
            {
                var requestMessage = new TokenHttpRequestMessage
                {
                    Method     = HttpMethod.Put,
                    RequestUri = new Uri(client.BaseAddress,
                                         string.Concat(ApiRoute, "/identifier/", identifier, "/clear-token"))
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync(response).ConfigureAwait(false));
                    }

                    return(ApiResult.Success(response.StatusCode));
                }
                catch (WebException)
                {
                    return(HandledWebException());
                }
            }
        }
Example #7
0
        public virtual async Task <ApiResult <ListResponse <FolderResponse> > > GetByRevisionDateAsync(DateTime since)
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected <ListResponse <FolderResponse> >());
            }

            using (var client = HttpService.Client)
            {
                var requestMessage = new TokenHttpRequestMessage()
                {
                    Method     = HttpMethod.Get,
                    RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "?since=", since)),
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync <ListResponse <FolderResponse> >(response).ConfigureAwait(false));
                    }

                    var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var responseObj = JsonConvert.DeserializeObject <ListResponse <FolderResponse> >(responseContent);
                    return(ApiResult <ListResponse <FolderResponse> > .Success(responseObj, response.StatusCode));
                }
                catch (WebException)
                {
                    return(HandledWebException <ListResponse <FolderResponse> >());
                }
            }
        }
        public virtual async Task <ApiResult> PostPasswordHintAsync(PasswordHintRequest requestObj)
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected());
            }

            using (var client = new ApiHttpClient())
            {
                var requestMessage = new TokenHttpRequestMessage(requestObj)
                {
                    Method     = HttpMethod.Post,
                    RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/password-hint")),
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync(response).ConfigureAwait(false));
                    }

                    return(ApiResult.Success(response.StatusCode));
                }
                catch (WebException)
                {
                    return(HandledWebException());
                }
            }
        }
Example #9
0
        public virtual async Task <ApiResult <DateTime?> > GetAccountRevisionDateAsync()
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected <DateTime?>());
            }

            var tokenStateResponse = await HandleTokenStateAsync <DateTime?>();

            if (!tokenStateResponse.Succeeded)
            {
                return(tokenStateResponse);
            }

            using (var client = HttpService.ApiClient)
            {
                var requestMessage = new TokenHttpRequestMessage()
                {
                    Method     = HttpMethod.Get,
                    RequestUri = new Uri(string.Concat(client.BaseAddress, ApiRoute, "/revision-date")),
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync <DateTime?>(response).ConfigureAwait(false));
                    }

                    var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    if (responseContent.Contains("null"))
                    {
                        return(ApiResult <DateTime?> .Success(null, response.StatusCode));
                    }

                    long ms;
                    if (!long.TryParse(responseContent, out ms))
                    {
                        return(await HandleErrorAsync <DateTime?>(response).ConfigureAwait(false));
                    }
                    return(ApiResult <DateTime?> .Success(Helpers.Epoc.AddMilliseconds(ms), response.StatusCode));
                }
                catch
                {
                    return(HandledWebException <DateTime?>());
                }
            }
        }
Example #10
0
        public virtual async Task <ApiResult <CipherResponse> > PostAttachmentAsync(string cipherId, byte[] data,
                                                                                    string key, string fileName)
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected <CipherResponse>());
            }

            var tokenStateResponse = await HandleTokenStateAsync <CipherResponse>();

            if (!tokenStateResponse.Succeeded)
            {
                return(tokenStateResponse);
            }

            using (var client = HttpService.ApiClient)
                using (var content = new MultipartFormDataContent("--BWMobileFormBoundary" + DateTime.UtcNow.Ticks))
                {
                    content.Add(new StringContent(key), "key");
                    content.Add(new StreamContent(new MemoryStream(data)), "data", fileName);

                    var requestMessage = new TokenHttpRequestMessage
                    {
                        Method     = HttpMethod.Post,
                        RequestUri = new Uri(string.Concat(client.BaseAddress, ApiRoute, "/", cipherId, "/attachment")),
                        Content    = content
                    };

                    try
                    {
                        var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                        if (!response.IsSuccessStatusCode)
                        {
                            return(await HandleErrorAsync <CipherResponse>(response).ConfigureAwait(false));
                        }

                        var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                        var responseObj = JsonConvert.DeserializeObject <CipherResponse>(responseContent);
                        return(ApiResult <CipherResponse> .Success(responseObj, response.StatusCode));
                    }
                    catch
                    {
                        return(HandledWebException <CipherResponse>());
                    }
                }
        }
Example #11
0
        public virtual async Task <ApiResult <ListResponse <CipherResponse> > > GetAsync()
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected <ListResponse <CipherResponse> >());
            }

            var tokenStateResponse = await HandleTokenStateAsync <ListResponse <CipherResponse> >();

            if (!tokenStateResponse.Succeeded)
            {
                return(tokenStateResponse);
            }

            using (var client = HttpService.Client)
            {
                var requestMessage = new TokenHttpRequestMessage()
                {
                    Method     = HttpMethod.Get,
                    RequestUri = new Uri(client.BaseAddress,
                                         string.Format("{0}?includeFolders=false&includeShared=true", ApiRoute)),
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync <ListResponse <CipherResponse> >(response).ConfigureAwait(false));
                    }

                    var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var responseObj = JsonConvert.DeserializeObject <ListResponse <CipherResponse> >(responseContent);
                    return(ApiResult <ListResponse <CipherResponse> > .Success(responseObj, response.StatusCode));
                }
                catch
                {
                    return(HandledWebException <ListResponse <CipherResponse> >());
                }
            }
        }
        public virtual async Task <ApiResult <DomainsResponse> > GetDomains(bool excluded = false)
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected <DomainsResponse>());
            }

            var tokenStateResponse = await HandleTokenStateAsync <DomainsResponse>();

            if (!tokenStateResponse.Succeeded)
            {
                return(tokenStateResponse);
            }

            using (var client = HttpService.Client)
            {
                var requestMessage = new TokenHttpRequestMessage()
                {
                    Method     = HttpMethod.Get,
                    RequestUri = new Uri(client.BaseAddress,
                                         string.Concat(ApiRoute, "/domains?excluded=", excluded.ToString().ToLowerInvariant())),
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync <DomainsResponse>(response).ConfigureAwait(false));
                    }

                    var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var responseObj = JsonConvert.DeserializeObject <DomainsResponse>(responseContent);
                    return(ApiResult <DomainsResponse> .Success(responseObj, response.StatusCode));
                }
                catch
                {
                    return(HandledWebException <DomainsResponse>());
                }
            }
        }
Example #13
0
        public virtual async Task <ApiResult <TResponse> > PutAsync(TId id, TRequest requestObj)
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected <TResponse>());
            }

            var tokenStateResponse = await HandleTokenStateAsync <TResponse>();

            if (!tokenStateResponse.Succeeded)
            {
                return(tokenStateResponse);
            }

            using (var client = HttpService.ApiClient)
            {
                var requestMessage = new TokenHttpRequestMessage(requestObj)
                {
                    Method     = HttpMethod.Put,
                    RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/", id)),
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync <TResponse>(response).ConfigureAwait(false));
                    }

                    var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var responseObj = JsonConvert.DeserializeObject <TResponse>(responseContent);
                    return(ApiResult <TResponse> .Success(responseObj, response.StatusCode));
                }
                catch
                {
                    return(HandledWebException <TResponse>());
                }
            }
        }
Example #14
0
        public virtual async Task <ApiResult> DeleteAttachmentAsync(string cipherId, string attachmentId)
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected());
            }

            var tokenStateResponse = await HandleTokenStateAsync();

            if (!tokenStateResponse.Succeeded)
            {
                return(tokenStateResponse);
            }

            using (var client = HttpService.ApiClient)
            {
                var requestMessage = new TokenHttpRequestMessage()
                {
                    Method     = HttpMethod.Delete,
                    RequestUri = new Uri(
                        string.Concat(client.BaseAddress, ApiRoute, "/", cipherId, "/attachment/", attachmentId)),
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync(response).ConfigureAwait(false));
                    }

                    return(ApiResult.Success(response.StatusCode));
                }
                catch
                {
                    return(HandledWebException());
                }
            }
        }
Example #15
0
        public virtual async Task <ApiResult> PutTokenAsync(string identifier, DeviceTokenRequest request)
        {
            if (!Connectivity.IsConnected)
            {
                return(HandledNotConnected());
            }

            var tokenStateResponse = await HandleTokenStateAsync();

            if (!tokenStateResponse.Succeeded)
            {
                return(tokenStateResponse);
            }

            using (var client = HttpService.ApiClient)
            {
                var requestMessage = new TokenHttpRequestMessage(request)
                {
                    Method     = HttpMethod.Put,
                    RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/identifier/", identifier, "/token")),
                };

                try
                {
                    var response = await client.SendAsync(requestMessage).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        return(await HandleErrorAsync(response).ConfigureAwait(false));
                    }

                    return(ApiResult.Success(response.StatusCode));
                }
                catch
                {
                    return(HandledWebException());
                }
            }
        }
Example #16
0
        protected async Task SendAsync(HttpMethod method, string path, object requestModel = null)
        {
            var tokenStateResponse = await HandleTokenStateAsync();

            if (!tokenStateResponse)
            {
                return;
            }

            var message = new TokenHttpRequestMessage(requestModel, AccessToken)
            {
                Method     = method,
                RequestUri = new Uri(string.Concat(Client.BaseAddress, path))
            };

            try
            {
                var response = await Client.SendAsync(message);
            }
            catch (Exception e)
            {
                _logger.LogError(12334, e, "Failed to send to {0}.", message.RequestUri.ToString());
            }
        }
Example #17
0
        private async Task SendAsync(PushSendRequestModel requestModel)
        {
            var tokenStateResponse = await HandleTokenStateAsync();

            if (!tokenStateResponse)
            {
                return;
            }

            var message = new TokenHttpRequestMessage(requestModel, AccessToken)
            {
                Method     = HttpMethod.Post,
                RequestUri = new Uri(string.Concat(PushClient.BaseAddress, "/push/send"))
            };

            try
            {
                await PushClient.SendAsync(message);
            }
            catch (Exception e)
            {
                _logger.LogError(12334, e, "Unable to send push notification.");
            }
        }
Example #18
0
        public async Task DeleteRegistrationAsync(string deviceId)
        {
            var tokenStateResponse = await HandleTokenStateAsync();

            if (!tokenStateResponse)
            {
                return;
            }

            var message = new TokenHttpRequestMessage(AccessToken)
            {
                Method     = HttpMethod.Delete,
                RequestUri = new Uri(string.Concat(PushClient.BaseAddress, "/push/", deviceId))
            };

            try
            {
                await PushClient.SendAsync(message);
            }
            catch (Exception e)
            {
                _logger.LogError(12336, e, "Unable to delete push registration.");
            }
        }