Exemplo n.º 1
0
        private async Task <bool> LoginStart()
        {
            DependencyService.Get <IWebCacheHelper>().ClearCookies();
            var res = await PGService.GetHpIdRedirectLink();

            if (res.Item1 && res.Item2)
            {
                var urldata       = UrlParser.Parse(res.Item3);
                var webViewerView = new WebViewerView(
                    BrowserType.NewLogin,
                    this);
                webViewerView.Uri    = urldata.AbsoluteUrl;
                App.Current.MainPage = new ContainerPage(webViewerView);
                webViewerView.GoHome();
                webViewerView.Title = "";
                return(true);
            }

            var msg = res.Item3;

            if (string.IsNullOrWhiteSpace(msg))
            {
                msg = "Unknown error";
            }
            await App.Current.MainPage.DisplayAlert("Error", msg, "Close");

            return(false);
        }
Exemplo n.º 2
0
        public static async Task <bool> CheckAuthTokenExpiration()
        {
            if (string.IsNullOrEmpty(Core.Settings.AuthToken))
            {
                return(false);
            }
            if (Core.Settings.AuthTokenExpiredAt > DateTime.UtcNow && (Core.Settings.AuthTokenExpiredAt - DateTime.UtcNow).TotalMinutes > 15)
            {
                return(true);
            }
            var res = await PGService.RefreshAuthToken(Core.Settings.AuthToken);

            if (!res.Item1)
            {
                return(false);
            }

            Core.Settings.AuthToken          = res.Item2;
            Core.Settings.AuthTokenExpiredAt = res.Item3;

            var ssoData = await PGService.GetSSOData();

            if (ssoData == null)
            {
                return(false);
            }
            Core.Settings.SsoData = ssoData;

            //Task.Run(() => HPHService.SetDeviceInfo());
            return(true);
        }
Exemplo n.º 3
0
        private async void BtnLoginClicked(object sender, EventArgs e)
        {
            if (BtnLogin.Opacity < 1)
            {
                return;
            }
            if (!PGService.CheckConnection(true))
            {
                return;
            }
            Indicator.IsRunning = true;
            Indicator.IsVisible = true;
            BtnLogin.Opacity    = 0.4;
            if (!string.IsNullOrWhiteSpace(Core.Settings.AuthToken))
            {
                // Check if authtoken about to expired
                var res = await LoginHelper.CheckAuthTokenExpiration();

                if (!res)
                {
                    LoginFailed();
                }
                else
                {
                    LoginFinish();
                }
            }
            else
            {
                LoginStart();
            }
        }
Exemplo n.º 4
0
        public void ShowBrowser(string title, string url, BrowserType type = BrowserType.Cached, bool hideTitle = false)
        {
            if (string.IsNullOrEmpty(url))
            {
                return;
            }
            var urldata = UrlParser.Parse(url);

            if (string.IsNullOrEmpty(urldata.AbsoluteUrl) || !PGService.CheckConnection(true))
            {
                return;
            }

            if (browser == null)
            {
                browser = new WebViewerView(type, this, true, true, showTitlePanel: !hideTitle);
                browser.WidthRequest  = Bounds.Width;
                browser.HeightRequest = Bounds.Height;
                browser.OnReturn     += BrowserOnReturn;
            }
            browser.Uri = urldata.AbsoluteUrl;
            browser.GoHome();
            browser.Title       = title;
            browser.IsVisible   = true;
            GridLogin.IsVisible = false;
            SLContent.Children.Add(browser);
        }
