diff --git a/common/src/main/java/org/cloudfoundry/identity/uaa/scim/jdbc/JdbcScimUserProvisioning.java b/common/src/main/java/org/cloudfoundry/identity/uaa/scim/jdbc/JdbcScimUserProvisioning.java index 94beff80718..085d0877e2f 100644 --- a/common/src/main/java/org/cloudfoundry/identity/uaa/scim/jdbc/JdbcScimUserProvisioning.java +++ b/common/src/main/java/org/cloudfoundry/identity/uaa/scim/jdbc/JdbcScimUserProvisioning.java @@ -178,8 +178,14 @@ public void setValues(PreparedStatement ps) throws SQLException { ps.setTimestamp(4, new Timestamp(new Date().getTime())); ps.setString(5, user.getUserName()); ps.setString(6, user.getPrimaryEmail()); - ps.setString(7, user.getName().getGivenName()); - ps.setString(8, user.getName().getFamilyName()); + if (user.getName() == null) { + ps.setString(7, null); + ps.setString(8, null); + } + else { + ps.setString(7, user.getName().getGivenName()); + ps.setString(8, user.getName().getFamilyName()); + } ps.setBoolean(9, user.isActive()); String phoneNumber = extractPhoneNumber(user); ps.setString(10, phoneNumber); diff --git a/common/src/test/java/org/cloudfoundry/identity/uaa/scim/jdbc/JdbcScimUserProvisioningTests.java b/common/src/test/java/org/cloudfoundry/identity/uaa/scim/jdbc/JdbcScimUserProvisioningTests.java index 81e552b37a9..e6e6561eccf 100644 --- a/common/src/test/java/org/cloudfoundry/identity/uaa/scim/jdbc/JdbcScimUserProvisioningTests.java +++ b/common/src/test/java/org/cloudfoundry/identity/uaa/scim/jdbc/JdbcScimUserProvisioningTests.java @@ -139,6 +139,20 @@ public void canCreateUser() { assertEquals(user.getUserType(), map.get(UaaAuthority.UAA_USER.getUserType())); assertNull(created.getGroups()); } + + @Test + public void canCreateUserWithoutGivenNameAndFamilyName() { + ScimUser user = new ScimUser(null, "JO@FOO.COM", null, null); + user.addEmail("jo@blah.com"); + ScimUser created = db.createUser(user, "j7hyqpassX"); + assertEquals("JO@FOO.COM", created.getUserName()); + assertNotNull(created.getId()); + assertNotSame(user.getId(), created.getId()); + Map map = template.queryForMap("select * from users where id=?", created.getId()); + assertEquals(user.getUserName(), map.get("userName")); + assertEquals(user.getUserType(), map.get(UaaAuthority.UAA_USER.getUserType())); + assertNull(created.getGroups()); + } @Test(expected = InvalidScimResourceException.class) public void cannotCreateUserWithNonAsciiUsername() {