Search in sources :

Example 1 with PasswordException

use of i2p.bote.fileencryption.PasswordException in project i2p.i2p-bote by i2p.

the class GeneralHelper method deleteIdentity.

/**
 * Deletes an email identity.
 * @param key A base64-encoded email identity key
 * @return null if sucessful, or an error message if an error occured
 * @throws PasswordException
 * @throws GeneralSecurityException
 * @throws IOException
 */
public static String deleteIdentity(String key) throws PasswordException, IOException, GeneralSecurityException {
    Identities identities = I2PBote.getInstance().getIdentities();
    identities.remove(key);
    try {
        identities.save();
        return null;
    } catch (PasswordException e) {
        throw e;
    } catch (Exception e) {
        return e.getLocalizedMessage();
    }
}
Also used : PasswordException(i2p.bote.fileencryption.PasswordException) Identities(i2p.bote.email.Identities) PasswordException(i2p.bote.fileencryption.PasswordException) URISyntaxException(java.net.URISyntaxException) MessagingException(javax.mail.MessagingException) GeneralSecurityException(java.security.GeneralSecurityException) IllegalDestinationParametersException(i2p.bote.email.IllegalDestinationParametersException) IOException(java.io.IOException) DhtException(i2p.bote.network.DhtException) UnsupportedEncodingException(java.io.UnsupportedEncodingException)

Example 2 with PasswordException

use of i2p.bote.fileencryption.PasswordException in project i2p.i2p-bote by i2p.

the class EmailListFragment method onRefresh.

