/// <summary>
        ///  傳入 Google Token 物件,處理成 CalendarService 後回傳
        /// </summary>
        /// <param name="GoogleTokenModelObj"></param>
        /// <returns></returns>
        public static CalendarService GetCalendarService(GoogleTokenModel GoogleTokenModelObj)
        {
            CalendarService service = null;

            GoogleClientSecrets clientSecret;

            using (var stream = new FileStream(Gfolder + @"\client_secret.json", FileMode.Open, FileAccess.Read))
            {
                clientSecret = GoogleClientSecrets.Load(stream);
            }

            IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(
                new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = clientSecret.Secrets,
                DataStore     = new FileDataStore(Gfolder),
                Scopes        = new[] { CalendarService.Scope.Calendar }
            });

            var result = new AuthorizationCodeWebApp(flow, "", "").AuthorizeAsync(UserId, CancellationToken.None).Result;

            service = new CalendarService(new BaseClientService.Initializer
            {
                ApplicationName       = "donma-test",
                HttpClientInitializer = result.Credential
            });

            return(service);
        }
Ejemplo n.º 2
0
        protected void btnStart_Click(object sender, EventArgs e)
        {
            GoogleClientSecrets clientSecret;

            //匯入專案憑證
            using (var stream = new FileStream(Gfolder + @"\client_secret.json", FileMode.Open, FileAccess.Read))
            {
                clientSecret = GoogleClientSecrets.Load(stream);
            }

            //建立流程權限
            IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(
                new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = clientSecret.Secrets,
                DataStore     = new FileDataStore(Gfolder),
                Scopes        = new[] { CalendarService.Scope.Calendar }
            });


            var uri    = System.Web.HttpContext.Current.Request.Url.ToString();
            var result = new AuthorizationCodeWebApp(flow, uri, "success").AuthorizeAsync(UserId, CancellationToken.None).Result;

            if (result.RedirectUri != null)
            {
                //導去授權頁
                Response.Redirect(result.RedirectUri);
            }
        }
Ejemplo n.º 3
0
        //
        //  Inherit methods from parent class

        override public object Authorize(HttpRequest Request, string accountName)
        {
            try
            {
                var uri   = Request.Url.ToString();
                var code  = Request["code"];
                var error = Request["error"];

                if (!string.IsNullOrEmpty(error))
                {
                    if (error == "access_denied")
                    {
                        return(new UserRejectException());
                    }
                    else
                    {
                        return(new UnknownException(error));
                    }
                }

                // перед авторизацией нужно обнулить
                CalendarService = null;

                if (code != null)
                {
                    string redirectUri = uri.Substring(0, uri.IndexOf("?"));
                    var    token       = CodeFlow.ExchangeCodeForTokenAsync(accountName, code, redirectUri, CancellationToken.None).Result;
                    string state       = Request["state"];
                    var    result      = AuthWebUtility.ExtracRedirectFromState(CodeFlow.DataStore, accountName, state);
                    return(result);
                }
                else
                {
                    string redirectUri = uri;
                    string state       = "ostate_";// Guid.NewGuid().ToString("N");
                    var    result      = new AuthorizationCodeWebApp(CodeFlow, redirectUri, state).AuthorizeAsync(accountName, CancellationToken.None).Result;
                    if (result.RedirectUri != null)
                    {
                        return(result);
                    }
                    else
                    {
                        CalendarService = new CalendarService(new BaseClientService.Initializer()
                        {
                            HttpClientInitializer = result.Credential,
                            ApplicationName       = APPLICATION_NAME
                        });
                        // alright
                        return("OK");
                    }
                }
            }
            catch (Exception ex)
            {
                return(ex);
            }

            return(null);
        }
Ejemplo n.º 4
0
        internal string GetAuthorizeUrl(string callerUrl, string redirectUrl, int memberId)
        {
            var flow   = GetFlow();
            var result =
                new AuthorizationCodeWebApp(flow, redirectUrl, memberId.ToString()).AuthorizeAsync(memberId.ToString(),
                                                                                                   CancellationToken.None).Result;

            return(result.RedirectUri);
        }
