Exemplo n.º 1
0
        /// <summary>
        /// if login failed, re-navigate to the target Uri, otherwise, show status detail of you.
        /// </summary>
        /// <param name="htmlContent">html of websites</param>
        private async void CheckIfLoginSucceedAsync(string htmlBodyContent)
        {
            var doc = new HtmlDocument();

            doc.LoadHtml(@"<html>
                                             <head>
                                             <title>......</title >
                                             <link href='style.css' rel='stylesheet' type='text/css'>
                                             <script language='JavaScript1.2' src='nocache.js'></script >
                                             </head><body>" + htmlBodyContent + "</body></html>");
            if (htmlBodyContent.Contains("验证码"))  // login failed.
            {
                ReportHelper.ReportAttentionAsync(GetUIString("LoginFailed"));
            }
            else
            {
                // login successful...
                MainLoginPopup.IsOpen = false;
                try {
                    string result = await BeansproutRequestHelper.AccessOauth2Token(EmailBox.Text, PasswordBox.Password);

                    var tokenReturn = default(APITokenReturn);
                    try {
                        JObject jo = JObject.Parse(result);
                        tokenReturn = new APITokenReturn {
                            AccessToken  = jo["access_token"].Value <string>(),
                            RefreshToken = jo["refresh_token"].Value <string>(),
                            ExpiresIn    = jo["expires_in"].Value <string>(),
                            UserId       = jo["douban_user_id"].Value <string>(),
                            UserName     = jo["douban_user_name"].Value <string>(),
                        };
                        MainLoginPopup.IsOpen = false;
                        SettingsHelper.SaveSettingsValue(SettingsSelect.UserID, UserID             = tokenReturn.UserId);
                        SettingsHelper.SaveSettingsValue(SettingsSelect.AccessToken, AccessToken   = tokenReturn.AccessToken);
                        SettingsHelper.SaveSettingsValue(SettingsSelect.RefreshToken, RefreshToken = tokenReturn.RefreshToken);
                        try { await MainPage.SetUserStatusAsync(tokenReturn.UserId); } catch { /* Ignore */ }
                        IsLogined = true;
                        NavigateToBase?.Invoke(
                            null,
                            null,
                            GetFrameInstance(FrameType.UserInfos),
                            GetPageType(NavigateType.UserInfo));
                    } catch { /* Ignore. */ }
                } catch {
                    try {
                        MainPage.SetUserStatus(doc);
                    } catch (Exception e) {
                        Debug.WriteLine(e.Message + "\n" + e.StackTrace);
                    }
                }
                NavigateToBase?.Invoke(
                    null,
                    null,
                    GetFrameInstance(FrameType.UserInfos),
                    GetPageType(NavigateType.UserInfo));
            }
        }
        /// <summary>
        /// if need, run this method for auto-login.
        /// </summary>
        /// <returns></returns>
        private async void ClickSubmitButtonIfAutoAsync()
        {
            Submit.IsEnabled   = false;
            SubitRing.IsActive = true;
            var user = EmailBox.Text;
            var pass = PasswordBox.Password;

            PasswordAndUserEncryption(user, pass);

            // set the abort button with keybord-focus, so that the vitual keyboad in the mobile device with disappear.
            Abort.Focus(FocusState.Keyboard);

            var result = await DoubanWebProcess.PostDoubanResponseAsync(
                path : "https://frodo.douban.com/service/auth2/token",
                host : "frodo.douban.com",
                reffer : null,
                content :
                new HttpFormUrlEncodedContent(new List <KeyValuePair <string, string> > {
                new KeyValuePair <string, string>("client_id", "0dad551ec0f84ed02907ff5c42e8ec70"),
                new KeyValuePair <string, string>("client_secret", "9e8bb54dc3288cdf"),
                new KeyValuePair <string, string>("redirect_uri", "frodo://app/oauth/callback/"),
                new KeyValuePair <string, string>("grant_type", "password"),
                new KeyValuePair <string, string>("username", user),
                new KeyValuePair <string, string>("password", pass),
                //new KeyValuePair<string, string>("apiKey","0dad551ec0f84ed02907ff5c42e8ec70"),
                new KeyValuePair <string, string>("os_rom", "android"),
            }),
                isMobileDevice : true);

            var tokenReturn = default(APITokenReturn);

            try {
                JObject jo = JObject.Parse(result);
                tokenReturn = new APITokenReturn {
                    AccessToken  = jo["access_token"].Value <string>(),
                    RefreshToken = jo["refresh_token"].Value <string>(),
                    ExpiresIn    = jo["expires_in"].Value <string>(),
                    UserId       = jo["douban_user_id"].Value <string>(),
                    UserName     = jo["douban_user_name"].Value <string>(),
                };
                MainLoginPopup.IsOpen = false;
                try {
                    await MainPage.SetUserStatusAsync(tokenReturn.UserId);

                    //await MainPage.SetUserStatusAsync("155845973");
                    NavigateToBase?.Invoke(
                        null,
                        null,
                        GetFrameInstance(FrameType.UserInfos),
                        GetPageType(NavigateType.UserInfo));
                } catch { /* Ignore. */ }
            } catch {
                ReportHelper.ReportAttentionAsync(GetUIString("LoginFailed"));
            }
        }