Search in sources :

Example 36 with SUser

use of jetbrains.buildServer.users.SUser in project teamcity-rest by JetBrains.

the class UserRequest method updateUser.

@PUT
@Path("/{userLocator}")
@Consumes({ "application/xml", "application/json" })
@Produces({ "application/xml", "application/json" })
@ApiOperation(value = "Update user matching the locator.", nickname = "replaceUser")
public User updateUser(@ApiParam(format = LocatorName.USER) @PathParam("userLocator") String userLocator, User userData, @QueryParam("fields") String fields) {
    SUser user = myUserFinder.getItem(userLocator, true);
    myDataUpdater.modify(user, userData, myBeanContext.getServiceLocator());
    return new User(user, new Fields(fields), myBeanContext);
}
Also used : SUser(jetbrains.buildServer.users.SUser) Fields(jetbrains.buildServer.server.rest.model.Fields) SUser(jetbrains.buildServer.users.SUser) ApiOperation(io.swagger.annotations.ApiOperation)

Example 37 with SUser

use of jetbrains.buildServer.users.SUser in project teamcity-rest by JetBrains.

the class UserRequest method deleteToken.

@DELETE
@Path("/{userLocator}/tokens/{name}")
@ApiOperation(value = "Remove an authentication token from the matching user.", nickname = "deleteUserToken")
public void deleteToken(@ApiParam(format = LocatorName.USER) @PathParam("userLocator") String userLocator, @PathParam("name") @NotNull final String name, @Context @NotNull final BeanContext beanContext) {
    if (TeamCityProperties.getBooleanOrTrue(UserFinder.REST_CHECK_ADDITIONAL_PERMISSIONS_ON_USERS_AND_GROUPS)) {
        myUserFinder.checkViewAllUsersPermission();
    }
    final TokenAuthenticationModel tokenAuthenticationModel = myBeanContext.getSingletonService(TokenAuthenticationModel.class);
    SUser user = myUserFinder.getItem(userLocator, true);
    try {
        tokenAuthenticationModel.deleteToken(user.getId(), name);
    } catch (AuthenticationTokenStorage.DeletionException e) {
        throw new NotFoundException(e.getMessage());
    }
}
Also used : SUser(jetbrains.buildServer.users.SUser) NotFoundException(jetbrains.buildServer.server.rest.errors.NotFoundException) ApiOperation(io.swagger.annotations.ApiOperation)

Example 38 with SUser

use of jetbrains.buildServer.users.SUser in project teamcity-rest by JetBrains.

the class UserRequestTest method testPermissionsSecurity.

