/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.sync.config;
import java.net.URI;
import org.mozilla.gecko.sync.GlobalSession;
import org.mozilla.gecko.sync.Logger;
import org.mozilla.gecko.sync.net.BaseResource;
import org.mozilla.gecko.sync.net.SyncStorageRecordRequest;
import org.mozilla.gecko.sync.net.SyncStorageRequestDelegate;
import org.mozilla.gecko.sync.net.SyncStorageResponse;
/**
* Bug 770785: when an Android Account is deleted, we need to (try to) delete
* the associated client GUID from the server's clients table.
* <p>
* This class provides a static method to do that.
*/
public class ClientRecordTerminator {
public static final String LOG_TAG = "ClientRecTerminator";
protected ClientRecordTerminator() {
super(); // Stop this class from being instantiated.
}
public static void deleteClientRecord(final String username,
final String password,
final String clusterURL,
final String clientGuid)
throws Exception {
// Would prefer to delegate to SyncConfiguration, but that would proliferate static methods.
final String collection = "clients";
final URI wboURI = new URI(clusterURL + GlobalSession.API_VERSION + "/" + username + "/storage/" + collection + "/" + clientGuid);
// Would prefer to break this out into a self-contained client library.
final SyncStorageRecordRequest r = new SyncStorageRecordRequest(wboURI);
r.delegate = new SyncStorageRequestDelegate() {
@Override
public String credentials() {
return username + ":" + password;
}
@Override
public String ifUnmodifiedSince() {
return null;
}
@Override
public void handleRequestSuccess(SyncStorageResponse response) {
Logger.info(LOG_TAG, "Deleted client record with GUID " + clientGuid + " from server.");
BaseResource.consumeEntity(response);
}
@Override
public void handleRequestFailure(SyncStorageResponse response) {
Logger.warn(LOG_TAG, "Failed to delete client record with GUID " + clientGuid + " from server.");
try {
Logger.warn(LOG_TAG, "Server error message was: " + response.getErrorMessage());
} catch (Exception e) {
// Do nothing.
}
BaseResource.consumeEntity(response);
}
@Override
public void handleRequestError(Exception ex) {
// It could be that we don't have network access when trying
// to remove an Account; not much to be done in this situation.
Logger.error(LOG_TAG, "Got exception trying to delete client record with GUID " + clientGuid + " from server; ignoring.", ex);
}
};
r.delete();
}
}