Search in sources :

Example 6 with Configuration

use of org.exist.config.Configuration in project exist by eXist-db.

the class AbstractPrincipal method setCollection.

public final void setCollection(DBBroker broker, Collection collection, XmldbURI uri) throws ConfigurationException {
    if (collection != null) {
        Configurator.unregister(configuration);
        final Configuration _config_ = Configurator.parse(this, broker, collection, uri);
        configuration = Configurator.configure(this, _config_);
    }
}
Also used : Configuration(org.exist.config.Configuration)

Example 7 with Configuration

use of org.exist.config.Configuration in project exist by eXist-db.

the class AbstractRealm method loadRemovedAccountsFromRealmStorage.

private void loadRemovedAccountsFromRealmStorage(final DBBroker broker) throws ConfigurationException, PermissionDeniedException, LockException {
    // load marked for remove accounts information
    if (collectionRemovedAccounts != null && collectionRemovedAccounts.getDocumentCount(broker) > 0) {
        for (final Iterator<DocumentImpl> i = collectionRemovedAccounts.iterator(broker); i.hasNext(); ) {
            final Configuration conf = Configurator.parse(broker.getBrokerPool(), i.next());
            final Integer id = conf.getPropertyInteger("id");
            if (id != null && !getSecurityManager().hasUser(id)) {
                // A account = instantiateAccount(this, conf, true);
                final AccountImpl account = new AccountImpl(this, conf);
                account.removed = true;
                getSecurityManager().registerAccount(account);
            }
        }
    }
}
Also used : Configuration(org.exist.config.Configuration) AccountImpl(org.exist.security.internal.AccountImpl) DocumentImpl(org.exist.dom.persistent.DocumentImpl)

Example 8 with Configuration

use of org.exist.config.Configuration in project exist by eXist-db.

the class SecurityManagerImpl method processParameter.

