Skip to content

Commit 435e1e9

Browse files
jobamRiges
authored andcommitted
Add existing oauth2Token support (#32)
Some services (as Alexa skills) manage the authentication and just provide the app oauth2 token. I added the oauth2 existing token support in "generate token" process.
1 parent 4cc808b commit 435e1e9

6 files changed

Lines changed: 48 additions & 4 deletions

File tree

src/Netatmo.Tests/CredentialManager.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,29 @@ await sut.GenerateToken("username@email.com", "p@$$W0rd",
5959
token.AccessToken.Should().Be(expectedToken.access_token);
6060
token.RefreshToken.Should().Be(expectedToken.refresh_token);
6161
token.ExpiresAt.Should().Be(token.ReceivedAt.Plus(Duration.FromSeconds(expectedToken.expires_in)));
62+
}
63+
64+
[Fact]
65+
public void ProvideOAuth2Token_Should_Provide_Token_From_Existing()
66+
{
67+
var expectedToken = new
68+
{
69+
access_token = "2YotnFZFEjr1zCsicMWpAA",
70+
expires_in = 20
71+
};
72+
73+
httpTest.RespondWithJson(expectedToken);
74+
75+
var sut = new Netatmo.CredentialManager("https://api.netatmo.com/", "clientId", "clientSecret", SystemClock.Instance);
76+
77+
sut.ProvideOAuth2Token(expectedToken.access_token);
78+
79+
var token = sut.CredentialToken;
80+
81+
token.Should().BeOfType<CredentialToken>();
82+
token.AccessToken.Should().Be(expectedToken.access_token);
83+
token.RefreshToken.Should().BeNull();
84+
token.ExpiresAt.Should().Be(token.ReceivedAt.Plus(Duration.FromSeconds(expectedToken.expires_in)));
6285
}
6386

6487
[Fact]
@@ -105,4 +128,4 @@ public async Task RefreshToken_Should_Refresh_Token()
105128
refreshedToken.Should().NotBe(oldToken);
106129
}
107130
}
108-
}
131+
}

src/Netatmo/Client.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ public Task GenerateToken(string username, string password, Scope[] scopes = nul
2222
{
2323
return CredentialManager.GenerateToken(username, password, scopes);
2424
}
25+
26+
public void ProvideOAuth2Token(string oauth2Token)
27+
{
28+
CredentialManager.ProvideOAuth2Token(oauth2Token);
29+
}
2530

2631
public Task RefreshToken()
2732
{

src/Netatmo/CredentialManager.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
namespace Netatmo
1010
{
11+
using System;
12+
1113
public class CredentialManager : ICredentialManager
1214
{
1315
private readonly string baseUrl;
@@ -44,6 +46,18 @@ public async Task GenerateToken(string username, string password, Scope[] scopes
4446
CredentialToken = new CredentialToken(token, clock);
4547
}
4648

49+
public void ProvideOAuth2Token(string oauth2Token)
50+
{
51+
var appToken = new Token()
52+
{
53+
AccessToken = oauth2Token,
54+
RefreshToken = null,
55+
ExpiresIn = 20
56+
};
57+
58+
CredentialToken = new CredentialToken(appToken, clock);
59+
}
60+
4761
public async Task RefreshToken()
4862
{
4963
// TODO : Handle not success status codes (rate limit exceeded, api down, ect)
@@ -58,4 +72,4 @@ public async Task RefreshToken()
5872
CredentialToken = new CredentialToken(token, clock);
5973
}
6074
}
61-
}
75+
}

src/Netatmo/IClient.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public interface IClient
99
IAirClient Air { get; }
1010
ICredentialManager CredentialManager { get; }
1111
Task GenerateToken(string username, string password, Scope[] scopes = null);
12+
void ProvideOAuth2Token(string oauth2Token);
1213
Task RefreshToken();
1314
}
1415
}

src/Netatmo/ICredentialManager.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public interface ICredentialManager
88
CredentialToken CredentialToken { get; }
99
string AccessToken { get; }
1010
Task GenerateToken(string username, string password, Scope[] scopes = null);
11+
void ProvideOAuth2Token(string oauth2Token);
1112
Task RefreshToken();
1213
}
13-
}
14+
}

src/Netatmo/Netatmo.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<Version>1.3.1</Version>
3+
<Version>1.3.2</Version>
44
<TargetFrameworks>netcoreapp2.2;netcoreapp2.1;netstandard2.0</TargetFrameworks>
55
<PackageId>Netatmo</PackageId>
66
<Authors>Luc FASQUELLE</Authors>

0 commit comments

Comments
 (0)