use of jetbrains.buildServer.users.SUser in project teamcity-rest by JetBrains.
the class UserRequestTest method testUserEnityExposure.
@Test
void testUserEnityExposure() throws Throwable {
myFixture.getServerSettings().setPerProjectPermissionsEnabled(true);
final SUser user1 = createUser("user1");
final SUser user2 = createUser("user2");
// filling all user fields
user1.updateUserAccount("user1", "Display Name1", "email1@domain.com");
user2.updateUserAccount("user2", "Display Name2", "email2@domain.com");
SUserGroup group1 = myFixture.createUserGroup("key1", "name1", "description");
group1.addUser(user1);
group1.addUser(user2);
user1.addRole(RoleScope.globalScope(), getProjectViewerRole());
user2.addRole(RoleScope.globalScope(), getProjectViewerRole());
user1.setLastLoginTimestamp(new Date());
user2.setLastLoginTimestamp(new Date());
user1.setPassword("secret");
user2.setPassword("secret");
myFixture.getUserAvatarsManager().saveAvatar(user1, new BufferedImage(1, 1, 1));
myFixture.getUserAvatarsManager().saveAvatar(user2, new BufferedImage(1, 1, 1));
enable2FA(user1);
enable2FA(user2);
SecurityContextImpl securityContext = myFixture.getSecurityContext();
user2.addRole(RoleScope.globalScope(), getProjectAdminRole());
SFinishedBuild build10 = build().in(myBuildType).by(user1).finish();
SFinishedBuild build20 = build().in(myBuildType).by(user2).finish();
BuildRequest buildRequest = new BuildRequest();
buildRequest.initForTests(BaseFinderTest.getBeanContext(myFixture));
// if changed, the checks below should be changed
assertEquals(15, getSubEntitiesNames(User.class).size());
final String fields = "triggered(user($long,hasPassword))";
{
Build build = buildRequest.serveBuild("id:" + build10.getBuildId(), fields, new FakeHttpServletRequest());
// check that all is present
User user = build.getTriggered().user;
assertNotNull(user.getUsername());
assertNotNull(user.getName());
assertNotNull(user.getId());
assertNotNull(user.getEmail());
assertNotNull(user.getLastLogin());
assertNotNull(user.getHref());
assertNotNull(user.getProperties());
assertNotNull(user.getRoles());
assertNotNull(user.getGroups());
assertNotNull(user.getHasPassword());
assertNotNull(user.getAvatars());
assertNotNull(user.getEnabled2FA());
// not included in response
assertNull(user.getPassword());
// submit-only
assertNull(user.getLocator());
// obsolete
assertNull(user.getRealm());
}
{
Build build = buildRequest.serveBuild("id:" + build20.getBuildId(), fields, new FakeHttpServletRequest());
// check that all is present
User user = build.getTriggered().user;
assertNotNull(user.getUsername());
assertNotNull(user.getName());
assertNotNull(user.getId());
assertNotNull(user.getEmail());
assertNotNull(user.getLastLogin());
assertNotNull(user.getHref());
assertNotNull(user.getProperties());
assertNotNull(user.getRoles());
assertNotNull(user.getGroups());
assertNotNull(user.getHasPassword());
assertNotNull(user.getAvatars());
assertNotNull(user.getEnabled2FA());
// not included in response
assertNull(user.getPassword());
// submit-only
assertNull(user.getLocator());
// obsolete
assertNull(user.getRealm());
}
securityContext.runAs(user1, () -> {
Build build = buildRequest.serveBuild("id:" + build10.getBuildId(), fields, new FakeHttpServletRequest());
// check that all is present
User user = build.getTriggered().user;
assertNotNull(user.getUsername());
assertNotNull(user.getName());
assertNotNull(user.getId());
assertNotNull(user.getEmail());
assertNotNull(user.getLastLogin());
assertNotNull(user.getHref());
assertNotNull(user.getProperties());
assertNotNull(user.getRoles());
assertNotNull(user.getGroups());
assertNotNull(user.getHasPassword());
assertNotNull(user.getAvatars());
assertNotNull(user.getEnabled2FA());
assertNull(user.getPassword());
});
securityContext.runAs(user2, () -> {
Build build = buildRequest.serveBuild("id:" + build10.getBuildId(), fields, new FakeHttpServletRequest());
// check that all is present
User user = build.getTriggered().user;
assertNotNull(user.getUsername());
assertNotNull(user.getName());
assertNotNull(user.getId());
assertNotNull(user.getEmail());
assertNotNull(user.getLastLogin());
assertNotNull(user.getHref());
assertNotNull(user.getProperties());
assertNotNull(user.getRoles());
assertNotNull(user.getGroups());
assertNotNull(user.getHasPassword());
assertNotNull(user.getAvatars());
assertNotNull(user.getEnabled2FA());
assertNull(user.getPassword());
});
securityContext.runAs(user1, () -> {
Build build = buildRequest.serveBuild("id:" + build20.getBuildId(), fields, new FakeHttpServletRequest());
// check that all is present
User user = build.getTriggered().user;
assertNotNull(user.getUsername());
assertNotNull(user.getName());
assertNotNull(user.getId());
assertNull(user.getEmail());
assertNull(user.getLastLogin());
assertNotNull(user.getHref());
assertNull(user.getProperties());
assertNull(user.getRoles());
assertNull(user.getGroups());
assertNull(user.getHasPassword());
assertNull(user.getPassword());
assertNotNull(user.getAvatars());
assertNull(user.getEnabled2FA());
});
}
use of jetbrains.buildServer.users.SUser in project teamcity-rest by JetBrains.
the class UserRequestTest method testBasic1.
@Test
void testBasic1() throws Throwable {
myFixture.getServerSettings().setPerProjectPermissionsEnabled(true);
final SUser user1 = createUser("user1");
final SUser user2 = createUser("user2");
SecurityContextImpl securityContext = myFixture.getSecurityContext();
user2.addRole(RoleScope.globalScope(), getProjectAdminRole());
securityContext.runAs(user2, new SecurityContextEx.RunAsAction() {
@Override
public void run() throws Throwable {
assertNotNull(myRequest.serveUser("username:user1", Fields.LONG.getFieldsSpec()));
assertNotNull(myRequest.serveUsers(null, Fields.LONG.getFieldsSpec()));
assertEquals(1, myRequest.getGroups("username:user1", Fields.LONG.getFieldsSpec()).groups.size());
assertNotNull(myRequest.serveUserProperties("username:user1", Fields.LONG.getFieldsSpec()));
}
});
securityContext.runAs(user1, new SecurityContextEx.RunAsAction() {
@Override
public void run() throws Throwable {
assertNotNull(myRequest.serveUser("username:user1", Fields.LONG.getFieldsSpec()));
assertEquals(1, myRequest.getGroups("username:user1", Fields.LONG.getFieldsSpec()).groups.size());
assertNotNull(myRequest.serveUserProperties("username:user1", Fields.LONG.getFieldsSpec()));
}
});
securityContext.runAs(user1, new SecurityContextEx.RunAsAction() {
@Override
public void run() throws Throwable {
checkException(AuthorizationFailedException.class, new Runnable() {
@Override
public void run() {
myRequest.serveUser("username:user2", Fields.LONG.getFieldsSpec());
}
}, null);
}
});
securityContext.runAs(user1, new SecurityContextEx.RunAsAction() {
@Override
public void run() throws Throwable {
checkException(AuthorizationFailedException.class, new Runnable() {
@Override
public void run() {
myRequest.getGroups("username:user2", Fields.LONG.getFieldsSpec());
}
}, null);
}
});
securityContext.runAs(user1, new SecurityContextEx.RunAsAction() {
@Override
public void run() throws Throwable {
checkException(AuthorizationFailedException.class, new Runnable() {
@Override
public void run() {
myRequest.serveUserProperties("username:user2", Fields.LONG.getFieldsSpec());
}
}, null);
}
});
securityContext.runAs(user1, new SecurityContextEx.RunAsAction() {
@Override
public void run() throws Throwable {
checkException(AuthorizationFailedException.class, new Runnable() {
@Override
public void run() {
myRequest.serveUsers(null, Fields.LONG.getFieldsSpec());
}
}, null);
}
});
}
use of jetbrains.buildServer.users.SUser in project teamcity-rest by JetBrains.
the class MuteRequestTest method test_unmuteBuildType.
@Test
public void test_unmuteBuildType() {
final ProjectEx project = createProject("Project", "Project");
final BuildTypeEx bt1 = project.createBuildType("bt1");
final BuildTypeEx bt2 = project.createBuildType("bt2");
// just a child project
final ProjectEx projectChild = project.createProject("Project2", "Project2");
final BuildTypeEx bt21 = projectChild.createBuildType("bt21");
createBuild(bt1, new String[0], new String[] { "test1", "test2", "test3" });
createBuild(bt2, new String[0], new String[] { "test1", "test2", "test3", "test4" });
createBuild(bt21, new String[0], new String[] { "test1", "test2", "test3", "test4" });
final STest test1 = myFixture.getTestManager().createTest(new TestName("test1"), project.getProjectId());
final STest test2 = myFixture.getTestManager().createTest(new TestName("test2"), project.getProjectId());
SUser user = createUser("user");
{
Mutes mutes = myRequest.getMutes(null, null, null, null);
// assertEquals(Integer.valueOf(0), mutes.count); //todo: fix
assertEmpty(mutes.items);
}
myMutingService.muteTestsInBuildTypes(user, null, false, null, Arrays.asList(bt1, bt2), Arrays.asList(test1, test2), false);
{
Mutes mutes = myRequest.getMutes(null, null, null, null);
assertEquals(Integer.valueOf(1), mutes.count);
assertEquals(1, mutes.items.size());
assertNull(mutes.items.get(0).scope.project);
assertNotNull(mutes.items.get(0).scope.buildTypes);
assertEquals(2, mutes.items.get(0).scope.buildTypes.buildTypes.size());
assertTrue(mutes.items.get(0).scope.buildTypes.buildTypes.stream().anyMatch(buildType -> bt1.getExternalId().equals(buildType.getId())));
assertTrue(mutes.items.get(0).scope.buildTypes.buildTypes.stream().anyMatch(buildType -> bt2.getExternalId().equals(buildType.getId())));
assertNull(mutes.items.get(0).target.problems);
assertEquals(2, mutes.items.get(0).target.tests.items.size());
assertTrue(mutes.items.get(0).target.tests.items.stream().anyMatch(test -> String.valueOf(test1.getTestNameId()).equals(test.id)));
assertTrue(mutes.items.get(0).target.tests.items.stream().anyMatch(test -> String.valueOf(test2.getTestNameId()).equals(test.id)));
}
myMutingService.unmuteTests(user, null, bt1, Arrays.asList(test1, test2));
{
Mutes mutes = myRequest.getMutes(null, null, null, null);
assertEquals(Integer.valueOf(1), mutes.count);
assertEquals(1, mutes.items.size());
assertNull(mutes.items.get(0).scope.project);
assertNotNull(mutes.items.get(0).scope.buildTypes);
assertEquals(1, mutes.items.get(0).scope.buildTypes.buildTypes.size());
assertTrue(mutes.items.get(0).scope.buildTypes.buildTypes.stream().anyMatch(buildType -> bt2.getExternalId().equals(buildType.getId())));
assertNull(mutes.items.get(0).target.problems);
assertEquals(2, mutes.items.get(0).target.tests.items.size());
assertTrue(mutes.items.get(0).target.tests.items.stream().anyMatch(test -> String.valueOf(test1.getTestNameId()).equals(test.id)));
assertTrue(mutes.items.get(0).target.tests.items.stream().anyMatch(test -> String.valueOf(test2.getTestNameId()).equals(test.id)));
}
{
setInternalProperty(Mutes.REST_MUTES_ACTUAL_STATE, "true");
Mutes mutes = myRequest.getMutes(null, "$long,mute(target(tests(test(mutes(mute(scope(buildTypes($long))))))))", null, null);
assertEquals(1, mutes.items.get(0).target.tests.items.get(0).mutes.items.get(0).scope.buildTypes.buildTypes.size());
}
}
use of jetbrains.buildServer.users.SUser in project teamcity-rest by JetBrains.
the class TwoFactorRequestTest method testKeyRegeneration.
@Test
public void testKeyRegeneration() throws Throwable {
final SUser user = createUser("user");
myFixture.getSecurityContext().runAs(user, new SecurityContextEx.RunAsAction() {
@Override
public void run() throws Throwable {
TwoFactorCredentials credentials = myRequest.setupTwoFactor();
myRequest.confirmTwoFactor(credentials.uuid.toString(), 0, new FakeHttpServletRequest());
final String hashedRecovery = myFixture.getSecurityContext().runAsSystem(() -> user.getPropertyValue(RECOVERY_KEY_PROPERTY));
myRequest.serveRecoveryKeys();
final String newHashedRecovery = myFixture.getSecurityContext().runAsSystem(() -> user.getPropertyValue(RECOVERY_KEY_PROPERTY));
Assert.assertNotEquals(hashedRecovery, newHashedRecovery);
}
});
}
use of jetbrains.buildServer.users.SUser in project teamcity-rest by JetBrains.
the class TwoFactorRequestTest method testUserWithout2FACantRegenerateKeys.
@Test
public void testUserWithout2FACantRegenerateKeys() throws Throwable {
final SUser user = createUser("user");
myFixture.getSecurityContext().runAs(user, new SecurityContextEx.RunAsAction() {
@Override
public void run() {
checkException(AccessDeniedException.class, () -> myRequest.serveRecoveryKeys(), "regenerate recovery for not existing 2FA");
}
});
}
Aggregations