@Test
public void testPermissionsSecurity() throws Throwable {
    myFixture.getServerSettings().setPerProjectPermissionsEnabled(true);
    ProjectEx project1 = createProject("project1", "project1");
    ProjectEx project2 = createProject("project2", "project2");
    SUser user1 = createUser("user1");
    SUser user2 = createUser("user2");
    user2.addRole(RoleScope.globalScope(), getTestRoles().createRole(Permission.RUN_BUILD, Permission.AUTHORIZE_AGENT));
    user2.addRole(RoleScope.projectScope(project2.getProjectId()), getTestRoles().createRole(Permission.VIEW_PROJECT));
    user2.addRole(RoleScope.projectScope(project1.getProjectId()), getTestRoles().createRole(Permission.VIEW_PROJECT, Permission.REORDER_BUILD_QUEUE));
    myFixture.getSecurityContext().runAs(user1, () -> {
        checkException(AuthorizationFailedException.class, () -> myRequest.getPermissions("id:" + user2.getId(), null, null), "getting permissions of another user");
    });
    SUser user3 = createUser("user3");
    user3.addRole(RoleScope.globalScope(), getTestRoles().createRole(Permission.VIEW_USER_PROFILE, Permission.VIEW_ALL_USERS));
    user3.addRole(RoleScope.projectScope(project2.getProjectId()), getTestRoles().createRole(Permission.VIEW_PROJECT));
    myFixture.getSecurityContext().runAs(user3, () -> {
        PermissionAssignments permissions = myRequest.getPermissions("id:" + user2.getId(), null, null);
        String message = describe(permissions);
        assertTrue(message, permissions.myPermissionAssignments.stream().anyMatch(pa -> Permission.AUTHORIZE_AGENT.name().toLowerCase().toLowerCase().equals(pa.permission.id) && pa.project == null));
        assertTrue(message, permissions.myPermissionAssignments.stream().anyMatch(pa -> Permission.REORDER_BUILD_QUEUE.name().toLowerCase().equals(pa.permission.id) && pa.project == null));
        assertTrue(message, permissions.myPermissionAssignments.stream().anyMatch(pa -> Permission.RUN_BUILD.name().toLowerCase().equals(pa.permission.id) && pa.project == null));
        assertTrue(message, permissions.myPermissionAssignments.stream().anyMatch(pa -> Permission.VIEW_PROJECT.name().toLowerCase().equals(pa.permission.id) && project2.getExternalId().equals(pa.project.id)));
        assertTrue(message, permissions.myPermissionAssignments.stream().noneMatch(pa -> Permission.VIEW_PROJECT.name().toLowerCase().equals(pa.permission.id) && project1.getExternalId().equals(pa.project.id)));
    });
    getUserModelEx().getGuestUser().addRole(RoleScope.projectScope(project2.getProjectId()), getTestRoles().createRole(Permission.RUN_BUILD));
    myFixture.getSecurityContext().runAs(getUserModelEx().getGuestUser(), () -> {
        PermissionAssignments permissions = myRequest.getPermissions("current", null, null);
        assertTrue(describe(permissions), permissions.myPermissionAssignments.stream().anyMatch(pa -> Permission.RUN_BUILD.name().toLowerCase().equals(pa.permission.id) && project2.getExternalId().equals(pa.project.id)));
        checkException(AuthorizationFailedException.class, () -> myRequest.getPermissions("id:" + user2.getId(), null, null), "getting permissions of another user");
    });
    myFixture.getSecurityContext().runAs(getUserModelEx().getSuperUser(), () -> {
        PermissionAssignments permissions = myRequest.getPermissions("current", null, null);
        assertTrue(describe(permissions), permissions.myPermissionAssignments.stream().anyMatch(pa -> Permission.EDIT_PROJECT.name().toLowerCase().equals(pa.permission.id) && pa.project == null));
        permissions = myRequest.getPermissions("id:" + user2.getId(), null, null);
        assertTrue(describe(permissions), permissions.myPermissionAssignments.stream().anyMatch(pa -> Permission.VIEW_PROJECT.name().toLowerCase().equals(pa.permission.id) && project1.getExternalId().equals(pa.project.id)));
        assertTrue(describe(permissions), permissions.myPermissionAssignments.stream().anyMatch(pa -> Permission.AUTHORIZE_AGENT.name().toLowerCase().equals(pa.permission.id) && pa.project == null));
    });
}
Also used : ProjectEx(jetbrains.buildServer.serverSide.impl.ProjectEx) Fields(jetbrains.buildServer.server.rest.model.Fields) java.util(java.util) AuthorizationFailedException(jetbrains.buildServer.server.rest.errors.AuthorizationFailedException) User(jetbrains.buildServer.server.rest.model.user.User) TestFor(jetbrains.buildServer.util.TestFor) Test(org.testng.annotations.Test) RoleScope(jetbrains.buildServer.serverSide.auth.RoleScope) FakeHttpServletRequest(jetbrains.buildServer.controllers.fakes.FakeHttpServletRequest) SUserGroup(jetbrains.buildServer.groups.SUserGroup) TwoFactorPasswordManager(jetbrains.buildServer.serverSide.auth.TwoFactorPasswordManager) Build(jetbrains.buildServer.server.rest.model.build.Build) Method(java.lang.reflect.Method) UserGroup(jetbrains.buildServer.groups.UserGroup) SFinishedBuild(jetbrains.buildServer.serverSide.SFinishedBuild) XmlAttribute(javax.xml.bind.annotation.XmlAttribute) SecurityContextImpl(jetbrains.buildServer.serverSide.impl.auth.SecurityContextImpl) BufferedImage(java.awt.image.BufferedImage) BaseFinderTest(jetbrains.buildServer.server.rest.data.BaseFinderTest) BeforeMethod(org.testng.annotations.BeforeMethod) SecurityContextEx(jetbrains.buildServer.serverSide.SecurityContextEx) Field(java.lang.reflect.Field) Collectors(java.util.stream.Collectors) ProjectEx(jetbrains.buildServer.serverSide.impl.ProjectEx) Permission(jetbrains.buildServer.serverSide.auth.Permission) NotNull(org.jetbrains.annotations.NotNull) PermissionAssignments(jetbrains.buildServer.server.rest.model.user.PermissionAssignments) SUser(jetbrains.buildServer.users.SUser) XmlElement(javax.xml.bind.annotation.XmlElement) PermissionAssignments(jetbrains.buildServer.server.rest.model.user.PermissionAssignments) SUser(jetbrains.buildServer.users.SUser) Test(org.testng.annotations.Test) BaseFinderTest(jetbrains.buildServer.server.rest.data.BaseFinderTest)

