using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Threading; using System.Web.Mvc; using System.Configuration; using System.Threading.Tasks; using System.Text; using Mono.Security.Protocol.Tls; using System.Net; using System.IO; using Yavsc.Model; using Newtonsoft.Json; namespace Yavsc.Controllers { public class TokenResult { public string access_token { get; set; } public string id_token { get; set; } public int expires_in { get; set; } public string token_type { get; set ; } public string refresh_token { get; set; } } public class GoogleController : Controller { private string API_KEY="AIzaSyBV_LQHb22nGgjNvFzZwnQHjao3Q7IewRw"; private string CLIENT_ID="325408689282-6bekh7p3guj4k0f3301a6frf025cnrk1.apps.googleusercontent.com"; private string CLIENT_SECRET="MaxYcvJJCs2gDGvaELZbzwfL"; string [] SCOPES = { "profile", "email" } ; string tokenUri = "https://accounts.google.com/o/oauth2/token"; string authUri = "https://accounts.google.com/o/oauth2/auth"; public void Login() { Random rand = new Random (); string state = "security_token"+rand.Next (100000).ToString()+rand.Next (100000).ToString(); Session ["state"] = state; string redirectUri = Request.Url.Scheme + "://" + Request.Url.Authority + "/Google/Auth"; string prms = String.Format("response_type=code&" + "client_id={0}&" + "redirect_uri={1}&" + "scope={2}&" + "state={3}&" + "access_type=offline&" + "include_granted_scopes=false", CLIENT_ID, redirectUri, string.Join("%20",SCOPES), state ); WebRequest wr = WebRequest.Create(authUri+"?"+prms); wr.Method = "GET"; // Get the response. try { WebResponse response = wr.GetResponse(); string resQuery = response.ResponseUri.Query; string cont = HttpUtility.ParseQueryString(resQuery)["continue"]; Response.Redirect (cont); } catch (WebException we) { Response.Redirect(we.Response.ResponseUri.AbsoluteUri); } } public void Auth() { string redirectUri = Request.Url.Scheme + "://" + Request.Url.Authority + "/Google/Auth"; string code = Request.Params ["code"]; string error = Request.Params ["error"]; if (error != null) { ViewData ["Message"] = string.Format(LocalizedText.Google_error, LocalizedText.ResourceManager.GetString(error)); return; } string state = Request.Params ["state"]; if (state!=null && string.Compare((string)Session ["state"],state)!=0) { ViewData ["Message"] = LocalizedText.ResourceManager.GetString("invalid request state"); return; } string postdata = string.Format( "redirect_uri={0}&client_id={1}&client_secret={2}&code={3}&grant_type=authorization_code", HttpUtility.UrlEncode(redirectUri), HttpUtility.UrlEncode(CLIENT_ID), HttpUtility.UrlEncode(CLIENT_SECRET), HttpUtility.UrlEncode(code)); Byte[] bytes = System.Text.Encoding.UTF8.GetBytes (postdata); HttpWebRequest webreq = WebRequest.CreateHttp (tokenUri); webreq.Method = "POST"; webreq.Accept = "application/json"; webreq.ContentType = "application/x-www-form-urlencoded"; webreq.ContentLength = bytes.Length; using (Stream dataStream = webreq.GetRequestStream ()) { dataStream.Write (bytes, 0, bytes.Length); }; using (WebResponse response = webreq.GetResponse ()) { using (Stream responseStream = response.GetResponseStream ()) { using (StreamReader readStream = new StreamReader (responseStream, Encoding.ASCII)) { string responseStr = readStream.ReadToEnd (); TokenResult res = JsonConvert.DeserializeObject(responseStr); } } } } } }