protected override void OnNavigatedTo(NavigationEventArgs e) { string authmode = ""; string appsecret = ""; string email = ""; string validationmode = ""; AuthValidationMode authValidationMode = AuthValidationMode.Graceful; if (NavigationContext.QueryString.TryGetValue("authmode", out authmode)) { this.VM.AuthMode = (AuthenticationMode)Enum.Parse(typeof(AuthenticationMode), authmode); } if (NavigationContext.QueryString.TryGetValue("appsecret", out appsecret)) { this.VM.AppSecret = appsecret; } if (NavigationContext.QueryString.TryGetValue("email", out email)) { this.VM.Email = email; } if (NavigationContext.QueryString.TryGetValue("validationmode", out validationmode)) { authValidationMode = (AuthValidationMode)Enum.Parse(typeof(AuthValidationMode), validationmode); } base.OnNavigatedTo(e); CheckForExistingLoginAsync(authValidationMode, this.VM.AuthMode); }
protected void ShowLoginScreen(AuthenticationMode authMode, string appSecret, string email, AuthValidationMode authValidationMode) { dynamic parms = new DynamicNavigationParameters(); parms.authmode = authMode; parms.appsecret = appSecret; parms.email = email; parms.validationmode = authValidationMode; this.Frame.Navigate(typeof(LoginPage), parms); }
internal async void OnOpened(AuthenticationMode authmode, AuthValidationMode validationMode) { VM.IsBusy = true; if (await AuthManager.Current.CheckAndHandleExistingTokenAsync(authmode, validationMode)) { this.CloseRequested(this, EventArgs.Empty); } VM.IsBusy = false; }
protected async void CheckForExistingLoginAsync(AuthValidationMode authValidationMode, AuthenticationMode authMode) { string serializedAuthStatus = AuthManager.Instance.RetrieveProtectedString(Constants.AuthStatusKey); if (!String.IsNullOrEmpty(serializedAuthStatus)) { var aS = AuthStatus.DeserializeFromString(serializedAuthStatus); //consider that a change in Authmode is possible between versions of an app, so check if the saved token may be trusted if (AuthenticationMode.Authorize.Equals(authMode) && !aS.IsAuthorized || AuthenticationMode.Identify.Equals(authMode) && aS.IsAuthorized) { return; } if (NetworkInterface.GetIsNetworkAvailable()) { this.VM.IsShowOverlay = true; try { SystemTray.ProgressIndicator.IsVisible = true; if (await aS.CheckIfStillValidAsync()) { AuthManager.Instance.CurrentAuthStatus = aS; NavigationService.Navigate(AuthManager.Instance.SuccessRedirect); } else { Dispatcher.BeginInvoke(() => { MessageBox.Show(LocalizedStrings.LocalizedResources.AuthNoMemberError); }); } } catch (WebTransferException) { if (AuthValidationMode.Graceful.Equals(authValidationMode)) { NavigationService.Navigate(AuthManager.Instance.SuccessRedirect); } else { Dispatcher.BeginInvoke(() => { MessageBox.Show(LocalizedStrings.LocalizedResources.AuthNetworkError); }); } } finally { SystemTray.ProgressIndicator.IsVisible = false; this.VM.IsShowOverlay = false; } } else { if (AuthValidationMode.Graceful.Equals(authValidationMode)) { NavigationService.Navigate(AuthManager.Instance.SuccessRedirect); } Dispatcher.BeginInvoke(() => { MessageBox.Show(LocalizedStrings.LocalizedResources.AuthNetworkError); }); } } }
/// <summary> /// Identify user with hockeaypp auth. Opening a login page to require valid email address for app if needed /// </summary> /// <param name="this"></param> /// <param name="appSecret">Your app's app secret (see HockeyApp app page)</param> /// <param name="successRedirect">Page-URI to redirect to after successful login</param> /// <param name="navigationService">[optional] obsolete - not needed</param> /// <param name="eMail">[Optional] initial email</param> /// <param name="tokenValidationPolicy"><see cref="TokenValidationPolicy"/></param> /// <param name="authValidationMode"><see cref="AuthValidationMode"/></param> public static void IdentifyUser(this IHockeyClient @this, string appSecret, Uri successRedirect, NavigationService navigationService = null, string eMail = null, TokenValidationPolicy tokenValidationPolicy = TokenValidationPolicy.EveryLogin, AuthValidationMode authValidationMode = AuthValidationMode.Graceful) { @this.AsInternal().CheckForInitialization(); AuthManager.Instance.AuthenticateUser(successRedirect, AuthenticationMode.Identify, tokenValidationPolicy, authValidationMode, eMail, appSecret); }
/// <summary> /// Inititate user identification and define a action to perform when authorization is successfull /// </summary> /// <param name="this">The this.</param> /// <param name="appSecret">The application secret from HockeyApp.</param> /// <param name="successAction">Action to perform when login is successfull</param> /// <param name="eMail">[Optional] E-Mail adress to prefill form</param> /// <param name="tokenValidationPolicy">[Optional] Default is EveryLogin</param> /// <param name="authValidationMode">[Optional] Default is Graceful</param> public static void IdentifyUser(this IHockeyClient @this, string appSecret, Action successAction, string eMail = null, TokenValidationPolicy tokenValidationPolicy = TokenValidationPolicy.EveryLogin, AuthValidationMode authValidationMode = AuthValidationMode.Graceful) { @this.AsInternal().CheckForInitialization(); var authMan = AuthManager.Current; authMan.SuccessAction = successAction; authMan.AuthenticateUser(AuthenticationMode.Identify, tokenValidationPolicy, authValidationMode, eMail, appSecret); }
/// <summary> /// Inititate user authorization and define a page navigate to when authorization is successfull /// </summary> /// <param name="this"></param> /// <param name="pageTypeForSuccessRedirect">Pagetype to navigate when login is successfull</param> /// <param name="eMail">[Optional] E-Mail adress to prefill form</param> /// <param name="tokenValidationPolicy">[Optional] Default is EveryLogin</param> /// <param name="authValidationMode">[Optional] Default is Graceful</param> public static void AuthorizeUser(this IHockeyClient @this, Type pageTypeForSuccessRedirect, string eMail = null, TokenValidationPolicy tokenValidationPolicy = TokenValidationPolicy.EveryLogin, AuthValidationMode authValidationMode = AuthValidationMode.Graceful) { @this.AsInternal().CheckForInitialization(); var authMan = AuthManager.Current; authMan.SuccessRedirectPageType = pageTypeForSuccessRedirect; AuthManager.Current.AuthenticateUser(AuthenticationMode.Authorize, tokenValidationPolicy, authValidationMode, eMail, null); }
protected void ShowLoginScreen(AuthenticationMode authMode, string appSecret, string email, AuthValidationMode authValidationMode) { var vm = new LoginVM(); vm.AuthMode = authMode; vm.Email = email; vm.AppSecret = appSecret; var dialog = new LoginDialog(); dialog.DataContext = vm; dialog.CloseRequested += Dialog_CloseRequested; authPopup = new Popup(); authPopup.Child = dialog; authPopup.IsOpen = true; dialog.OnOpened(authMode, authValidationMode); }
protected override async void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); dynamic pars = e.Parameter as DynamicNavigationParameters ?? new DynamicNavigationParameters(); this.VM.AuthMode = (AuthenticationMode?)pars.authmode ?? AuthenticationMode.Authorize; this.VM.AppSecret = (String)pars.appsecret ?? ""; this.VM.Email = (String)pars.email ?? ""; AuthValidationMode authValidationMode = (AuthValidationMode?)pars.validationmode ?? AuthValidationMode.Graceful; this.VM.IsBusy = true; await AuthManager.Current.CheckAndHandleExistingTokenAsync(this.VM.AuthMode, authValidationMode); this.VM.IsBusy = false; }
internal void AuthenticateUser(AuthenticationMode authMode = AuthenticationMode.Authorize, TokenValidationPolicy tokenValidationPolicy = TokenValidationPolicy.EveryLogin, AuthValidationMode authValidationMode = AuthValidationMode.Graceful, string email = null, string appSecret = null) { if (AuthenticationMode.Identify.Equals(authMode) && String.IsNullOrEmpty(appSecret)) { throw new Exception("Internal error: AppSecret must be provided when Identify function is used"); //ResourceManager.Current.MainResourceMap } bool needsLogin = TokenValidationPolicy.EveryLogin.Equals(tokenValidationPolicy); if(!needsLogin && TokenValidationPolicy.OnNewVersion.Equals(tokenValidationPolicy)) { string lastAuthorizedVersion = HockeyClient.Current.AsInternal().PlatformHelper.GetSettingValue(ConstantsUniversal.AuthLastAuthorizedVersionKey); needsLogin = (lastAuthorizedVersion == null) || (new Version(lastAuthorizedVersion) < new Version(HockeyClient.Current.AsInternal().VersionInfo)); } if (needsLogin) { this.ShowLoginScreen(authMode, appSecret, email, authValidationMode); } else { this.ExecuteSuccessRedirectOrAction(); } }
internal void AuthenticateUser(Uri successRedirect, AuthenticationMode authMode = AuthenticationMode.Authorize, TokenValidationPolicy tokenValidationPolicy = TokenValidationPolicy.EveryLogin, AuthValidationMode authValidationMode = AuthValidationMode.Graceful, string email = null, string appSecret = null) { if (AuthenticationMode.Identify.Equals(authMode) && String.IsNullOrEmpty(appSecret)) { throw new ApplicationException(LocalizedStrings.LocalizedResources.Authentication_AppSecretMissing); } this.SuccessRedirect = successRedirect; bool needsLogin = TokenValidationPolicy.EveryLogin.Equals(tokenValidationPolicy); if (!needsLogin && TokenValidationPolicy.OnNewVersion.Equals(tokenValidationPolicy)) { string lastAuthorizedVersion = IsolatedStorageSettings.ApplicationSettings.GetValue(Constants.AuthLastAuthorizedVersionKey) as String; needsLogin = (lastAuthorizedVersion == null) || (new Version(lastAuthorizedVersion) < new Version(ManifestHelper.GetAppVersion())); } if (needsLogin) { ((PhoneApplicationFrame)Application.Current.RootVisual).Navigate(new Uri("/HockeyApp;component/Views/LoginPage.xaml?authmode=" + HttpUtility.UrlEncode(authMode.ToString()) + "&appsecret=" + HttpUtility.UrlEncode(appSecret) + "&email=" + HttpUtility.UrlEncode(email ?? "") + "&validationmode=" + HttpUtility.UrlEncode(authValidationMode.ToString() ?? ""), UriKind.Relative)); } else { ((PhoneApplicationFrame)Application.Current.RootVisual).Navigate(successRedirect); } }
//; internal async Task<bool> CheckAndHandleExistingTokenAsync(AuthenticationMode authMode, AuthValidationMode validationMode) { string serializedAuthStatus = await RetrieveProtectedStringAsync(ConstantsUniversal.AuthStatusKey); if (!String.IsNullOrEmpty(serializedAuthStatus)) { var aS = AuthStatus.DeserializeFromString(serializedAuthStatus); //consider that a change in Authmode is possible between versions of an app, so check if the saved token may be trusted if (AuthenticationMode.Authorize.Equals(authMode) && !aS.IsAuthorized || AuthenticationMode.Identify.Equals(authMode) && aS.IsAuthorized) { return false; } else if (NetworkInterface.GetIsNetworkAvailable()) { Exception error = null; try { if (await aS.CheckIfStillValidAsync()) { _authStatus = aS; ExecuteSuccessRedirectOrAction(); return true; } } catch (WebTransferException e) { HockeyClient.Current.AsInternal().HandleInternalUnhandledException(e); error = e; } if (error != null) { if (AuthValidationMode.Graceful.Equals(validationMode)) { _authStatus = aS; ExecuteSuccessRedirectOrAction(); return true; } else { await CoreWindow.GetForCurrentThread().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => { await new MessageDialog(LocalizedStrings.LocalizedResources.AuthNetworkError).ShowAsync(); }); } } } else { if (AuthValidationMode.Graceful.Equals(validationMode)) { ExecuteSuccessRedirectOrAction(); return true; } else { await CoreWindow.GetForCurrentThread().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => { await new MessageDialog(LocalizedStrings.LocalizedResources.AuthNetworkError).ShowAsync(); }); } } } return false; }
//; internal async Task <bool> CheckAndHandleExistingTokenAsync(AuthenticationMode authMode, AuthValidationMode validationMode) { string serializedAuthStatus = await RetrieveProtectedStringAsync(ConstantsUniversal.AuthStatusKey); if (!String.IsNullOrEmpty(serializedAuthStatus)) { var aS = AuthStatus.DeserializeFromString(serializedAuthStatus); //consider that a change in Authmode is possible between versions of an app, so check if the saved token may be trusted if (AuthenticationMode.Authorize.Equals(authMode) && !aS.IsAuthorized || AuthenticationMode.Identify.Equals(authMode) && aS.IsAuthorized) { return(false); } else if (NetworkInterface.GetIsNetworkAvailable()) { Exception error = null; try { if (await aS.CheckIfStillValidAsync()) { _authStatus = aS; ExecuteSuccessRedirectOrAction(); return(true); } } catch (WebTransferException e) { HockeyClient.Current.AsInternal().HandleInternalUnhandledException(e); error = e; } if (error != null) { if (AuthValidationMode.Graceful.Equals(validationMode)) { _authStatus = aS; ExecuteSuccessRedirectOrAction(); return(true); } else { await CoreWindow.GetForCurrentThread().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { await new MessageDialog(LocalizedStrings.LocalizedResources.AuthNetworkError).ShowAsync(); }); } } } else { if (AuthValidationMode.Graceful.Equals(validationMode)) { ExecuteSuccessRedirectOrAction(); return(true); } else { await CoreWindow.GetForCurrentThread().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { await new MessageDialog(LocalizedStrings.LocalizedResources.AuthNetworkError).ShowAsync(); }); } } } return(false); }
internal void AuthenticateUser(AuthenticationMode authMode = AuthenticationMode.Authorize, TokenValidationPolicy tokenValidationPolicy = TokenValidationPolicy.EveryLogin, AuthValidationMode authValidationMode = AuthValidationMode.Graceful, string email = null, string appSecret = null) { if (AuthenticationMode.Identify.Equals(authMode) && String.IsNullOrEmpty(appSecret)) { throw new Exception("Internal error: AppSecret must be provided when Identify function is used"); //ResourceManager.Current.MainResourceMap } bool needsLogin = TokenValidationPolicy.EveryLogin.Equals(tokenValidationPolicy); if (!needsLogin && TokenValidationPolicy.OnNewVersion.Equals(tokenValidationPolicy)) { string lastAuthorizedVersion = HockeyClient.Current.AsInternal().PlatformHelper.GetSettingValue(ConstantsUniversal.AuthLastAuthorizedVersionKey); needsLogin = (lastAuthorizedVersion == null) || (new Version(lastAuthorizedVersion) < new Version(HockeyClient.Current.AsInternal().VersionInfo)); } if (needsLogin) { this.ShowLoginScreen(authMode, appSecret, email, authValidationMode); } else { this.ExecuteSuccessRedirectOrAction(); } }