mobile/android/base/sync/middleware/Crypto5MiddlewareRepository.java

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/mobile/android/base/sync/middleware/Crypto5MiddlewareRepository.java	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,74 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +package org.mozilla.gecko.sync.middleware;
     1.9 +
    1.10 +import org.mozilla.gecko.sync.crypto.KeyBundle;
    1.11 +import org.mozilla.gecko.sync.repositories.IdentityRecordFactory;
    1.12 +import org.mozilla.gecko.sync.repositories.RecordFactory;
    1.13 +import org.mozilla.gecko.sync.repositories.Repository;
    1.14 +import org.mozilla.gecko.sync.repositories.RepositorySession;
    1.15 +import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionCleanDelegate;
    1.16 +import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionCreationDelegate;
    1.17 +
    1.18 +import android.content.Context;
    1.19 +
    1.20 +/**
    1.21 + * Wrap an existing repository in middleware that encrypts and decrypts records
    1.22 + * passing through.
    1.23 + *
    1.24 + * @author rnewman
    1.25 + *
    1.26 + */
    1.27 +public class Crypto5MiddlewareRepository extends MiddlewareRepository {
    1.28 +
    1.29 +  public RecordFactory recordFactory = new IdentityRecordFactory();
    1.30 +
    1.31 +  public class Crypto5MiddlewareRepositorySessionCreationDelegate extends MiddlewareRepository.SessionCreationDelegate {
    1.32 +    private Crypto5MiddlewareRepository repository;
    1.33 +    private RepositorySessionCreationDelegate outerDelegate;
    1.34 +
    1.35 +    public Crypto5MiddlewareRepositorySessionCreationDelegate(Crypto5MiddlewareRepository repository, RepositorySessionCreationDelegate outerDelegate) {
    1.36 +      this.repository = repository;
    1.37 +      this.outerDelegate = outerDelegate;
    1.38 +    }
    1.39 +    public void onSessionCreateFailed(Exception ex) {
    1.40 +      this.outerDelegate.onSessionCreateFailed(ex);
    1.41 +    }
    1.42 +
    1.43 +    @Override
    1.44 +    public void onSessionCreated(RepositorySession session) {
    1.45 +      // Do some work, then report success with the wrapping session.
    1.46 +      Crypto5MiddlewareRepositorySession cryptoSession;
    1.47 +      try {
    1.48 +        // Synchronous, baby.
    1.49 +        cryptoSession = new Crypto5MiddlewareRepositorySession(session, this.repository, recordFactory);
    1.50 +      } catch (Exception ex) {
    1.51 +        this.outerDelegate.onSessionCreateFailed(ex);
    1.52 +        return;
    1.53 +      }
    1.54 +      this.outerDelegate.onSessionCreated(cryptoSession);
    1.55 +    }
    1.56 +  }
    1.57 +
    1.58 +  public KeyBundle keyBundle;
    1.59 +  private Repository inner;
    1.60 +
    1.61 +  public Crypto5MiddlewareRepository(Repository inner, KeyBundle keys) {
    1.62 +    super();
    1.63 +    this.inner = inner;
    1.64 +    this.keyBundle = keys;
    1.65 +  }
    1.66 +  @Override
    1.67 +  public void createSession(RepositorySessionCreationDelegate delegate, Context context) {
    1.68 +    Crypto5MiddlewareRepositorySessionCreationDelegate delegateWrapper = new Crypto5MiddlewareRepositorySessionCreationDelegate(this, delegate);
    1.69 +    inner.createSession(delegateWrapper, context);
    1.70 +  }
    1.71 +
    1.72 +  @Override
    1.73 +  public void clean(boolean success, RepositorySessionCleanDelegate delegate,
    1.74 +                    Context context) {
    1.75 +    this.inner.clean(success, delegate, context);
    1.76 +  }
    1.77 +}

mercurial