Ejemplo n.º 5
0
        public async Task <APIGatewayProxyResponse> HandleAsync(APIGatewayProxyRequest input, ILambdaContext context)
        {
            var ssmClient = new Amazon.SimpleSystemsManagement.AmazonSimpleSystemsManagementClient();

            var googleOauthClientId = await ssmClient.GetParameterAsync(new GetParameterRequest { Name = "/GoogleOauthProxy/GoogleClientId" });

            var googleOauthClientSecret = await ssmClient.GetParameterAsync(new GetParameterRequest { Name = "/GoogleOauthProxy/GoogleSecretKey" });

            var googleOauthUrlRegex = await ssmClient.GetParameterAsync(new GetParameterRequest { Name = "/GoogleOauthProxy/UrlRegex" });

            var returnUrl = input.QueryStringParameters["redirectUri"];

            var urlRegex = new Regex(googleOauthUrlRegex.Parameter.Value);

            if (!urlRegex.IsMatch(returnUrl))
            {
                return new APIGatewayProxyResponse
                       {
                           StatusCode = 403
                       }
            }
            ;

            var clientSecrets = new ClientSecrets
            {
                ClientId     = googleOauthClientId.Parameter.Value,
                ClientSecret = googleOauthClientSecret.Parameter.Value
            };

            var authorisationFlow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets          = clientSecrets,
                Scopes                 = new[] { "email" },
                UserDefinedQueryParams = new[] { new KeyValuePair <string, string>("hd", "myunidays.com") }
            });

            var authorisationApp = new AuthorizationCodeWebApp(authorisationFlow,
                                                               "https://" + input.Headers["Host"] + "/Prod/google-oauth/callback",
                                                               JsonConvert.SerializeObject(new { returnUrl, state = input.QueryStringParameters["state"] }));

            var result = await authorisationApp.AuthorizeAsync(string.Empty, CancellationToken.None);

            var location = result.RedirectUri;

            return(new APIGatewayProxyResponse
            {
                StatusCode = 303,
                Headers = new Dictionary <string, string>
                {
                    ["Access-Control-Allow-Origin"] = "*",
                    ["Location"] = location
                }
            });
        }
    }
Ejemplo n.º 6
0
        public static CalendarService GetCalendarService(GoogleTokenModel GoogleTokenModelObj)
        {
            CalendarService service = null;

            IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(
                new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = GetClientConfiguration().Secrets,
                DataStore     = new FileDataStore(gFolder),
                Scopes        = new[] { CalendarService.Scope.Calendar }
            });

            var uri  = /*"http://localhost:19594/GoogleCalendarRegistration.aspx";*/ System.Web.HttpContext.Current.Request.Url.ToString();
            var code = System.Web.HttpContext.Current.Request["code"];

            if (code != null)
            {
                var token = flow.ExchangeCodeForTokenAsync(UserId, code,
                                                           uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result;

                // Extract the right state.
                var oauthState = AuthWebUtility.ExtracRedirectFromState(
                    flow.DataStore, UserId, HttpContext.Current.Request["state"]).Result;
                System.Web.HttpContext.Current.Response.Redirect(oauthState);
            }
            else
            {
                var result = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(UserId, CancellationToken.None).Result;
                if (result.RedirectUri != null)
                {
                    // Redirect the user to the authorization server.
                    System.Web.HttpContext.Current.Response.Redirect(result.RedirectUri);
                    //var page = System.Web.HttpContext.Current.CurrentHandler as Page;
                    //page.ClientScript.RegisterClientScriptBlock(page.GetType(),
                    //    "RedirectToGoogleScript", "window.top.location = '" + result.RedirectUri + "'", true);
                }
                else
                {
                    // The data store contains the user credential, so the user has been already authenticated.
                    service = new CalendarService(new BaseClientService.Initializer
                    {
                        ApplicationName       = "My ASP.NET Google Calendar App",
                        HttpClientInitializer = result.Credential
                    });
                }
            }

            return(service);
        }
