Search in sources :

Example 1 with SignInHelper

use of org.awesomeapp.messenger.ui.legacy.SignInHelper in project Zom-Android by zom.

the class ImUrlActivity method signInAccount.

private void signInAccount(long accountId, long providerId, String password) {
    // editAccount(accountId);
    // TODO sign in?  security implications?
    SignInHelper signInHelper = new SignInHelper(this, new SimpleAlertHandler(this));
    signInHelper.setSignInListener(new SignInHelper.SignInListener() {

        public void connectedToService() {
        }

        public void stateChanged(int state, long accountId) {
            if (state == ImConnection.LOGGED_IN) {
                mHandlerRouter.post(new Runnable() {

                    public void run() {
                        handleIntent();
                    }
                });
            }
        }
    });
    signInHelper.signIn(password, providerId, accountId, true);
}
Also used : SimpleAlertHandler(org.awesomeapp.messenger.ui.legacy.SimpleAlertHandler) SignInHelper(org.awesomeapp.messenger.ui.legacy.SignInHelper)

Example 2 with SignInHelper

use of org.awesomeapp.messenger.ui.legacy.SignInHelper in project Zom-Android by zom.

the class MigrateAccountTask method doInBackground.

@Override
protected OnboardingAccount doInBackground(String... newDomains) {
    // get existing account username
    String nickname = Imps.Account.getNickname(mContext.getContentResolver(), mAccountId);
    String username = Imps.Account.getUserName(mContext.getContentResolver(), mAccountId);
    String password = Imps.Account.getPassword(mContext.getContentResolver(), mAccountId);
    OtrAndroidKeyManagerImpl keyMan = OtrAndroidKeyManagerImpl.getInstance(mContext);
    KeyPair keyPair = keyMan.generateLocalKeyPair();
    String fingerprint = keyMan.getFingerprint(keyPair.getPublic());
    // find or use provided new server/domain
    String domain = newDomains[0];
    // register account on new domain with same password
    mNewAccount = registerNewAccount(nickname, username, password, domain, null);
    if (mNewAccount == null) {
        username = username + '.' + fingerprint.substring(fingerprint.length() - 8, fingerprint.length()).toLowerCase();
        mNewAccount = registerNewAccount(nickname, username, password, domain, null);
        if (mNewAccount == null)
            return null;
    }
    String newJabberId = mNewAccount.username + '@' + mNewAccount.domain;
    keyMan.storeKeyPair(newJabberId, keyPair);
    // send migration message to existing contacts and/or sessions
    try {
        boolean loggedInToOldAccount = mConn.getState() == ImConnection.LOGGED_IN;
        // login and set new default account
        SignInHelper signInHelper = new SignInHelper(mContext, mHandler);
        signInHelper.activateAccount(mNewAccount.providerId, mNewAccount.accountId);
        signInHelper.signIn(mNewAccount.password, mNewAccount.providerId, mNewAccount.accountId, true);
        mNewConn = mApp.getConnection(mNewAccount.providerId, mNewAccount.accountId);
        while (mNewConn.getState() != ImConnection.LOGGED_IN) {
            try {
                Thread.sleep(500);
            } catch (Exception e) {
            }
        }
        String inviteLink = OnboardingManager.generateInviteLink(mContext, newJabberId, fingerprint, nickname, true);
        String migrateMessage = mContext.getString(R.string.migrate_message) + ' ' + inviteLink;
        IChatSessionManager sessionMgr = mConn.getChatSessionManager();
        IContactListManager clManager = mConn.getContactListManager();
        List<IContactList> listOfLists = clManager.getContactLists();
        if (loggedInToOldAccount) {
            for (IContactList contactList : listOfLists) {
                String[] contacts = contactList.getContacts();
                for (String contact : contacts) {
                    mContacts.add(contact);
                    IChatSession session = sessionMgr.getChatSession(contact);
                    if (session == null) {
                        session = sessionMgr.createChatSession(contact, true);
                    }
                    if (!session.isEncrypted()) {
                        // try to kick off some encryption here
                        session.getDefaultOtrChatSession().startChatEncryption();
                        try {
                            Thread.sleep(500);
                        }// just wait a half second here?
                         catch (Exception e) {
                        }
                    }
                    session.sendMessage(migrateMessage, false);
                    // archive existing contact
                    clManager.archiveContact(contact, session.isGroupChatSession() ? Imps.Contacts.TYPE_NORMAL : Imps.Contacts.TYPE_GROUP, true);
                }
            }
        } else {
            String[] offlineAddresses = clManager.getOfflineAddresses();
            for (String address : offlineAddresses) {
                mContacts.add(address);
                clManager.archiveContact(address, Imps.Contacts.TYPE_NORMAL, true);
            }
        }
        for (String contact : mContacts) {
            addToContactList(mNewConn, contact, keyMan.getRemoteFingerprint(contact), null);
        }
        if (loggedInToOldAccount) {
            // archive existing conversations and contacts
            List<IChatSession> listSession = mConn.getChatSessionManager().getActiveChatSessions();
            for (IChatSession session : listSession) {
                session.leave();
            }
            mConn.broadcastMigrationIdentity(newJabberId);
        }
        migrateAvatars(username, newJabberId);
        mApp.setDefaultAccount(mNewAccount.providerId, mNewAccount.accountId);
        // logout of existing account
        setKeepSignedIn(mAccountId, false);
        if (loggedInToOldAccount)
            mConn.logout();
        return mNewAccount;
    } catch (Exception e) {
        Log.e(ImApp.LOG_TAG, "error with migration", e);
    }
    // failed
    return null;
}
Also used : KeyPair(java.security.KeyPair) OtrAndroidKeyManagerImpl(org.awesomeapp.messenger.crypto.otr.OtrAndroidKeyManagerImpl) IContactList(org.awesomeapp.messenger.service.IContactList) SignInHelper(org.awesomeapp.messenger.ui.legacy.SignInHelper) IChatSession(org.awesomeapp.messenger.service.IChatSession) RemoteException(android.os.RemoteException) JSONException(org.json.JSONException) IOException(java.io.IOException) IChatSessionManager(org.awesomeapp.messenger.service.IChatSessionManager) IContactListManager(org.awesomeapp.messenger.service.IContactListManager)

