Android got Intent Service which is equivalent to iOS Dispatch queue. Thanks for
clarifying.
I was referring to:
I think we've got a use case for async DataManager/Datastore.
++
Corinne.
On Nov 5, 2013, at 7:00 PM, Summers Pittman <supittma(a)redhat.com> wrote:
On Tue 05 Nov 2013 12:08:09 PM EST, Corinne Krych wrote:
>
> Hi Summers
>
> Referring to
>
http://aerogear-dev.1069024.n5.nabble.com/aerogear-dev-Fallback-Strat-for...
> where we might have async API for store in JS, I think we might
> benefit of async for native apps too, specially in the case of
> encrypted stores.
>
> Something like
https://github.com/rnapier/RNCryptor#asynchronous-use
>
> Of course, it can be done in later releases. Encrypting large field,
> you don't want to have your UI sluggish.
>
> wdyt?
The DataManager/Data Store API is synchronous, Pipes and Piplines are asynchronous. That
is a key difference.
I don't know about iOS but on Android not everything happens on the main thread, for
instance we could be dealing with a processing a service intent for instance.
>
> ++
> Corinne
>
> On 5 November 2013 17:44, Summers Pittman <supittma(a)redhat.com
> <mailto:supittma@redhat.com>> wrote:
>
> On 11/05/2013 02:41 AM, Corinne Krych wrote:
> > Hello all,
> >
> > I've got 2 points:
> >
> > - modularity: AeroGear libs are small and modular: we have a
> separate aerogear-otp-ios, aerogear-push-ios-registration so that
> if the user wants to use aerogear without push, he can use
> aerogear-ios, if he needs the push-registration, he uses both. For
> encryption store, where do we want to put EncryptedStore?
> aerogear-android depends on aerogear-crypto.
> On Android it is going into the main library. We can research slicing
> the client library up for 2.0, but I would like to, for now, make
> getting up and running with anything AeroGear on Android as simple as
> including the dependency.
> >
> > - Encrypting data takes time. It would be nice to have
> EncryptedStore encrypts data on separate thread and provide
> callbacks on completion.
> > thoughts?
> Then we would have an encrypted Pipe. One of the things about
> Stores is
> that they are synchronous, Pipes are asynchronous.
>
> >
> > ++
> > Corinne
> > On Nov 4, 2013, at 5:30 PM, Daniel Passos <daniel(a)passos.me
> <mailto:daniel@passos.me>> wrote:
> >
> >> The idea is implementing only save(add/update) and delete,
> using the stores we already have today by just adding crypt /
> decrypt and scheduling Query (readWithFilter) for the next release
> >> DataManager
> >>
> >> public Store encryptedStore(String storeName, String passphrase) {
> >> // TODO Create a default passphrase-based KeyStore
> >> KeyStore keyStore = null;
> >> return encryptedStore(storeName, keyStore);
> >> }
> >>
> >> public Store encryptedStore(String storeName, KeyStore keyStore) {
> >> StoreConfig storeConfig = new StoreConfig();
> >> storeConfig.setType(StoreTypes.ENCRYPTED_MEMORY);
> >> return encryptedStore(storeName, storeConfig, keyStore);
> >> }
> >>
> >> public Store encryptedStore(String storeName, StoreConfig
> config, String passphrase) {
> >> // TODO Create a default passphrase-based KeyStore
> >> KeyStore keyStore = null;
> >> return encryptedStore(storeName, config, keyStore);
> >> }
> >>
> >> public Store encryptedStore(String storeName, StoreConfig
> config, KeyStore keyStore) {
> >> config.setKeyStore(keyStore);
> >> Store store = storeFactory.createStore(config);
> >> stores.put(storeName, store);
> >> return store;
> >> }
> >>
> >> EncryptedMemoryStore
> >>
> >> public class EncryptedMemoryStore<T> implements Store<T> {
> >>
> >> private final MemoryStorage<T> memoryStorage;
> >> private final CryptoUtils<T> cryptoUtils;
> >>
> >> public EncryptedMemoryStore(IdGenerator idGenerator,
> KeyStore keyStore) {
> >> memoryStorage = new MemoryStorage(idGenerator);
> >> cryptoUtils = new CryptoUtils<T>(keyStore);
> >> }
> >>
> >> @Override
> >> public StoreType getType() {
> >> return StoreTypes.ENCRYPTED_MEMORY;
> >> }
> >>
> >> @Override
> >> public Collection<T> readAll() throws InvalidKeyException {
> >> Collection<T> encryptedCollection =
> memoryStorage.readAll();
> >> return cryptoUtils.decrypt(encryptedCollection);
> >> }
> >>
> >> @Override
> >> public T read(Serializable id) throws InvalidKeyException {
> >> T encryptedItem = memoryStorage.read(id);
> >> return cryptoUtils.decrypt(encryptedItem);
> >> }
> >>
> >> @Override
> >> public List<T> readWithFilter(ReadFilter filter) throws
> InvalidKeyException {
> >> List<T> encryptedList =
> memoryStorage.readWithFilter(filter);
> >> return cryptoUtils.decrypt(encryptedList);
> >> }
> >>
> >> @Override
> >> public void save(T item) {
> >> memoryStorage.save(cryptoUtils.encrypt(item));
> >> }
> >>
> >> @Override
> >> public void reset() {
> >> memoryStorage.reset();
> >> }
> >>
> >> @Override
> >> public void remove(Serializable id) {
> >> memoryStorage.remove(id);
> >> }
> >>
> >> @Override
> >> public boolean isEmpty() {
> >> return memoryStorage.isEmpty();
> >> }
> >>
> >> }
> >>
> >> CryptoUtils
> >>
> >> Here is where the magic happens.
> >>
> >>
> >> public class CryptoUtils<T> {
> >>
> >> private final KeyStore keyStore;
> >>
> >> public CryptoUtils(KeyStore keyStore) {
> >> this.keyStore = keyStore;
> >> }
> >>
> >> public Collection<T> decrypt(Collection<T>
> encryptedCollection) {
> >> List<T> decryptedList = new ArrayList<T>();
> >> for (T item : encryptedCollection) {
> >> decryptedList.add(decrypt(item));
> >> }
> >> return decryptedList;
> >> }
> >>
> >> public List<T> decrypt(List<T> encryptedList) {
> >> List<T> decryptedList = new ArrayList<T>();
> >> for (T item : encryptedList) {
> >> decryptedList.add(decrypt(item));
> >> }
> >> return decryptedList;
> >> }
> >>
> >> public T decrypt(T item) {
> >> // TODO Read all fields and decrypt
> >> return item;
> >> }
> >>
> >> public T encrypt(T item) {
> >> // TODO Read all fields and encrypt
> >> return item;
> >> }
> >>
> >> }
> >>
> >> _______________________________________________
> >> aerogear-dev mailing list
> >> aerogear-dev(a)lists.jboss.org <mailto:aerogear-dev@lists.jboss.org>
> >>
https://lists.jboss.org/mailman/listinfo/aerogear-dev
> >
> > _______________________________________________
> > aerogear-dev mailing list
> > aerogear-dev(a)lists.jboss.org <mailto:aerogear-dev@lists.jboss.org>
> >
https://lists.jboss.org/mailman/listinfo/aerogear-dev
>
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev(a)lists.jboss.org <mailto:aerogear-dev@lists.jboss.org>
>
https://lists.jboss.org/mailman/listinfo/aerogear-dev
>
>
>
>
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/aerogear-dev