Example 39 with SUser

use of jetbrains.buildServer.users.SUser in project teamcity-rest by JetBrains.

the class UserRequestTest method testUnauthorizedUsersList.

@Test
@TestFor(issues = { "TW-44842" })
void testUnauthorizedUsersList() throws Throwable {
    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 {
            User result = myRequest.serveUser("id:" + user1.getId(), "$long,groups(group(users(user)))");
            assertNotNull(result);
            assertNotNull(result.getGroups());
            assertNotNull(result.getGroups().groups);
            assertEquals(1, result.getGroups().groups.size());
            assertNotNull(result.getGroups().groups.get(0).users);
            assertNotNull(result.getGroups().groups.get(0).users.users);
        }
    });
    securityContext.runAs(user1, new SecurityContextEx.RunAsAction() {

        @Override
        public void run() throws Throwable {
            User result = myRequest.serveUser("username:user1", "$long,groups(group)");
            assertNotNull(result);
            assertNotNull(result.getGroups());
            assertNotNull(result.getGroups().groups);
            assertEquals(1, result.getGroups().groups.size());
        }
    });
    securityContext.runAs(user1, new SecurityContextEx.RunAsAction() {

        @Override
        public void run() throws Throwable {
            User result = myRequest.serveUser("username:user1", "$long,groups(group(users(user)))");
            assertNotNull(result);
            assertNotNull(result.getGroups());
            assertNotNull(result.getGroups().groups);
            assertEquals(1, result.getGroups().groups.size());
            // on getting users, AuthorizationFailedException is thrown so users are not included
            assertNull(result.getGroups().groups.get(0).users);
        }
    });
}
Also used : SecurityContextImpl(jetbrains.buildServer.serverSide.impl.auth.SecurityContextImpl) User(jetbrains.buildServer.server.rest.model.user.User) SUser(jetbrains.buildServer.users.SUser) SecurityContextEx(jetbrains.buildServer.serverSide.SecurityContextEx) SUser(jetbrains.buildServer.users.SUser) Test(org.testng.annotations.Test) BaseFinderTest(jetbrains.buildServer.server.rest.data.BaseFinderTest) TestFor(jetbrains.buildServer.util.TestFor)

Example 40 with SUser

use of jetbrains.buildServer.users.SUser in project teamcity-rest by JetBrains.

the class MuteRequestTest method test_severalMutes.