Ejemplo n.º 7
0
        private DriveService CreateDriveService()
        {
            DriveService service = null;
            string       UserId  = "user-id";
            GoogleAuthorizationCodeFlow flow;

            using (var stream = new FileStream(Server.MapPath(@"/client_secrets.json"), FileMode.Open, FileAccess.Read))
            {
                flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
                {
                    DataStore           = new FileDataStore(Server.MapPath(@"/Drive.Sample.Store")),
                    ClientSecretsStream = stream,
                    Scopes = new[] { DriveService.Scope.Drive }
                });
            }
            var uri  = Request.Url.ToString();
            var code = Request["code"];

            if (code != null)
            {
                var token = flow.ExchangeCodeForTokenAsync(UserId, code,
                                                           uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result;

                // Extract the right state.
                var oauthState = AuthWebUtility.ExtracRedirectFromState(
                    flow.DataStore, UserId, Request["state"]).Result;
                Response.Redirect(oauthState);
            }
            else
            {
                var result = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(UserId,
                                                                                        CancellationToken.None).Result;
                if (result.RedirectUri != null)
                {
                    // Redirect the user to the authorization server.
                    Response.Redirect(result.RedirectUri);
                }
                else
                {
                    // The data store contains the user credential, so the user has been already authenticated.
                    service = new DriveService(new BaseClientService.Initializer
                    {
                        ApplicationName       = "Google Drive API",
                        HttpClientInitializer = result.Credential
                    });
                }
            }
            return(service);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            GoogleAuthorizationCodeFlow flow;
            var assembly = Assembly.GetExecutingAssembly();

            using (var stream = assembly.GetManifestResourceStream("Tasks.ASP.NET.SimpleOAuth2.client_secrets.json"))
            {
                flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
                {
                    DataStore           = new FileDataStore("Tasks.ASP.NET.Sample.Store"),
                    ClientSecretsStream = stream,
                    Scopes = new[] { TasksService.Scope.TasksReadonly }
                });
            }

            var uri  = Request.Url.ToString();
            var code = Request["code"];

            if (code != null)
            {
                var token = flow.ExchangeCodeForTokenAsync(UserId, code,
                                                           uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result;

                // Extract the right state.
                var oauthState = AuthWebUtility.ExtracRedirectFromState(
                    flow.DataStore, UserId, Request["state"]).Result;
                Response.Redirect(oauthState);
            }
            else
            {
                var result = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(UserId,
                                                                                        CancellationToken.None).Result;
                if (result.RedirectUri != null)
                {
                    // Redirect the user to the authorization server.
                    Response.Redirect(result.RedirectUri);
                }
                else
                {
                    // The data store contains the user credential, so the user has been already authenticated.
                    service = new TasksService(new BaseClientService.Initializer
                    {
                        ApplicationName       = "Tasks API Sample",
                        HttpClientInitializer = result.Credential
                    });
                }
            }
        }