// SwipeRefreshLayout.OnRefreshListener
public void onRefresh() {
    // If we are already checking, do nothing else
    if (mCheckingTask != null)
        return;
    I2PBote bote = I2PBote.getInstance();
    if (bote.isConnected()) {
        try {
            if (!bote.isCheckingForMail())
                bote.checkForMail();
            mCheckingTask = new AsyncTask<Void, Void, Void>() {

                @Override
                protected Void doInBackground(Void... params) {
                    while (I2PBote.getInstance().isCheckingForMail()) {
                        try {
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                        }
                        if (isCancelled()) {
                            break;
                        }
                    }
                    return null;
                }

                @Override
                protected void onPostExecute(Void result) {
                    super.onPostExecute(result);
                    mAdapter.setIncompleteEmails(I2PBote.getInstance().getNumIncompleteEmails());
                    // Notify PullToRefreshLayout that the refresh has finished
                    mSwipeRefreshLayout.setRefreshing(false);
                    getActivity().supportInvalidateOptionsMenu();
                }
            };
            mCheckingTask.execute();
        } catch (PasswordException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (GeneralSecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } else {
        mSwipeRefreshLayout.setRefreshing(false);
        Toast.makeText(getActivity(), R.string.bote_needs_to_be_connected, Toast.LENGTH_SHORT).show();
    }
}
Also used : PasswordException(i2p.bote.fileencryption.PasswordException) I2PBote(i2p.bote.I2PBote) GeneralSecurityException(java.security.GeneralSecurityException) IOException(java.io.IOException)

Example 3 with PasswordException

use of i2p.bote.fileencryption.PasswordException in project i2p.i2p-bote by i2p.

the class NewEmailFragment method sendEmail.

private boolean sendEmail() {
    Email email = new Email(I2PBote.getInstance().getConfiguration().getIncludeSentTime());
    try {
        // Set sender
        EmailIdentity sender = (EmailIdentity) mSpinner.getSelectedItem();
        InternetAddress ia = new InternetAddress(sender == null ? "Anonymous" : BoteHelper.getNameAndDestination(sender.getKey()));
        email.setFrom(ia);
        // We must continue to set "Sender:" even with only one mailbox
        // in "From:", which is against RFC 2822 but required for older
        // Bote versions to see a sender (and validate the signature).
        email.setSender(ia);
        for (Object obj : mTo.getObjects()) {
            Person person = (Person) obj;
            email.addRecipient(Message.RecipientType.TO, new InternetAddress(person.getAddress(), person.getName()));
        }
        if (mMoreVisible) {
            for (Object obj : mCc.getObjects()) {
                Person person = (Person) obj;
                email.addRecipient(Message.RecipientType.CC, new InternetAddress(person.getAddress(), person.getName()));
            }
            for (Object obj : mBcc.getObjects()) {
                Person person = (Person) obj;
                email.addRecipient(Message.RecipientType.BCC, new InternetAddress(person.getAddress(), person.getName()));
            }
        }
        // Check that we have someone to send to
        Address[] rcpts = email.getAllRecipients();
        if (rcpts == null || rcpts.length == 0) {
            // No recipients
            mTo.setError(getActivity().getString(R.string.add_one_recipient));
            mTo.requestFocus();
            return false;
        } else {
            mTo.setError(null);
        }
        email.setSubject(mSubject.getText().toString(), "UTF-8");
        // Extract the attachments
        List<Attachment> attachments = new ArrayList<Attachment>();
        for (int i = 0; i < mAttachments.getChildCount(); i++) {
            View v = mAttachments.getChildAt(i);
            // Warning views don't have tags set
            if (v.getTag() != null)
                attachments.add((Attachment) v.getTag());
        }
        // Set the text and add attachments
        email.setContent(mContent.getText().toString(), attachments);
        // Cache the fact that we sent this email
        BoteHelper.setEmailSent(email, true);
        // Send the email
        I2PBote.getInstance().sendEmail(email);
        // Clean up attachments
        for (Attachment attachment : attachments) {
            if (!attachment.clean())
                Log.e(Constants.ANDROID_LOG_TAG, "Can't clean up attachment: <" + attachment + ">");
        }
        return true;
    } catch (PasswordException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (AddressException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (GeneralSecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return false;
}
Also used : InternetAddress(javax.mail.internet.InternetAddress) Email(i2p.bote.email.Email) Address(javax.mail.Address) InternetAddress(javax.mail.internet.InternetAddress) MessagingException(javax.mail.MessagingException) EmailIdentity(i2p.bote.email.EmailIdentity) GeneralSecurityException(java.security.GeneralSecurityException) ArrayList(java.util.ArrayList) Attachment(i2p.bote.email.Attachment) ContentAttachment(i2p.bote.android.util.ContentAttachment) IOException(java.io.IOException) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView) ContactsCompletionView(i2p.bote.android.widget.ContactsCompletionView) SuppressLint(android.annotation.SuppressLint) PasswordException(i2p.bote.fileencryption.PasswordException) AddressException(javax.mail.internet.AddressException) Person(i2p.bote.android.util.Person)

Example 4 with PasswordException

use of i2p.bote.fileencryption.PasswordException in project i2p.i2p-bote by i2p.

the class NewEmailFragment method onViewCreated.

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mSpinner = (Spinner) view.findViewById(R.id.sender_spinner);
    mMore = (ImageView) view.findViewById(R.id.more);
    mTo = (ContactsCompletionView) view.findViewById(R.id.to);
    mCc = (ContactsCompletionView) view.findViewById(R.id.cc);
    mBcc = (ContactsCompletionView) view.findViewById(R.id.bcc);
    mSubject = (EditText) view.findViewById(R.id.subject);
    mContent = (EditText) view.findViewById(R.id.message);
    mAttachments = (LinearLayout) view.findViewById(R.id.attachments);
    String quoteMsgFolder = getArguments().getString(QUOTE_MSG_FOLDER);
    String quoteMsgId = getArguments().getString(QUOTE_MSG_ID);
    QuoteMsgType quoteMsgType = (QuoteMsgType) getArguments().getSerializable(QUOTE_MSG_TYPE);
    boolean hide = I2PBote.getInstance().getConfiguration().getHideLocale();
    List<Person> toRecipients = new ArrayList<Person>();
    List<Person> ccRecipients = new ArrayList<Person>();
    String origSubject = null;
    String origContent = null;
    String origFrom = null;
    try {
        Email origEmail = BoteHelper.getEmail(quoteMsgFolder, quoteMsgId);
        if (origEmail != null) {
            mSenderKey = BoteHelper.extractEmailDestination(BoteHelper.getOneLocalRecipient(origEmail).toString());
            if (quoteMsgType == QuoteMsgType.REPLY) {
                String recipient = BoteHelper.getNameAndDestination(origEmail.getReplyAddress(I2PBote.getInstance().getIdentities()));
                toRecipients.add(extractPerson(recipient));
            } else if (quoteMsgType == QuoteMsgType.REPLY_ALL) {
                // What happens if an email is received by multiple local identities?
                for (Address address : origEmail.getAllAddresses(true)) {
                    Person person = extractPerson(address.toString());
                    if (person != null)
                        toRecipients.add(person);
                }
            }
            origSubject = origEmail.getSubject();
            origContent = origEmail.getText();
            origFrom = BoteHelper.getShortSenderName(origEmail.getOneFromAddress(), 50);
        }
    } catch (PasswordException e) {
        // Should not happen, we cannot get to this page without authenticating
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (GeneralSecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // Set up identities spinner
    IdentityAdapter identities = new IdentityAdapter(getActivity());
    mSpinner.setAdapter(identities);
    mSpinner.setSelection(mDefaultPos);
    // Set up Cc/Bcc button
    mMore.setImageDrawable(new IconicsDrawable(getActivity(), GoogleMaterial.Icon.gmd_unfold_more).colorRes(R.color.md_grey_600).sizeDp(24).paddingDp(3));
    mMore.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            mCc.setVisibility(mMoreVisible ? View.GONE : View.VISIBLE);
            mBcc.setVisibility(mMoreVisible ? View.GONE : View.VISIBLE);
            mMore.setImageDrawable(new IconicsDrawable(getActivity(), mMoreVisible ? GoogleMaterial.Icon.gmd_unfold_more : GoogleMaterial.Icon.gmd_unfold_less).colorRes(R.color.md_grey_600).sizeDp(24).paddingDp(mMoreVisible ? 3 : 4));
            mMoreVisible = !mMoreVisible;
        }
    });
    // Set up contacts auto-complete
    List<Person> contacts = new ArrayList<Person>();
    try {
        for (Contact contact : I2PBote.getInstance().getAddressBook().getAll()) {
            contacts.add(new Person(contact.getName(), contact.getBase64Dest(), BoteHelper.decodePicture(contact.getPictureBase64())));
        }
    } catch (PasswordException e) {
        // TODO handle
        e.printStackTrace();
    }
    mAdapter = new FilteredArrayAdapter<Person>(getActivity(), android.R.layout.simple_list_item_1, contacts) {

        @Override
        protected boolean keepObject(Person obj, String mask) {
            mask = mask.toLowerCase(Locale.US);
            return obj.getName().toLowerCase(Locale.US).startsWith(mask) || obj.getAddress().toLowerCase(Locale.US).startsWith(mask);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v;
            if (convertView == null)
                v = ((LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.listitem_contact, parent, false);
            else
                v = convertView;
            setViewContent(v, position);
            return v;
        }

        private void setViewContent(View v, int position) {
            Person person = getItem(position);
            ((TextView) v.findViewById(R.id.contact_name)).setText(person.getName());
            ImageView picView = (ImageView) v.findViewById(R.id.contact_picture);
            Bitmap picture = person.getPicture();
            if (picture == null) {
                ViewGroup.LayoutParams lp = picView.getLayoutParams();
                picture = BoteHelper.getIdenticonForAddress(person.getAddress(), lp.width, lp.height);
            }
            picView.setImageBitmap(picture);
        }
    };
    mTo.setAdapter(mAdapter);
    mCc.setAdapter(mAdapter);
    mBcc.setAdapter(mAdapter);
    for (Person recipient : toRecipients) {
        mTo.addObject(recipient);
    }
    for (Person recipient : ccRecipients) {
        mCc.addObject(recipient);
    }
    if (origSubject != null) {
        String subjectPrefix;
        if (quoteMsgType == QuoteMsgType.FORWARD) {
            subjectPrefix = getResources().getString(hide ? R.string.subject_prefix_fwd_hide : R.string.subject_prefix_fwd);
        } else {
            subjectPrefix = getResources().getString(hide ? R.string.response_prefix_re_hide : R.string.response_prefix_re);
        }
        if (!origSubject.startsWith(subjectPrefix))
            origSubject = subjectPrefix + " " + origSubject;
        mSubject.setText(origSubject);
    }
    if (origContent != null) {
        StringBuilder quotation = new StringBuilder();
        quotation.append("\n\n");
        quotation.append(getResources().getString(hide ? R.string.response_quote_wrote_hide : R.string.response_quote_wrote, origFrom));
        String[] lines = origContent.split("\r?\n|\r");
        for (String line : lines) quotation = quotation.append("\n> ").append(line);
        mContent.setText(quotation);
    }
    if (savedInstanceState == null) {
        mTo.setPrefix(getResources().getString(R.string.email_to) + " ");
        mCc.setPrefix(getResources().getString(R.string.email_cc) + " ");
        mBcc.setPrefix(getResources().getString(R.string.email_bcc) + " ");
    }
    TextWatcher dirtyWatcher = new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            mDirty = true;
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    };
    mSubject.addTextChangedListener(dirtyWatcher);
    mContent.addTextChangedListener(dirtyWatcher);
}
Also used : Email(i2p.bote.email.Email) Address(javax.mail.Address) InternetAddress(javax.mail.internet.InternetAddress) ArrayList(java.util.ArrayList) PasswordException(i2p.bote.fileencryption.PasswordException) Bitmap(android.graphics.Bitmap) TextWatcher(android.text.TextWatcher) Editable(android.text.Editable) ImageView(android.widget.ImageView) IconicsDrawable(com.mikepenz.iconics.IconicsDrawable) MessagingException(javax.mail.MessagingException) ViewGroup(android.view.ViewGroup) GeneralSecurityException(java.security.GeneralSecurityException) IOException(java.io.IOException) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView) ContactsCompletionView(i2p.bote.android.widget.ContactsCompletionView) SuppressLint(android.annotation.SuppressLint) Contact(i2p.bote.packet.dht.Contact) Person(i2p.bote.android.util.Person)

Example 5 with PasswordException

use of i2p.bote.fileencryption.PasswordException in project i2p.i2p-bote by i2p.

the class ViewEmailFragment method onCreateView.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_view_email, container, false);
    try {
        Email e = BoteHelper.getEmail(mFolderName, mMessageId);
        if (e != null) {
            displayEmail(e, v);
        } else {
            TextView subject = (TextView) v.findViewById(R.id.email_subject);
            subject.setText(R.string.email_not_found);
        }
    } catch (PasswordException e) {
        // TODO: Handle
        e.printStackTrace();
    }
    return v;
}
Also used : PasswordException(i2p.bote.fileencryption.PasswordException) Email(i2p.bote.email.Email) TextView(android.widget.TextView) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView)

Aggregations

PasswordException (i2p.bote.fileencryption.PasswordException)26 IOException (java.io.IOException)16 GeneralSecurityException (java.security.GeneralSecurityException)15 MessagingException (javax.mail.MessagingException)11 Email (i2p.bote.email.Email)9 Bitmap (android.graphics.Bitmap)4 View (android.view.View)4 ImageView (android.widget.ImageView)4 TextView (android.widget.TextView)4 Person (i2p.bote.android.util.Person)4 Contact (i2p.bote.packet.dht.Contact)4 Part (javax.mail.Part)4 Intent (android.content.Intent)3 File (java.io.File)3 ArrayList (java.util.ArrayList)3 Address (javax.mail.Address)3 InternetAddress (javax.mail.internet.InternetAddress)3 SuppressLint (android.annotation.SuppressLint)2 IconicsDrawable (com.mikepenz.iconics.IconicsDrawable)2 ContentAttachment (i2p.bote.android.util.ContentAttachment)2