@Test
public void test_severalMutes() {
    final ProjectEx project = createProject("Project", "Project");
    final BuildTypeEx bt1 = project.createBuildType("bt1");
    final BuildTypeEx bt2 = project.createBuildType("bt2");
    final ProjectEx project2 = createProject("Project2", "Project2");
    final BuildTypeEx bt22 = project.createBuildType("bt3");
    createBuild(bt1, new String[0], new String[] { "test1", "test2", "test3" });
    createBuild(bt22, 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");
    myMutingService.muteTestsInBuildTypes(user, null, false, null, Arrays.asList(bt1, bt2), Arrays.asList(test1, test2), false);
    myMutingService.muteTestsInProject(user, null, false, null, project2, Arrays.asList(test1));
    int mute1Id, mute2Id;
    {
        Mutes mutes = myRequest.getMutes(null, null, null, null);
        assertEquals(Integer.valueOf(2), mutes.count);
        assertEquals(2, mutes.items.size());
        mute1Id = mutes.items.get(0).id;
        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)));
        mute2Id = mutes.items.get(1).id;
        assertNull(mutes.items.get(1).scope.buildTypes);
        assertNotNull(mutes.items.get(1).scope.project);
        assertEquals(project2.getExternalId(), mutes.items.get(1).scope.project.id);
        assertNull(mutes.items.get(1).target.problems);
        assertEquals(1, mutes.items.get(1).target.tests.items.size());
        assertTrue(mutes.items.get(1).target.tests.items.stream().anyMatch(test -> String.valueOf(test1.getTestNameId()).equals(test.id)));
    }
    {
        setInternalProperty(Mutes.REST_MUTES_ACTUAL_STATE, "true");
        Mutes mutes = myRequest.getMutes("id:" + mute2Id, "$long,mute(target(tests(test(mutes(mute(target(tests(test($long))),scope(buildTypes(buildType($long)))))))))", null, null);
        assertEquals(2, mutes.items.get(0).target.tests.items.get(0).mutes.items.size());
        assertEquals(2, mutes.items.get(0).target.tests.items.get(0).mutes.items.get(0).target.tests.items.size());
        assertEquals(2, mutes.items.get(0).target.tests.items.get(0).mutes.items.get(0).scope.buildTypes.buildTypes.size());
    }
}
Also used : ProjectEx(jetbrains.buildServer.serverSide.impl.ProjectEx) BuildTypeEx(jetbrains.buildServer.serverSide.BuildTypeEx) TestName(jetbrains.buildServer.tests.TestName) SUser(jetbrains.buildServer.users.SUser) STest(jetbrains.buildServer.serverSide.STest) Mutes(jetbrains.buildServer.server.rest.model.problem.Mutes) STest(jetbrains.buildServer.serverSide.STest) BaseFinderTest(jetbrains.buildServer.server.rest.data.BaseFinderTest) Test(org.testng.annotations.Test)

Aggregations

SUser (jetbrains.buildServer.users.SUser)125 Test (org.testng.annotations.Test)70 ApiOperation (io.swagger.annotations.ApiOperation)35 BaseFinderTest (jetbrains.buildServer.server.rest.data.BaseFinderTest)35 Build (jetbrains.buildServer.server.rest.model.build.Build)20 BadRequestException (jetbrains.buildServer.server.rest.errors.BadRequestException)18 NotNull (org.jetbrains.annotations.NotNull)18 NotFoundException (jetbrains.buildServer.server.rest.errors.NotFoundException)15 SecurityContextEx (jetbrains.buildServer.serverSide.SecurityContextEx)13 Fields (jetbrains.buildServer.server.rest.model.Fields)12 SUserGroup (jetbrains.buildServer.groups.SUserGroup)11 ProjectEx (jetbrains.buildServer.serverSide.impl.ProjectEx)10 ServiceLocator (jetbrains.buildServer.ServiceLocator)9 BuildTypeImpl (jetbrains.buildServer.serverSide.impl.BuildTypeImpl)9 Nullable (org.jetbrains.annotations.Nullable)9 LocatorProcessException (jetbrains.buildServer.server.rest.errors.LocatorProcessException)8 SecurityContextImpl (jetbrains.buildServer.serverSide.impl.auth.SecurityContextImpl)8 java.util (java.util)7 Collectors (java.util.stream.Collectors)7 jetbrains.buildServer.serverSide (jetbrains.buildServer.serverSide)7