Search in sources :

Example 21 with RepositoryException

use of org.platformlayer.RepositoryException in project platformlayer by platformlayer.

the class JdbcManagedItemRepository method findRoots.

@Override
@JdbcTransaction
public List<ItemBase> findRoots(ProjectId project, boolean fetchTags, SecretProvider secretProvider) throws RepositoryException {
    DbHelper db = new DbHelper(project);
    try {
        // TODO: Push-down logic for item selection as well
        JoinedQueryResult result = db.listRoots();
        List<ItemBase> roots = mapItemsAndTags(project, secretProvider, db, result);
        for (ItemBase root : roots) {
            // A little bit of paranoia
            boolean isRoot = true;
            for (Tag tag : root.getTags()) {
                boolean tagIsParent = Tag.PARENT.getKey().equals(tag.getKey());
                if (tagIsParent) {
                    isRoot = false;
                    break;
                }
            }
            assert isRoot;
            if (!isRoot) {
                throw new IllegalStateException();
            }
        }
        return roots;
    } catch (SQLException e) {
        throw new RepositoryException("Error fetching items", e);
    } finally {
        db.close();
    }
}
Also used : ItemBase(org.platformlayer.core.model.ItemBase) SQLException(java.sql.SQLException) RepositoryException(org.platformlayer.RepositoryException) Tag(org.platformlayer.core.model.Tag) JoinedQueryResult(com.fathomdb.jpa.impl.JoinedQueryResult) JdbcTransaction(com.fathomdb.jdbc.JdbcTransaction)

Example 22 with RepositoryException

use of org.platformlayer.RepositoryException in project platformlayer by platformlayer.

the class JdbcManagedItemRepository method findAll.

@Override
@JdbcTransaction
public <T extends ItemBase> List<T> findAll(ModelClass<T> modelClass, ProjectId project, boolean fetchTags, SecretProvider secretProvider, Filter filter) throws RepositoryException {
    DbHelper db = new DbHelper(modelClass, project);
    try {
        int projectId = db.mapToValue(project);
        int modelId = db.mapToValue(modelClass.getItemType());
        int serviceId = db.mapToValue(modelClass.getServiceType());
        String filterKey = null;
        JoinedQueryResult result = db.queries.listItems(serviceId, modelId, projectId, filterKey);
        List<T> items = mapItemsAndTags(project, secretProvider, db, result);
        return applyFilter(items, filter);
    } catch (SQLException e) {
        throw new RepositoryException("Error fetching items", e);
    } finally {
        db.close();
    }
}
Also used : SQLException(java.sql.SQLException) RepositoryException(org.platformlayer.RepositoryException) JoinedQueryResult(com.fathomdb.jpa.impl.JoinedQueryResult) JdbcTransaction(com.fathomdb.jdbc.JdbcTransaction)

Example 23 with RepositoryException

use of org.platformlayer.RepositoryException in project platformlayer by platformlayer.

the class JdbcServiceAuthorizationRepository method setPrivateData.

@Override
@JdbcTransaction
public void setPrivateData(ServiceType serviceType, ProjectId project, ServiceMetadataKey metadataKey, String value) throws RepositoryException {
    DbHelper db = new DbHelper(serviceType, project, metadataKey);
    try {
        CryptoKey secret = FathomdbCrypto.generateKey();
        byte[] plaintext = Utf8.getBytes(value);
        byte[] ciphertext = FathomdbCrypto.encrypt(secret, plaintext);
        // TODO: Encode this differently from items??
        byte[] secretData = secretHelper.encodeItemSecret(secret);
        if (serviceType == null) {
            db.insertProjectMetadata(ciphertext, secretData);
        } else {
            db.insertServiceMetadata(ciphertext, secretData);
        }
    } catch (SQLException e) {
        throw new RepositoryException("Error running query", e);
    } finally {
        db.close();
    }
}
Also used : SQLException(java.sql.SQLException) AesCryptoKey(com.fathomdb.crypto.AesCryptoKey) CryptoKey(com.fathomdb.crypto.CryptoKey) RepositoryException(org.platformlayer.RepositoryException) JdbcTransaction(com.fathomdb.jdbc.JdbcTransaction)

Example 24 with RepositoryException

use of org.platformlayer.RepositoryException in project platformlayer by platformlayer.

the class JdbcServiceAuthorizationRepository method findPrivateData.

