Beispiel #1
0
        public App()
        {
            StringResources.Culture = DependencyService.Get <ILocale>().GetLanguage();

            AuthState              = new AuthState();
            AuthState.UpdateHooks += SaveAuthState;

            var browser = DependencyService.Get <IBrowserEx>(DependencyFetchTarget.NewInstance);

            browser.CustomUrlScheme = CUSTOM_URL_SCHEME;
            browser.RedirectUri     = REDIRECT_URI;

            // Setup for demonstration. (next 2 lines)
            browser.BeforeAuthzRequestHooks += LogPage.AuthzRequestLogger;
            browser.AfterAuthzResponseHooks += LogPage.AuthzResponseLogger;

            var options = new OidcClientOptions {
                Authority = ISSUER_URI,
#if __ANDROID__
                ClientId = CLIENT_ID_ANDROID,
#elif __IOS__
                ClientId = CLIENT_ID_IOS,
#endif
                Scope        = SCOPE,
                RedirectUri  = REDIRECT_URI,
                ResponseMode = OidcClientOptions.AuthorizeResponseMode.Redirect,
                RefreshDiscoveryDocumentForLogin = false,
                Browser = browser
            };

            // Google Accounts has endpoints provided from www.googleapis.com in addition to accounts.google.com.
            options.Policy.Discovery.AdditionalEndpointBaseAddresses = new[] { "https://www.googleapis.com" };

            // Setup for demonstration. (next 4 lines)
            var handler = new HttpClientHandlerEx();

            handler.BeforeRequestAsyncHooks += LogPage.HttpRequestLoggerAsync;
            handler.AfterResponseAsyncHooks += LogPage.HttpResponseLoggerAsync;
            options.BackchannelHandler       = handler;

            // Setup for debugging. (next 5 lines)
            var serilog = new LoggerConfiguration()
                          .MinimumLevel.Verbose()
                          .WriteTo.Debug()
                          .CreateLogger();

            options.LoggerFactory.AddSerilog(serilog);

            var client = new OidcClient(options);

            AuthState.Update(client);

            var file = IsolatedStorageFile.GetUserStoreForApplication();

            try {
                using (var stream = file.OpenFile(PREFERENCE_FILE_NAME, FileMode.Open)) {
                    using (var reader = new StreamReader(stream)) {
                        var crypto = DependencyService.Get <ICrypto>();
                        AuthState.LoadFromJson(crypto.DecryptString(reader.ReadToEnd()));
                    }
                }
            } catch (FileNotFoundException) { }

            InitializeComponent();
            MainPage = new MasterDetail();
        }