You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by bd...@apache.org on 2023/01/11 15:31:51 UTC
[directory-scimple] 01/01: Use UUIDs for examples
This is an automated email from the ASF dual-hosted git repository.
bdemers pushed a commit to branch simplify-examples
in repository https://gitbox.apache.org/repos/asf/directory-scimple.git
commit a52af73f1a2481685fdfd43031f9851eaa4c1c6c
Author: Brian Demers <bd...@apache.org>
AuthorDate: Wed Jan 11 10:31:43 2023 -0500
Use UUIDs for examples
On create, always set the resourceId, it isn't valid for a client to set it
---
.../example/jersey/service/InMemoryGroupService.java | 17 +++++++++--------
.../example/jersey/service/InMemoryUserService.java | 12 +++---------
.../example/memory/service/InMemoryGroupService.java | 17 +++++++++--------
.../example/memory/service/InMemoryUserService.java | 12 +++---------
.../example/spring/ScimpleSpringBootApplication.java | 9 +++++----
.../example/spring/service/InMemoryGroupService.java | 17 +++++++++--------
.../example/spring/service/InMemoryUserService.java | 12 +++---------
7 files changed, 41 insertions(+), 55 deletions(-)
diff --git a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryGroupService.java b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryGroupService.java
index 24552463..897e3013 100644
--- a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryGroupService.java
+++ b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryGroupService.java
@@ -22,6 +22,7 @@ package org.apache.directory.scim.example.jersey.service;
import jakarta.annotation.PostConstruct;
import jakarta.inject.Inject;
import jakarta.ws.rs.core.Response;
+import org.apache.commons.lang3.StringUtils;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.server.exception.UnableToUpdateResourceException;
import org.apache.directory.scim.core.repository.Repository;
@@ -38,6 +39,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import java.util.stream.Collectors;
import jakarta.enterprise.context.ApplicationScoped;
@@ -62,7 +64,8 @@ public class InMemoryGroupService implements Repository<ScimGroup> {
@PostConstruct
public void init() {
ScimGroup group = new ScimGroup();
- group.setId("example-group");
+ group.setId(UUID.randomUUID().toString());
+ group.setDisplayName("example-group");
groups.put(group.getId(), group);
}
@@ -73,18 +76,16 @@ public class InMemoryGroupService implements Repository<ScimGroup> {
@Override
public ScimGroup create(ScimGroup resource) throws UnableToCreateResourceException {
- String resourceId = resource.getId();
- int idCandidate = resource.hashCode();
- String id = resourceId != null ? resourceId : Integer.toString(idCandidate);
+ String id = UUID.randomUUID().toString();
- while (groups.containsKey(id)) {
- id = Integer.toString(idCandidate);
- ++idCandidate;
+ // if the external ID is not set, use the displayName instead
+ if (!StringUtils.isEmpty(resource.getExternalId())) {
+ resource.setExternalId(resource.getDisplayName());
}
// check to make sure the group doesn't already exist
boolean existingUserFound = groups.values().stream()
- .anyMatch(group -> group.getExternalId().equals(resource.getExternalId()));
+ .anyMatch(group -> resource.getExternalId().equals(group.getExternalId()));
if (existingUserFound) {
// HTTP leaking into data layer
throw new UnableToCreateResourceException(Response.Status.CONFLICT, "Group '" + resource.getExternalId() + "' already exists.");
diff --git a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryUserService.java b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryUserService.java
index 6bfcdd50..da2a368b 100644
--- a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryUserService.java
+++ b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryUserService.java
@@ -22,6 +22,7 @@ package org.apache.directory.scim.example.jersey.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import java.util.stream.Collectors;
import jakarta.annotation.PostConstruct;
@@ -53,7 +54,7 @@ import org.apache.directory.scim.core.schema.SchemaRegistry;
@ApplicationScoped
public class InMemoryUserService implements Repository<ScimUser> {
- static final String DEFAULT_USER_ID = "1";
+ static final String DEFAULT_USER_ID = UUID.randomUUID().toString();
static final String DEFAULT_USER_EXTERNAL_ID = "e" + DEFAULT_USER_ID;
static final String DEFAULT_USER_DISPLAY_NAME = "User " + DEFAULT_USER_ID;
static final String DEFAULT_USER_EMAIL_VALUE = "e1@example.com";
@@ -106,14 +107,7 @@ public class InMemoryUserService implements Repository<ScimUser> {
*/
@Override
public ScimUser create(ScimUser resource) throws UnableToCreateResourceException {
- String resourceId = resource.getId();
- int idCandidate = resource.hashCode();
- String id = resourceId != null ? resourceId : Integer.toString(idCandidate);
-
- while (users.containsKey(id)) {
- id = Integer.toString(idCandidate);
- ++idCandidate;
- }
+ String id = UUID.randomUUID().toString();
// check to make sure the user doesn't already exist
boolean existingUserFound = users.values().stream()
diff --git a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryGroupService.java b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryGroupService.java
index 63ed582c..c2a1a507 100644
--- a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryGroupService.java
+++ b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryGroupService.java
@@ -22,6 +22,7 @@ package org.apache.directory.scim.example.memory.service;
import jakarta.annotation.PostConstruct;
import jakarta.inject.Inject;
import jakarta.ws.rs.core.Response;
+import org.apache.commons.lang3.StringUtils;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.server.exception.UnableToUpdateResourceException;
import org.apache.directory.scim.core.repository.Repository;
@@ -38,6 +39,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import java.util.stream.Collectors;
import jakarta.enterprise.context.ApplicationScoped;
@@ -62,7 +64,8 @@ public class InMemoryGroupService implements Repository<ScimGroup> {
@PostConstruct
public void init() {
ScimGroup group = new ScimGroup();
- group.setId("example-group");
+ group.setDisplayName("example-group");
+ group.setId(UUID.randomUUID().toString());
groups.put(group.getId(), group);
}
@@ -73,18 +76,16 @@ public class InMemoryGroupService implements Repository<ScimGroup> {
@Override
public ScimGroup create(ScimGroup resource) throws UnableToCreateResourceException {
- String resourceId = resource.getId();
- int idCandidate = resource.hashCode();
- String id = resourceId != null ? resourceId : Integer.toString(idCandidate);
+ String id = UUID.randomUUID().toString();
- while (groups.containsKey(id)) {
- id = Integer.toString(idCandidate);
- ++idCandidate;
+ // if the external ID is not set, use the displayName instead
+ if (!StringUtils.isEmpty(resource.getExternalId())) {
+ resource.setExternalId(resource.getDisplayName());
}
// check to make sure the group doesn't already exist
boolean existingUserFound = groups.values().stream()
- .anyMatch(group -> group.getExternalId().equals(resource.getExternalId()));
+ .anyMatch(group -> resource.getExternalId().equals(group.getExternalId()));
if (existingUserFound) {
// HTTP leaking into data layer
throw new UnableToCreateResourceException(Response.Status.CONFLICT, "Group '" + resource.getExternalId() + "' already exists.");
diff --git a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryUserService.java b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryUserService.java
index 408d473d..05bf4b72 100644
--- a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryUserService.java
+++ b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryUserService.java
@@ -22,6 +22,7 @@ package org.apache.directory.scim.example.memory.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import java.util.stream.Collectors;
import jakarta.annotation.PostConstruct;
@@ -53,7 +54,7 @@ import org.apache.directory.scim.core.schema.SchemaRegistry;
@ApplicationScoped
public class InMemoryUserService implements Repository<ScimUser> {
- static final String DEFAULT_USER_ID = "1";
+ static final String DEFAULT_USER_ID = UUID.randomUUID().toString();
static final String DEFAULT_USER_EXTERNAL_ID = "e" + DEFAULT_USER_ID;
static final String DEFAULT_USER_DISPLAY_NAME = "User " + DEFAULT_USER_ID;
static final String DEFAULT_USER_EMAIL_VALUE = "e1@example.com";
@@ -106,14 +107,7 @@ public class InMemoryUserService implements Repository<ScimUser> {
*/
@Override
public ScimUser create(ScimUser resource) throws UnableToCreateResourceException {
- String resourceId = resource.getId();
- int idCandidate = resource.hashCode();
- String id = resourceId != null ? resourceId : Integer.toString(idCandidate);
-
- while (users.containsKey(id)) {
- id = Integer.toString(idCandidate);
- ++idCandidate;
- }
+ String id = UUID.randomUUID().toString();
// check to make sure the user doesn't already exist
boolean existingUserFound = users.values().stream()
diff --git a/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/ScimpleSpringBootApplication.java b/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/ScimpleSpringBootApplication.java
index 4411ed1a..897cd2a8 100644
--- a/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/ScimpleSpringBootApplication.java
+++ b/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/ScimpleSpringBootApplication.java
@@ -20,11 +20,12 @@
package org.apache.directory.scim.example.spring;
import org.apache.directory.scim.server.configuration.ServerConfiguration;
-import org.apache.directory.scim.spec.schema.ServiceProviderConfiguration.AuthenticationSchema;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
+import static org.apache.directory.scim.spec.schema.ServiceProviderConfiguration.AuthenticationSchema.httpBasic;
+
@SpringBootApplication
public class ScimpleSpringBootApplication {
@@ -37,9 +38,9 @@ public class ScimpleSpringBootApplication {
// Set any unique configuration bits
return new ServerConfiguration()
.setId("scimple-spring-boot-example")
- .setDocumentationUri("https://github.com/apache/directory-scimple");
+ .setDocumentationUri("https://github.com/apache/directory-scimple")
- // set the auth scheme too
- // .addAuthenticationSchema(oauthBearer());
+ // set the auth scheme
+ .addAuthenticationSchema(httpBasic());
}
}
diff --git a/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java b/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java
index ddb07392..41a89668 100644
--- a/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java
+++ b/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java
@@ -34,9 +34,11 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import java.util.stream.Collectors;
import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
@Service
public class InMemoryGroupService implements Repository<ScimGroup> {
@@ -52,7 +54,8 @@ public class InMemoryGroupService implements Repository<ScimGroup> {
@PostConstruct
public void init() {
ScimGroup group = new ScimGroup();
- group.setId("example-group");
+ group.setId(UUID.randomUUID().toString());
+ group.setDisplayName("example-group");
groups.put(group.getId(), group);
}
@@ -63,18 +66,16 @@ public class InMemoryGroupService implements Repository<ScimGroup> {
@Override
public ScimGroup create(ScimGroup resource) throws UnableToCreateResourceException {
- String resourceId = resource.getId();
- int idCandidate = resource.hashCode();
- String id = resourceId != null ? resourceId : Integer.toString(idCandidate);
+ String id = UUID.randomUUID().toString();
- while (groups.containsKey(id)) {
- id = Integer.toString(idCandidate);
- ++idCandidate;
+ // if the external ID is not set, use the displayName instead
+ if (!StringUtils.hasText(resource.getExternalId())) {
+ resource.setExternalId(resource.getDisplayName());
}
// check to make sure the group doesn't already exist
boolean existingUserFound = groups.values().stream()
- .anyMatch(group -> group.getExternalId().equals(resource.getExternalId()));
+ .anyMatch(group -> resource.getExternalId().equals(group.getExternalId()));
if (existingUserFound) {
// HTTP leaking into data layer
throw new UnableToCreateResourceException(Response.Status.CONFLICT, "Group '" + resource.getExternalId() + "' already exists.");
diff --git a/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java b/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java
index dcc1bb45..d16b9d96 100644
--- a/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java
+++ b/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java
@@ -22,6 +22,7 @@ package org.apache.directory.scim.example.spring.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import java.util.stream.Collectors;
import jakarta.annotation.PostConstruct;
@@ -46,7 +47,7 @@ import org.springframework.stereotype.Service;
@Service
public class InMemoryUserService implements Repository<ScimUser> {
- static final String DEFAULT_USER_ID = "1";
+ static final String DEFAULT_USER_ID = UUID.randomUUID().toString();
static final String DEFAULT_USER_EXTERNAL_ID = "e" + DEFAULT_USER_ID;
static final String DEFAULT_USER_DISPLAY_NAME = "User " + DEFAULT_USER_ID;
static final String DEFAULT_USER_EMAIL_VALUE = "e1@example.com";
@@ -96,14 +97,7 @@ public class InMemoryUserService implements Repository<ScimUser> {
*/
@Override
public ScimUser create(ScimUser resource) throws UnableToCreateResourceException {
- String resourceId = resource.getId();
- int idCandidate = resource.hashCode();
- String id = resourceId != null ? resourceId : Integer.toString(idCandidate);
-
- while (users.containsKey(id)) {
- id = Integer.toString(idCandidate);
- ++idCandidate;
- }
+ String id = UUID.randomUUID().toString();
// check to make sure the user doesn't already exist
boolean existingUserFound = users.values().stream()