From b621c175963c1ef4447c5e16bfa818ca81b70db6 Mon Sep 17 00:00:00 2001
From: Klaus Fischer <klaus.fischer@eloware.com>
Date: Tue, 7 Jun 2022 09:34:04 +0200
Subject: [PATCH] Added scope to OAuth token

---
 E2ETests/SenderTest.cs            |  9 +++++++++
 FitConnect/FunctionalBaseClass.cs | 29 +++++++++++++++++++++++------
 FitConnect/Sender.cs              |  4 ++++
 3 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/E2ETests/SenderTest.cs b/E2ETests/SenderTest.cs
index 4482f720..67cbbee6 100644
--- a/E2ETests/SenderTest.cs
+++ b/E2ETests/SenderTest.cs
@@ -54,5 +54,14 @@ public class SenderTest {
         var token = _sender.GetTokenAsync(_clientId, _clientSecret).Result;
         token.Should().NotBeNull();
         token.ExpiresIn.Should().Be(1800);
+        token.Scope.Should().Be("send:region:DE");
+    }
+
+    [Test]
+    public void GetAccessTokenWithScope() {
+        var token = _sender.GetTokenAsync(_clientId, _clientSecret, "send:region:DE01010").Result;
+        token.Should().NotBeNull();
+        token.ExpiresIn.Should().Be(1800);
+        token.Scope.Should().Be("send:region:DE01010");
     }
 }
diff --git a/FitConnect/FunctionalBaseClass.cs b/FitConnect/FunctionalBaseClass.cs
index 9b7ba4c6..b671ccc4 100644
--- a/FitConnect/FunctionalBaseClass.cs
+++ b/FitConnect/FunctionalBaseClass.cs
@@ -87,15 +87,32 @@ public class FunctionalBaseClass {
     }
 
 
-    public async Task<OAuthAccessToken?> GetTokenAsync(string clientId, string clientSecret) {
+    /// <summary>
+    /// Requesting an OAuth token from the FitConnect API.
+    /// 
+    /// You can get the Client ID and Client Secret from the FitConnect Self Service portal
+    /// under https://portal.auth-testing.fit-connect.fitko.dev
+    /// </summary>
+    /// <param name="clientId">Your client Id</param>
+    /// <param name="clientSecret">Your client Secret</param>
+    /// <param name="scope">Scope if needed</param>
+    /// <returns></returns>
+    public async Task<OAuthAccessToken?> GetTokenAsync(string clientId, string clientSecret,
+        string? scope = null) {
         var client = new HttpClient();
         client.DefaultRequestHeaders.Accept.Add(
             MediaTypeWithQualityHeaderValue.Parse("application/json"));
-        var content = new FormUrlEncodedContent(new[] {
-            new KeyValuePair<string, string>("grant_type", "client_credentials"),
-            new KeyValuePair<string, string>("client_id", clientId),
-            new KeyValuePair<string, string>("client_secret", clientSecret)
-        });
+
+        var requestContent = new Dictionary<string, string> {
+            { "grant_type", "client_credentials" },
+            { "client_id", clientId },
+            { "client_secret", clientSecret }
+        };
+
+        if (scope != null)
+            requestContent["scope"] = scope;
+
+        var content = new FormUrlEncodedContent(requestContent);
 
         var request = new HttpRequestMessage(HttpMethod.Post, Endpoints.TokenUrl) {
             Content = content,
diff --git a/FitConnect/Sender.cs b/FitConnect/Sender.cs
index 365bc289..258746d3 100644
--- a/FitConnect/Sender.cs
+++ b/FitConnect/Sender.cs
@@ -5,4 +5,8 @@ namespace FitConnect;
 public class Sender : FunctionalBaseClass {
     public Sender(ILogger? logger, FitConnectEndpoints endpoints) : base(logger,endpoints) {
     }
+
+    internal async Task EncryptData() {
+        
+    }
 }
\ No newline at end of file
-- 
GitLab