Search in sources :

Example 31 with User

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.");
    }
}
Also used : User(org.structr.web.entity.User) PropertyMap(org.structr.core.property.PropertyMap) Tx(org.structr.core.graph.Tx) FrameworkException(org.structr.common.error.FrameworkException) Folder(org.structr.web.entity.Folder) Principal(org.structr.core.entity.Principal) Test(org.junit.Test) StructrUiTest(org.structr.web.StructrUiTest)

Example 32 with User

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;
}
Also used : StructrApp(org.structr.core.app.StructrApp) App(org.structr.core.app.App) PropertyMap(org.structr.core.property.PropertyMap) User(org.structr.web.entity.User) HashSet(java.util.HashSet) Set(java.util.Set) NodeFactory(org.structr.core.graph.NodeFactory) FrameworkException(org.structr.common.error.FrameworkException) List(java.util.List) Principal(org.structr.core.entity.Principal) PropertyKey(org.structr.core.property.PropertyKey)

Aggregations

User (org.structr.web.entity.User)32 Tx (org.structr.core.graph.Tx)27 FrameworkException (org.structr.common.error.FrameworkException)23 Test (org.junit.Test)21 StructrUiTest (org.structr.web.StructrUiTest)16 PropertyMap (org.structr.core.property.PropertyMap)14 Principal (org.structr.core.entity.Principal)10 App (org.structr.core.app.App)8 StructrApp (org.structr.core.app.StructrApp)8 NodeAttribute (org.structr.core.graph.NodeAttribute)7 SecurityContext (org.structr.common.SecurityContext)5 Folder (org.structr.web.entity.Folder)5 SchemaMethod (org.structr.core.entity.SchemaMethod)4 SchemaNode (org.structr.core.entity.SchemaNode)4 Page (org.structr.web.entity.dom.Page)4 GraphObject (org.structr.core.GraphObject)3 RenderContext (org.structr.web.common.RenderContext)3 File (org.structr.web.entity.File)3 Body (org.structr.web.entity.html.Body)3 Div (org.structr.web.entity.html.Div)3