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();
}
}
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();
}
}
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();
}
}
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);
}
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);
}
}
Aggregations