diff --git a/Assets/i5 Toolkit for Unity/Runtime/OpenID Connect/Scripts/OIDC Providers/Git Hub/GitHubOIDCProvider.cs b/Assets/i5 Toolkit for Unity/Runtime/OpenID Connect/Scripts/OIDC Providers/Git Hub/GitHubOIDCProvider.cs index 7b12aacf..4cfa3983 100644 --- a/Assets/i5 Toolkit for Unity/Runtime/OpenID Connect/Scripts/OIDC Providers/Git Hub/GitHubOIDCProvider.cs +++ b/Assets/i5 Toolkit for Unity/Runtime/OpenID Connect/Scripts/OIDC Providers/Git Hub/GitHubOIDCProvider.cs @@ -20,6 +20,7 @@ public GitHubOidcProvider() : base() authorizationEndpoint = "https://github.com/login/oauth/authorize"; tokenEndpoint = "https://github.com/login/oauth/access_token"; userInfoEndpoint = "https://api.github.com/user"; + RestConnector = new JsonEncodeUnityWebRequestRestConnector(); } @@ -39,7 +40,7 @@ public override async Task GetAccessTokenFromCodeAsync(string code, stri } string uri = tokenEndpoint + $"?client_id={ClientData.ClientId}" + - $"&redirect_uri={redirectUri}&client_secret={ClientData.ClientSecret}&code={code}&grant_type=authorization_code"; + $"&redirect_uri={redirectUri}" + $"&client_secret={ClientData.ClientSecret}&code={code}&grant_type=authorization_code"; WebResponse response = await RestConnector.PostAsync(uri, ""); if (response.Successful) diff --git a/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/IRestConnector.cs b/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/IRestConnector.cs index ec9ef833..1e320f5e 100644 --- a/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/IRestConnector.cs +++ b/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/IRestConnector.cs @@ -7,12 +7,14 @@ public interface IRestConnector { Task> GetAsync(string uri, Dictionary headers = null); - Task> PostAsync(string uri, string postData, Dictionary headers = null); + Task> PostAsync(string uri, string postJson, Dictionary headers = null); Task> PostAsync(string uri, byte[] postData, Dictionary headers = null); - Task> PutAsync(string uri, string postData, Dictionary headers = null); + Task> PutAsync(string uri, string putJson, Dictionary headers = null); - Task> DeleteAsync(string uri, Dictionary headers = null); + Task> PutAsync(string uri, byte[] putData, Dictionary headers = null); + + Task> DeleteAsync(string uri, Dictionary headers = null); } } \ No newline at end of file diff --git a/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/JsonEncodeUnityWebRequestRestConnector.cs b/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/JsonEncodeUnityWebRequestRestConnector.cs new file mode 100644 index 00000000..918c2d91 --- /dev/null +++ b/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/JsonEncodeUnityWebRequestRestConnector.cs @@ -0,0 +1,23 @@ +using i5.Toolkit.Core.Utilities.Async; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using UnityEngine.Networking; + +namespace i5.Toolkit.Core.Utilities +{ + public class JsonEncodeUnityWebRequestRestConnector : UnityWebRequestRestConnector + { + public override async Task> PostAsync(string uri, string postJson, Dictionary headers = null) + { + byte[] data = new UTF8Encoding().GetBytes(postJson); + return await PostPutDataAsync(uri, "POST", data, "application/json", headers); + } + + public override async Task> PutAsync(string uri, string postData, Dictionary headers = null) + { + byte[] data = new UTF8Encoding().GetBytes(postData); + return await PostPutDataAsync(uri, "PUT", data, "application/json", headers); + } + } +} \ No newline at end of file diff --git a/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/JsonEncodeUnityWebRequestRestConnector.cs.meta b/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/JsonEncodeUnityWebRequestRestConnector.cs.meta new file mode 100644 index 00000000..b94f3fe3 --- /dev/null +++ b/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/JsonEncodeUnityWebRequestRestConnector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f06bf41c90e06e44b915b116c343f7b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/UnityWebRequestRestConnector.cs b/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/UnityWebRequestRestConnector.cs index 83ee96ec..9c7284e8 100644 --- a/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/UnityWebRequestRestConnector.cs +++ b/Assets/i5 Toolkit for Unity/Runtime/Utilities/Rest Connectors/UnityWebRequestRestConnector.cs @@ -1,124 +1,135 @@ -using i5.Toolkit.Core.Utilities.Async; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using UnityEngine.Networking; - -namespace i5.Toolkit.Core.Utilities -{ - public class UnityWebRequestRestConnector : IRestConnector - { - public async Task> DeleteAsync(string uri, Dictionary headers = null) - { - using (UnityWebRequest req = UnityWebRequest.Delete(uri)) - { - AddHeaders(req, headers); - req.downloadHandler = new DownloadHandlerBuffer(); - await req.SendWebRequest(); - - if (req.isHttpError || req.isNetworkError) - { - return new WebResponse(false, req.downloadHandler.text, req.downloadHandler.data, req.responseCode, req.error); - } - else - { - return new WebResponse(req.downloadHandler.text, req.downloadHandler.data, req.responseCode); - } - } - } - - public async Task> GetAsync(string uri, Dictionary headers = null) +using i5.Toolkit.Core.Utilities.Async; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using UnityEngine.Networking; + +namespace i5.Toolkit.Core.Utilities +{ + public class UnityWebRequestRestConnector : IRestConnector + { + public virtual async Task> DeleteAsync(string uri, Dictionary headers = null) + { + using (UnityWebRequest req = UnityWebRequest.Delete(uri)) + { + AddHeaders(req, headers); + req.downloadHandler = new DownloadHandlerBuffer(); + await req.SendWebRequest(); + + if (req.isHttpError || req.isNetworkError) + { + return new WebResponse(false, req.downloadHandler.text, req.downloadHandler.data, req.responseCode, req.error); + } + else + { + return new WebResponse(req.downloadHandler.text, req.downloadHandler.data, req.responseCode); + } + } + } + + public virtual async Task> GetAsync(string uri, Dictionary headers = null) + { + using (UnityWebRequest req = UnityWebRequest.Get(uri)) + { + AddHeaders(req, headers); + await req.SendWebRequest(); + + if (req.isHttpError || req.isNetworkError) + { + return new WebResponse(false, req.downloadHandler.text, req.downloadHandler.data, req.responseCode, req.error); + } + else + { + return new WebResponse(req.downloadHandler.text, req.downloadHandler.data, req.responseCode); + } + } + } + + public virtual async Task> PostAsync(string uri, string putJson, Dictionary headers = null) + { + using (UnityWebRequest req = UnityWebRequest.Post(uri, putJson)) + { + req.downloadHandler = new DownloadHandlerBuffer(); + req.SetRequestHeader("Content-Type", "application/json"); + req.SetRequestHeader("Accept", "application/json"); + + AddHeaders(req, headers); + await req.SendWebRequest(); + + if (req.isHttpError || req.isNetworkError) + { + return new WebResponse(false, req.downloadHandler.text, req.downloadHandler.data, req.responseCode, req.error); + } + else + { + return new WebResponse(req.downloadHandler.text, req.downloadHandler.data, req.responseCode); + } + } + } + + public virtual async Task> PostAsync(string uri, byte[] postData, Dictionary headers = null) { - using (UnityWebRequest req = UnityWebRequest.Get(uri)) - { - AddHeaders(req, headers); - await req.SendWebRequest(); - - if (req.isHttpError || req.isNetworkError) - { - return new WebResponse(false, req.downloadHandler.text, req.downloadHandler.data, req.responseCode, req.error); - } - else - { - return new WebResponse(req.downloadHandler.text, req.downloadHandler.data, req.responseCode); - } - } - } - - public async Task> PostAsync(string uri, string postData, Dictionary headers = null) + return await PostPutDataAsync(uri, "POST", postData, "application/octet-stream", headers); + } + + public virtual async Task> PutAsync(string uri, string putJson, Dictionary headers = null) + { + using (UnityWebRequest req = UnityWebRequest.Put(uri, putJson)) + { + req.SetRequestHeader("Content-Type", "application/json"); + AddHeaders(req, headers); + await req.SendWebRequest(); + + if (req.isHttpError || req.isNetworkError) + { + return new WebResponse(false, req.downloadHandler.text, req.downloadHandler.data, req.responseCode, req.error); + } + else + { + return new WebResponse(req.downloadHandler.text, req.downloadHandler.data, req.responseCode); + } + } + } + + public virtual async Task> PutAsync(string uri, byte[] putData, Dictionary headers = null) { - using (UnityWebRequest req = UnityWebRequest.Post(uri, postData)) - { - req.downloadHandler = new DownloadHandlerBuffer(); - req.SetRequestHeader("Content-Type", "application/json"); - req.SetRequestHeader("Accept", "application/json"); - - AddHeaders(req, headers); - await req.SendWebRequest(); - - if (req.isHttpError || req.isNetworkError) - { - return new WebResponse(false, req.downloadHandler.text, req.downloadHandler.data, req.responseCode, req.error); - } - else - { - return new WebResponse(req.downloadHandler.text, req.downloadHandler.data, req.responseCode); - } - } - } - - public async Task> PostAsync(string uri, byte[] postData, Dictionary headers = null) + return await PostPutDataAsync(uri, "PUT", putData, "application/octet-stream", headers); + } + + protected async Task> PostPutDataAsync(string uri, string method, byte[] data, string contentType, Dictionary headers = null) { - using (UnityWebRequest req = new UnityWebRequest(uri, "POST")) - { - req.uploadHandler = new UploadHandlerRaw(postData); - req.downloadHandler = new DownloadHandlerBuffer(); - req.SetRequestHeader("Content-Type", "application/octet-stream"); + using (UnityWebRequest req = new UnityWebRequest(uri, method)) + { + req.uploadHandler = new UploadHandlerRaw(data); + req.downloadHandler = new DownloadHandlerBuffer(); + req.SetRequestHeader("Content-Type", contentType); - AddHeaders(req, headers); + AddHeaders(req, headers); - await req.SendWebRequest(); + await req.SendWebRequest(); - if (req.isHttpError || req.isNetworkError) - { - return new WebResponse(false, req.downloadHandler.text, req.downloadHandler.data, req.responseCode, req.error); - } - else - { - return new WebResponse(req.downloadHandler.text, req.downloadHandler.data, req.responseCode); - } - } - } + if (req.isHttpError || req.isNetworkError) + { + return new WebResponse(false, req.downloadHandler.text, req.downloadHandler.data, req.responseCode, req.error); + } + else + { + return new WebResponse(req.downloadHandler.text, req.downloadHandler.data, req.responseCode); + } + } + } - public async Task> PutAsync(string uri, string postData, Dictionary headers = null) - { - using (UnityWebRequest req = UnityWebRequest.Put(uri, postData)) - { - req.SetRequestHeader("Content-Type", "application/json"); - AddHeaders(req, headers); - await req.SendWebRequest(); - - if (req.isHttpError || req.isNetworkError) - { - return new WebResponse(false, req.downloadHandler.text, req.downloadHandler.data, req.responseCode, req.error); - } - else - { - return new WebResponse(req.downloadHandler.text, req.downloadHandler.data, req.responseCode); - } - } - } - private void AddHeaders(UnityWebRequest req, Dictionary headers) - { - if (headers == null) - { - return; - } - foreach (KeyValuePair header in headers) - { - req.SetRequestHeader(header.Key, header.Value); - } - } - } + protected void AddHeaders(UnityWebRequest req, Dictionary headers) + { + if (headers == null) + { + return; + } + foreach (KeyValuePair header in headers) + { + req.SetRequestHeader(header.Key, header.Value); + } + } + } } \ No newline at end of file diff --git a/Assets/i5 Toolkit for Unity/Samples/OpenID Connect/GitHub/OpenID Connect GitHub.unity b/Assets/i5 Toolkit for Unity/Samples/OpenID Connect/GitHub/OpenID Connect GitHub.unity index dcf77cbc..fa3790b5 100644 --- a/Assets/i5 Toolkit for Unity/Samples/OpenID Connect/GitHub/OpenID Connect GitHub.unity +++ b/Assets/i5 Toolkit for Unity/Samples/OpenID Connect/GitHub/OpenID Connect GitHub.unity @@ -686,8 +686,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2bcd49101686deb46985b2d4caf07398, type: 3} m_Name: m_EditorClassIdentifier: - deepLinkClient: {fileID: 11400000, guid: 8c071ab4ddaa3dc48bba3f9f4a947800, type: 2} - serverClient: {fileID: 11400000, guid: f165a3fb78409a7469f4d0ffe7ffb340, type: 2} + deepLinkClient: {fileID: 11400000, guid: f4c3133019218bc4bbb46b2b4bac3ad9, type: 2} + serverClient: {fileID: 11400000, guid: f4c3133019218bc4bbb46b2b4bac3ad9, type: 2} --- !u!4 &1780600243 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/i5 Toolkit for Unity/Samples/OpenID Connect/Google/GoogleOIDCBootstrapper.cs b/Assets/i5 Toolkit for Unity/Samples/OpenID Connect/Google/GoogleOIDCBootstrapper.cs index bb3ce5d7..6b0aab6a 100644 --- a/Assets/i5 Toolkit for Unity/Samples/OpenID Connect/Google/GoogleOIDCBootstrapper.cs +++ b/Assets/i5 Toolkit for Unity/Samples/OpenID Connect/Google/GoogleOIDCBootstrapper.cs @@ -17,7 +17,7 @@ protected override void RegisterServices() googleOidc.OidcProvider = new GoogleOidcProvider(); // this example shows how the service can be used on an app for multiple platforms #if !UNITY_EDITOR - googleOidc.RedirectURI = "i5:/"; + googleOidc.RedirectURI = "com.i5.i5-toolkit-for-unity:/"; #else googleOidc.RedirectURI = "https://www.google.com"; #endif