Example 3 with SignInHelper

use of org.awesomeapp.messenger.ui.legacy.SignInHelper in project Zom-Android by zom.

the class AccountActivity method onCreate.

@Override
protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    Intent i = getIntent();
    mApp = (ImApp) getApplication();
    String action = i.getAction();
    if (i.hasExtra("isSignedIn"))
        isSignedIn = i.getBooleanExtra("isSignedIn", false);
    final ProviderDef provider;
    mSignInHelper = new SignInHelper(this, null);
    SignInHelper.SignInListener signInListener = new SignInHelper.SignInListener() {

        @Override
        public void connectedToService() {
        }

        @Override
        public void stateChanged(int state, long accountId) {
            if (state == ImConnection.LOGGED_IN) {
                // mSignInHelper.goToAccount(accountId);
                // finish();
                isSignedIn = true;
            } else {
                isSignedIn = false;
            }
        }
    };
    mSignInHelper.setSignInListener(signInListener);
    ContentResolver cr = getContentResolver();
    Uri uri = i.getData();
    // check if there is account information and direct accordingly
    if (Intent.ACTION_INSERT_OR_EDIT.equals(action)) {
        if ((uri == null) || !Imps.Account.CONTENT_ITEM_TYPE.equals(cr.getType(uri))) {
            action = Intent.ACTION_INSERT;
        } else {
            action = Intent.ACTION_EDIT;
        }
    }
    if (Intent.ACTION_INSERT.equals(action) && uri.getScheme().equals("ima")) {
        ImPluginHelper helper = ImPluginHelper.getInstance(this);
        String authority = uri.getAuthority();
        String[] userpass_host = authority.split("@");
        String[] user_pass = userpass_host[0].split(":");
        mUserName = user_pass[0].toLowerCase(Locale.getDefault());
        String pass = user_pass[1];
        mDomain = userpass_host[1].toLowerCase(Locale.getDefault());
        mPort = 0;
        final boolean regWithTor = i.getBooleanExtra("useTor", false);
        Cursor cursor = openAccountByUsernameAndDomain(cr);
        boolean exists = cursor.moveToFirst();
        long accountId;
        if (exists) {
            accountId = cursor.getLong(0);
            mAccountUri = ContentUris.withAppendedId(Imps.Account.CONTENT_URI, accountId);
            pass = cursor.getString(ACCOUNT_PASSWORD_COLUMN);
            setAccountKeepSignedIn(true);
            mSignInHelper.activateAccount(mProviderId, accountId);
            mSignInHelper.signIn(pass, mProviderId, accountId, true);
            setResult(RESULT_OK);
            cursor.close();
            finish();
            return;
        } else {
            // xmpp FIXME
            mProviderId = helper.createAdditionalProvider(helper.getProviderNames().get(0));
            accountId = ImApp.insertOrUpdateAccount(cr, mProviderId, mAccountId, mUserName, mUserName, pass);
            mAccountUri = ContentUris.withAppendedId(Imps.Account.CONTENT_URI, accountId);
            mSignInHelper.activateAccount(mProviderId, accountId);
            createNewAccount(mUserName, pass, accountId, regWithTor);
            cursor.close();
            return;
        }
    } else if (Intent.ACTION_INSERT.equals(action)) {
        setupUIPre();
        mOriginalUserAccount = "";
        // TODO once we implement multiple IM protocols
        mProviderId = ContentUris.parseId(uri);
        provider = mApp.getProvider(mProviderId);
        if (provider != null) {
            setTitle(getResources().getString(R.string.add_account, provider.mFullName));
        } else {
            finish();
        }
    } else if (Intent.ACTION_EDIT.equals(action)) {
        setupUIPre();
        if ((uri == null) || !Imps.Account.CONTENT_ITEM_TYPE.equals(cr.getType(uri))) {
            LogCleaner.warn(ImApp.LOG_TAG, "<AccountActivity>Bad data");
            return;
        }
        isEdit = true;
        Cursor cursor = cr.query(uri, ACCOUNT_PROJECTION, null, null, null);
        if (cursor == null) {
            finish();
            return;
        }
        if (!cursor.moveToFirst()) {
            cursor.close();
            finish();
            return;
        }
        setTitle(R.string.sign_in);
        mAccountId = cursor.getLong(cursor.getColumnIndexOrThrow(BaseColumns._ID));
        mProviderId = cursor.getLong(ACCOUNT_PROVIDER_COLUMN);
        provider = mApp.getProvider(mProviderId);
        Cursor pCursor = cr.query(Imps.ProviderSettings.CONTENT_URI, new String[] { Imps.ProviderSettings.NAME, Imps.ProviderSettings.VALUE }, Imps.ProviderSettings.PROVIDER + "=?", new String[] { Long.toString(mProviderId) }, null);
        Imps.ProviderSettings.QueryMap settings = new Imps.ProviderSettings.QueryMap(pCursor, cr, mProviderId, false, /* don't keep updated */
        null);
        try {
            mOriginalUserAccount = cursor.getString(ACCOUNT_USERNAME_COLUMN) + "@" + settings.getDomain();
            mEditUserAccount.setText(mOriginalUserAccount);
            mEditPass.setText(cursor.getString(ACCOUNT_PASSWORD_COLUMN));
            // mRememberPass.setChecked(!cursor.isNull(ACCOUNT_PASSWORD_COLUMN));
            // mUseTor.setChecked(settings.getUseTor());
            mPort = settings.getPort();
        } finally {
            settings.close();
            cursor.close();
        }
    } else {
        LogCleaner.warn(ImApp.LOG_TAG, "<AccountActivity> unknown intent action " + action);
        finish();
        return;
    }
    setupUIPost();
}
Also used : Imps(org.awesomeapp.messenger.provider.Imps) Intent(android.content.Intent) SignInHelper(org.awesomeapp.messenger.ui.legacy.SignInHelper) Cursor(android.database.Cursor) Uri(android.net.Uri) ImPluginHelper(org.awesomeapp.messenger.ui.legacy.ImPluginHelper) ProviderDef(org.awesomeapp.messenger.ui.legacy.ProviderDef) ContentResolver(android.content.ContentResolver)

