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)); } }
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); } }