@Override
@JdbcTransaction
public String findPrivateData(ServiceType serviceType, ProjectId project, ServiceMetadataKey metadataKey) throws RepositoryException {
    DbHelper db = new DbHelper(serviceType, project, metadataKey);
    List<String> values = Lists.newArrayList();
    ResultSet rs = null;
    try {
        if (serviceType == null) {
            rs = db.selectProjectMetadata();
        } else {
            rs = db.selectServiceMetadata();
        }
        while (rs.next()) {
            CryptoKey secretKey = secretHelper.getSecret(rs.getBytes("secret"));
            if (secretKey instanceof AesCryptoKey) {
                log.warn("Legacy AES crypto key: findPrivateData[{}, {}, {}]", new Object[] { serviceType, project, metadataKey });
            }
            byte[] plaintext = FathomdbCrypto.decrypt(secretKey, rs.getBytes("data"));
            String value = Utf8.toString(plaintext);
            values.add(value);
        }
    } catch (SQLException e) {
        throw new RepositoryException("Error running query", e);
    } finally {
        JdbcUtils.safeClose(rs);
        db.close();
    }
    if (values.size() == 0) {
        return null;
    }
    if (values.size() != 1) {
        throw new IllegalStateException("Found duplicate results for primary key");
    }
    return values.get(0);
}
Also used : SQLException(java.sql.SQLException) AesCryptoKey(com.fathomdb.crypto.AesCryptoKey) ResultSet(java.sql.ResultSet) AesCryptoKey(com.fathomdb.crypto.AesCryptoKey) CryptoKey(com.fathomdb.crypto.CryptoKey) RepositoryException(org.platformlayer.RepositoryException) JdbcTransaction(com.fathomdb.jdbc.JdbcTransaction)

Example 25 with RepositoryException

use of org.platformlayer.RepositoryException in project platformlayer by platformlayer.

the class JdbcServiceAuthorizationRepository method createAuthorization.

@Override
@JdbcTransaction
public ServiceAuthorization createAuthorization(ProjectId project, ServiceAuthorization authorization) throws RepositoryException {
    try {
        ServiceType serviceType = new ServiceType(authorization.serviceType);
        JdbcConnection connection = connectionProvider.get();
        int serviceId = JdbcRepositoryHelpers.getServiceKey(connection, serviceType);
        int projectId = JdbcRepositoryHelpers.getProjectKey(connection, project);
        final String sql = "INSERT INTO service_authorizations (service, project, data) VALUES (?, ?, ?)";
        PreparedStatement ps = connection.prepareStatement(sql);
        ResultSet rs = null;
        try {
            ps.setInt(1, serviceId);
            ps.setInt(2, projectId);
            ps.setString(3, authorization.data);
            int updateCount = ps.executeUpdate();
            if (updateCount != 1) {
                throw new IllegalStateException("Unexpected number of rows inserted");
            }
        } finally {
            JdbcUtils.safeClose(rs);
            JdbcUtils.safeClose(ps);
        }
        return authorization;
    } catch (SQLException e) {
        throw new RepositoryException("Error running query", e);
    }
}
Also used : SQLException(java.sql.SQLException) ServiceType(org.platformlayer.ids.ServiceType) ResultSet(java.sql.ResultSet) JdbcConnection(com.fathomdb.jdbc.JdbcConnection) PreparedStatement(java.sql.PreparedStatement) RepositoryException(org.platformlayer.RepositoryException) JdbcTransaction(com.fathomdb.jdbc.JdbcTransaction)

Aggregations

RepositoryException (org.platformlayer.RepositoryException)56 JdbcTransaction (com.fathomdb.jdbc.JdbcTransaction)30 SQLException (java.sql.SQLException)30 OpsException (org.platformlayer.ops.OpsException)18 ProjectId (org.platformlayer.ids.ProjectId)14 ItemBase (org.platformlayer.core.model.ItemBase)10 CryptoKey (com.fathomdb.crypto.CryptoKey)8 PlatformLayerKey (org.platformlayer.core.model.PlatformLayerKey)7 ManagedItemId (org.platformlayer.ids.ManagedItemId)7 OpsContext (org.platformlayer.ops.OpsContext)7 ServiceProvider (org.platformlayer.xaas.services.ServiceProvider)7 IOException (java.io.IOException)6 AesCryptoKey (com.fathomdb.crypto.AesCryptoKey)5 PublicKey (java.security.PublicKey)4 JAXBException (javax.xml.bind.JAXBException)4 Tag (org.platformlayer.core.model.Tag)4 ServiceType (org.platformlayer.ids.ServiceType)4 JobData (org.platformlayer.jobs.model.JobData)4 JoinedQueryResult (com.fathomdb.jpa.impl.JoinedQueryResult)3 X509Certificate (java.security.cert.X509Certificate)3