Example 4 with SignInHelper

use of org.awesomeapp.messenger.ui.legacy.SignInHelper in project Zom-Android by zom.

the class AccountAdapter method signIn.

public void signIn(long providerId, long accountId) {
    if (accountId <= 0) {
        return;
    }
    Cursor cursor = getCursor();
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        long cAccountId = cursor.getLong(ACTIVE_ACCOUNT_ID_COLUMN);
        if (cAccountId == accountId)
            break;
        cursor.moveToNext();
    }
    // Remember that the user signed in.
    setKeepSignedIn(accountId, true);
    // long providerId = cursor.getLong(PROVIDER_ID_COLUMN);
    String password = cursor.getString(ACTIVE_ACCOUNT_PW_COLUMN);
    // TODO(miron)
    boolean isActive = true;
    new SignInHelper(mActivity, sHandler).signIn(password, providerId, accountId, isActive);
    cursor.moveToPosition(-1);
}
Also used : Cursor(android.database.Cursor) SignInHelper(org.awesomeapp.messenger.ui.legacy.SignInHelper)

Example 5 with SignInHelper

use of org.awesomeapp.messenger.ui.legacy.SignInHelper in project Zom-Android by zom.

the class AccountViewFragment method initFragment.

private void initFragment() {
    Intent i = getIntent();
    mApp = (ImApp) getActivity().getApplication();
    String action = i.getAction();
    if (i.hasExtra("isSignedIn"))
        isSignedIn = i.getBooleanExtra("isSignedIn", false);
    final ProviderDef provider;
    mSignInHelper = new SignInHelper(getActivity(), new SimpleAlertHandler(getActivity()));
    SignInHelper.SignInListener signInListener = new SignInHelper.SignInListener() {

        @Override
        public void connectedToService() {
        }

        @Override
        public void stateChanged(int state, long accountId) {
            if (state == ImConnection.LOGGED_IN) {
                // mSignInHelper.goToAccount(accountId);
                // finish();
                isSignedIn = true;
            } else {
                isSignedIn = false;
            }
        }
    };
    mSignInHelper.setSignInListener(signInListener);
    ContentResolver cr = getActivity().getContentResolver();
    Uri uri = i.getData();
    // check if there is account information and direct accordingly
    if (Intent.ACTION_INSERT_OR_EDIT.equals(action)) {
        if ((uri == null) || !Imps.Account.CONTENT_ITEM_TYPE.equals(cr.getType(uri))) {
            action = Intent.ACTION_INSERT;
        } else {
            action = Intent.ACTION_EDIT;
        }
    }
    if (Intent.ACTION_INSERT.equals(action) && uri.getScheme().equals("ima")) {
        ImPluginHelper helper = ImPluginHelper.getInstance(getActivity());
        String authority = uri.getAuthority();
        String[] userpass_host = authority.split("@");
        String[] user_pass = userpass_host[0].split(":");
        mUserName = user_pass[0].toLowerCase(Locale.getDefault());
        String pass = user_pass[1];
        mDomain = userpass_host[1].toLowerCase(Locale.getDefault());
        mPort = 0;
        final boolean regWithTor = i.getBooleanExtra("useTor", false);
        Cursor cursor = openAccountByUsernameAndDomain(cr);
        boolean exists = cursor.moveToFirst();
        long accountId;
        if (exists) {
            accountId = cursor.getLong(0);
            mAccountUri = ContentUris.withAppendedId(Imps.Account.CONTENT_URI, accountId);
            pass = cursor.getString(ACCOUNT_PASSWORD_COLUMN);
            setAccountKeepSignedIn(true);
            mSignInHelper.activateAccount(mProviderId, accountId);
            mSignInHelper.signIn(pass, mProviderId, accountId, true);
            // setResult(RESULT_OK);
            cursor.close();
            // finish();
            return;
        } else {
            // xmpp FIXME
            mProviderId = helper.createAdditionalProvider(helper.getProviderNames().get(0));
            accountId = ImApp.insertOrUpdateAccount(cr, mProviderId, -1, mUserName, mUserName, pass);
            mAccountUri = ContentUris.withAppendedId(Imps.Account.CONTENT_URI, accountId);
            mSignInHelper.activateAccount(mProviderId, accountId);
            createNewAccount(mUserName, pass, accountId, regWithTor);
            cursor.close();
            return;
        }
    } else if (Intent.ACTION_INSERT.equals(action)) {
        mOriginalUserAccount = "";
        // TODO once we implement multiple IM protocols
        mProviderId = ContentUris.parseId(uri);
        provider = mApp.getProvider(mProviderId);
    } else if (Intent.ACTION_EDIT.equals(action)) {
        if ((uri == null) || !Imps.Account.CONTENT_ITEM_TYPE.equals(cr.getType(uri))) {
            LogCleaner.warn(ImApp.LOG_TAG, "<AccountActivity>Bad data");
            return;
        }
        isEdit = true;
        Cursor cursor = cr.query(uri, ACCOUNT_PROJECTION, null, null, null);
        if (cursor == null) {
            return;
        }
        if (!cursor.moveToFirst()) {
            cursor.close();
            return;
        }
        mAccountId = cursor.getLong(cursor.getColumnIndexOrThrow(BaseColumns._ID));
        mProviderId = cursor.getLong(ACCOUNT_PROVIDER_COLUMN);
        provider = mApp.getProvider(mProviderId);
        Cursor pCursor = cr.query(Imps.ProviderSettings.CONTENT_URI, new String[] { Imps.ProviderSettings.NAME, Imps.ProviderSettings.VALUE }, Imps.ProviderSettings.PROVIDER + "=?", new String[] { Long.toString(mProviderId) }, null);
        Imps.ProviderSettings.QueryMap settings = new Imps.ProviderSettings.QueryMap(pCursor, cr, mProviderId, false, /* don't keep updated */
        null);
        try {
            mOriginalUserAccount = cursor.getString(ACCOUNT_USERNAME_COLUMN) + "@" + settings.getDomain();
            mEditUserAccount.setText(mOriginalUserAccount);
            mEditPass.setText(cursor.getString(ACCOUNT_PASSWORD_COLUMN));
            // mRememberPass.setChecked(!cursor.isNull(ACCOUNT_PASSWORD_COLUMN));
            // mUseTor.setChecked(settings.getUseTor());
            mBtnQrDisplay.setVisibility(View.VISIBLE);
        } finally {
            settings.close();
            cursor.close();
        }
    } else {
        LogCleaner.warn(ImApp.LOG_TAG, "<AccountActivity> unknown intent action " + action);
        return;
    }
    setupUIPost();
}
Also used : Imps(org.awesomeapp.messenger.provider.Imps) Intent(android.content.Intent) SimpleAlertHandler(org.awesomeapp.messenger.ui.legacy.SimpleAlertHandler) SignInHelper(org.awesomeapp.messenger.ui.legacy.SignInHelper) Cursor(android.database.Cursor) Uri(android.net.Uri) ImPluginHelper(org.awesomeapp.messenger.ui.legacy.ImPluginHelper) ProviderDef(org.awesomeapp.messenger.ui.legacy.ProviderDef) ContentResolver(android.content.ContentResolver)

