-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathNotifoClientProvider.cs
93 lines (77 loc) · 2.46 KB
/
NotifoClientProvider.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// ==========================================================================
// Notifo.io
// ==========================================================================
// Copyright (c) Sebastian Stehle
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using System.Net.Http;
namespace Notifo.SDK.NotifoMobilePush
{
internal sealed class NotifoClientProvider
{
private const string CloudUrl = "https://app.notifo.io";
private readonly Func<HttpClient> httpClientFactory;
private readonly ICredentialsStore store;
private readonly NotifoClientBuilder clientBuilder = NotifoClientBuilder.Create();
private string? apiKey;
private string apiUrl;
private INotifoClient? clientInstance;
public bool IsConfigured
{
get => !string.IsNullOrEmpty(apiKey) && !string.IsNullOrEmpty(apiUrl);
}
public string? ApiKey
{
get => apiKey;
set
{
if (apiKey != value)
{
apiKey = value;
clientBuilder.SetApiKey(value);
clientInstance = null;
store.ApiKey = value;
}
}
}
public string ApiUrl
{
get => apiUrl;
set
{
value = value.TrimEnd('/');
if (apiUrl != value)
{
apiUrl = value;
clientBuilder.SetApiUrl(value);
clientInstance = null;
store.ApiUrl = value;
}
}
}
public INotifoClient Client
{
get
{
if (clientInstance == null)
{
clientBuilder.SetClient(CreateHttpClient());
clientInstance = clientBuilder.Build();
}
return clientInstance;
}
}
public HttpClient CreateHttpClient()
{
return httpClientFactory();
}
public NotifoClientProvider(Func<HttpClient> httpClientFactory, ICredentialsStore store)
{
this.httpClientFactory = httpClientFactory;
apiKey = store.ApiKey;
apiUrl = store.ApiUrl ?? CloudUrl;
this.store = store;
}
}
}