diff --git a/maxkey-core/src/main/java/org/maxkey/entity/Organizations.java b/maxkey-core/src/main/java/org/maxkey/entity/Organizations.java index a37fd7cfc..90236c6a7 100644 --- a/maxkey-core/src/main/java/org/maxkey/entity/Organizations.java +++ b/maxkey-core/src/main/java/org/maxkey/entity/Organizations.java @@ -43,6 +43,7 @@ public class Organizations extends JpaBaseEntity implements Serializable { private String fullName; @Column private String parentId; + private String parentCode; @Column private String parentName; @Column @@ -85,6 +86,14 @@ public class Organizations extends JpaBaseEntity implements Serializable { private String description; @Column private int status; + @Column + String createdBy; + @Column + String createdDate; + @Column + String modifiedBy; + @Column + String modifiedDate; private int isPrimary = 0; @@ -136,7 +145,15 @@ public class Organizations extends JpaBaseEntity implements Serializable { this.parentId = parentId; } - public String getParentName() { + public String getParentCode() { + return parentCode; + } + + public void setParentCode(String parentCode) { + this.parentCode = parentCode; + } + + public String getParentName() { return parentName; } @@ -322,7 +339,39 @@ public class Organizations extends JpaBaseEntity implements Serializable { this.reorgNamePath = reorgNamePath; } - @Override + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public String getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(String createdDate) { + this.createdDate = createdDate; + } + + public String getModifiedBy() { + return modifiedBy; + } + + public void setModifiedBy(String modifiedBy) { + this.modifiedBy = modifiedBy; + } + + public String getModifiedDate() { + return modifiedDate; + } + + public void setModifiedDate(String modifiedDate) { + this.modifiedDate = modifiedDate; + } + + @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Organizations [id="); diff --git a/maxkey-identitys/maxkey-identity-rest/src/main/java/org/maxkey/identity/rest/RestOrganizationController.java b/maxkey-identitys/maxkey-identity-rest/src/main/java/org/maxkey/identity/rest/RestOrganizationController.java index 0c787b389..f85bc3cf8 100644 --- a/maxkey-identitys/maxkey-identity-rest/src/main/java/org/maxkey/identity/rest/RestOrganizationController.java +++ b/maxkey-identitys/maxkey-identity-rest/src/main/java/org/maxkey/identity/rest/RestOrganizationController.java @@ -34,7 +34,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.util.UriComponentsBuilder; @Controller -@RequestMapping(value={"/im/api/Organization"}) +@RequestMapping(value={"/api/idm/Organization"}) public class RestOrganizationController { @Autowired diff --git a/maxkey-identitys/maxkey-identity-rest/src/main/java/org/maxkey/identity/rest/RestUserInfoController.java b/maxkey-identitys/maxkey-identity-rest/src/main/java/org/maxkey/identity/rest/RestUserInfoController.java index a78d7a7cc..12b44d723 100644 --- a/maxkey-identitys/maxkey-identity-rest/src/main/java/org/maxkey/identity/rest/RestUserInfoController.java +++ b/maxkey-identitys/maxkey-identity-rest/src/main/java/org/maxkey/identity/rest/RestUserInfoController.java @@ -35,7 +35,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.util.UriComponentsBuilder; @Controller -@RequestMapping(value={"/im/api/Users"}) +@RequestMapping(value={"/api/idm/Users"}) public class RestUserInfoController { @Autowired diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimGroupController.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimGroupController.java index 73a0fde2d..9df35cf91 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimGroupController.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimGroupController.java @@ -17,9 +17,142 @@ package org.maxkey.identity.scim.controller; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.apache.mybatis.jpa.persistence.JpaPageResults; +import org.maxkey.entity.Groups; +import org.maxkey.entity.UserInfo; +import org.maxkey.identity.scim.resources.ScimGroup; +import org.maxkey.identity.scim.resources.ScimMemberRef; +import org.maxkey.identity.scim.resources.ScimMeta; +import org.maxkey.identity.scim.resources.ScimParameters; +import org.maxkey.identity.scim.resources.ScimSearchResult; +import org.maxkey.persistence.service.GroupMemberService; +import org.maxkey.persistence.service.GroupsService; +import org.maxkey.util.DateUtils; +import org.maxkey.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.converter.json.MappingJacksonValue; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.util.UriComponentsBuilder; -@RequestMapping(value = "/im/scim/v2/Groups") +@RestController +@RequestMapping(value = "/api/idm/SCIM/v2/Groups") public class ScimGroupController { + final static Logger _logger = LoggerFactory.getLogger(ScimGroupController.class); + + @Autowired + GroupsService groupsService; + + @Autowired + GroupMemberService groupMemberService; + + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public MappingJacksonValue get(@PathVariable String id, + @RequestParam(required = false) String attributes) { + Groups groups = groupsService.get(id); + ScimGroup scimGroup = group2ScimGroup(groups); + List userList = groupMemberService.queryMemberByGroupId(id); + if(userList != null && userList.size() > 0) { + Set members = new HashSet(); + for (UserInfo user : userList) { + members.add(new ScimMemberRef(user.getDisplayName(),user.getId())); + } + scimGroup.setMembers(members); + } + return new MappingJacksonValue(scimGroup); + } + @RequestMapping(method = RequestMethod.POST) + public MappingJacksonValue create(@RequestBody ScimGroup scimGroup, + @RequestParam(required = false) String attributes, + UriComponentsBuilder builder) throws IOException { + Groups group =scimGroup2Group(scimGroup); + groupsService.insert(group); + return get(group.getId(),attributes); + } + + @RequestMapping(value = "/{id}", method = RequestMethod.PUT) + public MappingJacksonValue replace(@PathVariable String id, + @RequestBody ScimGroup scimGroup, + @RequestParam(required = false) String attributes) + throws IOException { + Groups group =scimGroup2Group(scimGroup); + groupsService.update(group); + return get(group.getId(),attributes); + } + + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + @ResponseStatus(HttpStatus.OK) + public void delete(@PathVariable final String id) { + groupsService.remove(id); + } + + @RequestMapping(method = RequestMethod.GET) + public MappingJacksonValue searchWithGet(@ModelAttribute ScimParameters requestParameters) { + return searchWithPost(requestParameters); + } + + @RequestMapping(value = "/.search", method = RequestMethod.POST) + public MappingJacksonValue searchWithPost(@ModelAttribute ScimParameters requestParameters) { + requestParameters.parse(); + _logger.debug("requestParameters {} ",requestParameters); + Groups queryModel = new Groups(); + queryModel.setPageSize(requestParameters.getCount()); + queryModel.calculate(requestParameters.getStartIndex()); + + JpaPageResults orgResults = groupsService.queryPageResults(queryModel); + List resultList = new ArrayList(); + for(Groups group : orgResults.getRows()) { + resultList.add(group2ScimGroup(group)); + } + ScimSearchResult scimSearchResult = + new ScimSearchResult( + resultList, + orgResults.getRecords(), + requestParameters.getCount(), + requestParameters.getStartIndex()); + return new MappingJacksonValue(scimSearchResult); + } + + public ScimGroup group2ScimGroup(Groups group) { + ScimGroup scimGroup = new ScimGroup(); + scimGroup.setId(group.getId()); + scimGroup.setExternalId(group.getId()); + scimGroup.setDisplayName(group.getName()); + + ScimMeta meta = new ScimMeta("Group"); + if(StringUtils.isNotBlank(group.getCreatedDate())){ + meta.setCreated( + DateUtils.parse(group.getCreatedDate(), DateUtils.FORMAT_DATE_YYYY_MM_DD_HH_MM_SS)); + } + if(StringUtils.isNotBlank(group.getModifiedDate())){ + meta.setLastModified( + DateUtils.parse(group.getModifiedDate(), DateUtils.FORMAT_DATE_YYYY_MM_DD_HH_MM_SS)); + } + scimGroup.setMeta(meta); + + return scimGroup; + } + + public Groups scimGroup2Group(ScimGroup scimGroup) { + Groups group = new Groups(); + group.setId(scimGroup.getId()); + group.setName(scimGroup.getDisplayName()); + return group; + } } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimOrganizationController.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimOrganizationController.java index c8009f862..46f170bb6 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimOrganizationController.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimOrganizationController.java @@ -18,14 +18,24 @@ package org.maxkey.identity.scim.controller; import java.io.IOException; -import java.util.Map; +import java.util.ArrayList; +import java.util.List; -import org.maxkey.identity.scim.resources.Organization; +import org.apache.mybatis.jpa.persistence.JpaPageResults; +import org.maxkey.entity.Organizations; +import org.maxkey.identity.scim.resources.ScimMeta; +import org.maxkey.identity.scim.resources.ScimOrganization; +import org.maxkey.identity.scim.resources.ScimParameters; import org.maxkey.identity.scim.resources.ScimSearchResult; -import org.maxkey.identity.scim.resources.User; +import org.maxkey.persistence.service.OrganizationsService; +import org.maxkey.util.DateUtils; +import org.maxkey.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.http.converter.json.MappingJacksonValue; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -45,57 +55,130 @@ import org.springframework.web.util.UriComponentsBuilder; * http://tools.ietf.org/html/draft-ietf-scim-api-00#section-3 */ @RestController -@RequestMapping(value = "/im/scim/v2/Organization") +@RequestMapping(value = "/api/idm/SCIM/v2/Organization") public class ScimOrganizationController { - + final static Logger _logger = LoggerFactory.getLogger(ScimOrganizationController.class); + + @Autowired + OrganizationsService organizationsService; + @RequestMapping(value = "/{id}", method = RequestMethod.GET) - public MappingJacksonValue getOrganization(@PathVariable String id, + public MappingJacksonValue get(@PathVariable String id, @RequestParam(required = false) String attributes) { - //Organization user = null; - return null; + Organizations org = organizationsService.get(id); + ScimOrganization scimOrg = org2ScimOrg(org); + + return new MappingJacksonValue(scimOrg); } @RequestMapping(method = RequestMethod.POST) - public ResponseEntity create(@RequestBody Organization user, - @RequestParam(required = false) String attributes, - UriComponentsBuilder builder) throws IOException { - //Organization createdUser = null; - return null; + public MappingJacksonValue create(@RequestBody ScimOrganization scimOrg, + @RequestParam(required = false) String attributes, + UriComponentsBuilder builder) throws IOException { + Organizations createOrg = scimOrg2Org(scimOrg); + organizationsService.insert(createOrg); + return get(createOrg.getId(), attributes); } @RequestMapping(value = "/{id}", method = RequestMethod.PUT) - public ResponseEntity replace(@PathVariable String id, - @RequestBody Organization user, - @RequestParam(required = false) String attributes) - throws IOException { - //Organization createdUser = null; - return null; + public MappingJacksonValue replace(@PathVariable String id, + @RequestBody ScimOrganization scimOrg, + @RequestParam(required = false) String attributes)throws IOException { + Organizations updateOrg = scimOrg2Org(scimOrg); + organizationsService.update(updateOrg); + return get(id, attributes); } @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) @ResponseStatus(HttpStatus.OK) public void delete(@PathVariable final String id) { - //tokenService.revokeAllTokensOfUser(id); - + organizationsService.remove(id); } @RequestMapping(method = RequestMethod.GET) - public MappingJacksonValue searchWithGet(@RequestParam Map requestParameters) { + public MappingJacksonValue searchWithGet(@ModelAttribute ScimParameters requestParameters) { return searchWithPost(requestParameters); } @RequestMapping(value = "/.search", method = RequestMethod.POST) - public MappingJacksonValue searchWithPost(@RequestParam Map requestParameters) { - //ScimSearchResult scimSearchResult = null; - /* - requestParameters.get("filter"), - requestParameters.get("sortBy"), - requestParameters.getOrDefault("sortOrder", "ascending"), // scim default - Integer.parseInt(requestParameters.getOrDefault("count", "" + ScimServiceProviderConfigController.MAX_RESULTS)), - Integer.parseInt(requestParameters.getOrDefault("startIndex", "1")); // scim default -*/ - //String attributes = (requestParameters.containsKey("attributes") ? requestParameters.get("attributes") : ""); + public MappingJacksonValue searchWithPost(@ModelAttribute ScimParameters requestParameters) { + requestParameters.parse(); + _logger.debug("requestParameters {} ",requestParameters); + Organizations queryModel = new Organizations(); + queryModel.setPageSize(requestParameters.getCount()); + queryModel.calculate(requestParameters.getStartIndex()); - return null; + JpaPageResults orgResults = organizationsService.queryPageResults(queryModel); + List resultList = new ArrayList(); + for(Organizations org : orgResults.getRows()) { + resultList.add(org2ScimOrg(org)); + } + ScimSearchResult scimSearchResult = + new ScimSearchResult( + resultList, + orgResults.getRecords(), + requestParameters.getCount(), + requestParameters.getStartIndex()); + + return new MappingJacksonValue(scimSearchResult); + } + + public ScimOrganization org2ScimOrg(Organizations org) { + ScimOrganization scimOrg = new ScimOrganization(); + scimOrg.setId(org.getId()); + scimOrg.setCode(org.getCode()); + scimOrg.setName(org.getName()); + scimOrg.setDisplayName(org.getName()); + scimOrg.setFullName(org.getFullName()); + scimOrg.setType(org.getType()); + scimOrg.setLevel(org.getLevel()); + scimOrg.setDivision(org.getDivision()); + scimOrg.setSortOrder(org.getSortOrder()); + scimOrg.setCodePath(org.getCodePath()); + scimOrg.setNamePath(org.getNamePath()); + scimOrg.setDescription(org.getDescription()); + + scimOrg.setParentId(org.getParentId()); + scimOrg.setParent(org.getParentId()); + //scimOrg.setParentCode(org.getParentId()); + scimOrg.setParentName(org.getParentName()); + + scimOrg.setParentName(org.getParentName()); + if(StringUtils.isNotBlank(org.getSortOrder())) { + scimOrg.setOrder(Long.parseLong(org.getSortOrder())); + }else { + scimOrg.setOrder(1); + } + scimOrg.setExternalId(org.getId()); + + ScimMeta meta = new ScimMeta("Organization"); + + if(StringUtils.isNotBlank(org.getCreatedDate())){ + meta.setCreated( + DateUtils.parse(org.getCreatedDate(), DateUtils.FORMAT_DATE_YYYY_MM_DD_HH_MM_SS)); + } + if(StringUtils.isNotBlank(org.getModifiedDate())){ + meta.setLastModified( + DateUtils.parse(org.getModifiedDate(), DateUtils.FORMAT_DATE_YYYY_MM_DD_HH_MM_SS)); + } + scimOrg.setMeta(meta); + return scimOrg; + } + + public Organizations scimOrg2Org(ScimOrganization scimOrg) { + Organizations org = new Organizations(); + org.setId(scimOrg.getId()); + org.setCode(scimOrg.getCode()); + org.setFullName(scimOrg.getFullName()); + org.setName(StringUtils.isNotBlank(scimOrg.getName()) ? scimOrg.getName():scimOrg.getDisplayName()); + org.setParentId(StringUtils.isNotBlank(scimOrg.getParentId())? scimOrg.getParentId():scimOrg.getParent()); + org.setParentCode(scimOrg.getParentCode()); + org.setParentName(scimOrg.getParentName()); + org.setSortOrder(StringUtils.isNotBlank(scimOrg.getSortOrder() )?scimOrg.getSortOrder():scimOrg.getOrder()+""); + org.setLevel(scimOrg.getLevel()); + org.setType(scimOrg.getType()); + org.setDivision(scimOrg.getDivision()); + org.setDescription(scimOrg.getDescription()); + return org; } } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimServiceProviderConfigController.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimServiceProviderConfigController.java index 319c3f1f8..7b92c8591 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimServiceProviderConfigController.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimServiceProviderConfigController.java @@ -26,10 +26,11 @@ import java.util.HashSet; import java.util.Set; @RestController -@RequestMapping(value = "/im/scim/v2/ServiceProviderConfig") +@RequestMapping(value = "/api/idm/SCIM/v2/ServiceProviderConfig") public class ScimServiceProviderConfigController { - public static final int MAX_RESULTS = 100; + public static final int MAX_RESULTS = 500; + public static final int MAX_RESULTS_LIMIT = 5000; @RequestMapping @ResponseBody diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimUserController.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimUserController.java index ed65406f2..5cda35729 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimUserController.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/controller/ScimUserController.java @@ -18,13 +18,34 @@ package org.maxkey.identity.scim.controller; import java.io.IOException; -import java.util.Map; - +import java.util.ArrayList; +import java.util.List; +import org.apache.mybatis.jpa.persistence.JpaPageResults; +import org.maxkey.constants.ConstantsStatus; +import org.maxkey.entity.Groups; +import org.maxkey.entity.UserInfo; +import org.maxkey.identity.scim.resources.ScimEnterprise; +import org.maxkey.identity.scim.resources.ScimGroupRef; +import org.maxkey.identity.scim.resources.ScimManager; +import org.maxkey.identity.scim.resources.ScimMeta; +import org.maxkey.identity.scim.resources.ScimParameters; import org.maxkey.identity.scim.resources.ScimSearchResult; -import org.maxkey.identity.scim.resources.User; +import org.maxkey.identity.scim.resources.ScimOrganizationEmail.UserEmailType; +import org.maxkey.identity.scim.resources.ScimOrganizationPhoneNumber.UserPhoneNumberType; +import org.maxkey.identity.scim.resources.ScimUser; +import org.maxkey.identity.scim.resources.ScimUserEmail; +import org.maxkey.identity.scim.resources.ScimFormattedName; +import org.maxkey.identity.scim.resources.ScimUserPhoneNumber; +import org.maxkey.persistence.service.GroupsService; +import org.maxkey.persistence.service.UserInfoService; +import org.maxkey.util.DateUtils; +import org.maxkey.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.http.converter.json.MappingJacksonValue; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -44,56 +65,170 @@ import org.springframework.web.util.UriComponentsBuilder; * http://tools.ietf.org/html/draft-ietf-scim-api-00#section-3 */ @RestController -@RequestMapping(value = "/im/scim/v2/Users") +@RequestMapping(value = "/api/idm/SCIM/v2/Users") public class ScimUserController { - + final static Logger _logger = LoggerFactory.getLogger(ScimUserController.class); + @Autowired + private UserInfoService userInfoService; + + @Autowired + GroupsService groupsService; + @RequestMapping(value = "/{id}", method = RequestMethod.GET) - public MappingJacksonValue getUser(@PathVariable String id, + public MappingJacksonValue get(@PathVariable String id, @RequestParam(required = false) String attributes) { - //User user = null; - return null; + UserInfo userInfo = userInfoService.get(id); + ScimUser scimUser = userInfo2ScimUser(userInfo); + return new MappingJacksonValue(scimUser); } @RequestMapping(method = RequestMethod.POST) - public ResponseEntity create(@RequestBody User user, - @RequestParam(required = false) String attributes, - UriComponentsBuilder builder) throws IOException { - //User createdUser = null; - return null; + public MappingJacksonValue create(@RequestBody ScimUser user, + @RequestParam(required = false) String attributes, + UriComponentsBuilder builder) throws IOException { + UserInfo userInfo = scimUser2UserInfo(user); + userInfoService.insert(userInfo); + return get(userInfo.getId(),attributes); } @RequestMapping(value = "/{id}", method = RequestMethod.PUT) - public ResponseEntity replace(@PathVariable String id, - @RequestBody User user, - @RequestParam(required = false) String attributes) + public MappingJacksonValue replace(@PathVariable String id, + @RequestBody ScimUser user, + @RequestParam(required = false) String attributes) throws IOException { - //User createdUser = null; - return null; + UserInfo userInfo = scimUser2UserInfo(user); + userInfoService.update(userInfo); + return get(id,attributes); } @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) @ResponseStatus(HttpStatus.OK) public void delete(@PathVariable final String id) { - //tokenService.revokeAllTokensOfUser(id); - + userInfoService.remove(id); } @RequestMapping(method = RequestMethod.GET) - public MappingJacksonValue searchWithGet(@RequestParam Map requestParameters) { + public MappingJacksonValue searchWithGet(@ModelAttribute ScimParameters requestParameters) { return searchWithPost(requestParameters); } @RequestMapping(value = "/.search", method = RequestMethod.POST) - public MappingJacksonValue searchWithPost(@RequestParam Map requestParameters) { - //ScimSearchResult scimSearchResult = null; - /* - requestParameters.get("filter"), - requestParameters.get("sortBy"), - requestParameters.getOrDefault("sortOrder", "ascending"), // scim default - Integer.parseInt(requestParameters.getOrDefault("count", "" + ScimServiceProviderConfigController.MAX_RESULTS)), - Integer.parseInt(requestParameters.getOrDefault("startIndex", "1")); // scim default -*/ - //String attributes = (requestParameters.containsKey("attributes") ? requestParameters.get("attributes") : ""); - return null; + public MappingJacksonValue searchWithPost(@ModelAttribute ScimParameters requestParameters) { + requestParameters.parse(); + _logger.debug("requestParameters {} ",requestParameters); + UserInfo queryModel = new UserInfo(); + queryModel.setPageSize(requestParameters.getCount()); + queryModel.calculate(requestParameters.getStartIndex()); + + JpaPageResults orgResults = userInfoService.queryPageResults(queryModel); + List resultList = new ArrayList(); + for(UserInfo user : orgResults.getRows()) { + resultList.add(userInfo2ScimUser(user)); + } + ScimSearchResult scimSearchResult = + new ScimSearchResult( + resultList, + orgResults.getRecords(), + requestParameters.getCount(), + requestParameters.getStartIndex()); + return new MappingJacksonValue(scimSearchResult); + } + + public ScimUser userInfo2ScimUser(UserInfo userInfo) { + ScimUser scimUser =new ScimUser(); + scimUser.setId(userInfo.getId()); + scimUser.setExternalId(userInfo.getId()); + scimUser.setDisplayName(userInfo.getDisplayName()); + scimUser.setUserName(userInfo.getUsername()); + scimUser.setName(new ScimFormattedName( + userInfo.getFormattedName(), + userInfo.getFamilyName(), + userInfo.getGivenName(), + userInfo.getMiddleName(), + userInfo.getHonorificPrefix(), + userInfo.getHonorificSuffix() + ) + ); + scimUser.setNickName(userInfo.getNickName()); + scimUser.setTitle(userInfo.getJobTitle()); + scimUser.setUserType(userInfo.getUserType()); + + ScimEnterprise enterprise = new ScimEnterprise(); + enterprise.setDepartmentId(userInfo.getDepartmentId()); + enterprise.setDepartment(userInfo.getDepartment()); + enterprise.setCostCenter(userInfo.getCostCenter()); + enterprise.setManager(new ScimManager(userInfo.getManagerId(),userInfo.getManager())); + enterprise.setDivision(userInfo.getDivision()); + enterprise.setEmployeeNumber(userInfo.getEmployeeNumber()); + scimUser.setEnterprise(enterprise); + + List organizationsList=new ArrayList(); + organizationsList.add(userInfo.getDepartmentId()); + scimUser.setOrganization(organizationsList); + + List groupsList=new ArrayList(); + List groups = new ArrayList(); + for(Groups group : groupsService.queryGroupByUserId(userInfo.getId())){ + groupsList.add(group.getId()); + groups.add(new ScimGroupRef(group.getId(),group.getName())); + + } + scimUser.setGroup(groupsList); + scimUser.setGroups(groups); + + scimUser.setTimezone(userInfo.getTimeZone()); + scimUser.setLocale(userInfo.getLocale()); + scimUser.setPreferredLanguage(userInfo.getPreferredLanguage()); + scimUser.setActive(userInfo.getStatus() == ConstantsStatus.ACTIVE); + + List emails = new ArrayList(); + if(StringUtils.isNotBlank(userInfo.getEmail())){ + emails.add(new ScimUserEmail(userInfo.getEmail(),UserEmailType.OTHER,true)); + } + if(StringUtils.isNotBlank(userInfo.getWorkEmail())){ + emails.add(new ScimUserEmail(userInfo.getEmail(),UserEmailType.WORK,false)); + } + if(StringUtils.isNotBlank(userInfo.getHomeEmail())){ + emails.add(new ScimUserEmail(userInfo.getEmail(),UserEmailType.HOME,false)); + } + + if(emails.size() > 0) { + scimUser.setEmails(emails); + } + + List phoneNumbers = new ArrayList(); + if(StringUtils.isNotBlank(userInfo.getMobile())){ + phoneNumbers.add(new ScimUserPhoneNumber(userInfo.getMobile(),UserPhoneNumberType.MOBILE,true)); + } + if(StringUtils.isNotBlank(userInfo.getWorkPhoneNumber())){ + phoneNumbers.add(new ScimUserPhoneNumber(userInfo.getWorkPhoneNumber(),UserPhoneNumberType.WORK,false)); + } + + if(StringUtils.isNotBlank(userInfo.getHomePhoneNumber())){ + phoneNumbers.add(new ScimUserPhoneNumber(userInfo.getHomePhoneNumber(),UserPhoneNumberType.HOME,false)); + } + + if(phoneNumbers.size() > 0) { + scimUser.setPhoneNumbers(phoneNumbers); + } + + ScimMeta meta = new ScimMeta("User"); + if(StringUtils.isNotBlank(userInfo.getCreatedDate())){ + meta.setCreated( + DateUtils.parse(userInfo.getCreatedDate(), DateUtils.FORMAT_DATE_YYYY_MM_DD_HH_MM_SS)); + } + if(StringUtils.isNotBlank(userInfo.getModifiedDate())){ + meta.setLastModified( + DateUtils.parse(userInfo.getModifiedDate(), DateUtils.FORMAT_DATE_YYYY_MM_DD_HH_MM_SS)); + } + scimUser.setMeta(meta); + return scimUser; + } + + public UserInfo scimUser2UserInfo(ScimUser scimUser) { + UserInfo userInfo = new UserInfo(); + userInfo.setId(scimUser.getId()); + userInfo.setUsername(scimUser.getUserName()); + return userInfo; } } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Enterprise.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimEnterprise.java similarity index 81% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Enterprise.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimEnterprise.java index 6f3162c02..11f17264b 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Enterprise.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimEnterprise.java @@ -19,15 +19,16 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class Enterprise implements Serializable { +public class ScimEnterprise implements Serializable { private static final long serialVersionUID = -204619629148409697L; private String employeeNumber; private String costCenter; private String organization; private String division; + private String departmentId; private String department; - private Manager manager; + private ScimManager manager; public String getEmployeeNumber() { return employeeNumber; @@ -53,19 +54,26 @@ public class Enterprise implements Serializable { public void setDivision(String division) { this.division = division; } - public String getDepartment() { + + public String getDepartmentId() { + return departmentId; + } + public void setDepartmentId(String departmentId) { + this.departmentId = departmentId; + } + public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } - public Manager getManager() { + public ScimManager getManager() { return manager; } - public void setManager(Manager manager) { + public void setManager(ScimManager manager) { this.manager = manager; } - public Enterprise() { + public ScimEnterprise() { } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/EnterpriseUser.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimEnterpriseUser.java similarity index 81% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/EnterpriseUser.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimEnterpriseUser.java index 456fd9754..b19ac219d 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/EnterpriseUser.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimEnterpriseUser.java @@ -21,25 +21,25 @@ import java.util.HashSet; import com.fasterxml.jackson.annotation.JsonProperty; -public class EnterpriseUser extends User { +public class ScimEnterpriseUser extends ScimUser { private static final long serialVersionUID = 3212312511630459427L; public static final String SCHEMA = "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"; @JsonProperty(SCHEMA) - Enterprise enterprise; + ScimEnterprise enterprise; - public EnterpriseUser() { + public ScimEnterpriseUser() { schemas =new HashSet(); - schemas.add(User.SCHEMA); + schemas.add(ScimUser.SCHEMA); schemas.add(SCHEMA); } - public Enterprise getEnterprise() { + public ScimEnterprise getEnterprise() { return enterprise; } - public void setEnterprise(Enterprise enterprise) { + public void setEnterprise(ScimEnterprise enterprise) { this.enterprise = enterprise; } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserName.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimFormattedName.java similarity index 91% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserName.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimFormattedName.java index 856fa0a26..3d789fa7c 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserName.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimFormattedName.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class UserName implements Serializable { +public class ScimFormattedName implements Serializable { /** * @@ -67,7 +67,7 @@ public class UserName implements Serializable { public void setHonorificSuffix(String honorificSuffix) { this.honorificSuffix = honorificSuffix; } - public UserName(String formatted, String familyName, String givenName, String middleName, String honorificPrefix, + public ScimFormattedName(String formatted, String familyName, String givenName, String middleName, String honorificPrefix, String honorificSuffix) { super(); this.formatted = formatted; @@ -77,7 +77,7 @@ public class UserName implements Serializable { this.honorificPrefix = honorificPrefix; this.honorificSuffix = honorificSuffix; } - public UserName() { + public ScimFormattedName() { } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Group.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimGroup.java similarity index 85% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Group.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimGroup.java index 84524f2dc..e092d9208 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Group.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimGroup.java @@ -20,13 +20,13 @@ package org.maxkey.identity.scim.resources; import java.util.HashSet; import java.util.Set; -public class Group extends Resource{ +public class ScimGroup extends ScimResource{ private static final long serialVersionUID = 404613567384513866L; public static final String SCHEMA = "urn:ietf:params:scim:schemas:core:2.0:Group"; private String displayName; - private Set members; + private Set members; public String getDisplayName() { return displayName; @@ -34,14 +34,14 @@ public class Group extends Resource{ public void setDisplayName(String displayName) { this.displayName = displayName; } - public Set getMembers() { + public Set getMembers() { return members; } - public void setMembers(Set members) { + public void setMembers(Set members) { this.members = members; } - public Group() { + public ScimGroup() { schemas =new HashSet(); schemas.add(SCHEMA); } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/GroupRef.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimGroupRef.java similarity index 78% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/GroupRef.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimGroupRef.java index e1cf8156a..1cb879a31 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/GroupRef.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimGroupRef.java @@ -17,11 +17,20 @@ package org.maxkey.identity.scim.resources; -public class GroupRef extends MultiValuedAttribute{ +public class ScimGroupRef extends ScimMultiValuedAttribute{ /** * */ private static final long serialVersionUID = 7069453283024141999L; + public ScimGroupRef() { + super(); + } + + public ScimGroupRef(String value,String display) { + super(); + this.value = value; + this.display = display; + } } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Manager.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimManager.java similarity index 90% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Manager.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimManager.java index 87d5679c2..456aa50d7 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Manager.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimManager.java @@ -17,7 +17,7 @@ package org.maxkey.identity.scim.resources; -public class Manager { +public class ScimManager { private String managerId; private String displayName; @@ -33,9 +33,9 @@ public class Manager { public void setDisplayName(String displayName) { this.displayName = displayName; } - public Manager() { + public ScimManager() { } - public Manager(String managerId, String displayName) { + public ScimManager(String managerId, String displayName) { super(); this.managerId = managerId; this.displayName = displayName; diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/MemberRef.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimMemberRef.java similarity index 77% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/MemberRef.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimMemberRef.java index 2c73ac559..419b19928 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/MemberRef.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimMemberRef.java @@ -17,11 +17,18 @@ package org.maxkey.identity.scim.resources; -public class MemberRef extends MultiValuedAttribute{ +public class ScimMemberRef extends ScimMultiValuedAttribute{ /** * */ private static final long serialVersionUID = -6018893424394625889L; + public ScimMemberRef() { + } + + public ScimMemberRef(String display,String value) { + this.display = display; + this.value = value; + } } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Meta.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimMeta.java similarity index 89% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Meta.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimMeta.java index f36fc82d9..eaf6b2845 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Meta.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimMeta.java @@ -26,7 +26,7 @@ import org.maxkey.json.*; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -public class Meta implements Serializable { +public class ScimMeta implements Serializable { /** * @@ -87,10 +87,16 @@ public class Meta implements Serializable { public void setResourceType(String resourceType) { this.resourceType = resourceType; } - public Meta() { + public ScimMeta() { } - public Meta(String resourceType, Date created, Date lastModified, String location, String version, + + public ScimMeta(String resourceType) { + this.resourceType = resourceType; + this.version = "1.0"; + } + + public ScimMeta(String resourceType, Date created, Date lastModified, String location, String version, Set attributes) { super(); this.resourceType = resourceType; diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/MultiValuedAttribute.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimMultiValuedAttribute.java similarity index 96% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/MultiValuedAttribute.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimMultiValuedAttribute.java index a8590cf4d..9fa140e16 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/MultiValuedAttribute.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimMultiValuedAttribute.java @@ -21,7 +21,7 @@ import java.io.Serializable; import com.fasterxml.jackson.annotation.JsonProperty; -public class MultiValuedAttribute implements Serializable { +public class ScimMultiValuedAttribute implements Serializable { private static final long serialVersionUID = 6878912593878245947L; diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Organization.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganization.java similarity index 71% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Organization.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganization.java index 797e267e8..8e30a44f1 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Organization.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganization.java @@ -20,7 +20,7 @@ package org.maxkey.identity.scim.resources; import java.util.HashSet; import java.util.List; -public class Organization extends Resource{ +public class ScimOrganization extends ScimResource{ /** * @@ -48,16 +48,24 @@ public class Organization extends Resource{ private String division; - private List addresses; + private List addresses; - private List emails; + private List emails; - private List phoneNumbers; + private List phoneNumbers; + private String sortOrder; private String description; + // T/IDAC 002—2021 + private String displayName; //name + private long order; //sortOrder + private String parent; //parentId + private String parentCode; //parent code + + public String getCode() { return code; } @@ -154,33 +162,67 @@ public class Organization extends Resource{ this.description = description; } - public List getAddresses() { + public List getAddresses() { return addresses; } - public void setAddresses(List addresses) { + public void setAddresses(List addresses) { this.addresses = addresses; } - public List getEmails() { + public List getEmails() { return emails; } - public void setEmails(List emails) { + public void setEmails(List emails) { this.emails = emails; } - public List getPhoneNumbers() { + public List getPhoneNumbers() { return phoneNumbers; } - public void setPhoneNumbers(List phoneNumbers) { + public void setPhoneNumbers(List phoneNumbers) { this.phoneNumbers = phoneNumbers; } - public Organization() { + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public long getOrder() { + return order; + } + + public void setOrder(long order) { + this.order = order; + } + + public String getParent() { + return parent; + } + + public void setParent(String parent) { + this.parent = parent; + } + + public String getParentCode() { + return parentCode; + } + + public void setParentCode(String parentCode) { + this.parentCode = parentCode; + } + + public ScimOrganization() { schemas =new HashSet(); schemas.add(SCHEMA); + } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserAddress.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganizationAddress.java similarity index 94% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserAddress.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganizationAddress.java index a1742cf05..728a2b9b1 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserAddress.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganizationAddress.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class UserAddress extends MultiValuedAttribute implements Serializable { +public class ScimOrganizationAddress extends ScimMultiValuedAttribute implements Serializable { /** * @@ -81,7 +81,7 @@ public class UserAddress extends MultiValuedAttribute implements Serializable { public void setType(String type) { this.type = type; } - public UserAddress() { + public ScimOrganizationAddress() { } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserEmail.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganizationEmail.java similarity index 88% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserEmail.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganizationEmail.java index 762cf309d..a98b90d16 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserEmail.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganizationEmail.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class UserEmail extends MultiValuedAttribute implements Serializable { +public class ScimOrganizationEmail extends ScimMultiValuedAttribute implements Serializable { /** * @@ -57,10 +57,10 @@ public class UserEmail extends MultiValuedAttribute implements Serializable { this.primary = primary; } - public UserEmail() { + public ScimOrganizationEmail() { } - public UserEmail(String value, String type, boolean primary) { + public ScimOrganizationEmail(String value, String type, boolean primary) { super(); this.value = value; this.type = type; diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/OrganizationPhoneNumber.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganizationPhoneNumber.java similarity index 92% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/OrganizationPhoneNumber.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganizationPhoneNumber.java index b43589416..d07913371 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/OrganizationPhoneNumber.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimOrganizationPhoneNumber.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class OrganizationPhoneNumber extends MultiValuedAttribute implements Serializable { +public class ScimOrganizationPhoneNumber extends ScimMultiValuedAttribute implements Serializable { /** * diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimParameters.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimParameters.java new file mode 100644 index 000000000..9ec168f0b --- /dev/null +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimParameters.java @@ -0,0 +1,85 @@ +package org.maxkey.identity.scim.resources; + +import org.maxkey.identity.scim.controller.ScimServiceProviderConfigController; + +public class ScimParameters { + int startIndex = 1; + int count = ScimServiceProviderConfigController.MAX_RESULTS; + String filter; + String sortBy; + String sortOrder = "ascending"; + String attributes; + + public ScimParameters() { + } + + public void parse() { + if(startIndex == -1) { + count = ScimServiceProviderConfigController.MAX_RESULTS_LIMIT; + } + + if(startIndex <= 0) { + startIndex = 1; + } + + if(count > ScimServiceProviderConfigController.MAX_RESULTS + && count != ScimServiceProviderConfigController.MAX_RESULTS_LIMIT) { + count = ScimServiceProviderConfigController.MAX_RESULTS; + } + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public int getStartIndex() { + return startIndex; + } + + public void setStartIndex(int startIndex) { + this.startIndex = startIndex; + } + + public String getfilter() { + return filter; + } + + public void setfilter(String filter) { + this.filter = filter; + } + + public String getSortBy() { + return sortBy; + } + + public void setSortBy(String sortBy) { + this.sortBy = sortBy; + } + + public String getSortOrder() { + return sortOrder; + } + + public void setSortOrder(String sortOrder) { + this.sortOrder = sortOrder; + } + + public String getAttributes() { + return attributes; + } + + public void setAttributes(String attributes) { + this.attributes = attributes; + } + + @Override + public String toString() { + return "ScimParameters [count=" + count + ", startIndex=" + startIndex + ", filter=" + filter + ", sortBy=" + + sortBy + ", sortOrder=" + sortOrder + ", attributes=" + attributes + "]"; + } + +} diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Resource.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimResource.java similarity index 85% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Resource.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimResource.java index 1f4f6cb8e..ae751f064 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Resource.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimResource.java @@ -20,7 +20,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; import java.util.Set; -public class Resource implements Serializable { +public class ScimResource implements Serializable { /** * @@ -29,12 +29,12 @@ public class Resource implements Serializable { protected Set schemas; private String id; private String externalId; - private Meta meta; + private ScimMeta meta; - public Resource() { + public ScimResource() { } - public Resource(String id, String externalId, Meta meta, Set schemas) { + public ScimResource(String id, String externalId, ScimMeta meta, Set schemas) { super(); this.id = id; this.externalId = externalId; @@ -54,10 +54,10 @@ public class Resource implements Serializable { public void setExternalId(String externalId) { this.externalId = externalId; } - public Meta getMeta() { + public ScimMeta getMeta() { return meta; } - public void setMeta(Meta meta) { + public void setMeta(ScimMeta meta) { this.meta = meta; } public Set getSchemas() { diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimSearchResult.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimSearchResult.java index 242c2552b..b1c9056d8 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimSearchResult.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimSearchResult.java @@ -27,12 +27,22 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class ScimSearchResult { + public static class Constants{ + public static final String FILTER = "filter"; + public static final String SORTBY = "sortBy"; + public static final String COUNT = "count"; + public static final String STARTINDEX = "startIndex"; + + + } public static final String SCHEMA = "urn:ietf:params:scim:api:messages:2.0:ListResponse"; public static final int MAX_RESULTS = 100; private long totalResults; private long itemsPerPage; private long startIndex; private Set schemas = new HashSet<>(Collections.singletonList(SCHEMA)); + + @JsonProperty("Resources") private List resources = new ArrayList<>(); /** @@ -50,7 +60,7 @@ public class ScimSearchResult { /** - * gets a list of found {@link User}s or {@link Group}s + * gets a list of found {@link ScimUser}s or {@link ScimGroup}s * * @return a list of found resources */ diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/User.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUser.java similarity index 58% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/User.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUser.java index 0cbbf4f17..588bed00a 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/User.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUser.java @@ -21,17 +21,21 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -public class User extends Resource{ +import com.fasterxml.jackson.annotation.JsonProperty; + +public class ScimUser extends ScimResource{ /** * */ private static final long serialVersionUID = -7478787809774041557L; - public static String SCHEMA = "urn:ietf:params:scim:schemas:core:2.0:User"; + public static final String SCHEMA = "urn:ietf:params:scim:schemas:core:2.0:User"; + + public static final String SCHEMA_ENTERPRISE = "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"; private String userName; - private UserName name; + private ScimFormattedName name; private String displayName; private String nickName; private String profileUrl; @@ -43,34 +47,42 @@ public class User extends Resource{ private Boolean active; private String password; - private List emails; + private List emails; - private List phoneNumbers; + private List phoneNumbers; + + @JsonProperty(SCHEMA_ENTERPRISE) + ScimEnterprise enterprise; + + private List ims; - private List ims; - - private List photos; + private List photos; // Can't really validate that one. value is not acessible - private List addresses; + private List addresses; - private List groups; + private List groups; - private List entitlements; + private List entitlements; - private List roles; + private List roles; - private List x509Certificates; - private Map extensions; + private List x509Certificates; + private Map extensions; + + // T/IDAC 002—2021 + private List organization; + private List group; + public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } - public UserName getName() { + public ScimFormattedName getName() { return name; } - public void setName(UserName name) { + public void setName(ScimFormattedName name) { this.name = name; } public String getDisplayName() { @@ -133,67 +145,88 @@ public class User extends Resource{ public void setPassword(String password) { this.password = password; } - public List getEmails() { + public List getEmails() { return emails; } - public void setEmails(List emails) { + public void setEmails(List emails) { this.emails = emails; } - public List getPhoneNumbers() { + public List getPhoneNumbers() { return phoneNumbers; } - public void setPhoneNumbers(List phoneNumbers) { + public void setPhoneNumbers(List phoneNumbers) { this.phoneNumbers = phoneNumbers; } - public List getIms() { + public List getIms() { return ims; } - public void setIms(List ims) { + public void setIms(List ims) { this.ims = ims; } - public List getPhotos() { + public List getPhotos() { return photos; } - public void setPhotos(List photos) { + public void setPhotos(List photos) { this.photos = photos; } - public List getAddresses() { + public List getAddresses() { return addresses; } - public void setAddresses(List addresses) { + public void setAddresses(List addresses) { this.addresses = addresses; } - public List getGroups() { + public List getGroups() { return groups; } - public void setGroups(List groups) { + public void setGroups(List groups) { this.groups = groups; } - public List getEntitlements() { + public List getEntitlements() { return entitlements; } - public void setEntitlements(List entitlements) { + public void setEntitlements(List entitlements) { this.entitlements = entitlements; } - public List getRoles() { + public List getRoles() { return roles; } - public void setRoles(List roles) { + public void setRoles(List roles) { this.roles = roles; } - public List getX509Certificates() { + public List getX509Certificates() { return x509Certificates; } - public void setX509Certificates(List x509Certificates) { + public void setX509Certificates(List x509Certificates) { this.x509Certificates = x509Certificates; } - public Map getExtensions() { + public Map getExtensions() { return extensions; } - public void setExtensions(Map extensions) { + public void setExtensions(Map extensions) { this.extensions = extensions; } - public User() { + + + public ScimEnterprise getEnterprise() { + return enterprise; + } + public void setEnterprise(ScimEnterprise enterprise) { + this.enterprise = enterprise; + } + + public List getOrganization() { + return organization; + } + public void setOrganization(List organization) { + this.organization = organization; + } + public List getGroup() { + return group; + } + public void setGroup(List group) { + this.group = group; + } + public ScimUser() { schemas =new HashSet(); schemas.add(SCHEMA); } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/OrganizationAddress.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserAddress.java similarity index 95% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/OrganizationAddress.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserAddress.java index 8af1e01e9..8ea9f1d57 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/OrganizationAddress.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserAddress.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class OrganizationAddress extends MultiValuedAttribute implements Serializable { +public class ScimUserAddress extends ScimMultiValuedAttribute implements Serializable { /** * @@ -81,7 +81,7 @@ public class OrganizationAddress extends MultiValuedAttribute implements Seriali public void setType(String type) { this.type = type; } - public OrganizationAddress() { + public ScimUserAddress() { } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/OrganizationEmail.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserEmail.java similarity index 90% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/OrganizationEmail.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserEmail.java index 94beaaa26..fed5af0f2 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/OrganizationEmail.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserEmail.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class OrganizationEmail extends MultiValuedAttribute implements Serializable { +public class ScimUserEmail extends ScimMultiValuedAttribute implements Serializable { /** * @@ -57,10 +57,10 @@ public class OrganizationEmail extends MultiValuedAttribute implements Serializa this.primary = primary; } - public OrganizationEmail() { + public ScimUserEmail() { } - public OrganizationEmail(String value, String type, boolean primary) { + public ScimUserEmail(String value, String type, boolean primary) { super(); this.value = value; this.type = type; diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserEntitlement.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserEntitlement.java similarity index 89% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserEntitlement.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserEntitlement.java index 9828eda74..2362004a6 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserEntitlement.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserEntitlement.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class UserEntitlement extends MultiValuedAttribute implements Serializable { +public class ScimUserEntitlement extends ScimMultiValuedAttribute implements Serializable { /** * diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserExtension.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserExtension.java similarity index 89% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserExtension.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserExtension.java index 3cf55468a..30e08eee5 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserExtension.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserExtension.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class UserExtension extends MultiValuedAttribute implements Serializable { +public class ScimUserExtension extends ScimMultiValuedAttribute implements Serializable { /** * diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserIm.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserIm.java similarity index 93% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserIm.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserIm.java index 52e21dded..3ea2d796e 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserIm.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserIm.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class UserIm extends MultiValuedAttribute implements Serializable { +public class ScimUserIm extends ScimMultiValuedAttribute implements Serializable { /** * diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserOrganization.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserOrganization.java new file mode 100644 index 000000000..213ead75a --- /dev/null +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserOrganization.java @@ -0,0 +1,39 @@ +/* + * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.maxkey.identity.scim.resources; + +import java.io.Serializable; + +public class ScimUserOrganization extends ScimMultiValuedAttribute implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 3201987266085144715L; + + public ScimUserOrganization() { + super(); + } + + public ScimUserOrganization(String value, String display, boolean primary) { + super(); + this.value = value; + this.display = display; + this.primary = primary; + } +} diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserPhoneNumber.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserPhoneNumber.java similarity index 77% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserPhoneNumber.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserPhoneNumber.java index 87e1b6f7c..dbbdbed61 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserPhoneNumber.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserPhoneNumber.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class UserPhoneNumber extends MultiValuedAttribute implements Serializable { +public class ScimUserPhoneNumber extends ScimMultiValuedAttribute implements Serializable { /** * @@ -35,4 +35,15 @@ public class UserPhoneNumber extends MultiValuedAttribute implements Serializabl public static final String OTHER = "other"; } + + public ScimUserPhoneNumber() { + super(); + } + + public ScimUserPhoneNumber(String value, String type, boolean primary) { + super(); + this.value = value; + this.type = type; + this.primary = primary; + } } diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserPhoto.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserPhoto.java similarity index 90% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserPhoto.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserPhoto.java index b3cd0282f..85160bd88 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserPhoto.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserPhoto.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class UserPhoto extends MultiValuedAttribute implements Serializable { +public class ScimUserPhoto extends ScimMultiValuedAttribute implements Serializable { /** * diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserRole.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserRole.java similarity index 90% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserRole.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserRole.java index 26b1aeb2a..cfe7c9bf4 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserRole.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserRole.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class UserRole extends MultiValuedAttribute implements Serializable { +public class ScimUserRole extends ScimMultiValuedAttribute implements Serializable { /** * diff --git a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserX509Certificate.java b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserX509Certificate.java similarity index 89% rename from maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserX509Certificate.java rename to maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserX509Certificate.java index c0456d12d..40239b607 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserX509Certificate.java +++ b/maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimUserX509Certificate.java @@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; import java.io.Serializable; -public class UserX509Certificate extends MultiValuedAttribute implements Serializable { +public class ScimUserX509Certificate extends ScimMultiValuedAttribute implements Serializable { /** * diff --git a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonString2ObjectTest.java b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonString2ObjectTest.java index 2beab9213..6f4b88f50 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonString2ObjectTest.java +++ b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonString2ObjectTest.java @@ -25,7 +25,7 @@ public class ScimEnterpriseUserJsonString2ObjectTest { public static void main(String[] args) { String userJsonString = ReadJson2String.read("ScimEnterpriseUserJsonString.json"); - EnterpriseUser u = JsonUtils.json2Object(userJsonString, EnterpriseUser.class); + ScimEnterpriseUser u = JsonUtils.json2Object(userJsonString, ScimEnterpriseUser.class); System.out.println( (new JsonPretty()).format(JsonUtils.object2Json(u))); diff --git a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonTest.java b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonTest.java index d97a5f19b..f001d1250 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonTest.java +++ b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonTest.java @@ -27,12 +27,12 @@ public class ScimEnterpriseUserJsonTest { public static void main(String[] args) { - EnterpriseUser u = new EnterpriseUser(); + ScimEnterpriseUser u = new ScimEnterpriseUser(); u.setUserName("UserName"); u.setExternalId("UserName"); u.setId("1111111111111"); - Meta meta = new Meta(); + ScimMeta meta = new ScimMeta(); meta.setVersion("W\\/\"f250dd84f0671c3\""); meta.setCreated(new Date()); meta.setLocation("https://example.com/v2/Users/2819c223..."); @@ -40,7 +40,7 @@ public class ScimEnterpriseUserJsonTest { meta.setLastModified(new Date()); u.setMeta(meta); - UserName un=new UserName(); + ScimFormattedName un=new ScimFormattedName(); un.setFamilyName("Jensen"); un.setFormatted("Ms. Barbara J Jensen, III"); un.setGivenName("Barbara"); @@ -49,28 +49,28 @@ public class ScimEnterpriseUserJsonTest { un.setMiddleName("Jane"); u.setName(un); - List UserPhoneNumberList = new ArrayList(); - UserPhoneNumber pn =new UserPhoneNumber(); + List UserPhoneNumberList = new ArrayList(); + ScimUserPhoneNumber pn =new ScimUserPhoneNumber(); pn.setValue("555-555-8377"); - pn.setType(UserPhoneNumber.UserPhoneNumberType.WORK); + pn.setType(ScimUserPhoneNumber.UserPhoneNumberType.WORK); - UserPhoneNumber pnh =new UserPhoneNumber(); + ScimUserPhoneNumber pnh =new ScimUserPhoneNumber(); pnh.setValue("555-555-8377"); - pnh.setType(UserPhoneNumber.UserPhoneNumberType.HOME); + pnh.setType(ScimUserPhoneNumber.UserPhoneNumberType.HOME); UserPhoneNumberList.add(pnh); UserPhoneNumberList.add(pn); u.setPhoneNumbers(UserPhoneNumberList); - List ueList = new ArrayList(); - UserEmail ue =new UserEmail(); + List ueList = new ArrayList(); + ScimUserEmail ue =new ScimUserEmail(); ue.setValue("bjensen@example.com"); - ue.setType(UserEmail.UserEmailType.WORK); + ue.setType(ScimUserEmail.UserEmailType.WORK); ueList.add(ue); u.setEmails(ueList); - Enterprise ent =new Enterprise(); + ScimEnterprise ent =new ScimEnterprise(); ent.setCostCenter("1111"); ent.setDepartment("de"); ent.setEmployeeNumber("k200908"); diff --git a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonString2ObjectTest.java b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonString2ObjectTest.java index 092333e30..3e48fdeaa 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonString2ObjectTest.java +++ b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonString2ObjectTest.java @@ -23,7 +23,7 @@ import org.maxkey.util.JsonUtils; public class ScimGroupJsonString2ObjectTest { public static void main(String[] args) { String userJsonString = ReadJson2String.read("ScimGroupJsonString.json"); - Group g = JsonUtils.json2Object(userJsonString, Group.class); + ScimGroup g = JsonUtils.json2Object(userJsonString, ScimGroup.class); System.out.println( diff --git a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonTest.java b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonTest.java index 6faa23d4e..894569cd2 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonTest.java +++ b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonTest.java @@ -26,9 +26,9 @@ import org.maxkey.util.JsonUtils; public class ScimGroupJsonTest { public static void main(String[] args) { - Group g= new Group(); + ScimGroup g= new ScimGroup(); - Meta meta = new Meta(); + ScimMeta meta = new ScimMeta(); meta.setVersion("W\\/\"f250dd84f0671c3\""); meta.setCreated(new Date()); meta.setLocation("https://example.com/v2/Users/2819c223..."); @@ -38,16 +38,16 @@ public class ScimGroupJsonTest { g.setDisplayName("Tour Guides"); - Set mrSet =new HashSet(); - MemberRef mr1 =new MemberRef(); + Set mrSet =new HashSet(); + ScimMemberRef mr1 =new ScimMemberRef(); mr1.setReference("https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646"); mr1.setValue("2819c223-7f76-453a-919d-413861904646"); mr1.setDisplay("Babs Jensen"); - MemberRef mr2 =new MemberRef(); + ScimMemberRef mr2 =new ScimMemberRef(); mr2.setReference("https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646"); mr2.setValue("2819c223-7f76-453a-919d-413861904646"); mr2.setDisplay("Babs Jensen"); - MemberRef mr3 =new MemberRef(); + ScimMemberRef mr3 =new ScimMemberRef(); mr3.setReference("https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646"); mr3.setValue("2819c223-7f76-453a-919d-413861904646"); mr3.setDisplay("Babs Jensen"); diff --git a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonString2ObjectTest.java b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonString2ObjectTest.java index c5a763670..7a46f9cc1 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonString2ObjectTest.java +++ b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonString2ObjectTest.java @@ -25,7 +25,7 @@ public class ScimUserJsonString2ObjectTest { public static void main(String[] args) { String userJsonString = ReadJson2String.read("ScimUserJsonString.json"); - User u = JsonUtils.json2Object(userJsonString, User.class); + ScimUser u = JsonUtils.json2Object(userJsonString, ScimUser.class); System.out.println( (new JsonPretty()).format(JsonUtils.object2Json(u))); } diff --git a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonTest.java b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonTest.java index ffdd72f19..4ff35e25d 100644 --- a/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonTest.java +++ b/maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonTest.java @@ -26,12 +26,12 @@ import org.maxkey.util.JsonUtils; public class ScimUserJsonTest { public static void main(String[] args) { - User u = new User(); + ScimUser u = new ScimUser(); u.setUserName("UserName"); u.setExternalId("UserName"); u.setId("1111111111111"); - Meta meta = new Meta(); + ScimMeta meta = new ScimMeta(); meta.setVersion("W\\/\"f250dd84f0671c3\""); meta.setCreated(new Date()); meta.setLocation("https://example.com/v2/Users/2819c223..."); @@ -39,7 +39,7 @@ public class ScimUserJsonTest { meta.setLastModified(new Date()); u.setMeta(meta); - UserName un=new UserName(); + ScimFormattedName un=new ScimFormattedName(); un.setFamilyName("Jensen"); un.setFormatted("Ms. Barbara J Jensen, III"); un.setGivenName("Barbara"); @@ -48,24 +48,24 @@ public class ScimUserJsonTest { un.setMiddleName("Jane"); u.setName(un); - List UserPhoneNumberList = new ArrayList(); - UserPhoneNumber pn =new UserPhoneNumber(); + List UserPhoneNumberList = new ArrayList(); + ScimUserPhoneNumber pn =new ScimUserPhoneNumber(); pn.setValue("555-555-8377"); - pn.setType(UserPhoneNumber.UserPhoneNumberType.WORK); + pn.setType(ScimUserPhoneNumber.UserPhoneNumberType.WORK); - UserPhoneNumber pnh =new UserPhoneNumber(); + ScimUserPhoneNumber pnh =new ScimUserPhoneNumber(); pnh.setValue("555-555-8377"); - pnh.setType(UserPhoneNumber.UserPhoneNumberType.HOME); + pnh.setType(ScimUserPhoneNumber.UserPhoneNumberType.HOME); UserPhoneNumberList.add(pnh); UserPhoneNumberList.add(pn); u.setPhoneNumbers(UserPhoneNumberList); - List ueList = new ArrayList(); - UserEmail ue =new UserEmail(); + List ueList = new ArrayList(); + ScimUserEmail ue =new ScimUserEmail(); ue.setValue("bjensen@example.com"); - ue.setType(UserEmail.UserEmailType.WORK); + ue.setType(ScimUserEmail.UserEmailType.WORK); ueList.add(ue); u.setEmails(ueList); diff --git a/maxkey-lib/mybatis-jpa-extra-2.6.jar b/maxkey-lib/mybatis-jpa-extra-2.6.jar index 21bccecdc..5b84c4674 100644 Binary files a/maxkey-lib/mybatis-jpa-extra-2.6.jar and b/maxkey-lib/mybatis-jpa-extra-2.6.jar differ diff --git a/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/GroupMemberMapper.java b/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/GroupMemberMapper.java index 368ada9a3..a25e0e0dd 100644 --- a/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/GroupMemberMapper.java +++ b/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/GroupMemberMapper.java @@ -25,6 +25,7 @@ import java.util.List; import org.apache.mybatis.jpa.persistence.IJpaBaseMapper; import org.maxkey.entity.GroupMember; import org.maxkey.entity.Groups; +import org.maxkey.entity.UserInfo; /** * @author Crystal.sea @@ -44,6 +45,8 @@ public interface GroupMemberMapper extends IJpaBaseMapper { public int deleteByGroupId(String groupId); + public List queryMemberByGroupId(String groupId); + } diff --git a/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/GroupsMapper.java b/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/GroupsMapper.java index ffde5f0ca..433010130 100644 --- a/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/GroupsMapper.java +++ b/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/GroupsMapper.java @@ -33,4 +33,6 @@ import org.maxkey.entity.Groups; public interface GroupsMapper extends IJpaBaseMapper { public List queryDynamicGroups(Groups groups); + + public List queryGroupByUserId(String userId); } diff --git a/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupMemberService.java b/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupMemberService.java index 66a632fb3..c7c64ca05 100644 --- a/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupMemberService.java +++ b/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupMemberService.java @@ -17,9 +17,12 @@ package org.maxkey.persistence.service; +import java.util.List; + import org.apache.mybatis.jpa.persistence.JpaBaseService; import org.maxkey.entity.GroupMember; import org.maxkey.entity.Groups; +import org.maxkey.entity.UserInfo; import org.maxkey.persistence.mapper.GroupMemberMapper; import org.springframework.stereotype.Repository; @@ -45,8 +48,13 @@ public class GroupMemberService extends JpaBaseService{ public int deleteDynamicGroupMember(Groups dynamicGroup) { return getMapper().deleteDynamicGroupMember(dynamicGroup); } + public int deleteByGroupId(String groupId) { return getMapper().deleteByGroupId(groupId); } + public List queryMemberByGroupId(String groupId){ + return getMapper().queryMemberByGroupId(groupId); + } + } diff --git a/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java b/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java index 704b0fd1f..375d54c2c 100644 --- a/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java +++ b/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java @@ -71,6 +71,10 @@ public class GroupsService extends JpaBaseService implements Serializab return true; } + public List queryGroupByUserId(String userId){ + return this.getMapper().queryGroupByUserId(userId); + } + public void refreshDynamicGroups(Groups dynamicGroup){ if(dynamicGroup.getDynamic().equals(ConstantsStatus.ACTIVE+"")) { boolean isDynamicTimeSupport = false; diff --git a/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupMemberMapper.xml b/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupMemberMapper.xml index 4650464bf..bcbfc8ba1 100644 --- a/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupMemberMapper.xml +++ b/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupMemberMapper.xml @@ -244,6 +244,52 @@ ) + + + delete from mxk_group_member gm where gm.groupid=#{value} diff --git a/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupsMapper.xml b/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupsMapper.xml index 9d238e2ed..588baa1d2 100644 --- a/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupsMapper.xml +++ b/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupsMapper.xml @@ -54,5 +54,21 @@ + + + \ No newline at end of file diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtJobs.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtJobs.java index 49b7da6da..374a2f210 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtJobs.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtJobs.java @@ -94,7 +94,7 @@ public class MaxKeyMgtJobs implements InitializingBean { .build(); JobDataMap jobDataMap = new JobDataMap(); - jobDataMap.put("groupsService", groupsService); + jobDataMap.put("service", groupsService); CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronSchedule); CronTrigger cronTrigger = @@ -121,7 +121,7 @@ public class MaxKeyMgtJobs implements InitializingBean { .build(); JobDataMap jobDataMap = new JobDataMap(); - jobDataMap.put("accountsService", accountsService); + jobDataMap.put("service", accountsService); CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronSchedule); CronTrigger cronTrigger = diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtMvcConfig.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtMvcConfig.java index 4e50839fe..a451cd08c 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtMvcConfig.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtMvcConfig.java @@ -151,11 +151,17 @@ public class MaxKeyMgtMvcConfig implements WebMvcConfigurer { _logger.debug("add LocaleChangeInterceptor"); - + /* + * api + * idm + * scim + * */ registry.addInterceptor(restApiPermissionAdapter) - .addPathPatterns("/im/api/**") + .addPathPatterns("/api/**") + .addPathPatterns("/api/idm/**") + .addPathPatterns("/api/idm/scim/**") ; - + _logger.debug("add RestApiPermissionAdapter"); } diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/AccountsStrategyJob.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/AccountsStrategyJob.java index 82f66d269..397721d55 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/AccountsStrategyJob.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/AccountsStrategyJob.java @@ -54,12 +54,14 @@ public class AccountsStrategyJob implements Job , Serializable { jobStatus = JOBSTATUS.RUNNING; try { if(accountsService == null) { - accountsService = (AccountsService) context.getMergedJobDataMap().get("accountsService"); - } + accountsService = + (AccountsService) context.getMergedJobDataMap().get("service"); + }else { - accountsService.refreshAllByStrategy(); + accountsService.refreshAllByStrategy(); - Thread.sleep(10 *1000); + Thread.sleep(10 *1000); + } _logger.debug("DynamicGroupsJob is success " ); }catch(Exception e) { _logger.error("Exception " ,e); diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/DynamicGroupsJob.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/DynamicGroupsJob.java index f66962c46..7890dc198 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/DynamicGroupsJob.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/DynamicGroupsJob.java @@ -53,12 +53,14 @@ public class DynamicGroupsJob implements Job , Serializable { jobStatus = JOBSTATUS.RUNNING; try { if(groupsService == null) { - groupsService = (GroupsService) context.getMergedJobDataMap().get("service"); - } + groupsService = + (GroupsService) context.getMergedJobDataMap().get("service"); + }else { - groupsService.refreshAllDynamicGroups(); + groupsService.refreshAllDynamicGroups(); - Thread.sleep(10 *1000); + Thread.sleep(10 *1000); + } _logger.debug("DynamicGroupsJob is success " ); }catch(Exception e) { _logger.error("Exception " ,e);