@Override
public void processParameter(final DBBroker broker, final DocumentImpl document) throws ConfigurationException {
    XmldbURI uri = document.getCollection().getURI();
    final boolean isRemoved = uri.endsWith(SecurityManager.REMOVED_COLLECTION_URI);
    if (isRemoved) {
        uri = uri.removeLastSegment();
    }
    final boolean isAccount = uri.endsWith(SecurityManager.ACCOUNTS_COLLECTION_URI);
    final boolean isGroup = uri.endsWith(SecurityManager.GROUPS_COLLECTION_URI);
    if (isAccount || isGroup) {
        uri = uri.removeLastSegment();
        final String realmId = uri.lastSegment().toString();
        final AbstractRealm realm = (AbstractRealm) findRealmForRealmId(realmId);
        final Configuration conf = Configurator.parse(broker.getBrokerPool(), document);
        Integer id = -1;
        if (isRemoved) {
            id = conf.getPropertyInteger("id");
        }
        final String name = conf.getProperty("name");
        if (isAccount) {
            if (isRemoved && id > 2 && !hasUser(id)) {
                final AccountImpl account = new AccountImpl(realm, conf);
                account.removed = true;
                registerAccount(account);
            } else if (name != null) {
                if (realm.hasAccount(name)) {
                    final Integer oldId = saving.get(document.getURI());
                    final Integer newId = conf.getPropertyInteger("id");
                    if (!newId.equals(oldId)) {
                        final Account current = realm.getAccount(name);
                        try (final ManagedLock<ReadWriteLock> lock = ManagedLock.acquire(accountLocks.getLock(current), LockMode.WRITE_LOCK)) {
                            usersById.write(principalDb -> {
                                principalDb.remove(oldId);
                                principalDb.put(newId, current);
                            });
                        }
                    }
                } else {
                    final Account account = new AccountImpl(realm, conf);
                    if (account.getGroups().length == 0) {
                        try {
                            account.setPrimaryGroup(realm.getGroup(SecurityManager.UNKNOWN_GROUP));
                            LOG.warn("Account '{}' has no groups, but every account must have at least 1 group. Assigned group: " + SecurityManager.UNKNOWN_GROUP, account.getName());
                        } catch (final PermissionDeniedException e) {
                            throw new ConfigurationException("Account has no group, unable to default to " + SecurityManager.UNKNOWN_GROUP + ": " + e.getMessage(), e);
                        }
                    }
                    registerAccount(account);
                    realm.registerAccount(account);
                }
            } else {
                // this can't be! log any way
                LOG.error("Account '{}' already exists in realm: '{}', but received notification that a new one was created.", name, realmId);
            }
        } else if (isGroup) {
            if (isRemoved && id > 2 && !hasGroup(id)) {
                final GroupImpl group = new GroupImpl(realm, conf);
                group.removed = true;
                registerGroup(group);
            } else if (name != null && !realm.hasGroup(name)) {
                final GroupImpl group = new GroupImpl(realm, conf);
                registerGroup(group);
                realm.registerGroup(group);
            } else {
                // this can't be! log any way
                LOG.error("Group '{}' already exists in realm: '{}', but received notification that a new one was created.", name, realmId);
            }
        }
        saving.remove(document.getURI());
    }
}
Also used : LockMode(org.exist.storage.lock.Lock.LockMode) Txn(org.exist.storage.txn.Txn) BrokerPool(org.exist.storage.BrokerPool) ConfigurationException(org.exist.config.ConfigurationException) BiFunction(java.util.function.BiFunction) JobDescription(org.exist.scheduler.JobDescription) PermissionDeniedException(org.exist.security.PermissionDeniedException) ConcurrentValueWrapper(org.exist.util.ConcurrentValueWrapper) Configuration(org.exist.config.Configuration) Configurator(org.exist.config.Configurator) Map(java.util.Map) SchemaType(org.exist.security.SchemaType) Collection(org.exist.collections.Collection) ReadWriteLock(java.util.concurrent.locks.ReadWriteLock) JobExecutionContext(org.quartz.JobExecutionContext) Int2ObjectOpenHashMap(it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap) AbstractRealm(org.exist.security.AbstractRealm) AuthenticationException(org.exist.security.AuthenticationException) GroupAider(org.exist.security.internal.aider.GroupAider) Session(org.exist.security.Session) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) AtomicLazyVal(com.evolvedbinary.j8fu.lazy.AtomicLazyVal) Collectors(java.util.stream.Collectors) SecurityManager(org.exist.security.SecurityManager) List(java.util.List) Logger(org.apache.logging.log4j.Logger) Principal(org.exist.security.Principal) ManagedLock(org.exist.storage.lock.ManagedLock) JobDataMap(org.quartz.JobDataMap) Realm(org.exist.security.realm.Realm) WeakLazyStripes(org.exist.util.WeakLazyStripes) ThreadSafe(net.jcip.annotations.ThreadSafe) HashMap(java.util.HashMap) ReentrantReadWriteLock(java.util.concurrent.locks.ReentrantReadWriteLock) ArrayList(java.util.ArrayList) Account(org.exist.security.Account) Subject(org.exist.security.Subject) BrokerPoolServiceException(org.exist.storage.BrokerPoolServiceException) XmldbURI(org.exist.xmldb.XmldbURI) SimpleTrigger(org.quartz.SimpleTrigger) DocumentImpl(org.exist.dom.persistent.DocumentImpl) EXistException(org.exist.EXistException) Permission(org.exist.security.Permission) Database(org.exist.Database) Properties(java.util.Properties) Group(org.exist.security.Group) BrokerPoolService(org.exist.storage.BrokerPoolService) org.exist.config.annotation(org.exist.config.annotation) DBBroker(org.exist.storage.DBBroker) Int2ObjectMap(it.unimi.dsi.fastutil.ints.Int2ObjectMap) LogManager(org.apache.logging.log4j.LogManager) Account(org.exist.security.Account) Configuration(org.exist.config.Configuration) AbstractRealm(org.exist.security.AbstractRealm) ManagedLock(org.exist.storage.lock.ManagedLock) ConfigurationException(org.exist.config.ConfigurationException) PermissionDeniedException(org.exist.security.PermissionDeniedException) XmldbURI(org.exist.xmldb.XmldbURI)