Aggregations

SignInHelper (org.awesomeapp.messenger.ui.legacy.SignInHelper)7 Intent (android.content.Intent)3 Cursor (android.database.Cursor)3 ContentResolver (android.content.ContentResolver)2 Uri (android.net.Uri)2 Imps (org.awesomeapp.messenger.provider.Imps)2 ImPluginHelper (org.awesomeapp.messenger.ui.legacy.ImPluginHelper)2 ProviderDef (org.awesomeapp.messenger.ui.legacy.ProviderDef)2 SimpleAlertHandler (org.awesomeapp.messenger.ui.legacy.SimpleAlertHandler)2 AlarmManager (android.app.AlarmManager)1 ContentValues (android.content.ContentValues)1 RemoteException (android.os.RemoteException)1 CacheWordHandler (info.guardianproject.cacheword.CacheWordHandler)1 ICacheWordSubscriber (info.guardianproject.cacheword.ICacheWordSubscriber)1 IOException (java.io.IOException)1 KeyPair (java.security.KeyPair)1 OtrAndroidKeyManagerImpl (org.awesomeapp.messenger.crypto.otr.OtrAndroidKeyManagerImpl)1 IChatSession (org.awesomeapp.messenger.service.IChatSession)1 IChatSessionManager (org.awesomeapp.messenger.service.IChatSessionManager)1 IContactList (org.awesomeapp.messenger.service.IContactList)1