提交 2cd04e78 编写于 作者: M MaxKey

SCIM optimize

上级 681906e0
...@@ -43,6 +43,7 @@ public class Organizations extends JpaBaseEntity implements Serializable { ...@@ -43,6 +43,7 @@ public class Organizations extends JpaBaseEntity implements Serializable {
private String fullName; private String fullName;
@Column @Column
private String parentId; private String parentId;
private String parentCode;
@Column @Column
private String parentName; private String parentName;
@Column @Column
...@@ -85,6 +86,14 @@ public class Organizations extends JpaBaseEntity implements Serializable { ...@@ -85,6 +86,14 @@ public class Organizations extends JpaBaseEntity implements Serializable {
private String description; private String description;
@Column @Column
private int status; private int status;
@Column
String createdBy;
@Column
String createdDate;
@Column
String modifiedBy;
@Column
String modifiedDate;
private int isPrimary = 0; private int isPrimary = 0;
...@@ -136,6 +145,14 @@ public class Organizations extends JpaBaseEntity implements Serializable { ...@@ -136,6 +145,14 @@ public class Organizations extends JpaBaseEntity implements Serializable {
this.parentId = parentId; this.parentId = parentId;
} }
public String getParentCode() {
return parentCode;
}
public void setParentCode(String parentCode) {
this.parentCode = parentCode;
}
public String getParentName() { public String getParentName() {
return parentName; return parentName;
} }
...@@ -322,6 +339,38 @@ public class Organizations extends JpaBaseEntity implements Serializable { ...@@ -322,6 +339,38 @@ public class Organizations extends JpaBaseEntity implements Serializable {
this.reorgNamePath = reorgNamePath; this.reorgNamePath = reorgNamePath;
} }
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 @Override
public String toString() { public String toString() {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
......
...@@ -34,7 +34,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; ...@@ -34,7 +34,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.UriComponentsBuilder;
@Controller @Controller
@RequestMapping(value={"/im/api/Organization"}) @RequestMapping(value={"/api/idm/Organization"})
public class RestOrganizationController { public class RestOrganizationController {
@Autowired @Autowired
......
...@@ -35,7 +35,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; ...@@ -35,7 +35,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.UriComponentsBuilder;
@Controller @Controller
@RequestMapping(value={"/im/api/Users"}) @RequestMapping(value={"/api/idm/Users"})
public class RestUserInfoController { public class RestUserInfoController {
@Autowired @Autowired
......
...@@ -17,9 +17,142 @@ ...@@ -17,9 +17,142 @@
package org.maxkey.identity.scim.controller; 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.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 { 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<UserInfo> userList = groupMemberService.queryMemberByGroupId(id);
if(userList != null && userList.size() > 0) {
Set<ScimMemberRef> members = new HashSet<ScimMemberRef>();
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<Groups> orgResults = groupsService.queryPageResults(queryModel);
List<ScimGroup> resultList = new ArrayList<ScimGroup>();
for(Groups group : orgResults.getRows()) {
resultList.add(group2ScimGroup(group));
}
ScimSearchResult<ScimGroup> scimSearchResult =
new ScimSearchResult<ScimGroup>(
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;
}
} }
...@@ -18,14 +18,24 @@ ...@@ -18,14 +18,24 @@
package org.maxkey.identity.scim.controller; package org.maxkey.identity.scim.controller;
import java.io.IOException; 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.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.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.json.MappingJacksonValue; 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.PathVariable;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -45,57 +55,130 @@ import org.springframework.web.util.UriComponentsBuilder; ...@@ -45,57 +55,130 @@ import org.springframework.web.util.UriComponentsBuilder;
* http://tools.ietf.org/html/draft-ietf-scim-api-00#section-3 * http://tools.ietf.org/html/draft-ietf-scim-api-00#section-3
*/ */
@RestController @RestController
@RequestMapping(value = "/im/scim/v2/Organization") @RequestMapping(value = "/api/idm/SCIM/v2/Organization")
public class ScimOrganizationController { public class ScimOrganizationController {
final static Logger _logger = LoggerFactory.getLogger(ScimOrganizationController.class);
@Autowired
OrganizationsService organizationsService;
@RequestMapping(value = "/{id}", method = RequestMethod.GET) @RequestMapping(value = "/{id}", method = RequestMethod.GET)
public MappingJacksonValue getOrganization(@PathVariable String id, public MappingJacksonValue get(@PathVariable String id,
@RequestParam(required = false) String attributes) { @RequestParam(required = false) String attributes) {
//Organization user = null; Organizations org = organizationsService.get(id);
return null; ScimOrganization scimOrg = org2ScimOrg(org);
return new MappingJacksonValue(scimOrg);
} }
@RequestMapping(method = RequestMethod.POST) @RequestMapping(method = RequestMethod.POST)
public ResponseEntity<MappingJacksonValue> create(@RequestBody Organization user, public MappingJacksonValue create(@RequestBody ScimOrganization scimOrg,
@RequestParam(required = false) String attributes, @RequestParam(required = false) String attributes,
UriComponentsBuilder builder) throws IOException { UriComponentsBuilder builder) throws IOException {
//Organization createdUser = null; Organizations createOrg = scimOrg2Org(scimOrg);
return null; organizationsService.insert(createOrg);
return get(createOrg.getId(), attributes);
} }
@RequestMapping(value = "/{id}", method = RequestMethod.PUT) @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public ResponseEntity<MappingJacksonValue> replace(@PathVariable String id, public MappingJacksonValue replace(@PathVariable String id,
@RequestBody Organization user, @RequestBody ScimOrganization scimOrg,
@RequestParam(required = false) String attributes) @RequestParam(required = false) String attributes)throws IOException {
throws IOException { Organizations updateOrg = scimOrg2Org(scimOrg);
//Organization createdUser = null; organizationsService.update(updateOrg);
return null; return get(id, attributes);
} }
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE) @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public void delete(@PathVariable final String id) { public void delete(@PathVariable final String id) {
//tokenService.revokeAllTokensOfUser(id); organizationsService.remove(id);
} }
@RequestMapping(method = RequestMethod.GET) @RequestMapping(method = RequestMethod.GET)
public MappingJacksonValue searchWithGet(@RequestParam Map<String, String> requestParameters) { public MappingJacksonValue searchWithGet(@ModelAttribute ScimParameters requestParameters) {
return searchWithPost(requestParameters); return searchWithPost(requestParameters);
} }
@RequestMapping(value = "/.search", method = RequestMethod.POST) @RequestMapping(value = "/.search", method = RequestMethod.POST)
public MappingJacksonValue searchWithPost(@RequestParam Map<String, String> requestParameters) { public MappingJacksonValue searchWithPost(@ModelAttribute ScimParameters requestParameters) {
//ScimSearchResult<User> scimSearchResult = null; requestParameters.parse();
/* _logger.debug("requestParameters {} ",requestParameters);
requestParameters.get("filter"), Organizations queryModel = new Organizations();
requestParameters.get("sortBy"), queryModel.setPageSize(requestParameters.getCount());
requestParameters.getOrDefault("sortOrder", "ascending"), // scim default queryModel.calculate(requestParameters.getStartIndex());
Integer.parseInt(requestParameters.getOrDefault("count", "" + ScimServiceProviderConfigController.MAX_RESULTS)),
Integer.parseInt(requestParameters.getOrDefault("startIndex", "1")); // scim default JpaPageResults<Organizations> orgResults = organizationsService.queryPageResults(queryModel);
*/ List<ScimOrganization> resultList = new ArrayList<ScimOrganization>();
//String attributes = (requestParameters.containsKey("attributes") ? requestParameters.get("attributes") : ""); for(Organizations org : orgResults.getRows()) {
resultList.add(org2ScimOrg(org));
return null; }
ScimSearchResult<ScimOrganization> scimSearchResult =
new ScimSearchResult<ScimOrganization>(
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;
} }
} }
...@@ -26,10 +26,11 @@ import java.util.HashSet; ...@@ -26,10 +26,11 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
@RestController @RestController
@RequestMapping(value = "/im/scim/v2/ServiceProviderConfig") @RequestMapping(value = "/api/idm/SCIM/v2/ServiceProviderConfig")
public class ScimServiceProviderConfigController { 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 @RequestMapping
@ResponseBody @ResponseBody
......
...@@ -18,13 +18,34 @@ ...@@ -18,13 +18,34 @@
package org.maxkey.identity.scim.controller; package org.maxkey.identity.scim.controller;
import java.io.IOException; 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.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.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.json.MappingJacksonValue; 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.PathVariable;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -44,56 +65,170 @@ import org.springframework.web.util.UriComponentsBuilder; ...@@ -44,56 +65,170 @@ import org.springframework.web.util.UriComponentsBuilder;
* http://tools.ietf.org/html/draft-ietf-scim-api-00#section-3 * http://tools.ietf.org/html/draft-ietf-scim-api-00#section-3
*/ */
@RestController @RestController
@RequestMapping(value = "/im/scim/v2/Users") @RequestMapping(value = "/api/idm/SCIM/v2/Users")
public class ScimUserController { public class ScimUserController {
final static Logger _logger = LoggerFactory.getLogger(ScimUserController.class);
@Autowired
private UserInfoService userInfoService;
@Autowired
GroupsService groupsService;
@RequestMapping(value = "/{id}", method = RequestMethod.GET) @RequestMapping(value = "/{id}", method = RequestMethod.GET)
public MappingJacksonValue getUser(@PathVariable String id, public MappingJacksonValue get(@PathVariable String id,
@RequestParam(required = false) String attributes) { @RequestParam(required = false) String attributes) {
//User user = null; UserInfo userInfo = userInfoService.get(id);
return null; ScimUser scimUser = userInfo2ScimUser(userInfo);
return new MappingJacksonValue(scimUser);
} }
@RequestMapping(method = RequestMethod.POST) @RequestMapping(method = RequestMethod.POST)
public ResponseEntity<MappingJacksonValue> create(@RequestBody User user, public MappingJacksonValue create(@RequestBody ScimUser user,
@RequestParam(required = false) String attributes, @RequestParam(required = false) String attributes,
UriComponentsBuilder builder) throws IOException { UriComponentsBuilder builder) throws IOException {
//User createdUser = null; UserInfo userInfo = scimUser2UserInfo(user);
return null; userInfoService.insert(userInfo);
return get(userInfo.getId(),attributes);
} }
@RequestMapping(value = "/{id}", method = RequestMethod.PUT) @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public ResponseEntity<MappingJacksonValue> replace(@PathVariable String id, public MappingJacksonValue replace(@PathVariable String id,
@RequestBody User user, @RequestBody ScimUser user,
@RequestParam(required = false) String attributes) @RequestParam(required = false) String attributes)
throws IOException { throws IOException {
//User createdUser = null; UserInfo userInfo = scimUser2UserInfo(user);
return null; userInfoService.update(userInfo);
return get(id,attributes);
} }
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE) @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public void delete(@PathVariable final String id) { public void delete(@PathVariable final String id) {
//tokenService.revokeAllTokensOfUser(id); userInfoService.remove(id);
} }
@RequestMapping(method = RequestMethod.GET) @RequestMapping(method = RequestMethod.GET)
public MappingJacksonValue searchWithGet(@RequestParam Map<String, String> requestParameters) { public MappingJacksonValue searchWithGet(@ModelAttribute ScimParameters requestParameters) {
return searchWithPost(requestParameters); return searchWithPost(requestParameters);
} }
@RequestMapping(value = "/.search", method = RequestMethod.POST) @RequestMapping(value = "/.search", method = RequestMethod.POST)
public MappingJacksonValue searchWithPost(@RequestParam Map<String, String> requestParameters) { public MappingJacksonValue searchWithPost(@ModelAttribute ScimParameters requestParameters) {
//ScimSearchResult<User> scimSearchResult = null; requestParameters.parse();
/* _logger.debug("requestParameters {} ",requestParameters);
requestParameters.get("filter"), UserInfo queryModel = new UserInfo();
requestParameters.get("sortBy"), queryModel.setPageSize(requestParameters.getCount());
requestParameters.getOrDefault("sortOrder", "ascending"), // scim default queryModel.calculate(requestParameters.getStartIndex());
Integer.parseInt(requestParameters.getOrDefault("count", "" + ScimServiceProviderConfigController.MAX_RESULTS)),
Integer.parseInt(requestParameters.getOrDefault("startIndex", "1")); // scim default JpaPageResults<UserInfo> orgResults = userInfoService.queryPageResults(queryModel);
*/ List<ScimUser> resultList = new ArrayList<ScimUser>();
//String attributes = (requestParameters.containsKey("attributes") ? requestParameters.get("attributes") : ""); for(UserInfo user : orgResults.getRows()) {
return null; resultList.add(userInfo2ScimUser(user));
}
ScimSearchResult<ScimUser> scimSearchResult =
new ScimSearchResult<ScimUser>(
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<String> organizationsList=new ArrayList<String>();
organizationsList.add(userInfo.getDepartmentId());
scimUser.setOrganization(organizationsList);
List<String> groupsList=new ArrayList<String>();
List<ScimGroupRef> groups = new ArrayList<ScimGroupRef>();
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<ScimUserEmail> emails = new ArrayList<ScimUserEmail>();
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<ScimUserPhoneNumber> phoneNumbers = new ArrayList<ScimUserPhoneNumber>();
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;
} }
} }
...@@ -19,15 +19,16 @@ package org.maxkey.identity.scim.resources; ...@@ -19,15 +19,16 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; import java.io.Serializable;
public class Enterprise implements Serializable { public class ScimEnterprise implements Serializable {
private static final long serialVersionUID = -204619629148409697L; private static final long serialVersionUID = -204619629148409697L;
private String employeeNumber; private String employeeNumber;
private String costCenter; private String costCenter;
private String organization; private String organization;
private String division; private String division;
private String departmentId;
private String department; private String department;
private Manager manager; private ScimManager manager;
public String getEmployeeNumber() { public String getEmployeeNumber() {
return employeeNumber; return employeeNumber;
...@@ -53,19 +54,26 @@ public class Enterprise implements Serializable { ...@@ -53,19 +54,26 @@ public class Enterprise implements Serializable {
public void setDivision(String division) { public void setDivision(String division) {
this.division = division; this.division = division;
} }
public String getDepartmentId() {
return departmentId;
}
public void setDepartmentId(String departmentId) {
this.departmentId = departmentId;
}
public String getDepartment() { public String getDepartment() {
return department; return department;
} }
public void setDepartment(String department) { public void setDepartment(String department) {
this.department = department; this.department = department;
} }
public Manager getManager() { public ScimManager getManager() {
return manager; return manager;
} }
public void setManager(Manager manager) { public void setManager(ScimManager manager) {
this.manager = manager; this.manager = manager;
} }
public Enterprise() { public ScimEnterprise() {
} }
......
...@@ -21,25 +21,25 @@ import java.util.HashSet; ...@@ -21,25 +21,25 @@ import java.util.HashSet;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
public class EnterpriseUser extends User { public class ScimEnterpriseUser extends ScimUser {
private static final long serialVersionUID = 3212312511630459427L; private static final long serialVersionUID = 3212312511630459427L;
public static final String SCHEMA = "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"; public static final String SCHEMA = "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User";
@JsonProperty(SCHEMA) @JsonProperty(SCHEMA)
Enterprise enterprise; ScimEnterprise enterprise;
public EnterpriseUser() { public ScimEnterpriseUser() {
schemas =new HashSet<String>(); schemas =new HashSet<String>();
schemas.add(User.SCHEMA); schemas.add(ScimUser.SCHEMA);
schemas.add(SCHEMA); schemas.add(SCHEMA);
} }
public Enterprise getEnterprise() { public ScimEnterprise getEnterprise() {
return enterprise; return enterprise;
} }
public void setEnterprise(Enterprise enterprise) { public void setEnterprise(ScimEnterprise enterprise) {
this.enterprise = enterprise; this.enterprise = enterprise;
} }
......
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; import java.io.Serializable;
public class UserName implements Serializable { public class ScimFormattedName implements Serializable {
/** /**
* *
...@@ -67,7 +67,7 @@ public class UserName implements Serializable { ...@@ -67,7 +67,7 @@ public class UserName implements Serializable {
public void setHonorificSuffix(String honorificSuffix) { public void setHonorificSuffix(String honorificSuffix) {
this.honorificSuffix = 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) { String honorificSuffix) {
super(); super();
this.formatted = formatted; this.formatted = formatted;
...@@ -77,7 +77,7 @@ public class UserName implements Serializable { ...@@ -77,7 +77,7 @@ public class UserName implements Serializable {
this.honorificPrefix = honorificPrefix; this.honorificPrefix = honorificPrefix;
this.honorificSuffix = honorificSuffix; this.honorificSuffix = honorificSuffix;
} }
public UserName() { public ScimFormattedName() {
} }
......
...@@ -20,13 +20,13 @@ package org.maxkey.identity.scim.resources; ...@@ -20,13 +20,13 @@ package org.maxkey.identity.scim.resources;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
public class Group extends Resource{ public class ScimGroup extends ScimResource{
private static final long serialVersionUID = 404613567384513866L; private static final long serialVersionUID = 404613567384513866L;
public static final String SCHEMA = "urn:ietf:params:scim:schemas:core:2.0:Group"; public static final String SCHEMA = "urn:ietf:params:scim:schemas:core:2.0:Group";
private String displayName; private String displayName;
private Set<MemberRef> members; private Set<ScimMemberRef> members;
public String getDisplayName() { public String getDisplayName() {
return displayName; return displayName;
...@@ -34,14 +34,14 @@ public class Group extends Resource{ ...@@ -34,14 +34,14 @@ public class Group extends Resource{
public void setDisplayName(String displayName) { public void setDisplayName(String displayName) {
this.displayName = displayName; this.displayName = displayName;
} }
public Set<MemberRef> getMembers() { public Set<ScimMemberRef> getMembers() {
return members; return members;
} }
public void setMembers(Set<MemberRef> members) { public void setMembers(Set<ScimMemberRef> members) {
this.members = members; this.members = members;
} }
public Group() { public ScimGroup() {
schemas =new HashSet<String>(); schemas =new HashSet<String>();
schemas.add(SCHEMA); schemas.add(SCHEMA);
} }
......
...@@ -17,11 +17,20 @@ ...@@ -17,11 +17,20 @@
package org.maxkey.identity.scim.resources; package org.maxkey.identity.scim.resources;
public class GroupRef extends MultiValuedAttribute{ public class ScimGroupRef extends ScimMultiValuedAttribute{
/** /**
* *
*/ */
private static final long serialVersionUID = 7069453283024141999L; private static final long serialVersionUID = 7069453283024141999L;
public ScimGroupRef() {
super();
}
public ScimGroupRef(String value,String display) {
super();
this.value = value;
this.display = display;
}
} }
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
package org.maxkey.identity.scim.resources; package org.maxkey.identity.scim.resources;
public class Manager { public class ScimManager {
private String managerId; private String managerId;
private String displayName; private String displayName;
...@@ -33,9 +33,9 @@ public class Manager { ...@@ -33,9 +33,9 @@ public class Manager {
public void setDisplayName(String displayName) { public void setDisplayName(String displayName) {
this.displayName = displayName; this.displayName = displayName;
} }
public Manager() { public ScimManager() {
} }
public Manager(String managerId, String displayName) { public ScimManager(String managerId, String displayName) {
super(); super();
this.managerId = managerId; this.managerId = managerId;
this.displayName = displayName; this.displayName = displayName;
......
...@@ -17,11 +17,18 @@ ...@@ -17,11 +17,18 @@
package org.maxkey.identity.scim.resources; package org.maxkey.identity.scim.resources;
public class MemberRef extends MultiValuedAttribute{ public class ScimMemberRef extends ScimMultiValuedAttribute{
/** /**
* *
*/ */
private static final long serialVersionUID = -6018893424394625889L; private static final long serialVersionUID = -6018893424394625889L;
public ScimMemberRef() {
}
public ScimMemberRef(String display,String value) {
this.display = display;
this.value = value;
}
} }
...@@ -26,7 +26,7 @@ import org.maxkey.json.*; ...@@ -26,7 +26,7 @@ import org.maxkey.json.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; 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 { ...@@ -87,10 +87,16 @@ public class Meta implements Serializable {
public void setResourceType(String resourceType) { public void setResourceType(String resourceType) {
this.resourceType = 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<String> attributes) { Set<String> attributes) {
super(); super();
this.resourceType = resourceType; this.resourceType = resourceType;
......
...@@ -21,7 +21,7 @@ import java.io.Serializable; ...@@ -21,7 +21,7 @@ import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
public class MultiValuedAttribute implements Serializable { public class ScimMultiValuedAttribute implements Serializable {
private static final long serialVersionUID = 6878912593878245947L; private static final long serialVersionUID = 6878912593878245947L;
......
...@@ -20,7 +20,7 @@ package org.maxkey.identity.scim.resources; ...@@ -20,7 +20,7 @@ package org.maxkey.identity.scim.resources;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
public class Organization extends Resource{ public class ScimOrganization extends ScimResource{
/** /**
* *
...@@ -48,16 +48,24 @@ public class Organization extends Resource{ ...@@ -48,16 +48,24 @@ public class Organization extends Resource{
private String division; private String division;
private List<OrganizationAddress> addresses; private List<ScimOrganizationAddress> addresses;
private List<OrganizationEmail> emails; private List<ScimOrganizationEmail> emails;
private List<ScimOrganizationPhoneNumber> phoneNumbers;
private List<OrganizationPhoneNumber> phoneNumbers;
private String sortOrder; private String sortOrder;
private String description; 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() { public String getCode() {
return code; return code;
} }
...@@ -154,33 +162,67 @@ public class Organization extends Resource{ ...@@ -154,33 +162,67 @@ public class Organization extends Resource{
this.description = description; this.description = description;
} }
public List<OrganizationAddress> getAddresses() { public List<ScimOrganizationAddress> getAddresses() {
return addresses; return addresses;
} }
public void setAddresses(List<OrganizationAddress> addresses) { public void setAddresses(List<ScimOrganizationAddress> addresses) {
this.addresses = addresses; this.addresses = addresses;
} }
public List<OrganizationEmail> getEmails() { public List<ScimOrganizationEmail> getEmails() {
return emails; return emails;
} }
public void setEmails(List<OrganizationEmail> emails) { public void setEmails(List<ScimOrganizationEmail> emails) {
this.emails = emails; this.emails = emails;
} }
public List<OrganizationPhoneNumber> getPhoneNumbers() { public List<ScimOrganizationPhoneNumber> getPhoneNumbers() {
return phoneNumbers; return phoneNumbers;
} }
public void setPhoneNumbers(List<OrganizationPhoneNumber> phoneNumbers) { public void setPhoneNumbers(List<ScimOrganizationPhoneNumber> phoneNumbers) {
this.phoneNumbers = 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<String>(); schemas =new HashSet<String>();
schemas.add(SCHEMA); schemas.add(SCHEMA);
} }
......
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; 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 { ...@@ -81,7 +81,7 @@ public class UserAddress extends MultiValuedAttribute implements Serializable {
public void setType(String type) { public void setType(String type) {
this.type = type; this.type = type;
} }
public UserAddress() { public ScimOrganizationAddress() {
} }
......
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; 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 { ...@@ -57,10 +57,10 @@ public class UserEmail extends MultiValuedAttribute implements Serializable {
this.primary = primary; this.primary = primary;
} }
public UserEmail() { public ScimOrganizationEmail() {
} }
public UserEmail(String value, String type, boolean primary) { public ScimOrganizationEmail(String value, String type, boolean primary) {
super(); super();
this.value = value; this.value = value;
this.type = type; this.type = type;
......
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; import java.io.Serializable;
public class OrganizationPhoneNumber extends MultiValuedAttribute implements Serializable { public class ScimOrganizationPhoneNumber extends ScimMultiValuedAttribute implements Serializable {
/** /**
* *
......
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 + "]";
}
}
...@@ -20,7 +20,7 @@ package org.maxkey.identity.scim.resources; ...@@ -20,7 +20,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; import java.io.Serializable;
import java.util.Set; import java.util.Set;
public class Resource implements Serializable { public class ScimResource implements Serializable {
/** /**
* *
...@@ -29,12 +29,12 @@ public class Resource implements Serializable { ...@@ -29,12 +29,12 @@ public class Resource implements Serializable {
protected Set<String> schemas; protected Set<String> schemas;
private String id; private String id;
private String externalId; private String externalId;
private Meta meta; private ScimMeta meta;
public Resource() { public ScimResource() {
} }
public Resource(String id, String externalId, Meta meta, Set<String> schemas) { public ScimResource(String id, String externalId, ScimMeta meta, Set<String> schemas) {
super(); super();
this.id = id; this.id = id;
this.externalId = externalId; this.externalId = externalId;
...@@ -54,10 +54,10 @@ public class Resource implements Serializable { ...@@ -54,10 +54,10 @@ public class Resource implements Serializable {
public void setExternalId(String externalId) { public void setExternalId(String externalId) {
this.externalId = externalId; this.externalId = externalId;
} }
public Meta getMeta() { public ScimMeta getMeta() {
return meta; return meta;
} }
public void setMeta(Meta meta) { public void setMeta(ScimMeta meta) {
this.meta = meta; this.meta = meta;
} }
public Set<String> getSchemas() { public Set<String> getSchemas() {
......
...@@ -27,12 +27,22 @@ import com.fasterxml.jackson.annotation.JsonProperty; ...@@ -27,12 +27,22 @@ import com.fasterxml.jackson.annotation.JsonProperty;
public class ScimSearchResult <T>{ public class ScimSearchResult <T>{
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 String SCHEMA = "urn:ietf:params:scim:api:messages:2.0:ListResponse";
public static final int MAX_RESULTS = 100; public static final int MAX_RESULTS = 100;
private long totalResults; private long totalResults;
private long itemsPerPage; private long itemsPerPage;
private long startIndex; private long startIndex;
private Set<String> schemas = new HashSet<>(Collections.singletonList(SCHEMA)); private Set<String> schemas = new HashSet<>(Collections.singletonList(SCHEMA));
@JsonProperty("Resources")
private List<T> resources = new ArrayList<>(); private List<T> resources = new ArrayList<>();
/** /**
...@@ -50,7 +60,7 @@ public class ScimSearchResult <T>{ ...@@ -50,7 +60,7 @@ public class ScimSearchResult <T>{
/** /**
* 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 * @return a list of found resources
*/ */
......
...@@ -21,17 +21,21 @@ import java.util.HashSet; ...@@ -21,17 +21,21 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; 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; 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 String userName;
private UserName name; private ScimFormattedName name;
private String displayName; private String displayName;
private String nickName; private String nickName;
private String profileUrl; private String profileUrl;
...@@ -43,34 +47,42 @@ public class User extends Resource{ ...@@ -43,34 +47,42 @@ public class User extends Resource{
private Boolean active; private Boolean active;
private String password; private String password;
private List<UserEmail> emails; private List<ScimUserEmail> emails;
private List<UserPhoneNumber> phoneNumbers; private List<ScimUserPhoneNumber> phoneNumbers;
private List<UserIm> ims; @JsonProperty(SCHEMA_ENTERPRISE)
ScimEnterprise enterprise;
private List<UserPhoto> photos; private List<ScimUserIm> ims;
private List<ScimUserPhoto> photos;
// Can't really validate that one. value is not acessible // Can't really validate that one. value is not acessible
private List<UserAddress> addresses; private List<ScimUserAddress> addresses;
private List<ScimGroupRef> groups;
private List<GroupRef> groups; private List<ScimUserEntitlement> entitlements;
private List<UserEntitlement> entitlements; private List<ScimUserRole> roles;
private List<UserRole> roles; private List<ScimUserX509Certificate> x509Certificates;
private Map<String, ScimUserExtension> extensions;
// T/IDAC 002—2021
private List<String> organization;
private List<String> group;
private List<UserX509Certificate> x509Certificates;
private Map<String, UserExtension> extensions;
public String getUserName() { public String getUserName() {
return userName; return userName;
} }
public void setUserName(String userName) { public void setUserName(String userName) {
this.userName = userName; this.userName = userName;
} }
public UserName getName() { public ScimFormattedName getName() {
return name; return name;
} }
public void setName(UserName name) { public void setName(ScimFormattedName name) {
this.name = name; this.name = name;
} }
public String getDisplayName() { public String getDisplayName() {
...@@ -133,67 +145,88 @@ public class User extends Resource{ ...@@ -133,67 +145,88 @@ public class User extends Resource{
public void setPassword(String password) { public void setPassword(String password) {
this.password = password; this.password = password;
} }
public List<UserEmail> getEmails() { public List<ScimUserEmail> getEmails() {
return emails; return emails;
} }
public void setEmails(List<UserEmail> emails) { public void setEmails(List<ScimUserEmail> emails) {
this.emails = emails; this.emails = emails;
} }
public List<UserPhoneNumber> getPhoneNumbers() { public List<ScimUserPhoneNumber> getPhoneNumbers() {
return phoneNumbers; return phoneNumbers;
} }
public void setPhoneNumbers(List<UserPhoneNumber> phoneNumbers) { public void setPhoneNumbers(List<ScimUserPhoneNumber> phoneNumbers) {
this.phoneNumbers = phoneNumbers; this.phoneNumbers = phoneNumbers;
} }
public List<UserIm> getIms() { public List<ScimUserIm> getIms() {
return ims; return ims;
} }
public void setIms(List<UserIm> ims) { public void setIms(List<ScimUserIm> ims) {
this.ims = ims; this.ims = ims;
} }
public List<UserPhoto> getPhotos() { public List<ScimUserPhoto> getPhotos() {
return photos; return photos;
} }
public void setPhotos(List<UserPhoto> photos) { public void setPhotos(List<ScimUserPhoto> photos) {
this.photos = photos; this.photos = photos;
} }
public List<UserAddress> getAddresses() { public List<ScimUserAddress> getAddresses() {
return addresses; return addresses;
} }
public void setAddresses(List<UserAddress> addresses) { public void setAddresses(List<ScimUserAddress> addresses) {
this.addresses = addresses; this.addresses = addresses;
} }
public List<GroupRef> getGroups() { public List<ScimGroupRef> getGroups() {
return groups; return groups;
} }
public void setGroups(List<GroupRef> groups) { public void setGroups(List<ScimGroupRef> groups) {
this.groups = groups; this.groups = groups;
} }
public List<UserEntitlement> getEntitlements() { public List<ScimUserEntitlement> getEntitlements() {
return entitlements; return entitlements;
} }
public void setEntitlements(List<UserEntitlement> entitlements) { public void setEntitlements(List<ScimUserEntitlement> entitlements) {
this.entitlements = entitlements; this.entitlements = entitlements;
} }
public List<UserRole> getRoles() { public List<ScimUserRole> getRoles() {
return roles; return roles;
} }
public void setRoles(List<UserRole> roles) { public void setRoles(List<ScimUserRole> roles) {
this.roles = roles; this.roles = roles;
} }
public List<UserX509Certificate> getX509Certificates() { public List<ScimUserX509Certificate> getX509Certificates() {
return x509Certificates; return x509Certificates;
} }
public void setX509Certificates(List<UserX509Certificate> x509Certificates) { public void setX509Certificates(List<ScimUserX509Certificate> x509Certificates) {
this.x509Certificates = x509Certificates; this.x509Certificates = x509Certificates;
} }
public Map<String, UserExtension> getExtensions() { public Map<String, ScimUserExtension> getExtensions() {
return extensions; return extensions;
} }
public void setExtensions(Map<String, UserExtension> extensions) { public void setExtensions(Map<String, ScimUserExtension> extensions) {
this.extensions = extensions; this.extensions = extensions;
} }
public User() {
public ScimEnterprise getEnterprise() {
return enterprise;
}
public void setEnterprise(ScimEnterprise enterprise) {
this.enterprise = enterprise;
}
public List<String> getOrganization() {
return organization;
}
public void setOrganization(List<String> organization) {
this.organization = organization;
}
public List<String> getGroup() {
return group;
}
public void setGroup(List<String> group) {
this.group = group;
}
public ScimUser() {
schemas =new HashSet<String>(); schemas =new HashSet<String>();
schemas.add(SCHEMA); schemas.add(SCHEMA);
} }
......
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; 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 ...@@ -81,7 +81,7 @@ public class OrganizationAddress extends MultiValuedAttribute implements Seriali
public void setType(String type) { public void setType(String type) {
this.type = type; this.type = type;
} }
public OrganizationAddress() { public ScimUserAddress() {
} }
......
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; 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 ...@@ -57,10 +57,10 @@ public class OrganizationEmail extends MultiValuedAttribute implements Serializa
this.primary = primary; this.primary = primary;
} }
public OrganizationEmail() { public ScimUserEmail() {
} }
public OrganizationEmail(String value, String type, boolean primary) { public ScimUserEmail(String value, String type, boolean primary) {
super(); super();
this.value = value; this.value = value;
this.type = type; this.type = type;
......
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; import java.io.Serializable;
public class UserEntitlement extends MultiValuedAttribute implements Serializable { public class ScimUserEntitlement extends ScimMultiValuedAttribute implements Serializable {
/** /**
* *
......
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; import java.io.Serializable;
public class UserExtension extends MultiValuedAttribute implements Serializable { public class ScimUserExtension extends ScimMultiValuedAttribute implements Serializable {
/** /**
* *
......
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; import java.io.Serializable;
public class UserIm extends MultiValuedAttribute implements Serializable { public class ScimUserIm extends ScimMultiValuedAttribute implements Serializable {
/** /**
* *
......
/*
* 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;
}
}
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; 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 ...@@ -35,4 +35,15 @@ public class UserPhoneNumber extends MultiValuedAttribute implements Serializabl
public static final String OTHER = "other"; 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;
}
} }
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; import java.io.Serializable;
public class UserPhoto extends MultiValuedAttribute implements Serializable { public class ScimUserPhoto extends ScimMultiValuedAttribute implements Serializable {
/** /**
* *
......
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; import java.io.Serializable;
public class UserRole extends MultiValuedAttribute implements Serializable { public class ScimUserRole extends ScimMultiValuedAttribute implements Serializable {
/** /**
* *
......
...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources; ...@@ -19,7 +19,7 @@ package org.maxkey.identity.scim.resources;
import java.io.Serializable; import java.io.Serializable;
public class UserX509Certificate extends MultiValuedAttribute implements Serializable { public class ScimUserX509Certificate extends ScimMultiValuedAttribute implements Serializable {
/** /**
* *
......
...@@ -25,7 +25,7 @@ public class ScimEnterpriseUserJsonString2ObjectTest { ...@@ -25,7 +25,7 @@ public class ScimEnterpriseUserJsonString2ObjectTest {
public static void main(String[] args) { public static void main(String[] args) {
String userJsonString = ReadJson2String.read("ScimEnterpriseUserJsonString.json"); String userJsonString = ReadJson2String.read("ScimEnterpriseUserJsonString.json");
EnterpriseUser u = JsonUtils.json2Object(userJsonString, EnterpriseUser.class); ScimEnterpriseUser u = JsonUtils.json2Object(userJsonString, ScimEnterpriseUser.class);
System.out.println( System.out.println(
(new JsonPretty()).format(JsonUtils.object2Json(u))); (new JsonPretty()).format(JsonUtils.object2Json(u)));
......
...@@ -27,12 +27,12 @@ public class ScimEnterpriseUserJsonTest { ...@@ -27,12 +27,12 @@ public class ScimEnterpriseUserJsonTest {
public static void main(String[] args) { public static void main(String[] args) {
EnterpriseUser u = new EnterpriseUser(); ScimEnterpriseUser u = new ScimEnterpriseUser();
u.setUserName("UserName"); u.setUserName("UserName");
u.setExternalId("UserName"); u.setExternalId("UserName");
u.setId("1111111111111"); u.setId("1111111111111");
Meta meta = new Meta(); ScimMeta meta = new ScimMeta();
meta.setVersion("W\\/\"f250dd84f0671c3\""); meta.setVersion("W\\/\"f250dd84f0671c3\"");
meta.setCreated(new Date()); meta.setCreated(new Date());
meta.setLocation("https://example.com/v2/Users/2819c223..."); meta.setLocation("https://example.com/v2/Users/2819c223...");
...@@ -40,7 +40,7 @@ public class ScimEnterpriseUserJsonTest { ...@@ -40,7 +40,7 @@ public class ScimEnterpriseUserJsonTest {
meta.setLastModified(new Date()); meta.setLastModified(new Date());
u.setMeta(meta); u.setMeta(meta);
UserName un=new UserName(); ScimFormattedName un=new ScimFormattedName();
un.setFamilyName("Jensen"); un.setFamilyName("Jensen");
un.setFormatted("Ms. Barbara J Jensen, III"); un.setFormatted("Ms. Barbara J Jensen, III");
un.setGivenName("Barbara"); un.setGivenName("Barbara");
...@@ -49,28 +49,28 @@ public class ScimEnterpriseUserJsonTest { ...@@ -49,28 +49,28 @@ public class ScimEnterpriseUserJsonTest {
un.setMiddleName("Jane"); un.setMiddleName("Jane");
u.setName(un); u.setName(un);
List<UserPhoneNumber> UserPhoneNumberList = new ArrayList<UserPhoneNumber>(); List<ScimUserPhoneNumber> UserPhoneNumberList = new ArrayList<ScimUserPhoneNumber>();
UserPhoneNumber pn =new UserPhoneNumber(); ScimUserPhoneNumber pn =new ScimUserPhoneNumber();
pn.setValue("555-555-8377"); 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.setValue("555-555-8377");
pnh.setType(UserPhoneNumber.UserPhoneNumberType.HOME); pnh.setType(ScimUserPhoneNumber.UserPhoneNumberType.HOME);
UserPhoneNumberList.add(pnh); UserPhoneNumberList.add(pnh);
UserPhoneNumberList.add(pn); UserPhoneNumberList.add(pn);
u.setPhoneNumbers(UserPhoneNumberList); u.setPhoneNumbers(UserPhoneNumberList);
List<UserEmail> ueList = new ArrayList<UserEmail>(); List<ScimUserEmail> ueList = new ArrayList<ScimUserEmail>();
UserEmail ue =new UserEmail(); ScimUserEmail ue =new ScimUserEmail();
ue.setValue("bjensen@example.com"); ue.setValue("bjensen@example.com");
ue.setType(UserEmail.UserEmailType.WORK); ue.setType(ScimUserEmail.UserEmailType.WORK);
ueList.add(ue); ueList.add(ue);
u.setEmails(ueList); u.setEmails(ueList);
Enterprise ent =new Enterprise(); ScimEnterprise ent =new ScimEnterprise();
ent.setCostCenter("1111"); ent.setCostCenter("1111");
ent.setDepartment("de"); ent.setDepartment("de");
ent.setEmployeeNumber("k200908"); ent.setEmployeeNumber("k200908");
......
...@@ -23,7 +23,7 @@ import org.maxkey.util.JsonUtils; ...@@ -23,7 +23,7 @@ import org.maxkey.util.JsonUtils;
public class ScimGroupJsonString2ObjectTest { public class ScimGroupJsonString2ObjectTest {
public static void main(String[] args) { public static void main(String[] args) {
String userJsonString = ReadJson2String.read("ScimGroupJsonString.json"); String userJsonString = ReadJson2String.read("ScimGroupJsonString.json");
Group g = JsonUtils.json2Object(userJsonString, Group.class); ScimGroup g = JsonUtils.json2Object(userJsonString, ScimGroup.class);
System.out.println( System.out.println(
......
...@@ -26,9 +26,9 @@ import org.maxkey.util.JsonUtils; ...@@ -26,9 +26,9 @@ import org.maxkey.util.JsonUtils;
public class ScimGroupJsonTest { public class ScimGroupJsonTest {
public static void main(String[] args) { 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.setVersion("W\\/\"f250dd84f0671c3\"");
meta.setCreated(new Date()); meta.setCreated(new Date());
meta.setLocation("https://example.com/v2/Users/2819c223..."); meta.setLocation("https://example.com/v2/Users/2819c223...");
...@@ -38,16 +38,16 @@ public class ScimGroupJsonTest { ...@@ -38,16 +38,16 @@ public class ScimGroupJsonTest {
g.setDisplayName("Tour Guides"); g.setDisplayName("Tour Guides");
Set<MemberRef> mrSet =new HashSet<MemberRef>(); Set<ScimMemberRef> mrSet =new HashSet<ScimMemberRef>();
MemberRef mr1 =new MemberRef(); ScimMemberRef mr1 =new ScimMemberRef();
mr1.setReference("https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646"); mr1.setReference("https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646");
mr1.setValue("2819c223-7f76-453a-919d-413861904646"); mr1.setValue("2819c223-7f76-453a-919d-413861904646");
mr1.setDisplay("Babs Jensen"); 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.setReference("https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646");
mr2.setValue("2819c223-7f76-453a-919d-413861904646"); mr2.setValue("2819c223-7f76-453a-919d-413861904646");
mr2.setDisplay("Babs Jensen"); 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.setReference("https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646");
mr3.setValue("2819c223-7f76-453a-919d-413861904646"); mr3.setValue("2819c223-7f76-453a-919d-413861904646");
mr3.setDisplay("Babs Jensen"); mr3.setDisplay("Babs Jensen");
......
...@@ -25,7 +25,7 @@ public class ScimUserJsonString2ObjectTest { ...@@ -25,7 +25,7 @@ public class ScimUserJsonString2ObjectTest {
public static void main(String[] args) { public static void main(String[] args) {
String userJsonString = ReadJson2String.read("ScimUserJsonString.json"); String userJsonString = ReadJson2String.read("ScimUserJsonString.json");
User u = JsonUtils.json2Object(userJsonString, User.class); ScimUser u = JsonUtils.json2Object(userJsonString, ScimUser.class);
System.out.println( System.out.println(
(new JsonPretty()).format(JsonUtils.object2Json(u))); (new JsonPretty()).format(JsonUtils.object2Json(u)));
} }
......
...@@ -26,12 +26,12 @@ import org.maxkey.util.JsonUtils; ...@@ -26,12 +26,12 @@ import org.maxkey.util.JsonUtils;
public class ScimUserJsonTest { public class ScimUserJsonTest {
public static void main(String[] args) { public static void main(String[] args) {
User u = new User(); ScimUser u = new ScimUser();
u.setUserName("UserName"); u.setUserName("UserName");
u.setExternalId("UserName"); u.setExternalId("UserName");
u.setId("1111111111111"); u.setId("1111111111111");
Meta meta = new Meta(); ScimMeta meta = new ScimMeta();
meta.setVersion("W\\/\"f250dd84f0671c3\""); meta.setVersion("W\\/\"f250dd84f0671c3\"");
meta.setCreated(new Date()); meta.setCreated(new Date());
meta.setLocation("https://example.com/v2/Users/2819c223..."); meta.setLocation("https://example.com/v2/Users/2819c223...");
...@@ -39,7 +39,7 @@ public class ScimUserJsonTest { ...@@ -39,7 +39,7 @@ public class ScimUserJsonTest {
meta.setLastModified(new Date()); meta.setLastModified(new Date());
u.setMeta(meta); u.setMeta(meta);
UserName un=new UserName(); ScimFormattedName un=new ScimFormattedName();
un.setFamilyName("Jensen"); un.setFamilyName("Jensen");
un.setFormatted("Ms. Barbara J Jensen, III"); un.setFormatted("Ms. Barbara J Jensen, III");
un.setGivenName("Barbara"); un.setGivenName("Barbara");
...@@ -48,24 +48,24 @@ public class ScimUserJsonTest { ...@@ -48,24 +48,24 @@ public class ScimUserJsonTest {
un.setMiddleName("Jane"); un.setMiddleName("Jane");
u.setName(un); u.setName(un);
List<UserPhoneNumber> UserPhoneNumberList = new ArrayList<UserPhoneNumber>(); List<ScimUserPhoneNumber> UserPhoneNumberList = new ArrayList<ScimUserPhoneNumber>();
UserPhoneNumber pn =new UserPhoneNumber(); ScimUserPhoneNumber pn =new ScimUserPhoneNumber();
pn.setValue("555-555-8377"); 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.setValue("555-555-8377");
pnh.setType(UserPhoneNumber.UserPhoneNumberType.HOME); pnh.setType(ScimUserPhoneNumber.UserPhoneNumberType.HOME);
UserPhoneNumberList.add(pnh); UserPhoneNumberList.add(pnh);
UserPhoneNumberList.add(pn); UserPhoneNumberList.add(pn);
u.setPhoneNumbers(UserPhoneNumberList); u.setPhoneNumbers(UserPhoneNumberList);
List<UserEmail> ueList = new ArrayList<UserEmail>(); List<ScimUserEmail> ueList = new ArrayList<ScimUserEmail>();
UserEmail ue =new UserEmail(); ScimUserEmail ue =new ScimUserEmail();
ue.setValue("bjensen@example.com"); ue.setValue("bjensen@example.com");
ue.setType(UserEmail.UserEmailType.WORK); ue.setType(ScimUserEmail.UserEmailType.WORK);
ueList.add(ue); ueList.add(ue);
u.setEmails(ueList); u.setEmails(ueList);
......
...@@ -25,6 +25,7 @@ import java.util.List; ...@@ -25,6 +25,7 @@ import java.util.List;
import org.apache.mybatis.jpa.persistence.IJpaBaseMapper; import org.apache.mybatis.jpa.persistence.IJpaBaseMapper;
import org.maxkey.entity.GroupMember; import org.maxkey.entity.GroupMember;
import org.maxkey.entity.Groups; import org.maxkey.entity.Groups;
import org.maxkey.entity.UserInfo;
/** /**
* @author Crystal.sea * @author Crystal.sea
...@@ -44,6 +45,8 @@ public interface GroupMemberMapper extends IJpaBaseMapper<GroupMember> { ...@@ -44,6 +45,8 @@ public interface GroupMemberMapper extends IJpaBaseMapper<GroupMember> {
public int deleteByGroupId(String groupId); public int deleteByGroupId(String groupId);
public List<UserInfo> queryMemberByGroupId(String groupId);
} }
...@@ -33,4 +33,6 @@ import org.maxkey.entity.Groups; ...@@ -33,4 +33,6 @@ import org.maxkey.entity.Groups;
public interface GroupsMapper extends IJpaBaseMapper<Groups> { public interface GroupsMapper extends IJpaBaseMapper<Groups> {
public List<Groups> queryDynamicGroups(Groups groups); public List<Groups> queryDynamicGroups(Groups groups);
public List<Groups> queryGroupByUserId(String userId);
} }
...@@ -17,9 +17,12 @@ ...@@ -17,9 +17,12 @@
package org.maxkey.persistence.service; package org.maxkey.persistence.service;
import java.util.List;
import org.apache.mybatis.jpa.persistence.JpaBaseService; import org.apache.mybatis.jpa.persistence.JpaBaseService;
import org.maxkey.entity.GroupMember; import org.maxkey.entity.GroupMember;
import org.maxkey.entity.Groups; import org.maxkey.entity.Groups;
import org.maxkey.entity.UserInfo;
import org.maxkey.persistence.mapper.GroupMemberMapper; import org.maxkey.persistence.mapper.GroupMemberMapper;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -45,8 +48,13 @@ public class GroupMemberService extends JpaBaseService<GroupMember>{ ...@@ -45,8 +48,13 @@ public class GroupMemberService extends JpaBaseService<GroupMember>{
public int deleteDynamicGroupMember(Groups dynamicGroup) { public int deleteDynamicGroupMember(Groups dynamicGroup) {
return getMapper().deleteDynamicGroupMember(dynamicGroup); return getMapper().deleteDynamicGroupMember(dynamicGroup);
} }
public int deleteByGroupId(String groupId) { public int deleteByGroupId(String groupId) {
return getMapper().deleteByGroupId(groupId); return getMapper().deleteByGroupId(groupId);
} }
public List<UserInfo> queryMemberByGroupId(String groupId){
return getMapper().queryMemberByGroupId(groupId);
}
} }
...@@ -71,6 +71,10 @@ public class GroupsService extends JpaBaseService<Groups> implements Serializab ...@@ -71,6 +71,10 @@ public class GroupsService extends JpaBaseService<Groups> implements Serializab
return true; return true;
} }
public List<Groups> queryGroupByUserId(String userId){
return this.getMapper().queryGroupByUserId(userId);
}
public void refreshDynamicGroups(Groups dynamicGroup){ public void refreshDynamicGroups(Groups dynamicGroup){
if(dynamicGroup.getDynamic().equals(ConstantsStatus.ACTIVE+"")) { if(dynamicGroup.getDynamic().equals(ConstantsStatus.ACTIVE+"")) {
boolean isDynamicTimeSupport = false; boolean isDynamicTimeSupport = false;
......
...@@ -244,6 +244,52 @@ ...@@ -244,6 +244,52 @@
) )
</delete> </delete>
<select id="queryMemberByGroupId" parameterType="string" resultType="UserInfo">
select distinct
u.id,
u.username,
u.usertype,
u.windowsaccount,
u.displayname ,
u.nickname ,
u.namezhspell,
u.namezhshortspell,
u.givenname ,
u.middlename ,
u.familyname ,
u.gender,
u.authntype,
u.mobile,
u.email,
u.workemail,
u.workphonenumber,
u.employeenumber,
u.division,
u.costcenter,
u.organization,
u.departmentid,
u.department,
u.jobtitle,
u.joblevel,
gm.createddate,
u.status
from
mxk_userinfo u,
mxk_groups g,
mxk_group_member gm
where 1 = 1
and gm.groupid = #{value}
and g.id = #{value}
and gm.type in( 'USER','USER-DYNAMIC')
and gm.groupid = g.id
and gm.memberid = u.id
</select>
<delete id="deleteByGroupId" parameterType="string" > <delete id="deleteByGroupId" parameterType="string" >
delete from mxk_group_member gm delete from mxk_group_member gm
where gm.groupid=#{value} where gm.groupid=#{value}
......
...@@ -55,4 +55,20 @@ ...@@ -55,4 +55,20 @@
</update> </update>
<select id="queryGroupByUserId" parameterType="string" resultType="Groups">
select distinct
g.*
from
mxk_userinfo u,
mxk_groups g,
mxk_group_member gm
where 1 = 1
and gm.memberid = #{value}
and u.id = #{value}
and gm.type in( 'USER','USER-DYNAMIC')
and gm.groupid = g.id
and gm.memberid = u.id
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -94,7 +94,7 @@ public class MaxKeyMgtJobs implements InitializingBean { ...@@ -94,7 +94,7 @@ public class MaxKeyMgtJobs implements InitializingBean {
.build(); .build();
JobDataMap jobDataMap = new JobDataMap(); JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("groupsService", groupsService); jobDataMap.put("service", groupsService);
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronSchedule); CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronSchedule);
CronTrigger cronTrigger = CronTrigger cronTrigger =
...@@ -121,7 +121,7 @@ public class MaxKeyMgtJobs implements InitializingBean { ...@@ -121,7 +121,7 @@ public class MaxKeyMgtJobs implements InitializingBean {
.build(); .build();
JobDataMap jobDataMap = new JobDataMap(); JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("accountsService", accountsService); jobDataMap.put("service", accountsService);
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronSchedule); CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronSchedule);
CronTrigger cronTrigger = CronTrigger cronTrigger =
......
...@@ -151,9 +151,15 @@ public class MaxKeyMgtMvcConfig implements WebMvcConfigurer { ...@@ -151,9 +151,15 @@ public class MaxKeyMgtMvcConfig implements WebMvcConfigurer {
_logger.debug("add LocaleChangeInterceptor"); _logger.debug("add LocaleChangeInterceptor");
/*
* api
* idm
* scim
* */
registry.addInterceptor(restApiPermissionAdapter) registry.addInterceptor(restApiPermissionAdapter)
.addPathPatterns("/im/api/**") .addPathPatterns("/api/**")
.addPathPatterns("/api/idm/**")
.addPathPatterns("/api/idm/scim/**")
; ;
_logger.debug("add RestApiPermissionAdapter"); _logger.debug("add RestApiPermissionAdapter");
......
...@@ -54,12 +54,14 @@ public class AccountsStrategyJob implements Job , Serializable { ...@@ -54,12 +54,14 @@ public class AccountsStrategyJob implements Job , Serializable {
jobStatus = JOBSTATUS.RUNNING; jobStatus = JOBSTATUS.RUNNING;
try { try {
if(accountsService == null) { 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 " ); _logger.debug("DynamicGroupsJob is success " );
}catch(Exception e) { }catch(Exception e) {
_logger.error("Exception " ,e); _logger.error("Exception " ,e);
......
...@@ -53,12 +53,14 @@ public class DynamicGroupsJob implements Job , Serializable { ...@@ -53,12 +53,14 @@ public class DynamicGroupsJob implements Job , Serializable {
jobStatus = JOBSTATUS.RUNNING; jobStatus = JOBSTATUS.RUNNING;
try { try {
if(groupsService == null) { 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 " ); _logger.debug("DynamicGroupsJob is success " );
}catch(Exception e) { }catch(Exception e) {
_logger.error("Exception " ,e); _logger.error("Exception " ,e);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册