Example 9 with Configuration

use of org.exist.config.Configuration in project exist by eXist-db.

the class ConfigurableTest method simple.

@Test
public void simple() throws Exception {
    InputStream is = new UnsynchronizedByteArrayInputStream(config1.getBytes(UTF_8));
    Configuration config = Configurator.parse(is);
    ConfigurableObject object = new ConfigurableObject(config);
    assertNotNull(object.subclasses);
    assertEquals("A", object.subclasses.name);
    assertEquals("1", object.subclasses.version);
    assertEquals(1, object.subclasses.subconfs.size());
    // XXX: assertEquals(2, object.subclasses.subconfs.size());
    assertEquals("1", object.subclasses.subconfs.get(0).getKey());
    assertEquals("secret1", object.subclasses.subconfs.get(0).getSecret());
// XXX: assertEquals("2", object.subclasses.subconfs.get(1).getKey());
// XXX: assertEquals("secret2", object.subclasses.subconfs.get(1).getSecret());
}
Also used : Configuration(org.exist.config.Configuration) UnsynchronizedByteArrayInputStream(org.apache.commons.io.input.UnsynchronizedByteArrayInputStream) InputStream(java.io.InputStream) UnsynchronizedByteArrayInputStream(org.apache.commons.io.input.UnsynchronizedByteArrayInputStream) Test(org.junit.Test)

Example 10 with Configuration

use of org.exist.config.Configuration in project exist by eXist-db.

the class ActiveDirectoryRealmTest method setUpBeforeClass.

/**
 * @throws java.lang.Exception
 */
@BeforeClass
public static void setUpBeforeClass() throws Exception {
    InputStream is = new UnsynchronizedByteArrayInputStream(config.getBytes(StandardCharsets.UTF_8));
    Configuration config = Configurator.parse(is);
    realm = new ActiveDirectoryRealm(null, config);
}
Also used : Configuration(org.exist.config.Configuration) UnsynchronizedByteArrayInputStream(org.apache.commons.io.input.UnsynchronizedByteArrayInputStream) InputStream(java.io.InputStream) UnsynchronizedByteArrayInputStream(org.apache.commons.io.input.UnsynchronizedByteArrayInputStream) BeforeClass(org.junit.BeforeClass)

Aggregations

Configuration (org.exist.config.Configuration)16 DocumentImpl (org.exist.dom.persistent.DocumentImpl)5 InputStream (java.io.InputStream)4 UnsynchronizedByteArrayInputStream (org.apache.commons.io.input.UnsynchronizedByteArrayInputStream)3 Database (org.exist.Database)3 ConfigurationException (org.exist.config.ConfigurationException)3 PermissionDeniedException (org.exist.security.PermissionDeniedException)3 AccountImpl (org.exist.security.internal.AccountImpl)3 Test (org.junit.Test)3 MethodHandle (java.lang.invoke.MethodHandle)2 MethodHandles (java.lang.invoke.MethodHandles)2 EXistException (org.exist.EXistException)2 Collection (org.exist.collections.Collection)2 AbstractRealm (org.exist.security.AbstractRealm)2 AuthenticationException (org.exist.security.AuthenticationException)2 Realm (org.exist.security.realm.Realm)2 BrokerPoolServiceException (org.exist.storage.BrokerPoolServiceException)2 DBBroker (org.exist.storage.DBBroker)2 AtomicLazyVal (com.evolvedbinary.j8fu.lazy.AtomicLazyVal)1 Int2ObjectMap (it.unimi.dsi.fastutil.ints.Int2ObjectMap)1