package org.anhonesteffort.flock.sync.key;
import android.util.Log;
import net.fortuna.ical4j.model.Calendar;
import org.anhonesteffort.flock.util.guava.Optional;
import org.anhonesteffort.flock.sync.OwsWebDav;
import org.anhonesteffort.flock.webdav.AbstractDavComponentCollection;
import org.anhonesteffort.flock.webdav.InvalidComponentException;
import org.anhonesteffort.flock.webdav.MultiStatusResult;
import org.anhonesteffort.flock.webdav.PropertyParseException;
import org.anhonesteffort.flock.webdav.caldav.CalDavCollection;
import org.anhonesteffort.flock.webdav.caldav.CalDavConstants;
import org.anhonesteffort.flock.webdav.caldav.CalDavStore;
import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.MultiStatusResponse;
import org.apache.jackrabbit.webdav.property.DavPropertyName;
import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
import org.apache.jackrabbit.webdav.property.DavPropertySet;
import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
import org.apache.jackrabbit.webdav.security.report.PrincipalMatchReport;
import org.apache.jackrabbit.webdav.version.report.ReportType;
import java.io.IOException;
/**
* rhodey
*/
public class DavKeyCollection extends AbstractDavComponentCollection<Calendar> {
private static final String TAG = "org.anhonesteffort.flock.sync.key.DavKeyCollection";
protected static final String PROPERTY_NAME_KEY_MATERIAL_SALT = "X-KEY-MATERIAL-SALT";
protected static final String PROPERTY_NAME_ENCRYPTED_KEY_MATERIAL = "X-ENCRYPTED-KEY-MATERIAL";
protected static final DavPropertyName PROPERTY_KEY_MATERIAL_SALT = DavPropertyName.create(
PROPERTY_NAME_KEY_MATERIAL_SALT,
OwsWebDav.NAMESPACE
);
protected static final DavPropertyName PROPERTY_ENCRYPTED_KEY_MATERIAL = DavPropertyName.create(
PROPERTY_NAME_ENCRYPTED_KEY_MATERIAL,
OwsWebDav.NAMESPACE
);
public DavKeyCollection(CalDavStore store, String path) {
super(store, path);
}
public DavKeyCollection(CalDavCollection collection, String path) {
super(collection.getStore(), path, collection.getProperties());
}
@Override
protected String getComponentPathFromUid(String uid) {
return getPath().concat(uid.concat(CalDavConstants.ICAL_FILE_EXTENSION));
}
@Override
protected DavPropertyNameSet getPropertyNamesForFetch() {
DavPropertyNameSet keyMaterialProps = super.getPropertyNamesForFetch();
keyMaterialProps.add(PROPERTY_KEY_MATERIAL_SALT);
keyMaterialProps.add(PROPERTY_ENCRYPTED_KEY_MATERIAL);
return keyMaterialProps;
}
@Override
protected ReportType getQueryReportType() {
return ReportType.register(CalDavConstants.PROPERTY_CALENDAR_QUERY,
CalDavConstants.CALDAV_NAMESPACE,
PrincipalMatchReport.class);
}
@Override
protected ReportType getMultiGetReportType() {
return ReportType.register(CalDavConstants.PROPERTY_CALENDAR_MULTIGET,
CalDavConstants.CALDAV_NAMESPACE,
PrincipalMatchReport.class);
}
@Override
protected DavPropertyNameSet getPropertyNamesForReports() {
DavPropertyNameSet calendarProperties = new DavPropertyNameSet();
calendarProperties.add(CalDavConstants.PROPERTY_NAME_CALENDAR_DATA);
calendarProperties.add(DavPropertyName.GETETAG);
return calendarProperties;
}
public Optional<String> getKeyMaterialSalt() throws PropertyParseException {
return getProperty(PROPERTY_KEY_MATERIAL_SALT, String.class);
}
public void setKeyMaterialSalt(String keyMaterialSalt)
throws DavException, IOException
{
Log.w(TAG, "setKeyMaterialSalt()");
DavPropertySet updateProperties = new DavPropertySet();
updateProperties.add(new DefaultDavProperty<String>(PROPERTY_KEY_MATERIAL_SALT, keyMaterialSalt));
patchProperties(updateProperties, new DavPropertyNameSet());
}
public Optional<String> getEncryptedKeyMaterial() throws PropertyParseException {
return getProperty(PROPERTY_ENCRYPTED_KEY_MATERIAL, String.class);
}
public void setEncryptedKeyMaterial(String encryptedKeyMaterial)
throws DavException, IOException
{
Log.w(TAG, "setEncryptedKeyMaterial()");
DavPropertySet updateProperties = new DavPropertySet();
updateProperties.add(new DefaultDavProperty<String>(PROPERTY_ENCRYPTED_KEY_MATERIAL, encryptedKeyMaterial));
patchProperties(updateProperties, new DavPropertyNameSet());
}
@Override
protected MultiStatusResult<Calendar> getComponentsFromMultiStatus(MultiStatusResponse[] msResponses) {
return null;
}
@Override
protected void putComponentToServer(Calendar calendar, Optional<String> ifMatchETag)
throws DavException, IOException, InvalidComponentException
{
}
}