Exemplo n.º 5
0
        public async void LoginCallback(string callbackUrl)
        {
            try
            {
                BtnLogin.IsEnabled       = false;
                BtnLogin.BackgroundColor = Color.LightGray;
            }
            catch (Exception ex) {
            }

            while (_loginCallbackProcess)
            {
                await Task.Delay(200);
            }

            (App.Current.MainPage as ContainerPage)?.ShowActivityIndicator();

            _loginCallbackProcess = true;
            try
            {
                if (string.IsNullOrWhiteSpace(callbackUrl) || _authTokenReceived)
                {
                    return;
                }

                var res = await PGService.GetNewAuthToken(callbackUrl);

                if (res.Item1)
                {
                    _authTokenReceived               = true;
                    Core.Settings.AuthToken          = res.Item2;
                    Core.Settings.AuthTokenExpiredAt = res.Item3;
                    var ssoData = await PGService.GetSSOData();

                    if (ssoData == null)
                    {
                        LoginFailed();
                        return;
                    }
                    Core.Settings.SsoData = ssoData;
                    LoginFinish();
                }
                else
                {
                    LoginFailed();
                }
            }
            finally
            {
                _loginCallbackProcess = false;
            }
        }
            public override bool ShouldOverrideUrlLoading(WebView view, string url)
            {
                if (Renderer.WebViewer.BrowserType == BrowserType.NewLogin)
                {
                    Renderer?.LoginUrls.Add(url);
                    if (url.Contains("callback?code"))
                    {
                        //Renderer?.SaveHpIdCookie();
                        return(true);
                    }
                }


                _url = url.ToString();
                if (string.IsNullOrEmpty(_url) ||
                    //_url.Contains("about:blank") ||
                    _url.StartsWith("tel:", StringComparison.OrdinalIgnoreCase))
                {
                    return(true);
                }
                //Debug.WriteLine("ShouldStartLoad Pre: " + _url);
                var urlData = UrlParser.Parse(_url);



                if (urlData.AbsoluteUrl.ToLower().Contains(".pdf") || urlData.AbsoluteUrl.ToLower().Contains(".ics"))
                {
                    if (PGService.CheckConnection(true))
                    {
                        //MainActivity.Instance.GetWritePermission();
                        Renderer?.DocLinkRequested(urlData.AbsoluteUrl);
                    }
                    return(true);
                }
                else if (urlData.AbsoluteUrl.ToLower().Contains(".mp4"))
                {
                    if (PGService.CheckConnection(true))
                    {
                        Intent intent = new Intent(Intent.ActionView);
                        intent.SetDataAndType(Android.Net.Uri.Parse(url), "video/*");
                        view.Context.StartActivity(intent);
                    }
                    return(true);
                }

                _url = urlData.AbsoluteUrl;

                var webViewer = Renderer?.WebViewer;

                if (webViewer == null)
                {
                    return(false);
                }

                if (!urlData.Url.Contains(PGService.ApiServerUrl) &&
                    !webViewer.IsExternal && (webViewer.BrowserType == BrowserType.Standard || webViewer.BrowserType == BrowserType.Cached))
                {
                    if (PGService.CheckConnection(true) && webViewer.ParentPage != null)
                    {
                        Renderer?.ExternalLinkRequested(urlData.AbsoluteUrl);
                    }
                    view.EvaluateJavascript(JS_STOP_PROGRESS, null);
                    return(true);
                }

                System.Diagnostics.Debug.WriteLine("ShouldStartLoad: " + _url);
                if (webViewer.BrowserType != BrowserType.Login)
                {
                    webViewer.Uri = _url;
                }
                return(false);
            }
        public async void LoadUrl(bool fullRefresh = false, bool needCheckEtag = true)
        {
            if (Native == null || WebViewer == null)
            {
                return;
            }

            try
            {
                if (WebViewer.BrowserType == BrowserType.NewLogin)
                {
                    if (WebViewer.Uri == null)
                    {
                        return;
                    }
                    Native.LoadUrl(WebViewer.Uri);
                    return;
                }

                if (needCheckEtag)
                {
                    if (!fullRefresh && WebViewer.BrowserType != BrowserType.Background)
                    {
                        ShowLoadingOverlay();
                        //  fullRefresh = await PGService.IsWebPageContentChanged(WebViewer?.Uri);
                    }
                }

                string baseUrl = string.Empty, query = string.Empty;
                if (WebViewer == null)
                {
                    return;
                }
                if (WebViewer.BrowserType == BrowserType.Standard || WebViewer.BrowserType == BrowserType.Cached || WebViewer.BrowserType == BrowserType.Background)
                {
                    var urldata = UrlParser.Parse(WebViewer.Uri);
                    if (string.IsNullOrEmpty(homeUrl))
                    {
                        homeUrl = urldata.AbsoluteUrl;
                    }

                    /*  Native.Settings.CacheMode = HPHService.CheckConnection() ?
                     *    fullRefresh || (urldata?.Params != null && urldata.Params.ContainsKey("RefreshOnReturn")) ?
                     *        CacheModes.NoCache :
                     *        CacheModes.Normal :
                     *    CacheModes.CacheOnly;*/

                    Native.Settings.CacheMode = PGService.CheckConnection() && (fullRefresh || (urldata?.Params != null && urldata.Params.ContainsKey("RefreshOnReturn")))
                        ? CacheModes.Normal
                        : CacheModes.CacheElseNetwork;
                    var check = Native.Settings.CacheMode;
                    if (string.IsNullOrEmpty(urldata.AbsoluteUrl))
                    {
                        return;
                    }

                    if (urldata.AbsoluteUrl.StartsWith(PGService.ApiServerUrl, StringComparison.InvariantCultureIgnoreCase))
                    {
                        if (!string.IsNullOrEmpty(Core.Settings.AuthToken))
                        {
                            var headers = new Dictionary <string, string>
                            {
                                { "Authorization", "Bearer " + Core.Settings.AuthToken }
                            };
                            Native.LoadUrl(urldata.AbsoluteUrl, headers);
                        }
                        else
                        {
                            var loc = new Localize();
                            urldata.AddParam("CountryCode", loc.GetCurrentCountry());
                            urldata.AddParam("Language", loc.GetCurrentLanguage());
                            Native.LoadUrl(urldata.AbsoluteUrl);
                        }
                    }
                    else
                    {
                        /*if (urldata.Url.Contains("id.hp.com"))
                         *  SetHpIdCookie(urldata.Url);*/
                        Native.LoadUrl(urldata.AbsoluteUrl);
                    }
                }

                else if (WebViewer.BrowserType == BrowserType.Login || WebViewer.BrowserType == BrowserType.ErrorLog)
                {
                    CanExecuteJScript = true;
                    switch (WebViewer.BrowserType)
                    {
                    case BrowserType.Login:
                        Native.LoadUrl(WebViewer.Uri);
                        break;

                    case BrowserType.ErrorLog:
                        Native.LoadUrl(ErrorLogUrl);
                        break;
                    }
                }
            }
            catch { }
        }