Ejemplo n.º 9
0
        protected void BtnRegisterWithGoogleCalendar_Click(object sender, EventArgs e)
        {
            CalendarService service = null;
            //string GoogleReturnPageAddress = System.Configuration.ConfigurationManager.AppSettings["GoogleReturnPageAddress"];

            IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(
                new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = GetClientConfiguration().Secrets,
                DataStore     = new FileDataStore(gFolder),
                Scopes        = new[] { CalendarService.Scope.Calendar }
            });

            var uri    = System.Web.HttpContext.Current.Request.Url.ToString();
            var result = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(UserId, CancellationToken.None).Result;

            if (result.RedirectUri != null)
            {
                // Redirect the user to the authorization server.
                System.Web.HttpContext.Current.Response.Redirect(result.RedirectUri);
                var page = System.Web.HttpContext.Current.CurrentHandler as Page;
                page.ClientScript.RegisterClientScriptBlock(page.GetType(),
                                                            "RedirectToGoogleScript", "window.top.location = '" + result.RedirectUri + "'", true);
            }
            else if (result.Credential != null)
            {
                // The data store contains the user credential, so the user has been already authenticated.
                service = new CalendarService(new BaseClientService.Initializer
                {
                    ApplicationName       = "My ASP.NET Google Calendar App",
                    HttpClientInitializer = result.Credential
                });

                PnlLogin.Visible    = false;
                PnlRegister.Visible = false;
                PnlEvents.Visible   = true;

                TxtStartTime.Text = DateTime.Now.ToString();
                TxtEndTime.Text   = DateTime.Now.AddHours(2).ToString();
            }
            // Response.Redirect(GoogleCalendarManager.GenerateGoogleOAuthURL());
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Verifica se o usuário está logado no Google Calendar
        /// </summary>
        /// <param name="usuarioID">ID do usuário no sistema</param>
        /// <param name="conexaoBanco">Conexão com banco de dados</param>
        /// <param name="urlRedirecionamento">Url de redirecionamento definida no Google Console Developers</param>
        /// <param name="aplicacaoNome">Nome da aplicação no google</param>
        /// <param name="escopos">Acessos que o sistema irá solicitar ao usuário</param>
        /// <returns>Caso esteja logado retorna o serviço para ser usado, se não retorna null</returns>
        public static CalendarService OAuthLogged(string usuarioID, string conexaoBanco, string urlRedirecionamento, string aplicacaoNome, string[] escopos)
        {
            CalendarService service = new CalendarService();

            //Use uma classe extendida para autenticação Google Flow
            GoogleAuthorizationCodeFlow flow;

            flow = new ForceOfflineGoogleAuthorizationCodeFlow(
                new GoogleAuthorizationCodeFlow.Initializer
            {
                //Classe GoogleDAO para salvar o token de acesso no banco de dados.
                DataStore     = new GoogleDAO(conexaoBanco),
                ClientSecrets = new ClientSecrets {
                    ClientId = "215187720738-qvd9a4kbm69cqd5iuutgekhspg67l8ar.apps.googleusercontent.com", ClientSecret = "96JWX7tgheXLn1pe5QJw968E"
                },
                Scopes = escopos
            });

            var dados = new AuthorizationCodeWebApp(flow, urlRedirecionamento, Convert.ToString(HttpContext.Current.Request.Url)).AuthorizeAsync(usuarioID, CancellationToken.None).Result;

            if (dados.RedirectUri == null)
            {
                //Caso já exista no banco de dados o token o usuário já possui permissão e está logado.
                service = new CalendarService
                          (
                    new BaseClientService.Initializer()
                {
                    HttpClientInitializer = dados.Credential,
                    ApplicationName       = aplicacaoNome
                }
                          );

                return(service);
            }

            return(null);
        }
