Пример #1
0
        public async Task explicit_refresh_token()
        {
            var p     = TestHelper.StObjMap.Default.Obtain <Package>();
            var userG = TestHelper.StObjMap.Default.Obtain <UserGoogleTable>();

            // This is the PrimarySchool Google application.
            p.ClientId     = "368841447214-b0hhtth684efi54lfjhs03uk4an28dd9.apps.googleusercontent.com";
            p.ClientSecret = "GiApMZBp3RTxdNzsHbhAQKSG";
            string googleAccountId = "112981383157638924429";
            var    user            = TestHelper.StObjMap.Default.Obtain <UserTable>();

            using (var ctx = new SqlStandardCallContext(TestHelper.Monitor))
            {
                KnownUserGoogleInfo exists = await userG.FindUserInfoAsync(ctx, googleAccountId);

                IUserGoogleInfo info = exists?.Info;
                if (info == null)
                {
                    var userName = Guid.NewGuid().ToString();
                    int userId   = await user.CreateUserAsync(ctx, 1, userName);

                    info = p.UserGoogleTable.CreateUserInfo <IUserGoogleInfo>();
                    info.GoogleAccountId = googleAccountId;
                    info.RefreshToken    = "1/t63rMARi7a9qQWIYEcKPVIrfnNJU51K2TpNB3hjrEjI";
                    await p.UserGoogleTable.CreateOrUpdateGoogleUserAsync(ctx, 1, userId, info);
                }
                info.AccessToken = null;
                Assert.That(await p.RefreshAccessTokenAsync(ctx, info));
                Assert.That(info.AccessToken, Is.Not.Null);
                Assert.That(info.AccessTokenExpirationTime, Is.GreaterThan(DateTime.UtcNow));
                Assert.That(info.AccessTokenExpirationTime, Is.LessThan(DateTime.UtcNow.AddDays(1)));
                Assert.That(await p.RefreshAccessTokenAsync(ctx, info));
            }
        }
Пример #2
0
        public async Task setting_default_scopes_impact_new_users()
        {
            var user    = TestHelper.StObjMap.Default.Obtain <UserTable>();
            var p       = TestHelper.StObjMap.Default.Obtain <Package>();
            var factory = TestHelper.StObjMap.Default.Obtain <IPocoFactory <IUserGoogleInfo> >();

            using (var ctx = new SqlStandardCallContext())
            {
                AuthScopeSet original = await p.ReadDefaultScopeSetAsync(ctx);

                Assert.That(!original.Contains("nimp") && !original.Contains("thing") && !original.Contains("other"));

                {
                    int id = await user.CreateUserAsync(ctx, 1, Guid.NewGuid().ToString());

                    IUserGoogleInfo userInfo = factory.Create();
                    userInfo.GoogleAccountId = Guid.NewGuid().ToString();
                    await p.UserGoogleTable.CreateOrUpdateGoogleUserAsync(ctx, 1, id, userInfo);

                    KnownUserGoogleInfo info = await p.UserGoogleTable.FindUserInfoAsync(ctx, userInfo.GoogleAccountId);

                    AuthScopeSet userSet = await p.ReadScopeSetAsync(ctx, info.UserId);

                    Assert.That(userSet.ToString(), Is.EqualTo(original.ToString()));
                }
                AuthScopeSet replaced = original.Clone();
                replaced.Add(new AuthScopeItem("nimp"));
                replaced.Add(new AuthScopeItem("thing", ScopeWARStatus.Rejected));
                replaced.Add(new AuthScopeItem("other", ScopeWARStatus.Accepted));
                await p.AuthScopeSetTable.SetScopesAsync(ctx, 1, replaced);

                var readback = await p.ReadDefaultScopeSetAsync(ctx);

                Assert.That(readback.ToString(), Is.EqualTo(replaced.ToString()));
                // Default scopes have non W status!
                // This must not impact new users: their satus must always be be W.
                Assert.That(readback.ToString(), Does.Contain("[R]thing"));
                Assert.That(readback.ToString(), Does.Contain("[A]other"));

                {
                    int id = await user.CreateUserAsync(ctx, 1, Guid.NewGuid().ToString());

                    IUserGoogleInfo userInfo = p.UserGoogleTable.CreateUserInfo <IUserGoogleInfo>();
                    userInfo.GoogleAccountId = Guid.NewGuid().ToString();
                    await p.UserGoogleTable.CreateOrUpdateGoogleUserAsync(ctx, 1, id, userInfo, CreateOrUpdateMode.CreateOnly | CreateOrUpdateMode.UpdateOnly);

                    userInfo = (IUserGoogleInfo)(await p.UserGoogleTable.FindUserInfoAsync(ctx, userInfo.GoogleAccountId)).Info;
                    AuthScopeSet userSet = await p.ReadScopeSetAsync(ctx, id);

                    Assert.That(userSet.ToString(), Does.Contain("[W]thing"));
                    Assert.That(userSet.ToString(), Does.Contain("[W]other"));
                    Assert.That(userSet.ToString(), Does.Contain("[W]nimp"));
                }
                await p.AuthScopeSetTable.SetScopesAsync(ctx, 1, original);
            }
        }