From 077ad0f33907acbfb1e306334e246d587e57c296 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Wed, 25 Sep 2019 23:04:40 +0000 Subject: [PATCH] --- Controllers/AuthController.cs | 90 +++++++++++++++++++++++++++++++++-- 1 file changed, 85 insertions(+), 5 deletions(-) diff --git a/Controllers/AuthController.cs b/Controllers/AuthController.cs index 9f84252..38b3274 100644 --- a/Controllers/AuthController.cs +++ b/Controllers/AuthController.cs @@ -61,10 +61,14 @@ namespace qbridge.Controllers - [HttpGet("Start")] - public async Task GetAsync() + [HttpGet("Start/{qboid}")] + public async Task GetAsync([FromQuery]string qboid) { + if(string.IsNullOrWhiteSpace(qboid)){ + + } + //GET THE DISCOVERY DOCUMENT //Discovery document contains the actual current endpoints to use for various ops await GetQBDiscoveryDocument(); @@ -129,8 +133,7 @@ namespace qbridge.Controllers request.Headers.Add("Accept", "application/json"); request.Headers.Add("User-Agent", "AyaNova-QBridge"); request.Headers.Add("Authorization", "Basic " + Base64Encode(CLIENT_ID + ":" + CLIENT_SECRET)); - //request.Headers.Add("Content-Type","application/x-www-form-urlencoded"); - + var bodyParams = new Dictionary() { {"code", code }, @@ -138,7 +141,7 @@ namespace qbridge.Controllers {"grant_type","authorization_code"} }; request.Content = new FormUrlEncodedContent(bodyParams); - //request.Content = new StringContent(JsonConvert.SerializeObject(bodyParams), System.Text.Encoding.UTF8, "application/x-www-form-urlencoded"); + var client = _clientFactory.CreateClient(); var response = await client.SendAsync(request); @@ -156,7 +159,18 @@ namespace qbridge.Controllers return Content($"TOKEN: {AccessTokenObject.ToString()}"); +/* +Actual response example: +TOKEN: { + "access_token": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..jUV9qU1fnLn8U1KWBj7VuQ.0734yzJslW7Mp9pOIh6NTQZO-hEFJp_5R2JIJecQkJ866rWg9U3FVilwTaBmMEtC3AR4AxJva1nf_LU4JJNA2_EWtRxItHXbVsa54yk5-uELr-42IKjIXlWm1vWQQnkJRye8gZvy6LJAVmbL8exX3WIDHZjauObvLYEifgWAx2HhYrkWfTwY0T4trxxMOmjRMHARXsi-4VPTuMZNgSLEf0ipu7UVepb6lM4T0rXtUHTFwp1W4-dbwbihD7OX6eBS68LX4FIGno6kxMB89sGOf8JUEx6wKyTg7GBll64aOEAf6_hqkh7dIjyLmDXtfyQvB8K77QHTGpPVQOVw8O66_QSx4ePiI6WFhQtUTIdKSlO8w3pmcVcq-iEnAP2GJlwgg1zMBb83QX1LRICjsGMYZwSMNBPlNcuasBcKHJSa3TftTqcm1DB35Cn1CY7Ulte8y4ClkjXQztdL4fJRFUpMCSZ-QSYfgGCfhATM7YE1ErFaXhgpCwsYxACU6G7mDSC9AcTuCupAVSDOas9tuuqsndETahXrhrp83NZMukXgnhv9eC_ac3N6jcog-hjvzsvkNfjSEqyiMWaC3yNQx5Qp0LDCsd2Byx3Feg8QUqhmI8XK6on1fxyJeZxv4o3kyciSVF6KzgJMgB6mYjv-tQ2tpjvCxb2AkSoI2tRkUic9UoRUsWZBNOLmZr8nw6xZ_e1IYkU9gWkh0hmiWB648onghQPWIJOl5hak1a5HSaoEQbkL_ouZwIMWgM2M02GeFrEr.m1xIClqQIgBZyDDcjfPvAg", + "x_refresh_token_expires_in": 15552000, + "refresh_token": "AB11584991271bMYG1tOJ3YyUw7CeaeI2ctbrwD2kZQ6AXnAbd", + "token_type": "bearer", + "expires_in": 3600, + "id_token": "eyJraWQiOiJPUElDUFJEMDkxODIwMTQiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxNDQ5OGQwYi00YjcxLTQ0MDUtYmM1OS1hMWM2YmQ1YjVhZjAiLCJhdWQiOlsiQUJqNzBXdjVnRGF1RmQ5S2dLRnd1dnBRamZ6VHdFZ29kRUc4dG5CYlM4bVNRaE5yWkoiXSwiYXV0aF90aW1lIjoxNTY5NDMxODAxLCJpc3MiOiJodHRwczpcL1wvb2F1dGgucGxhdGZvcm0uaW50dWl0LmNvbVwvb3BcL3YxIiwiZXhwIjoxNTY5NDQyODcxLCJpYXQiOjE1Njk0MzkyNzF9.U6tjszRUnjBxktbb1pZoekotCSpxeHlHA-Gfy1RzEhAG0bj1gZlH5ksOhjaSE_PNx4WRKRL1fSvg5o59BTb-9iFyUZ7eiOF9Wny-C-kvxTlgnapX2H8TwNr5kKQWznuxwTzMzFVSq6REr5Ywad6B5tovzV5CG2Gan1tKxyR3ST0" +} + */ //https://localhost:5001/oauthredirect?state=bar&code=foo // return Content($"State: {state}, Code: {code}"); @@ -214,6 +228,72 @@ namespace qbridge.Controllers // } } + + + + + + + [HttpGet("Revoke/{id}")] + public async Task RevokeAsync() + { + //Revoke the access token for the app for the unique ID specified + + //GET THE DISCOVERY DOCUMENT + //Discovery document contains the actual current endpoints to use for various ops + await GetQBDiscoveryDocument(); + if (DiscoveryDoc == null) + { + return Content($"

Error - Unable to fetch Discovery document from QuickBooks Online

Cannot proceed with Revoke"); + } + + + var revocation_endpoint = DiscoveryDoc["revocation_endpoint"].Value(); + if (string.IsNullOrWhiteSpace(revocation_endpoint)) + { + return Content($"

Error - Unable to find revocation_endpoint value in Discovery document from QuickBooks Online

Cannot proceed"); + } + + + + + + var request = new HttpRequestMessage(HttpMethod.Post, revocation_endpoint); + request.Headers.Add("Accept", "application/json"); + request.Headers.Add("User-Agent", "AyaNova-QBridge"); + request.Headers.Add("Authorization", "Basic " + Base64Encode(CLIENT_ID + ":" + CLIENT_SECRET)); + + var bodyParams = new Dictionary() + { + {"code", code }, + {"redirect_uri", REDIRECT_URI }, + {"grant_type","authorization_code"} + }; + request.Content = new FormUrlEncodedContent(bodyParams); + + var client = _clientFactory.CreateClient(); + var response = await client.SendAsync(request); + + JObject AccessTokenObject = null; + + if (response.IsSuccessStatusCode) + { + string data = await response.Content.ReadAsStringAsync(); + AccessTokenObject = JObject.Parse(data); + } + else + { + AccessTokenObject = null; + } + + + + } + + + + + /* Plan: Make a web APP and api that runs on our server and handles getting tokens from the QB Online oAuth2 endpoints