use of org.structr.web.entity.User in project structr by structr.
the class ConsoleTest method testUserCommand.
@Test
public void testUserCommand() {
final Console console = new Console(securityContext, ConsoleMode.JavaScript, Collections.emptyMap());
Principal admin = null;
try {
assertEquals("Invalid console execution result", "Mode set to 'AdminShell'. Type 'help' to get a list of commands.\r\n", console.runForTest("Console.setMode('" + ConsoleMode.AdminShell.name() + "')"));
assertEquals("Invalid console execution result", "\r\n", console.runForTest("user list"));
// create a user
assertEquals("Invalid console execution result", "User created.\r\n", console.runForTest("user add tester tester@test.de"));
assertEquals("Invalid console execution result", "User created.\r\n", console.runForTest("user add admin admin@localhost isAdmin"));
assertEquals("Invalid console execution result", "User created.\r\n", console.runForTest("user add root isAdmin"));
// check success
try (final Tx tx = app.tx()) {
final User user = app.nodeQuery(User.class).andName("tester").getFirst();
assertNotNull("Invalid console execution result", user);
assertEquals("Invalid console execution result", "tester", user.getProperty(User.name));
assertEquals("Invalid console execution result", "tester@test.de", user.getEMail());
assertEquals("Invalid console execution result", Boolean.FALSE, user.isAdmin());
tx.success();
}
// check list
assertEquals("Invalid console execution result", "admin, root, tester\r\n", console.runForTest("user list"));
// delete user
assertEquals("Invalid console execution result", "User deleted.\r\n", console.runForTest("user delete tester"));
// check list
assertEquals("Invalid console execution result", "admin, root\r\n", console.runForTest("user list"));
// check "root" user
try (final Tx tx = app.tx()) {
final User root = app.nodeQuery(User.class).andName("root").getFirst();
assertNotNull("Invalid console execution result", root);
assertEquals("Invalid console execution result", "root", root.getProperty(User.name));
assertEquals("Invalid console execution result", Boolean.TRUE, root.isAdmin());
tx.success();
}
// make check "admin" user
try (final Tx tx = app.tx()) {
admin = app.nodeQuery(User.class).andName("admin").getFirst();
assertNotNull("Invalid console execution result", admin);
assertEquals("Invalid console execution result", "admin", admin.getProperty(User.name));
assertEquals("Invalid console execution result", "admin@localhost", admin.getEMail());
assertEquals("Invalid console execution result", Boolean.TRUE, admin.isAdmin());
final Folder folder = app.create(Folder.class, "folder");
folder.setProperties(folder.getSecurityContext(), new PropertyMap(Folder.owner, admin));
tx.success();
}
final String idHash = admin.getUuid().substring(7, 11);
// delete user without confirmation
assertEquals("Invalid console execution result", "User 'admin' has owned nodes, please confirm deletion with 'user delete admin " + idHash + "'.\r\n", console.runForTest("user delete admin"));
// delete user with confirmation
assertEquals("Invalid console execution result", "User deleted.\r\n", console.runForTest("user delete admin " + idHash));
// check list
assertEquals("Invalid console execution result", "root\r\n", console.runForTest("user list"));
} catch (FrameworkException fex) {
logger.warn("", fex);
fail("Unexpected exception.");
}
}
use of org.structr.web.entity.User in project structr by structr.
the class RegistrationResource method createUser.
/**
* Create a new user.
*
* If a {@link Principal} is found, convert that object to a {@link Principal} object.
* If autoCreate is true, auto-create a new user, even if no matching person is found.
*
* @param securityContext
* @param credentialKey
* @param credentialValue
* @param propertySet
* @param autoCreate
* @param userClass
* @return user
*/
public static Principal createUser(final SecurityContext securityContext, final PropertyKey credentialKey, final String credentialValue, final Map<String, Object> propertySet, final boolean autoCreate, final Class userClass, final String confKey) {
final PropertyKey<String> confirmationKeyKey = StructrApp.key(User.class, "confirmationKey");
Principal user = null;
try {
// First, search for a person with that e-mail address
user = AuthHelper.getPrincipalForCredential(credentialKey, credentialValue);
if (user != null) {
user = new NodeFactory<Principal>(securityContext).instantiate(user.getNode());
// convert to user
user.unlockSystemPropertiesOnce();
final PropertyMap changedProperties = new PropertyMap();
changedProperties.put(AbstractNode.type, User.class.getSimpleName());
changedProperties.put(confirmationKeyKey, confKey);
user.setProperties(securityContext, changedProperties);
} else if (autoCreate) {
final App app = StructrApp.getInstance(securityContext);
// Clear properties set by us from the user-defined props
propertySet.remove(credentialKey.jsonName());
propertySet.remove("confirmationKey");
PropertyMap props = PropertyMap.inputTypeToJavaType(securityContext, Principal.class, propertySet);
// Remove any property which is not included in configuration
// eMail is mandatory and necessary
final String customAttributesString = "eMail" + "," + Settings.RegistrationCustomAttributes.getValue();
final List<String> customAttributes = Arrays.asList(customAttributesString.split("[ ,]+"));
final Set<PropertyKey> propsToRemove = new HashSet<>();
for (final PropertyKey key : props.keySet()) {
if (!customAttributes.contains(key.jsonName())) {
propsToRemove.add(key);
}
}
for (final PropertyKey propToRemove : propsToRemove) {
props.remove(propToRemove);
}
props.put(credentialKey, credentialValue);
props.put(confirmationKeyKey, confKey);
user = (Principal) app.create(userClass, props);
} else {
logger.info("User self-registration is not configured yet, cannot create new user.");
}
} catch (FrameworkException ex) {
logger.error("", ex);
}
return user;
}
Aggregations