Ejemplo n.º 11
0
    // API
    protected void GmailAPI(object sender, EventArgs e)
    {
        String credPath = System.Web.HttpContext.Current.Server.MapPath("/App_Data/GmailAPI");
        String uri      = Request.Url.ToString();
        String user_id  = Util.GetUserId();

        IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(
            new GoogleAuthorizationCodeFlow.Initializer
        {
            ClientSecrets = new ClientSecrets()
            {
                ClientId = "792417557967-mbt9n0cvnnlm01947sh1om351nd9quku.apps.googleusercontent.com", ClientSecret = "9lo8IshXhyIMy8_5jd6YoCNd"
            },
            DataStore = new FileDataStore(credPath, true),
            Scopes    = new String[] { GmailService.Scope.GmailReadonly }
        });

        var code = Request["code"];

        if (String.IsNullOrEmpty(code))
        {
            AuthorizationCodeWebApp.AuthResult AuthResult = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(user_id, CancellationToken.None).Result;
            Util.Debug(AuthResult.RedirectUri);
            if (AuthResult.RedirectUri != null)
            {
                // Redirect the user to the authorization server.
                Page.ClientScript.RegisterStartupScript(this.GetType(), "OpenWindow", "window.open('" + AuthResult.RedirectUri + "','_newtab');", true);
            }
            else
            {
                // Create Gmail API service.
                GmailService service = new GmailService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = AuthResult.Credential,
                    ApplicationName       = "My Project"
                });

                // Define parameters of request.
                UsersResource.LabelsResource.ListRequest request = service.Users.Labels.List("me");

                // List labels.
                IList <Google.Apis.Gmail.v1.Data.Label> labels = request.Execute().Labels;
                Response.Write("Labels:");
                if (labels != null && labels.Count > 0)
                {
                    foreach (var labelItem in labels)
                    {
                        Response.Write("    " + labelItem.Name);
                    }
                }
                else
                {
                    Response.Write("No labels found.");
                }
            }
        }
        else
        {
            var token = flow.ExchangeCodeForTokenAsync(user_id, code, uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result;

            // Extract the right state.
            var oauthState = AuthWebUtility.ExtracRedirectFromState(flow.DataStore, user_id, Request["state"]).Result;

            Page.ClientScript.RegisterStartupScript(this.GetType(), "OpenWindow", "window.open('" + oauthState + "','_newtab');", true);
        }
    }
        public AnalyticsService Handle(string _userId, string _connectionString, string _googleRedirectUri, string _applicationName, string[] _scopes)
        {
            try
            {
                string                      UserId = _userId;//The user ID wil be for examlpe the users gmail address.
                AnalyticsService            service;
                GoogleAuthorizationCodeFlow flow;
                //use extended class to create google authorization code flow
                flow = new ForceOfflineGoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
                {
                    DataStore     = new DbDataStore(_connectionString),//DataStore class to save the token in a SQL database.
                    ClientSecrets = new ClientSecrets {
                        ClientId = "XXX-YOUR CLIENTID-XXX", ClientSecret = "XXX-YOURCLIENTSECRET-XXX"
                    },
                    Scopes = _scopes,
                });


                var    uri         = HttpContext.Current.Request.Url.ToString();
                string redirecturi = _googleRedirectUri;    //This is the redirect URL set in google developer console.
                var    code        = HttpContext.Current.Request["code"];
                if (code != null)
                {
                    var token = flow.ExchangeCodeForTokenAsync(UserId, code,
                                                               uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result;

                    var test = HttpContext.Current.Request["state"];

                    // Extract the right state.
                    var oauthState = AuthWebUtility.ExtracRedirectFromState(
                        flow.DataStore, UserId, HttpContext.Current.Request["state"]).Result;
                    HttpContext.Current.Response.Redirect(oauthState);
                }
                else
                {
                    var result = new AuthorizationCodeWebApp(flow, redirecturi, uri).AuthorizeAsync(UserId,
                                                                                                    CancellationToken.None).Result;

                    if (result.RedirectUri != null)
                    {
                        // Redirect the user to the authorization server.
                        HttpContext.Current.Response.Redirect(result.RedirectUri);
                    }
                    else
                    {
                        // The data store contains the user credential, so the user has been already authenticated.
                        service = new AnalyticsService(new BaseClientService.Initializer()
                        {
                            HttpClientInitializer = result.Credential,
                            ApplicationName       = _applicationName
                        });
                        return(service);
                    }
                }
                return(null);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 13
0
        protected void Page_Load(object sender, EventArgs e)
        {
            GoogleAuthorizationCodeFlow flow;

            using (var stream = GetGoogleSettings())
            {
                flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
                {
                    ClientSecretsStream = stream,
                    Scopes = new[] { "https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email" }
                });
            }

            var uri  = Request.Url.ToString();
            var code = Request["code"];

            if (code != null)
            {
                var token = flow.ExchangeCodeForTokenAsync("user-id", code,
                                                           uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result;

                string access_token = (string)token.AccessToken;

                int    statusCode = -1;
                String strUrl     = "https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + access_token;
                var    request    = WebRequest.Create(strUrl) as HttpWebRequest;


                using (HttpWebResponse res = (HttpWebResponse)request.GetResponse() as HttpWebResponse)
                {
                    statusCode = (int)res.StatusCode;
                    using (Stream dataStream = res.GetResponseStream())
                    {
                        StreamReader sr          = new StreamReader(dataStream);
                        var          serializer  = new JavaScriptSerializer();
                        string       s           = sr.ReadToEnd();
                        AccountData  accountData = serializer.Deserialize <AccountData>(s);
                        if (Membership.GetUser(accountData.email) == null)
                        {
                            Session["GoogleUserFirstName"] = accountData.name;
                            Session["GoogleUserLastName"]  = "";
                            Session["GoogleUserEmail"]     = accountData.email;

                            Session["CameFromSocialNetwork"] = true;
                            Session["CameFromGoogleLogin"]   = true;
                            var           redirect = this.BaseUrl + "/DesktopModules/CoreModules/Register/Register.aspx";
                            StringBuilder sb       = new StringBuilder();
                            sb.Append("<script language='javascript'>");
                            sb.Append("window.opener.location.href = '");
                            sb.Append(redirect);
                            sb.Append("';window.opener.focus();");
                            sb.Append("window.close();");
                            sb.Append("</script>");
                            Response.Write(sb.ToString());
                            Response.End();
                        }
                        else
                        {
                            Session["CameFromSocialNetwork"] = true;
                            Session["UserName"] = accountData.email;
                            var           redirect = BaseUrl + "/DesktopModules/CoreModules/SignIn/LoginIn.aspx";
                            StringBuilder sb       = new StringBuilder();
                            sb.Append("<script language='javascript'>");
                            sb.Append("window.opener.location.href = '");
                            sb.Append(redirect);
                            sb.Append("';window.opener.focus();");
                            sb.Append("window.close();");
                            sb.Append("</script>");
                            Response.Write(sb.ToString());
                            Response.End();
                        }
                    }
                }
            }
            else
            {
                var result = new AuthorizationCodeWebApp(flow, this.RedirectUrl, this.RedirectUrl).AuthorizeAsync("user-id",
                                                                                                                  CancellationToken.None).Result;
                if (result.RedirectUri != null)
                {
                    // Redirect the user to the authorization server.
                    Response.Redirect(result.RedirectUri);
                }
                else
                {
                    Response.Redirect("/");
                }
            }
            // Metodo viejo que anda

            //if (Session["GoogleAppId"] != null && Session["GoogleAppSecret"] != null) {
            //try {
            //   string code = Request.QueryString["code"];
            //   string url = "https://accounts.google.com/o/oauth2/token";
            //   string appId = Session["GoogleAppId"] as string;
            //   string appSecret = Session["GoogleAppSecret"] as string;
            //   string redirectUrl = ConvertRelativeUrlToAbsoluteUrl(HttpUrlBuilder.BuildUrl("~/DesktopModules/CoreModules/SignIn/LogInGoogle.aspx"));

            //   StringBuilder postData = new StringBuilder();

            //   postData.Append("code=" + code + "&");
            //   postData.Append("client_id=" + appId + "&");
            //   postData.Append("client_secret=" + appSecret + "&");
            //   postData.Append("redirect_uri=" + redirectUrl + "&");
            //   postData.Append("grant_type=authorization_code");


            //   //ETC for all Form Elements

            //   // Now to Send Data.
            //   StreamWriter writer = null;

            //   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            //   request.Method = "POST";
            //   request.ContentType = "application/x-www-form-urlencoded";
            //   request.ContentLength = postData.ToString().Length;
            //   try {
            //       writer = new StreamWriter(request.GetRequestStream());
            //       writer.Write(postData.ToString());
            //   }
            //   finally {
            //       if (writer != null)
            //           writer.Close();
            //   }

            //   WebResponse response = request.GetResponse();
            //   StreamReader sr = new StreamReader(response.GetResponseStream());
            //   String json = sr.ReadToEnd().Trim();


            //   JavaScriptSerializer ser = new JavaScriptSerializer();
            //   var profileDic = ser.Deserialize<Dictionary<string, object>>(json);

            //   string access_token = (string)profileDic["access_token"];
            //   var refresh_token = profileDic["refresh_token"];

            //   int statusCode = -1;
            //   String strUrl = "https://www.google.com/m8/feeds/contacts/default/full?access_token=" + access_token;
            //   request = WebRequest.Create(strUrl) as HttpWebRequest;


            //       using (HttpWebResponse res = (HttpWebResponse)request.GetResponse() as HttpWebResponse) {
            //           statusCode = (int)res.StatusCode;
            //           using (Stream dataStream = res.GetResponseStream()) {
            //               var resp = XDocument.Load(dataStream);
            //               XNamespace atom = "http://www.w3.org/2005/Atom";
            //               var q = from c in resp.Root.Descendants(atom + "author")
            //                       select new {
            //                           Name = (string)c.Element(atom + "name"),
            //                           Email = (string)c.Element(atom + "email")
            //                       };
            //               string name = string.Empty;
            //               string email = string.Empty;
            //               foreach (var person in q) {
            //                   name = person.Name;
            //                   email = person.Email;
            //               }

            //               if (Membership.GetUser(email) == null){

            //                   Session["GoogleUserName"] = name;
            //                   Session["GoogleUserEmail"] = email;

            //                   Session["CameFromSocialNetwork"] = true;
            //                   Session["CameFromGoogleLogin"] = true;
            //                   Response.Redirect(HttpUrlBuilder.BuildUrl("~/DesktopModules/CoreModules/Register/Register.aspx"));
            //               }
            //               else{
            //                   string urlHome = ConvertRelativeUrlToAbsoluteUrl("~");
            //                   Session["CameFromSocialNetwork"] = true;
            //                   PortalSecurity.SignOn(email, GeneratePasswordHash(email), false, urlHome);
            //               }

            //           }
            //       }
            //   }
            //   catch (Exception ex) {
            //       ErrorHandler.Publish(LogLevel.Error, "Google error ocurred", ex);
            //       Response.Redirect(HttpUrlBuilder.BuildUrl(""));
            //   }


            //}
            //else{
            //   ErrorHandler.Publish(LogLevel.Error,"Google settings weren't loaded.");
            //   Response.Redirect(HttpUrlBuilder.BuildUrl(""));
            //}

            OpenIdRelyingParty Openid = new OpenIdRelyingParty();
            var openIdUrl             = "http://www.google.com/accounts/o8/id";
            var response = Openid.GetResponse();

            if (response == null)
            {
                // User submitting Identifier
                Identifier id;
                if (Identifier.TryParse(openIdUrl, out id))
                {
                    try
                    {
                        var request = Openid.CreateRequest(openIdUrl);
                        var fetch   = new FetchRequest();
                        fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
                        fetch.Attributes.AddRequired(WellKnownAttributes.Name.First);
                        fetch.Attributes.AddRequired(WellKnownAttributes.Name.Last);
                        request.AddExtension(fetch);
                        request.AddExtension(new UIRequest()
                        {
                            Mode = UIModes.Popup
                        });
                        var b = new UriBuilder(Request.Url)
                        {
                            Query = ""
                        };
                        request.RedirectToProvider();
                    }
                    catch (ProtocolException ex)
                    {
                        ErrorHandler.Publish(LogLevel.Error, "Google Error", ex);
                        Response.Redirect(HttpUrlBuilder.BuildUrl("~/"));
                    }
                }
                ErrorHandler.Publish(LogLevel.Error, "OpenID Error...invalid url. url='" + openIdUrl + "'");
                Response.Redirect(HttpUrlBuilder.BuildUrl("~/"));
            }

            // OpenID Provider sending assertion response
            switch (response.Status)
            {
            case AuthenticationStatus.Authenticated:
                var    fetch     = response.GetExtension <FetchResponse>();
                string firstName = "unknown";
                string lastName  = "unknown";
                string email     = "unknown";
                if (fetch != null)
                {
                    firstName = fetch.GetAttributeValue(WellKnownAttributes.Name.First);
                    lastName  = fetch.GetAttributeValue(WellKnownAttributes.Name.Last);
                    email     = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
                }
                if (Membership.GetUser(email) == null)
                {
                    Session["GoogleUserFirstName"] = firstName;
                    Session["GoogleUserLastName"]  = lastName;
                    Session["GoogleUserEmail"]     = email;

                    Session["CameFromSocialNetwork"] = true;
                    Session["CameFromGoogleLogin"]   = true;
                    var           redirect = ConvertRelativeUrlToAbsoluteUrl(HttpUrlBuilder.BuildUrl("~/DesktopModules/CoreModules/Register/Register.aspx"));
                    StringBuilder sb       = new StringBuilder();
                    sb.Append("<script language='javascript'>");
                    sb.Append("window.opener.location.href = '");
                    sb.Append(redirect);
                    sb.Append("';window.opener.focus();");
                    sb.Append("window.close();");
                    sb.Append("</script>");
                    Response.Write(sb.ToString());
                    Response.End();
                }
                else
                {
                    Session["CameFromSocialNetwork"] = true;
                    Session["UserName"] = email;
                    var           redirect = ConvertRelativeUrlToAbsoluteUrl(HttpUrlBuilder.BuildUrl("~/DesktopModules/CoreModules/SignIn/LoginIn.aspx"));
                    StringBuilder sb       = new StringBuilder();
                    sb.Append("<script language='javascript'>");
                    sb.Append("window.opener.location.href = '");
                    sb.Append(redirect);
                    sb.Append("';window.opener.focus();");
                    sb.Append("window.close();");
                    sb.Append("</script>");
                    Response.Write(sb.ToString());
                    Response.End();
                }
                break;

            case AuthenticationStatus.Canceled:
                ErrorHandler.Publish(LogLevel.Info, "OpenID: Cancelled at provider.");
                Response.Write("<script language=javascript>close();</script>");
                Response.End();
                Response.Redirect(HttpUrlBuilder.BuildUrl("~/"));
                break;

            case AuthenticationStatus.Failed:

                ErrorHandler.Publish(LogLevel.Error, "OpenID Exception...", response.Exception);
                Response.Write("<script language=javascript>close();</script>");
                Response.End();
                Response.Redirect(HttpUrlBuilder.BuildUrl("~/"));
                break;
            }
            Response.Redirect(HttpUrlBuilder.BuildUrl("~/"));
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Efetua login OAuth no google e grava dados em banco de dados para não precisar ficar logando a cada acesso
        /// </summary>
        /// <param name="usuarioID">ID do usuário que está logando</param>
        /// <param name="conexaoBanco">String de conexão com banco de dados</param>
        /// <param name="urlRedirecionamento">URL que o google irá redirecionar de volta após o Login</param>
        /// <param name="aplicacaoNome">Nome da aplicação no google console developer</param>
        /// <param name="escopos">Escopos que definem o que será usado do serviço</param>
        /// <returns>Retorna o serviço que será usado</returns>
        public static CalendarService OAuthLogin(string usuarioID, string conexaoBanco, string urlRedirecionamento, string aplicacaoNome, string[] escopos)
        {
            try
            {
                CalendarService service = new CalendarService();

                //Use uma classe extendida para autenticação Google Flow
                GoogleAuthorizationCodeFlow flow;
                flow = new ForceOfflineGoogleAuthorizationCodeFlow(
                    new GoogleAuthorizationCodeFlow.Initializer
                {
                    //Classe GoogleDAO para salvar o token de acesso no banco de dados.
                    DataStore     = new GoogleDAO(conexaoBanco),
                    ClientSecrets = new ClientSecrets {
                        ClientId = "215187720738-qvd9a4kbm69cqd5iuutgekhspg67l8ar.apps.googleusercontent.com", ClientSecret = "96JWX7tgheXLn1pe5QJw968E"
                    },
                    Scopes = escopos
                });


                var uri = Convert.ToString(HttpContext.Current.Request.Url);

                //URL de redirecionamento configurada no painel do google developers console.
                string uriRedirecionamento = urlRedirecionamento;

                if (HttpContext.Current.Request["code"] != null)
                {
                    var token = flow.ExchangeCodeForTokenAsync(usuarioID, HttpContext.Current.Request["code"], uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result;

                    // Extrai dados salvos.
                    var oauthState = AuthWebUtility.ExtracRedirectFromState(flow.DataStore, usuarioID, HttpContext.Current.Request["state"]).Result;

                    var dados = new AuthorizationCodeWebApp(flow, uriRedirecionamento, uri).AuthorizeAsync(usuarioID, CancellationToken.None).Result;

                    //Caso já exista no banco de dados o token, o usuário já possui permissão e está logado.
                    service = new CalendarService
                              (
                        new BaseClientService.Initializer()
                    {
                        HttpClientInitializer = dados.Credential,
                        ApplicationName       = aplicacaoNome
                    }
                              );

                    return(service);
                }
                else
                {
                    var dados = new AuthorizationCodeWebApp(flow, uriRedirecionamento, uri).AuthorizeAsync(usuarioID, CancellationToken.None).Result;

                    if (dados.RedirectUri != null)
                    {
                        //Redireciona o usuário para fazer login e dar as permissões
                        HttpContext.Current.Response.Redirect(dados.RedirectUri);
                    }
                    else
                    {
                        //Caso já exista no banco de dados o token, o usuário já possui permissão e está logado.
                        service = new CalendarService
                                  (
                            new BaseClientService.Initializer()
                        {
                            HttpClientInitializer = dados.Credential,
                            ApplicationName       = aplicacaoNome
                        }
                                  );

                        return(service);
                    }
                }

                return(null);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }