diff --git a/src/main/java/org/gitlab/api/GitlabAPI.java b/src/main/java/org/gitlab/api/GitlabAPI.java index f5414136..3a21b2bb 100644 --- a/src/main/java/org/gitlab/api/GitlabAPI.java +++ b/src/main/java/org/gitlab/api/GitlabAPI.java @@ -179,7 +179,8 @@ public GitlabUser getUserViaSudo(String username) throws IOException { * @param isAdmin Is Admin * @param can_create_group Can Create Group * @param skip_confirmation Skip Confirmation - * @return A GitlabUser + * @param external External + * @return A GitlabUser * @throws IOException on gitlab api call error * @see http://doc.gitlab.com/ce/api/users.html */ @@ -188,7 +189,7 @@ public GitlabUser createUser(String email, String password, String username, String twitter, String website_url, Integer projects_limit, String extern_uid, String extern_provider_name, String bio, Boolean isAdmin, Boolean can_create_group, - Boolean skip_confirmation) throws IOException { + Boolean skip_confirmation, Boolean external) throws IOException { Query query = new Query() .append("email", email) @@ -205,7 +206,8 @@ public GitlabUser createUser(String email, String password, String username, .appendIf("provider", extern_provider_name) .appendIf("bio", bio) .appendIf("admin", isAdmin) - .appendIf("can_create_group", can_create_group); + .appendIf("can_create_group", can_create_group) + .appendIf("external", external); String tailUrl = GitlabUser.USERS_URL + query.toString(); @@ -243,6 +245,7 @@ public GitlabUser createUser(CreateUserRequest request) throws IOException { * @param bio Bio * @param isAdmin Is Admin * @param can_create_group Can Create Group + * @param external External * @return The Updated User * @throws IOException on gitlab api call error */ @@ -251,7 +254,7 @@ public GitlabUser updateUser(Integer targetUserId, String fullName, String skypeId, String linkedIn, String twitter, String website_url, Integer projects_limit, String extern_uid, String extern_provider_name, - String bio, Boolean isAdmin, Boolean can_create_group) throws IOException { + String bio, Boolean isAdmin, Boolean can_create_group, Boolean external) throws IOException { Query query = new Query() .append("email", email) @@ -267,7 +270,8 @@ public GitlabUser updateUser(Integer targetUserId, .appendIf("provider", extern_provider_name) .appendIf("bio", bio) .appendIf("admin", isAdmin) - .appendIf("can_create_group", can_create_group); + .appendIf("can_create_group", can_create_group) + .appendIf("external", external); String tailUrl = GitlabUser.USERS_URL + "/" + targetUserId + query.toString(); @@ -558,6 +562,65 @@ public GitlabGroup createGroup(String name, String path, String ldapCn, GitlabAc return dispatch().to(tailUrl, GitlabGroup.class); } + + /** + * Creates a Group + * + * @param group The gitlab Group object + * @param sudoUser The user to create the group on behalf of + * + * @return The GitLab Group + * @throws IOException on gitlab api call error + */ + public GitlabGroup createGroup(GitlabGroup group, GitlabUser sudoUser) throws IOException { + + Query query = new Query() + .append("name", group.getName()) + .append("path", group.getPath()) + .appendIf("description", group.getDescription()) + .appendIf("membership_lock", group.getMembershipLock()) + .appendIf("share_with_group_lock", group.getShareWithGroupLock()) + .appendIf("visibility", group.getVisibility().toString()) + .appendIf("lfs_enabled", group.isLfsEnabled()) + .appendIf("request_access_enabled", group.isRequestAccessEnabled()) + .appendIf("shared_runners_minutes_limit", group.getSharedRunnersMinutesLimit()) + .appendIf("ldap_cn", group.getLdapCn()) + .appendIf("ldap_access", group.getLdapAccess()) + .appendIf(PARAM_SUDO, sudoUser != null ? sudoUser.getId() : null); + + String tailUrl = GitlabGroup.URL + query.toString(); + + return dispatch().to(tailUrl, GitlabGroup.class); + } + + /** + * Updates a Group + * + * @param group the group object + * @param sudoUser The user to create the group on behalf of + * @return The GitLab Group + * @throws IOException on gitlab api call error + */ + public GitlabGroup updateGroup(GitlabGroup group, GitlabUser sudoUser) throws IOException { + + Query query = new Query() + .appendIf("name", group.getName()) + .appendIf("path", group.getPath()) + .appendIf("description", group.getDescription()) + .appendIf("membership_lock", group.getMembershipLock()) + .appendIf("share_with_group_lock", group.getShareWithGroupLock()) + .appendIf("visibility", group.getVisibility().toString()) + .appendIf("lfs_enabled", group.isLfsEnabled()) + .appendIf("request_access_enabled", group.isRequestAccessEnabled()) + .appendIf("shared_runners_minutes_limit", group.getSharedRunnersMinutesLimit()) + .appendIf("ldap_cn", group.getLdapCn()) + .appendIf("ldap_access", group.getLdapAccess()) + .appendIf(PARAM_SUDO, sudoUser != null ? sudoUser.getId() : null); + + String tailUrl = GitlabGroup.URL + "/" + group.getId() + query.toString(); + + return retrieve().method("PUT").to(tailUrl, GitlabGroup.class); + } /** * Add a group member. diff --git a/src/main/java/org/gitlab/api/models/GitlabGroup.java b/src/main/java/org/gitlab/api/models/GitlabGroup.java index 3a456802..1003cc52 100644 --- a/src/main/java/org/gitlab/api/models/GitlabGroup.java +++ b/src/main/java/org/gitlab/api/models/GitlabGroup.java @@ -12,9 +12,24 @@ public class GitlabGroup { private String name; private String path; private String description; - + + @JsonProperty("membership_lock") + private Boolean membershipLock; + + @JsonProperty("share_with_group_lock") + private Boolean shareWithGroupLock; + + @JsonProperty("visibility") + private GitlabVisibility visibility; + @JsonProperty("lfs_enabled") private Boolean lfsEnabled; + + @JsonProperty("request_access_enabled") + private Boolean requestAccessEnabled; + + @JsonProperty("shared_runners_minutes_limit") + private Integer sharedRunnersMinutesLimit; @JsonProperty("avatar_url") private String avatarUrl; @@ -40,9 +55,6 @@ public class GitlabGroup { @JsonProperty("full_path") private String fullPath; - @JsonProperty("request_access_enabled") - private Boolean requestAccessEnabled; - public String getDescription() { return description; } @@ -131,6 +143,38 @@ public void setLdapCn(String ldapCn) { this.ldapCn = ldapCn; } + public Boolean getMembershipLock() { + return membershipLock; + } + + public void setMembershipLock(Boolean membershipLock) { + this.membershipLock = membershipLock; + } + + public Boolean getShareWithGroupLock() { + return shareWithGroupLock; + } + + public void setShareWithGroupLock(Boolean shareWithGroupLock) { + this.shareWithGroupLock = shareWithGroupLock; + } + + public GitlabVisibility getVisibility() { + return visibility; + } + + public void setVisibility(GitlabVisibility visibility) { + this.visibility = visibility; + } + + public Integer getSharedRunnersMinutesLimit() { + return sharedRunnersMinutesLimit; + } + + public void setSharedRunnersMinutesLimit(Integer sharedRunnersMinutesLimit) { + this.sharedRunnersMinutesLimit = sharedRunnersMinutesLimit; + } + public GitlabAccessLevel getLdapAccess() { if (ldapAccess == null) { return null; diff --git a/src/main/java/org/gitlab/api/models/GitlabUser.java b/src/main/java/org/gitlab/api/models/GitlabUser.java index 9e82dbb1..840c6f86 100644 --- a/src/main/java/org/gitlab/api/models/GitlabUser.java +++ b/src/main/java/org/gitlab/api/models/GitlabUser.java @@ -64,6 +64,9 @@ public class GitlabUser { @JsonProperty("can_create_team") private Boolean _canCreateTeam; + @JsonProperty("external") + private boolean _external; + @JsonProperty("avatar_url") private String _avatarUrl; @@ -247,6 +250,14 @@ public void setCanCreateTeam(boolean canCreateTeam) { this._canCreateTeam = canCreateTeam; } + public boolean isExternal() { + return _external; + } + + public void setExternal(boolean external) { + _external = external; + } + public String getAvatarUrl() { return _avatarUrl; } diff --git a/src/test/java/org/gitlab/api/GitlabAPIIT.java b/src/test/java/org/gitlab/api/GitlabAPIIT.java index 3d087a2d..121d86a0 100644 --- a/src/test/java/org/gitlab/api/GitlabAPIIT.java +++ b/src/test/java/org/gitlab/api/GitlabAPIIT.java @@ -1,10 +1,6 @@ package org.gitlab.api; -import org.gitlab.api.models.GitlabBuildVariable; -import org.gitlab.api.models.GitlabGroup; -import org.gitlab.api.models.GitlabNamespace; -import org.gitlab.api.models.GitlabProject; -import org.gitlab.api.models.GitlabUser; +import org.gitlab.api.models.*; import org.junit.BeforeClass; import org.junit.Test; @@ -128,6 +124,7 @@ public void testCreateUpdateDeleteUser() throws IOException, InterruptedExceptio randVal("bio"), false, false, + true, false); assertNotNull(gitUser); @@ -139,7 +136,7 @@ public void testCreateUpdateDeleteUser() throws IOException, InterruptedExceptio api.updateUser(gitUser.getId(), gitUser.getEmail(), password, gitUser.getUsername(), gitUser.getName(), "newSkypeId", gitUser.getLinkedin(), gitUser.getTwitter(), gitUser.getWebsiteUrl(), 10 /* project limit does not come back on GET */, gitUser.getExternUid(), gitUser.getExternProviderName(), - gitUser.getBio(), gitUser.isAdmin(), gitUser.isCanCreateGroup()); + gitUser.getBio(), gitUser.isAdmin(), gitUser.isCanCreateGroup(), gitUser.isExternal()); GitlabUser postUpdate = api.getUserViaSudo(gitUser.getUsername()); @@ -186,6 +183,38 @@ public void testGetGroupByPath() throws IOException { // Cleanup api.deleteGroup(group.getId()); } + + @Test + public void testCreateAndUpdateGroup() throws IOException { + // Given + GitlabGroup originalGroup = new GitlabGroup(); + originalGroup.setDescription("test description"); + originalGroup.setName("groupNameTest"); + originalGroup.setPath("groupPathTest"); + originalGroup.setVisibility(GitlabVisibility.INTERNAL); + + GitlabGroup newGroup = api.createGroup(originalGroup, null); + assertNotNull(newGroup); + assertEquals(originalGroup.getId(), newGroup.getId()); + assertEquals(originalGroup.getName(), newGroup.getName()); + assertEquals(originalGroup.getPath(), newGroup.getPath()); + assertEquals(originalGroup.getDescription(), newGroup.getDescription()); + assertEquals(originalGroup.getVisibility(), newGroup.getVisibility()); + + GitlabGroup groupToUpdate = new GitlabGroup(); + groupToUpdate.setId(newGroup.getId()); + groupToUpdate.setVisibility(GitlabVisibility.PRIVATE); + + // When + GitlabGroup updatedGroup = api.updateGroup(newGroup, null); + + // Then: + assertNotNull(updatedGroup); + assertEquals(groupToUpdate.getVisibility(), updatedGroup.getVisibility()); + + // Cleanup + api.deleteGroup(updatedGroup.getId()); + } @Test public void testGetMembershipProjects() throws IOException { @@ -237,6 +266,7 @@ public void testCreateDeleteFork() throws IOException { randVal("bio"), false, false, + false, false);