}
}
- /** The node must already exist at this path */
+ /** The node must already exist at this path. Session is saved. */
@Override
- protected void encrypt(String path, InputStream unencrypted) {
+ protected synchronized void encrypt(String path, InputStream unencrypted) {
// should be called first for lazy initialization
SecretKey secretKey = getSecretKey();
Cipher cipher = createCipher();
if (!session.nodeExists(path))
throw new ArgeoException("No node at " + path);
+ if (session.hasPendingChanges())
+ session.save();
Node node = session.getNode(path);
node.addMixin(ArgeoTypes.ARGEO_ENCRYPTED);
SecureRandom random = new SecureRandom();
in = new CipherInputStream(unencrypted, cipher);
binary = session.getValueFactory().createBinary(in);
node.setProperty(Property.JCR_DATA, binary);
+ session.save();
} catch (Exception e) {
throw new ArgeoException("Cannot encrypt", e);
} finally {
}
@Override
- protected InputStream decrypt(String path) {
+ protected synchronized InputStream decrypt(String path) {
// should be called first for lazy initialization
SecretKey secretKey = getSecretKey();
}
}
- public void changePassword(char[] oldPassword, char[] newPassword) {
- // TODO Auto-generated method stub
-
+ public synchronized void changePassword(char[] oldPassword,
+ char[] newPassword) {
+ // TODO decrypt with old pw / encrypt with new pw all argeo:encrypted
}
- public Session getSession() {
+ public synchronized Session getSession() {
return session;
}
- public void setSession(Session session) {
+ public synchronized void setSession(Session session) {
this.session = session;
}