├── .gitignore ├── .mtn-ignore ├── .travis.yml ├── .tx └── config ├── README.md ├── TODO ├── android ├── CHANGELOG ├── TODO ├── art │ ├── bote-feature.svg │ ├── ic_launcher_master.svg │ ├── ic_notif_master.svg │ ├── ic_notif_premaster.svg │ ├── icons │ │ └── ic_scan_qr_code_24px.svg │ ├── intro_1.svg │ ├── intro_3.svg │ └── intro_4.svg ├── build.gradle ├── libs │ ├── additionnal.jar │ └── tokenautocomplete.jar ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── i2p │ │ └── bote │ │ └── android │ │ ├── EmailListActivityTest.java │ │ ├── intro │ │ ├── IntroActivityTest.java │ │ └── SetupActivityTest.java │ │ └── provider │ │ └── AttachmentProviderTests.java │ ├── debug │ └── res │ │ └── values │ │ └── strings.xml │ └── main │ ├── AndroidManifest.xml │ ├── java │ ├── i2p │ │ └── bote │ │ │ └── android │ │ │ ├── AndroidPeerStatsRenderer.java │ │ │ ├── BoteActivityBase.java │ │ │ ├── Constants.java │ │ │ ├── EmailListActivity.java │ │ │ ├── EmailListAdapter.java │ │ │ ├── EmailListFragment.java │ │ │ ├── HelpAboutFragment.java │ │ │ ├── HelpActivity.java │ │ │ ├── HelpHtmlFragment.java │ │ │ ├── InitActivities.java │ │ │ ├── NetworkInfoActivity.java │ │ │ ├── NetworkInfoFragment.java │ │ │ ├── NewEmailActivity.java │ │ │ ├── NewEmailFragment.java │ │ │ ├── ViewEmailActivity.java │ │ │ ├── ViewEmailFragment.java │ │ │ ├── addressbook │ │ │ ├── AddressBookActivity.java │ │ │ ├── AddressBookFragment.java │ │ │ ├── AddressBookShipActivity.java │ │ │ ├── AddressBookShipFragment.java │ │ │ ├── ContactAdapter.java │ │ │ ├── EditContactActivity.java │ │ │ ├── EditContactFragment.java │ │ │ ├── ViewContactActivity.java │ │ │ └── ViewContactFragment.java │ │ │ ├── config │ │ │ ├── AdvancedPreferenceFragment.java │ │ │ ├── AppProtectionPreferenceFragment.java │ │ │ ├── AppearancePreferenceFragment.java │ │ │ ├── NetworkPreferenceFragment.java │ │ │ ├── PrivacyPreferenceFragment.java │ │ │ ├── SetPasswordActivity.java │ │ │ ├── SetPasswordFragment.java │ │ │ ├── SettingsActivity.java │ │ │ └── util │ │ │ │ ├── CustomPreferenceFragment.java │ │ │ │ ├── IconicsPreference.java │ │ │ │ ├── IntEditTextPreference.java │ │ │ │ ├── IntEditTextPreferenceDialog.java │ │ │ │ └── SummaryEditTextPreference.java │ │ │ ├── identities │ │ │ ├── EditIdentityActivity.java │ │ │ ├── EditIdentityFragment.java │ │ │ ├── IdentityAdapter.java │ │ │ ├── IdentityListActivity.java │ │ │ ├── IdentityListFragment.java │ │ │ ├── IdentityShipActivity.java │ │ │ ├── IdentityShipFragment.java │ │ │ ├── ViewIdentityActivity.java │ │ │ └── ViewIdentityFragment.java │ │ │ ├── intro │ │ │ ├── IntroActivity.java │ │ │ └── SetupActivity.java │ │ │ ├── provider │ │ │ └── AttachmentProvider.java │ │ │ ├── service │ │ │ ├── BoteService.java │ │ │ └── Init.java │ │ │ ├── util │ │ │ ├── AuthenticatedFragment.java │ │ │ ├── BetterAsyncTaskLoader.java │ │ │ ├── BoteHelper.java │ │ │ ├── ContentAttachment.java │ │ │ ├── DataShipActivity.java │ │ │ ├── DataShipFragment.java │ │ │ ├── DeleteAddressDialogFragment.java │ │ │ ├── EditPictureFragment.java │ │ │ ├── LocaleManager.java │ │ │ ├── MoveToDialogFragment.java │ │ │ ├── MultiSelectionUtil.java │ │ │ ├── Person.java │ │ │ ├── QrCodeUtils.java │ │ │ ├── RobustAsyncTask.java │ │ │ ├── TaskFragment.java │ │ │ └── ViewAddressFragment.java │ │ │ └── widget │ │ │ ├── ContactsCompletionView.java │ │ │ ├── DividerItemDecoration.java │ │ │ ├── IconicsFloatingActionButton.java │ │ │ ├── LoadingRecyclerView.java │ │ │ └── MultiSwipeRefreshLayout.java │ └── im │ │ └── delight │ │ └── android │ │ └── identicons │ │ ├── Identicon.java │ │ └── IdenticonBase.java │ ├── jniLibs │ ├── armeabi-v7a │ │ └── libscrypt.so │ ├── armeabi │ │ └── libscrypt.so │ ├── mips │ │ └── libscrypt.so │ └── x86 │ │ └── libscrypt.so │ └── res │ ├── drawable-hdpi │ ├── ic_contact_picture.png │ ├── ic_launcher.png │ ├── ic_navigation_accept.png │ ├── ic_notif.png │ ├── ic_scan_qr_code_white_24dp.png │ ├── intro_1.png │ ├── intro_3.png │ └── intro_4.png │ ├── drawable-mdpi │ ├── ic_contact_picture.png │ ├── ic_launcher.png │ ├── ic_navigation_accept.png │ ├── ic_notif.png │ ├── ic_scan_qr_code_white_24dp.png │ ├── intro_1.png │ ├── intro_3.png │ └── intro_4.png │ ├── drawable-v21 │ ├── listitem_background.xml │ └── listitem_background_selector.xml │ ├── drawable-xhdpi │ ├── ic_contact_picture.png │ ├── ic_launcher.png │ ├── ic_navigation_accept.png │ ├── ic_notif.png │ ├── ic_scan_qr_code_white_24dp.png │ ├── intro_1.png │ ├── intro_3.png │ └── intro_4.png │ ├── drawable-xxhdpi │ └── ic_scan_qr_code_white_24dp.png │ ├── drawable │ ├── attachment_background.xml │ ├── drawer_header_background.xml │ ├── fab_label_background.xml │ ├── listitem_background_selector.xml │ ├── picture_background.xml │ └── token_background.xml │ ├── layout-land │ ├── fragment_intro_0.xml │ ├── fragment_intro_1.xml │ ├── fragment_intro_2.xml │ ├── fragment_intro_3.xml │ ├── fragment_intro_4.xml │ └── fragment_intro_5.xml │ ├── layout │ ├── activity_data_ship.xml │ ├── activity_edit_identity.xml │ ├── activity_help.xml │ ├── activity_intro.xml │ ├── activity_main.xml │ ├── activity_set_password.xml │ ├── activity_settings.xml │ ├── activity_toolbar.xml │ ├── activity_view_email.xml │ ├── contact_token.xml │ ├── dialog_password.xml │ ├── dialog_status.xml │ ├── fragment_authenticated.xml │ ├── fragment_edit_contact.xml │ ├── fragment_edit_identity.xml │ ├── fragment_export_data.xml │ ├── fragment_help_about.xml │ ├── fragment_import_data.xml │ ├── fragment_intro_0.xml │ ├── fragment_intro_1.xml │ ├── fragment_intro_2.xml │ ├── fragment_intro_3.xml │ ├── fragment_intro_4.xml │ ├── fragment_intro_5.xml │ ├── fragment_list_contacts.xml │ ├── fragment_list_emails.xml │ ├── fragment_list_emails_with_refresh.xml │ ├── fragment_list_identities.xml │ ├── fragment_network_error.xml │ ├── fragment_network_info.xml │ ├── fragment_new_email.xml │ ├── fragment_set_password.xml │ ├── fragment_setup_create_identity.xml │ ├── fragment_setup_finished.xml │ ├── fragment_setup_set_password.xml │ ├── fragment_view_address.xml │ ├── fragment_view_email.xml │ ├── listitem_attachment.xml │ ├── listitem_attachment_warning.xml │ ├── listitem_contact.xml │ ├── listitem_email.xml │ ├── listitem_empty.xml │ ├── listitem_folder.xml │ ├── listitem_folder_with_icon.xml │ ├── listitem_identity.xml │ ├── listitem_incomplete.xml │ └── listitem_text.xml │ ├── menu │ ├── address_book.xml │ ├── attachment.xml │ ├── authenticated_fragment.xml │ ├── edit_contact.xml │ ├── edit_identity.xml │ ├── email_list.xml │ ├── email_list_context.xml │ ├── identity_list.xml │ ├── main.xml │ ├── new_email.xml │ ├── set_password.xml │ ├── view_address.xml │ └── view_email.xml │ ├── raw-ar │ ├── help_identities.html │ └── help_start.html │ ├── raw-az │ ├── help_identities.html │ └── help_start.html │ ├── raw-de │ ├── help_identities.html │ └── help_start.html │ ├── raw-el │ └── help_start.html │ ├── raw-es │ ├── help_identities.html │ └── help_start.html │ ├── raw-fi │ ├── help_identities.html │ └── help_start.html │ ├── raw-fr │ ├── help_identities.html │ └── help_start.html │ ├── raw-gl │ ├── help_identities.html │ └── help_start.html │ ├── raw-in │ ├── help_identities.html │ └── help_start.html │ ├── raw-it │ ├── help_identities.html │ └── help_start.html │ ├── raw-ko │ ├── help_identities.html │ └── help_start.html │ ├── raw-nb │ ├── help_identities.html │ └── help_start.html │ ├── raw-nl │ ├── help_identities.html │ └── help_start.html │ ├── raw-pl │ ├── help_identities.html │ └── help_start.html │ ├── raw-pt │ ├── help_identities.html │ └── help_start.html │ ├── raw-ro │ ├── help_identities.html │ └── help_start.html │ ├── raw-ru │ ├── help_identities.html │ └── help_start.html │ ├── raw-sq │ └── help_start.html │ ├── raw-sv │ ├── help_identities.html │ └── help_start.html │ ├── raw-tr │ ├── help_identities.html │ └── help_start.html │ ├── raw-uk │ ├── help_identities.html │ └── help_start.html │ ├── raw-zh │ ├── help_identities.html │ └── help_start.html │ ├── raw │ ├── help_about_libraries.html │ ├── help_changelog.html │ ├── help_identities.html │ ├── help_start.html │ └── router_config │ ├── values-ar │ └── strings.xml │ ├── values-az │ └── strings.xml │ ├── values-de │ └── strings.xml │ ├── values-es │ └── strings.xml │ ├── values-fi │ └── strings.xml │ ├── values-fr │ └── strings.xml │ ├── values-in │ └── strings.xml │ ├── values-it │ └── strings.xml │ ├── values-ko │ └── strings.xml │ ├── values-land │ └── dimens.xml │ ├── values-nb │ └── strings.xml │ ├── values-nl │ └── strings.xml │ ├── values-pl │ └── strings.xml │ ├── values-pt │ └── strings.xml │ ├── values-ro │ └── strings.xml │ ├── values-ru │ └── strings.xml │ ├── values-sq │ └── strings.xml │ ├── values-sv │ └── strings.xml │ ├── values-sw600dp │ └── dimens.xml │ ├── values-sw720dp-land │ └── dimens.xml │ ├── values-tr │ └── strings.xml │ ├── values-v11 │ └── dimens.xml │ ├── values-v14 │ └── styles.xml │ ├── values-v21 │ └── styles.xml │ ├── values-w820dp │ └── dimens.xml │ ├── values-zh │ └── strings.xml │ ├── values │ ├── arrays.xml │ ├── attrs.xml │ ├── colors.xml │ ├── dimens.xml │ ├── refs.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ ├── settings.xml │ ├── settings_advanced.xml │ ├── settings_app_protection.xml │ ├── settings_appearance.xml │ ├── settings_network.xml │ └── settings_privacy.xml ├── build.gradle ├── core ├── build.gradle └── src │ ├── main │ ├── java │ │ ├── i2p │ │ │ └── bote │ │ │ │ ├── Configuration.java │ │ │ │ ├── ElGamalAESEngine.java │ │ │ │ ├── I2PBote.java │ │ │ │ ├── MailSender.java │ │ │ │ ├── UniqueId.java │ │ │ │ ├── Util.java │ │ │ │ ├── addressbook │ │ │ │ ├── AddressBook.java │ │ │ │ └── package.html │ │ │ │ ├── crypto │ │ │ │ ├── AbstractCryptoImplementation.java │ │ │ │ ├── CryptoFactory.java │ │ │ │ ├── CryptoImplementation.java │ │ │ │ ├── ECDH256_ECDSA256.java │ │ │ │ ├── ECDH521_ECDSA521.java │ │ │ │ ├── ECDH_ECDSA.java │ │ │ │ ├── ECUtils.java │ │ │ │ ├── ElGamal2048_DSA1024.java │ │ │ │ ├── KeyUpdateHandler.java │ │ │ │ ├── NTRUEncrypt1087_GMSS512.java │ │ │ │ ├── PrivateKeyPair.java │ │ │ │ ├── PublicKeyPair.java │ │ │ │ ├── package.html │ │ │ │ └── wordlist │ │ │ │ │ ├── WordListAnchor.java │ │ │ │ │ └── package.html │ │ │ │ ├── debug │ │ │ │ └── DebugSupport.java │ │ │ │ ├── email │ │ │ │ ├── AddressDisplayFilter.java │ │ │ │ ├── Attachment.java │ │ │ │ ├── Email.java │ │ │ │ ├── EmailAttribute.java │ │ │ │ ├── EmailDestination.java │ │ │ │ ├── EmailIdentity.java │ │ │ │ ├── EmailMetadata.java │ │ │ │ ├── FileAttachment.java │ │ │ │ ├── Fingerprint.java │ │ │ │ ├── Identities.java │ │ │ │ ├── IdentitiesListener.java │ │ │ │ ├── IllegalDestinationParametersException.java │ │ │ │ ├── NoIdentityForSenderException.java │ │ │ │ └── package.html │ │ │ │ ├── fileencryption │ │ │ │ ├── Decrypt.java │ │ │ │ ├── DerivedKey.java │ │ │ │ ├── Encrypt.java │ │ │ │ ├── EncryptedInputStream.java │ │ │ │ ├── EncryptedOutputStream.java │ │ │ │ ├── FileEncryptionConstants.java │ │ │ │ ├── FileEncryptionUtil.java │ │ │ │ ├── FileInfo.java │ │ │ │ ├── PasswordCache.java │ │ │ │ ├── PasswordCacheListener.java │ │ │ │ ├── PasswordException.java │ │ │ │ ├── PasswordHolder.java │ │ │ │ ├── PasswordIncorrectException.java │ │ │ │ ├── PasswordMismatchException.java │ │ │ │ ├── PasswordVerifier.java │ │ │ │ ├── SCryptParameters.java │ │ │ │ └── package.html │ │ │ │ ├── folder │ │ │ │ ├── DeletionAwareDhtFolder.java │ │ │ │ ├── DhtPacketFolder.java │ │ │ │ ├── DirectoryEntryFolder.java │ │ │ │ ├── EmailFolder.java │ │ │ │ ├── EmailFolderManager.java │ │ │ │ ├── EmailPacketFolder.java │ │ │ │ ├── ExpirationListener.java │ │ │ │ ├── Folder.java │ │ │ │ ├── FolderIterator.java │ │ │ │ ├── FolderListener.java │ │ │ │ ├── IncompleteEmailFolder.java │ │ │ │ ├── IndexPacketFolder.java │ │ │ │ ├── MessageIdCache.java │ │ │ │ ├── NewEmailListener.java │ │ │ │ ├── Outbox.java │ │ │ │ ├── PacketFolder.java │ │ │ │ ├── RelayPacketFolder.java │ │ │ │ ├── TrashFolder.java │ │ │ │ └── package.html │ │ │ │ ├── migration │ │ │ │ ├── MigrateTo026.java │ │ │ │ ├── MigrateTo027.java │ │ │ │ ├── MigrateTo028.java │ │ │ │ ├── Migrator.java │ │ │ │ └── package.html │ │ │ │ ├── network │ │ │ │ ├── BanList.java │ │ │ │ ├── BanReason.java │ │ │ │ ├── BannedPeer.java │ │ │ │ ├── CheckEmailTask.java │ │ │ │ ├── DHT.java │ │ │ │ ├── DhtException.java │ │ │ │ ├── DhtPeerSource.java │ │ │ │ ├── DhtPeerStats.java │ │ │ │ ├── DhtPeerStatsRenderer.java │ │ │ │ ├── DhtPeerStatsRow.java │ │ │ │ ├── DhtResults.java │ │ │ │ ├── DhtStorageHandler.java │ │ │ │ ├── EmailAddressResolver.java │ │ │ │ ├── I2PPacketDispatcher.java │ │ │ │ ├── I2PSendQueue.java │ │ │ │ ├── NetworkStatus.java │ │ │ │ ├── NetworkStatusListener.java │ │ │ │ ├── NetworkStatusSource.java │ │ │ │ ├── PacketBatch.java │ │ │ │ ├── PacketBatchItem.java │ │ │ │ ├── PacketListener.java │ │ │ │ ├── PeerFileAnchor.java │ │ │ │ ├── Ping.java │ │ │ │ ├── RelayPacketHandler.java │ │ │ │ ├── RelayPeer.java │ │ │ │ ├── kademlia │ │ │ │ │ ├── AbstractBucket.java │ │ │ │ │ ├── BucketManager.java │ │ │ │ │ ├── ClosestNodesLookupTask.java │ │ │ │ │ ├── KBucket.java │ │ │ │ │ ├── KademliaConstants.java │ │ │ │ │ ├── KademliaDHT.java │ │ │ │ │ ├── KademliaPeer.java │ │ │ │ │ ├── KademliaPeerStats.java │ │ │ │ │ ├── KademliaUtil.java │ │ │ │ │ ├── PeerDistanceComparator.java │ │ │ │ │ ├── ReplicateThread.java │ │ │ │ │ ├── SBucket.java │ │ │ │ │ └── package.html │ │ │ │ └── package.html │ │ │ │ ├── package.html │ │ │ │ ├── packet │ │ │ │ ├── CommunicationPacket.java │ │ │ │ ├── DataPacket.java │ │ │ │ ├── EmptyResponse.java │ │ │ │ ├── I2PBotePacket.java │ │ │ │ ├── MalformedCommunicationPacket.java │ │ │ │ ├── MalformedDataPacket.java │ │ │ │ ├── MalformedPacketException.java │ │ │ │ ├── PeerList.java │ │ │ │ ├── ResponsePacket.java │ │ │ │ ├── Splittable.java │ │ │ │ ├── StatusCode.java │ │ │ │ ├── TypeCode.java │ │ │ │ ├── dht │ │ │ │ │ ├── Contact.java │ │ │ │ │ ├── DeleteRequest.java │ │ │ │ │ ├── DeletionInfoPacket.java │ │ │ │ │ ├── DeletionQuery.java │ │ │ │ │ ├── DeletionRecord.java │ │ │ │ │ ├── DhtStorablePacket.java │ │ │ │ │ ├── EmailPacketDeleteRequest.java │ │ │ │ │ ├── EncryptedEmailPacket.java │ │ │ │ │ ├── FindClosePeersPacket.java │ │ │ │ │ ├── IndexPacket.java │ │ │ │ │ ├── IndexPacketDeleteRequest.java │ │ │ │ │ ├── IndexPacketEntry.java │ │ │ │ │ ├── RetrieveRequest.java │ │ │ │ │ ├── StoreRequest.java │ │ │ │ │ ├── UnencryptedEmailPacket.java │ │ │ │ │ └── package.html │ │ │ │ ├── package.html │ │ │ │ └── relay │ │ │ │ │ ├── PeerListRequest.java │ │ │ │ │ ├── RelayRequest.java │ │ │ │ │ ├── ReturnChain.java │ │ │ │ │ └── package.html │ │ │ │ ├── service │ │ │ │ ├── ApiService.java │ │ │ │ ├── DeliveryChecker.java │ │ │ │ ├── EmailChecker.java │ │ │ │ ├── ExpirationThread.java │ │ │ │ ├── OutboxListener.java │ │ │ │ ├── OutboxProcessor.java │ │ │ │ ├── POP3Service.java │ │ │ │ ├── RelayPacketSender.java │ │ │ │ ├── RelayPeerManager.java │ │ │ │ └── package.html │ │ │ │ ├── status │ │ │ │ ├── ChangeIdentityStatus.java │ │ │ │ ├── ChangePasswordStatus.java │ │ │ │ └── StatusListener.java │ │ │ │ └── util │ │ │ │ ├── ExportableData.java │ │ │ │ ├── GeneralHelper.java │ │ │ │ └── SortedProperties.java │ │ └── net │ │ │ └── i2p │ │ │ └── util │ │ │ └── StrongTls.java │ ├── resources │ │ └── i2p │ │ │ └── bote │ │ │ ├── crypto │ │ │ └── wordlist │ │ │ │ ├── words_de.txt │ │ │ │ └── words_en.txt │ │ │ └── network │ │ │ └── built-in-peers.txt │ └── scripts │ │ ├── decrypt.bat │ │ ├── decrypt.sh │ │ ├── encrypt.bat │ │ ├── encrypt.sh │ │ ├── fileinfo.bat │ │ └── fileinfo.sh │ └── test │ ├── java │ └── i2p │ │ └── bote │ │ ├── AllTests.java │ │ ├── TestUtil.java │ │ ├── addressbook │ │ └── AddressBookTest.java │ │ ├── crypto │ │ └── CryptoImplementationTest.java │ │ ├── email │ │ ├── EmailIdentityTest.java │ │ ├── EmailMetadataTest.java │ │ ├── EmailTest.java │ │ └── IdentitiesTest.java │ │ ├── fileencryption │ │ ├── EncryptedStreamTest.java │ │ ├── FileEncryptionTestUtil.java │ │ ├── FileEncryptionUtilTest.java │ │ └── PasswordCacheTest.java │ │ ├── folder │ │ ├── DirectoryEntryFolderTest.java │ │ ├── EmailFolderTest.java │ │ ├── EmailPacketFolderTest.java │ │ ├── FolderTest.java │ │ ├── IncompleteEmailFolderTest.java │ │ ├── IndexPacketFolderTest.java │ │ └── RelayPacketFolderTest.java │ │ ├── network │ │ └── kademlia │ │ │ ├── BucketManagerTest.java │ │ │ ├── KBucketTest.java │ │ │ └── KademliaTestUtil.java │ │ ├── packet │ │ ├── I2PBotePacketTest.java │ │ ├── PeerListTest.java │ │ ├── ResponsePacketTest.java │ │ ├── dht │ │ │ ├── ContactTest.java │ │ │ ├── DeletionQueryTest.java │ │ │ ├── EmailPacketDeleteRequestTest.java │ │ │ ├── EncryptedEmailPacketTest.java │ │ │ ├── FindClosePeersPacketTest.java │ │ │ ├── IndexPacketDeleteRequestTest.java │ │ │ ├── IndexPacketTest.java │ │ │ ├── StoreRequestTest.java │ │ │ └── UnencryptedEmailPacketTest.java │ │ └── relay │ │ │ ├── RelayRequestTest.java │ │ │ └── ReturnChainTest.java │ │ └── service │ │ └── OutboxProcessorTest.java │ └── resources │ └── i2p │ └── bote │ └── packet │ └── dht │ └── Struwwelpeter.jpg ├── crypto ├── build.gradle └── libs │ ├── flexi-gmss-1.7p1.jar │ └── ntruenc-1.2.jar ├── doc ├── manual.odt ├── manual_fr.odt └── techdoc.txt ├── gradle.properties ├── gradle ├── i2p-make-plugin.gradle ├── signing.gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── history.txt ├── license.txt ├── licenses ├── BouncyCastle.txt ├── GPLv3.txt └── LICENSE-Apache2.0.txt ├── nbproject └── project.xml ├── settings.gradle ├── webapp ├── build.gradle └── src │ ├── main │ ├── i2p │ │ └── plugin.config │ ├── java │ │ └── i2p │ │ │ └── bote │ │ │ ├── imap │ │ │ ├── BoteMailbox.java │ │ │ ├── BoteMailboxId.java │ │ │ ├── BoteMessage.java │ │ │ ├── BoteMessageId.java │ │ │ ├── ImapService.java │ │ │ └── MapperFactory.java │ │ │ ├── service │ │ │ ├── ApiServiceImpl.java │ │ │ └── seedless │ │ │ │ ├── ProxyRequest.java │ │ │ │ ├── SeedlessAnnounce.java │ │ │ │ ├── SeedlessInitializer.java │ │ │ │ ├── SeedlessParameters.java │ │ │ │ ├── SeedlessRequestPeers.java │ │ │ │ ├── SeedlessScrapePeers.java │ │ │ │ ├── SeedlessScrapeServers.java │ │ │ │ └── package.html │ │ │ ├── smtp │ │ │ └── SmtpService.java │ │ │ └── web │ │ │ ├── AttachmentTag.java │ │ │ ├── CSPApplier.java │ │ │ ├── CSRFCheckTag.java │ │ │ ├── CSRFLogger.java │ │ │ ├── CharsetFilter.java │ │ │ ├── CheckMailTag.java │ │ │ ├── ClearPasswordCacheTag.java │ │ │ ├── ConnectTag.java │ │ │ ├── ExportIdentities.java │ │ │ ├── FormatPlainTextTag.java │ │ │ ├── ImportIdentitiesTag.java │ │ │ ├── JSPHelper.java │ │ │ ├── MessageTag.java │ │ │ ├── MultipartFilter.java │ │ │ ├── ParamTag.java │ │ │ ├── PeerInfoTag.java │ │ │ ├── PrintExceptionTag.java │ │ │ ├── PublishDestinationTag.java │ │ │ ├── QuoteTag.java │ │ │ ├── RecipientTag.java │ │ │ ├── RequirePasswordTag.java │ │ │ ├── SameOriginFilter.java │ │ │ ├── SaveConfigurationTag.java │ │ │ ├── SaveIdentitiesTag.java │ │ │ ├── SendEmailTag.java │ │ │ ├── ServiceInitializer.java │ │ │ ├── SetEmailReadTag.java │ │ │ ├── SetEmailRepliedTag.java │ │ │ ├── SetPasswordTag.java │ │ │ ├── ShowAttachment.java │ │ │ ├── ShowAttachmentsTag.java │ │ │ ├── ThemeFilter.java │ │ │ ├── ThemeServlet.java │ │ │ ├── WaitForPasswordChangeTag.java │ │ │ ├── WebappPeerStatsRenderer.java │ │ │ ├── WebappUtil.java │ │ │ └── package.html │ ├── locale │ │ ├── messages_ar.po │ │ ├── messages_az.po │ │ ├── messages_cs.po │ │ ├── messages_de.po │ │ ├── messages_en.po │ │ ├── messages_es.po │ │ ├── messages_fi.po │ │ ├── messages_fr.po │ │ ├── messages_hu.po │ │ ├── messages_id.po │ │ ├── messages_it.po │ │ ├── messages_ja.po │ │ ├── messages_ko.po │ │ ├── messages_nb.po │ │ ├── messages_nl.po │ │ ├── messages_pl.po │ │ ├── messages_pt.po │ │ ├── messages_pt_BR.po │ │ ├── messages_ro.po │ │ ├── messages_ru.po │ │ ├── messages_sk.po │ │ ├── messages_sq.po │ │ ├── messages_sv.po │ │ ├── messages_tr.po │ │ ├── messages_uk.po │ │ ├── messages_vi.po │ │ └── messages_zh.po │ └── webapp │ │ ├── META-INF │ │ ├── MANIFEST.MF │ │ └── mime.types │ │ ├── WEB-INF │ │ ├── classes │ │ │ ├── Owasp.CsrfGuard.properties │ │ │ └── javax │ │ │ │ └── annotation │ │ │ │ └── concurrent │ │ │ │ └── GuardedBy.class │ │ ├── tags │ │ │ ├── address.tag │ │ │ ├── copyParams.tag │ │ │ ├── expandable.tag │ │ │ ├── folderLink.tag │ │ │ ├── printDate.tag │ │ │ └── printWithLineBreaks.tag │ │ ├── tlds │ │ │ └── i2pbote.tld │ │ └── web.xml │ │ ├── about.jsp │ │ ├── addressBook.jsp │ │ ├── buttonFrame.jsp │ │ ├── checkMail.jsp │ │ ├── clearPasswordCache.jsp │ │ ├── connect.jsp │ │ ├── connectError.jsp │ │ ├── csrfError.jsp │ │ ├── debug.jsp │ │ ├── deleteContact.jsp │ │ ├── deleteEmail.jsp │ │ ├── deleteIdentity.jsp │ │ ├── editContact.jsp │ │ ├── editIdentity.jsp │ │ ├── exportIdentities.jsp │ │ ├── faq.jsp │ │ ├── folder.jsp │ │ ├── folders.jsp │ │ ├── footer.jsp │ │ ├── getStatus.jsp │ │ ├── header.jsp │ │ ├── html │ │ ├── FAQ.html │ │ ├── FAQ_de.html │ │ ├── FAQ_es.html │ │ ├── FAQ_fr.html │ │ ├── FAQ_in.html │ │ ├── FAQ_ru.html │ │ ├── FAQ_sv.html │ │ ├── userGuide.html │ │ ├── userGuide_de.html │ │ ├── userGuide_es.html │ │ ├── userGuide_fr.html │ │ ├── userGuide_in.html │ │ └── userGuide_sv.html │ │ ├── identities.jsp │ │ ├── identitiesHelp.jsp │ │ ├── importContact.jsp │ │ ├── importIdentities.jsp │ │ ├── index.html │ │ ├── index.jsp │ │ ├── network.jsp │ │ ├── newEmail.jsp │ │ ├── noIdentities.jsp │ │ ├── outbox.jsp │ │ ├── password.jsp │ │ ├── publishDestination.jsp │ │ ├── saveIdentities.jsp │ │ ├── sendEmail.jsp │ │ ├── setPassword.jsp │ │ ├── settings.jsp │ │ ├── showEmail.jsp │ │ ├── showFullIdentity.jsp │ │ ├── showHtml.jsp │ │ ├── statusFrame.jsp │ │ ├── submitIdentity.jsp │ │ ├── themes │ │ ├── lblue │ │ │ ├── i2pbote.css │ │ │ └── images │ │ │ │ ├── addressbook.png │ │ │ │ ├── attachment.png │ │ │ │ ├── background-alt.png │ │ │ │ ├── background.png │ │ │ │ ├── clear_password.png │ │ │ │ ├── connect_error.png │ │ │ │ ├── connected.png │ │ │ │ ├── connecting.png │ │ │ │ ├── default.png │ │ │ │ ├── delay.png │ │ │ │ ├── delete.png │ │ │ │ ├── favicon.png │ │ │ │ ├── folder.png │ │ │ │ ├── not_started.png │ │ │ │ ├── wait.gif │ │ │ │ └── warning.png │ │ ├── material │ │ │ ├── fonts │ │ │ │ ├── NotoSans-Bold.ttf │ │ │ │ ├── NotoSans-BoldItalic.ttf │ │ │ │ ├── NotoSans-Italic.ttf │ │ │ │ ├── NotoSans-Regular.ttf │ │ │ │ ├── Roboto-Black.ttf │ │ │ │ ├── Roboto-BlackItalic.ttf │ │ │ │ ├── Roboto-Bold.ttf │ │ │ │ ├── Roboto-BoldItalic.ttf │ │ │ │ ├── Roboto-Italic.ttf │ │ │ │ ├── Roboto-Light.ttf │ │ │ │ ├── Roboto-LightItalic.ttf │ │ │ │ ├── Roboto-Medium.ttf │ │ │ │ ├── Roboto-MediumItalic.ttf │ │ │ │ ├── Roboto-Regular.ttf │ │ │ │ ├── Roboto-Thin.ttf │ │ │ │ └── Roboto-ThinItalic.ttf │ │ │ ├── i2pbote.css │ │ │ ├── icon.png │ │ │ ├── images │ │ │ │ ├── addressbook.png │ │ │ │ ├── attachment.png │ │ │ │ ├── clear_password.png │ │ │ │ ├── compose.png │ │ │ │ ├── connect_error.png │ │ │ │ ├── connected.png │ │ │ │ ├── connecting.png │ │ │ │ ├── default.png │ │ │ │ ├── delay.png │ │ │ │ ├── delete.png │ │ │ │ ├── favicon.png │ │ │ │ ├── folder.png │ │ │ │ ├── identities.png │ │ │ │ ├── inbox.png │ │ │ │ ├── not_started.png │ │ │ │ ├── outbox.png │ │ │ │ ├── refresh.png │ │ │ │ ├── send_white.png │ │ │ │ ├── sent.png │ │ │ │ ├── settings.png │ │ │ │ ├── wait.gif │ │ │ │ └── warning.png │ │ │ ├── noto.css │ │ │ └── roboto.css │ │ └── vanilla │ │ │ ├── i2pbote.css │ │ │ └── images │ │ │ ├── addressbook.png │ │ │ ├── attachment.png │ │ │ ├── background-alt.png │ │ │ ├── background.png │ │ │ ├── bling.png │ │ │ ├── clear_password.png │ │ │ ├── connect_error.png │ │ │ ├── connected.png │ │ │ ├── connecting.png │ │ │ ├── default.png │ │ │ ├── delay.png │ │ │ ├── delete.png │ │ │ ├── favicon.png │ │ │ ├── folder.png │ │ │ ├── graytile.png │ │ │ ├── not_started.png │ │ │ ├── wait.gif │ │ │ └── warning.png │ │ └── userGuide.jsp │ └── poupdate │ ├── java │ └── i2p │ │ └── bote │ │ └── ant │ │ ├── JspStrings.java │ │ ├── PrintAppVersion.java │ │ └── SearchAndInsert.java │ └── scripts │ └── bundle-messages.sh └── win32installer ├── build.xml.old ├── config.txt ├── i2pbote_pack.txt ├── jreinstall.bat ├── launcher.ini └── packspanel.txt /.gitignore: -------------------------------------------------------------------------------- 1 | # Config files 2 | local.properties 3 | signing.properties 4 | 5 | # Gradle 6 | .gradle/ 7 | build/ 8 | android/build 9 | core/build 10 | webapp/build 11 | 12 | # I2P-specific ignores 13 | android/src/main/res/raw/certificates_zip 14 | 15 | # James Server dependencies 16 | webapp/cache 17 | webapp/libs 18 | 19 | # Standalone WAR user files 20 | webapp/i2pbote 21 | webapp/logs 22 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = he: iw, id: in, pt_BR: pt-rBR, ru_RU: ru, sv_SE: sv, tr_TR: tr, uk_UA: uk, yi: ji, zh_CN: zh 4 | 5 | [I2P.plugin_i2pbote] 6 | file_filter = webapp/src/main/locale/messages_.po 7 | source_file = webapp/src/main/locale/messages_en.po 8 | source_lang = en 9 | minimum_perc = 40 10 | 11 | [I2P.plugin_i2pbote_userguide] 12 | file_filter = webapp/src/main/webapp/html/userGuide_.html 13 | source_file = webapp/src/main/webapp/html/userGuide.html 14 | source_lang = en 15 | minimum_perc = 50 16 | 17 | [I2P.plugin_i2pbote_faq] 18 | file_filter = webapp/src/main/webapp/html/FAQ_.html 19 | source_file = webapp/src/main/webapp/html/FAQ.html 20 | source_lang = en 21 | minimum_perc = 50 22 | 23 | [I2P.android_bote] 24 | file_filter = android/src/main/res/values-/strings.xml 25 | source_file = android/src/main/res/values/strings.xml 26 | source_lang = en 27 | type = ANDROID 28 | minimum_perc = 50 29 | 30 | [I2P.android_bote_help_start] 31 | file_filter = android/src/main/res/raw-/help_start.html 32 | source_file = android/src/main/res/raw/help_start.html 33 | source_lang = en 34 | type = HTML 35 | minimum_perc = 50 36 | 37 | [I2P.android_bote_help_identities] 38 | file_filter = android/src/main/res/raw-/help_identities.html 39 | source_file = android/src/main/res/raw/help_identities.html 40 | source_lang = en 41 | type = HTML 42 | minimum_perc = 50 43 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | User guide 2 | - Howto for IMAP/SMTP 3 | Email composition 4 | - "Include sent time" as an option, pre-filled with settings default 5 | Identities 6 | - Generate dests in background rather than needing a dedicated tab open 7 | IMAP/SMTP 8 | - "Force SSL" option 9 | - When disabled, users can connect with "insecure" or "STARTTLS" 10 | - When enabled, users can connect with "SSL" 11 | - Separate password cache (IMAP auth should not unlock webui) 12 | 13 | Not-yet-implemented 14 | - Drafts folder 15 | - User-defined folders 16 | - Automatically disable timestamps when using mail routes 17 | - Random offset for fetch interval (#1360) 18 | - Per-identity settings (#1359) 19 | - Fetch interval 20 | - Mail route per-hop settings 21 | - Delay (#1361) 22 | - Fixed forward time 23 | - Traffic correlation countermeasures at relays 24 | - Mixing anonymity (minimum threshold on relay packets to send) 25 | - Constant traffic (test and dummy messages) 26 | - Balanced incoming/outgoing ratio 27 | - Packet padding 28 | - Retrieving email via relays 29 | -------------------------------------------------------------------------------- /android/libs/additionnal.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/libs/additionnal.jar -------------------------------------------------------------------------------- /android/libs/tokenautocomplete.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/libs/tokenautocomplete.jar -------------------------------------------------------------------------------- /android/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | -dontobfuscate 2 | -dontoptimize 3 | -dontpreverify 4 | -dontshrink 5 | 6 | -dontwarn com.sun.mail.handlers.handler_base 7 | -dontwarn java.awt.** 8 | -dontwarn java.beans.Beans 9 | -dontwarn javax.naming.** 10 | -dontwarn javax.security.sasl.** 11 | -dontwarn javax.security.auth.callback.NameCallback 12 | 13 | -dontwarn android.test.** 14 | -dontwarn org.junit.** 15 | 16 | -dontwarn net.sf.ntru.** 17 | 18 | -keepclassmembers class i2p.bote.crypto.ECUtils { 19 | public static java.security.spec.ECParameterSpec getParameters(java.lang.String); 20 | public static byte[] encodePoint(java.security.spec.ECParameterSpec, java.security.spec.ECPoint, boolean); 21 | public static java.security.spec.ECPoint decodePoint(java.security.spec.EllipticCurve, byte[]); 22 | } 23 | -------------------------------------------------------------------------------- /android/src/androidTest/java/i2p/bote/android/intro/IntroActivityTest.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.intro; 2 | 3 | import android.support.test.rule.ActivityTestRule; 4 | import android.support.test.runner.AndroidJUnit4; 5 | 6 | import org.junit.Rule; 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import i2p.bote.android.R; 11 | 12 | import static android.support.test.espresso.Espresso.onView; 13 | import static android.support.test.espresso.action.ViewActions.click; 14 | import static android.support.test.espresso.action.ViewActions.swipeLeft; 15 | import static android.support.test.espresso.matcher.ViewMatchers.withId; 16 | 17 | @RunWith(AndroidJUnit4.class) 18 | public class IntroActivityTest { 19 | 20 | @Rule 21 | public ActivityTestRule mRule = new ActivityTestRule<>(IntroActivity.class); 22 | 23 | @Test 24 | public void enterSetup() { 25 | onView(withId(R.id.pager)).perform(swipeLeft(), swipeLeft(), swipeLeft(), swipeLeft(), swipeLeft()); 26 | onView(withId(R.id.start_setup_wizard)).perform(click()); 27 | // TODO check result 28 | } 29 | 30 | @Test 31 | public void closeIntro() { 32 | onView(withId(R.id.skip_intro)).perform(click()); 33 | // TODO check result 34 | } 35 | } -------------------------------------------------------------------------------- /android/src/debug/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Bote DEBUG 4 | 5 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/Constants.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android; 2 | 3 | public class Constants { 4 | public static final String ANDROID_LOG_TAG = "I2P-Bote"; 5 | 6 | public static final String SHARED_PREFS = "i2p.bote"; 7 | public static final String PREF_SELECTED_IDENTITY = "selectedIdentity"; 8 | 9 | public static final String EMAILDEST_SCHEME = "bote"; 10 | 11 | public static final String NDEF_DOMAIN = "i2p.bote"; 12 | public static final String NDEF_TYPE_CONTACT = "contact"; 13 | public static final String NDEF_TYPE_CONTACT_DESTINATION = "contactDestination"; 14 | public static final String NDEF_LEGACY_TYPE_CONTACT = NDEF_DOMAIN + ":" + NDEF_TYPE_CONTACT; 15 | public static final String NDEF_LEGACY_TYPE_CONTACT_DESTINATION = NDEF_DOMAIN + ":" + NDEF_TYPE_CONTACT_DESTINATION; 16 | } 17 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/InitActivities.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android; 2 | 3 | import android.content.Context; 4 | 5 | import java.security.Security; 6 | 7 | public class InitActivities { 8 | static { 9 | Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1); 10 | } 11 | 12 | private final String myDir; 13 | 14 | public InitActivities(Context c) { 15 | this(c.getFilesDir().getAbsolutePath()); 16 | } 17 | 18 | public InitActivities(String i2pBaseDir) { 19 | myDir = i2pBaseDir; 20 | } 21 | 22 | public void initialize() { 23 | // Don't initialize twice 24 | if (System.getProperty("i2pbote.initialized", "false").equals("true")) 25 | return; 26 | 27 | // Set up the locations so settings can find them 28 | System.setProperty("i2p.dir.base", myDir); 29 | System.setProperty("i2p.dir.config", myDir); 30 | System.setProperty("wrapper.logfile", myDir + "/wrapper.log"); 31 | 32 | System.setProperty("i2pbote.initialized", "true"); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/NetworkInfoActivity.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.widget.Toolbar; 5 | 6 | public class NetworkInfoActivity extends BoteActivityBase { 7 | @Override 8 | protected void onCreate(Bundle savedInstanceState) { 9 | super.onCreate(savedInstanceState); 10 | setContentView(R.layout.activity_toolbar); 11 | 12 | // Set the action bar 13 | Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar); 14 | setSupportActionBar(toolbar); 15 | 16 | // Enable ActionBar app icon to behave as action to go back 17 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 18 | 19 | if (savedInstanceState == null) { 20 | NetworkInfoFragment f = new NetworkInfoFragment(); 21 | getSupportFragmentManager().beginTransaction() 22 | .add(R.id.container, f).commit(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/addressbook/AddressBookShipActivity.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.addressbook; 2 | 3 | import android.widget.Toast; 4 | 5 | import i2p.bote.android.R; 6 | import i2p.bote.android.util.DataShipActivity; 7 | import i2p.bote.android.util.DataShipFragment; 8 | 9 | public class AddressBookShipActivity extends DataShipActivity { 10 | @Override 11 | protected DataShipFragment getDataShipFragment() { 12 | return AddressBookShipFragment.newInstance(mExporting); 13 | } 14 | 15 | // DataShipFragment.Callbacks 16 | 17 | public void onTaskFinished() { 18 | Toast.makeText(this, 19 | mExporting ? 20 | R.string.address_book_exported: 21 | R.string.address_book_imported, 22 | Toast.LENGTH_SHORT).show(); 23 | setResult(RESULT_OK); 24 | finish(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/config/AppearancePreferenceFragment.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.config; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.preference.PreferenceFragmentCompat; 5 | 6 | import i2p.bote.android.R; 7 | 8 | public class AppearancePreferenceFragment extends PreferenceFragmentCompat { 9 | @Override 10 | public void onCreatePreferences(Bundle paramBundle, String s) { 11 | addPreferencesFromResource(R.xml.settings_appearance); 12 | } 13 | 14 | @Override 15 | public void onStart() { 16 | super.onStart(); 17 | getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener( 18 | (SettingsActivity) getActivity() 19 | ); 20 | } 21 | 22 | @Override 23 | public void onResume() { 24 | super.onResume(); 25 | ((SettingsActivity) getActivity()).getSupportActionBar().setTitle(R.string.settings_label_appearance); 26 | } 27 | 28 | @Override 29 | public void onStop() { 30 | super.onStop(); 31 | getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener( 32 | (SettingsActivity) getActivity() 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/config/SetPasswordActivity.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.config; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.widget.Toolbar; 5 | import android.widget.Toast; 6 | 7 | import i2p.bote.android.BoteActivityBase; 8 | import i2p.bote.android.R; 9 | 10 | public class SetPasswordActivity extends BoteActivityBase implements 11 | SetPasswordFragment.Callbacks { 12 | @Override 13 | public void onCreate(Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | setContentView(R.layout.activity_set_password); 16 | 17 | // Set the action bar 18 | Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar); 19 | setSupportActionBar(toolbar); 20 | 21 | // Enable ActionBar app icon to behave as action to go back 22 | //noinspection ConstantConditions 23 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 24 | } 25 | 26 | // SetPasswordFragment.Callbacks 27 | 28 | public void onTaskFinished() { 29 | Toast.makeText(this, R.string.password_changed, 30 | Toast.LENGTH_SHORT).show(); 31 | setResult(RESULT_OK); 32 | finish(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/config/util/CustomPreferenceFragment.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.config.util; 2 | 3 | import android.support.v4.app.DialogFragment; 4 | import android.support.v7.preference.Preference; 5 | import android.support.v7.preference.PreferenceFragmentCompat; 6 | 7 | /** 8 | * Handles custom Preferences. 9 | */ 10 | public abstract class CustomPreferenceFragment extends PreferenceFragmentCompat { 11 | private static final String DIALOG_FRAGMENT_TAG = 12 | "android.support.v7.preference.PreferenceFragment.DIALOG"; 13 | 14 | @Override 15 | public void onDisplayPreferenceDialog(Preference preference) { 16 | // check if dialog is already showing 17 | if (getFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) { 18 | return; 19 | } 20 | 21 | DialogFragment f = null; 22 | if (preference instanceof IntEditTextPreference) { 23 | f = IntEditTextPreferenceDialog.newInstance(preference.getKey()); 24 | } else { 25 | super.onDisplayPreferenceDialog(preference); 26 | } 27 | if (f != null) { 28 | f.setTargetFragment(this, 0); 29 | f.show(getFragmentManager(), DIALOG_FRAGMENT_TAG); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/config/util/IntEditTextPreference.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.config.util; 2 | 3 | import android.content.Context; 4 | import android.support.v7.preference.EditTextPreference; 5 | import android.util.AttributeSet; 6 | 7 | public class IntEditTextPreference extends EditTextPreference { 8 | 9 | public IntEditTextPreference(Context context) { 10 | super(context); 11 | } 12 | 13 | public IntEditTextPreference(Context context, AttributeSet attrs) { 14 | super(context, attrs); 15 | } 16 | 17 | public IntEditTextPreference(Context context, AttributeSet attrs, int defStyle) { 18 | super(context, attrs, defStyle); 19 | } 20 | 21 | @Override 22 | public CharSequence getSummary() { 23 | return String.format((String) super.getSummary(), getText()); 24 | } 25 | 26 | @Override 27 | protected String getPersistedString(String defaultReturnValue) { 28 | return String.valueOf(getPersistedInt(-1)); 29 | } 30 | 31 | @Override 32 | protected boolean persistString(String value) { 33 | return persistInt(Integer.valueOf(value)); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/config/util/IntEditTextPreferenceDialog.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.config.util; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.preference.EditTextPreferenceDialogFragmentCompat; 5 | import android.text.InputType; 6 | import android.view.View; 7 | import android.widget.EditText; 8 | 9 | public class IntEditTextPreferenceDialog extends EditTextPreferenceDialogFragmentCompat { 10 | public static IntEditTextPreferenceDialog newInstance(String key) { 11 | final IntEditTextPreferenceDialog fragment = new IntEditTextPreferenceDialog(); 12 | final Bundle b = new Bundle(1); 13 | b.putString(ARG_KEY, key); 14 | fragment.setArguments(b); 15 | return fragment; 16 | } 17 | 18 | @Override 19 | protected void onBindDialogView(View view) { 20 | super.onBindDialogView(view); 21 | ((EditText)view.findViewById(android.R.id.edit)).setInputType( 22 | InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/config/util/SummaryEditTextPreference.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.config.util; 2 | 3 | import android.content.Context; 4 | import android.support.v7.preference.EditTextPreference; 5 | import android.util.AttributeSet; 6 | 7 | public class SummaryEditTextPreference extends EditTextPreference { 8 | 9 | public SummaryEditTextPreference(Context context) { 10 | super(context); 11 | } 12 | 13 | public SummaryEditTextPreference(Context context, AttributeSet attrs) { 14 | super(context, attrs); 15 | } 16 | 17 | public SummaryEditTextPreference(Context context, AttributeSet attrs, int defStyle) { 18 | super(context, attrs, defStyle); 19 | } 20 | 21 | @Override 22 | public CharSequence getSummary() { 23 | String summary = (String) super.getSummary(); 24 | if (summary == null) 25 | summary = "%s"; 26 | return String.format(summary, getText()); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/identities/IdentityShipActivity.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.identities; 2 | 3 | import android.widget.Toast; 4 | 5 | import i2p.bote.android.R; 6 | import i2p.bote.android.util.DataShipActivity; 7 | import i2p.bote.android.util.DataShipFragment; 8 | 9 | public class IdentityShipActivity extends DataShipActivity { 10 | @Override 11 | protected DataShipFragment getDataShipFragment() { 12 | return IdentityShipFragment.newInstance(mExporting); 13 | } 14 | 15 | // DataShipFragment.Callbacks 16 | 17 | public void onTaskFinished() { 18 | Toast.makeText(this, 19 | mExporting ? 20 | R.string.identities_exported : 21 | R.string.identities_imported, 22 | Toast.LENGTH_SHORT).show(); 23 | setResult(RESULT_OK); 24 | finish(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/util/DataShipActivity.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.util; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.widget.Toolbar; 5 | 6 | import i2p.bote.android.BoteActivityBase; 7 | import i2p.bote.android.R; 8 | 9 | public abstract class DataShipActivity extends BoteActivityBase implements 10 | DataShipFragment.Callbacks { 11 | public static final String EXPORTING = "exporting"; 12 | 13 | protected boolean mExporting; 14 | 15 | protected abstract DataShipFragment getDataShipFragment(); 16 | 17 | @Override 18 | public void onCreate(Bundle savedInstanceState) { 19 | super.onCreate(savedInstanceState); 20 | setContentView(R.layout.activity_data_ship); 21 | 22 | // Set the action bar 23 | Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar); 24 | setSupportActionBar(toolbar); 25 | 26 | // Enable ActionBar app icon to behave as action to go back 27 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 28 | 29 | if (savedInstanceState == null) { 30 | Bundle args = getIntent().getExtras(); 31 | mExporting = args.getBoolean(EXPORTING); 32 | DataShipFragment f = getDataShipFragment(); 33 | getSupportFragmentManager().beginTransaction() 34 | .add(R.id.data_ship_frag, f).commit(); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/util/Person.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.util; 2 | 3 | import android.graphics.Bitmap; 4 | 5 | import java.io.Serializable; 6 | 7 | public class Person implements Serializable { 8 | private static final long serialVersionUID = -2874686247798691378L; 9 | private String name; 10 | private String address; 11 | private Bitmap picture; 12 | private boolean isExternal; 13 | 14 | public Person(String n, String a, Bitmap p) { this(n, a, p, false); } 15 | public Person(String n, String a, Bitmap p, boolean e) { name = n; address = a; picture = p; isExternal = e; } 16 | 17 | public String getName() { return name; } 18 | public String getAddress() { return address; } 19 | public Bitmap getPicture() { return picture; } 20 | public boolean isExternal() { return isExternal; } 21 | 22 | @Override 23 | public boolean equals(Object other) { 24 | return other instanceof Person && address.equals(((Person) other).address); 25 | } 26 | 27 | @Override 28 | public String toString() { return name; } 29 | } 30 | -------------------------------------------------------------------------------- /android/src/main/java/i2p/bote/android/util/RobustAsyncTask.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.android.util; 2 | 3 | import android.os.AsyncTask; 4 | 5 | public abstract class RobustAsyncTask extends 6 | AsyncTask { 7 | TaskFragment mDialog; 8 | 9 | void setFragment(TaskFragment fragment) { 10 | mDialog = fragment; 11 | } 12 | 13 | @Override 14 | protected void onProgressUpdate(Progress... values) { 15 | if (mDialog != null) 16 | mDialog.updateProgress(values); 17 | } 18 | 19 | @Override 20 | protected void onPostExecute(Result result) { 21 | if (mDialog != null) 22 | mDialog.taskFinished(result); 23 | } 24 | 25 | @Override 26 | protected void onCancelled(Result result) { 27 | if (mDialog != null) 28 | mDialog.taskCancelled(result); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /android/src/main/java/im/delight/android/identicons/Identicon.java: -------------------------------------------------------------------------------- 1 | package im.delight.android.identicons; 2 | 3 | import android.graphics.Color; 4 | 5 | public class Identicon extends IdenticonBase { 6 | private static final int CENTER_COLUMN_INDEX = 5; 7 | 8 | @Override 9 | protected int getRowCount() { 10 | return 9; 11 | } 12 | 13 | @Override 14 | protected int getColumnCount() { 15 | return 9; 16 | } 17 | 18 | protected int getSymmetricColumnIndex(int col) { 19 | if (col < CENTER_COLUMN_INDEX) { 20 | return col; 21 | } else { 22 | return getColumnCount() - col - 1; 23 | } 24 | } 25 | 26 | @Override 27 | protected boolean isCellVisible(int row, int column) { 28 | return getByte(3 + row * CENTER_COLUMN_INDEX + getSymmetricColumnIndex(column)) >= 0; 29 | } 30 | 31 | @Override 32 | protected int getIconColor() { 33 | return Color.rgb(getByte(0) + 128, getByte(1) + 128, getByte(2) + 128); 34 | } 35 | 36 | @Override 37 | protected int getBackgroundColor() { 38 | float[] hsv = new float[3]; 39 | Color.colorToHSV(getIconColor(), hsv); 40 | if (hsv[2] < 0.5) 41 | return Color.parseColor("#ffeeeeee"); // @color/background_material_light 42 | else 43 | return Color.parseColor("#ff303030"); // @color/background_material_dark 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /android/src/main/jniLibs/armeabi-v7a/libscrypt.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/jniLibs/armeabi-v7a/libscrypt.so -------------------------------------------------------------------------------- /android/src/main/jniLibs/armeabi/libscrypt.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/jniLibs/armeabi/libscrypt.so -------------------------------------------------------------------------------- /android/src/main/jniLibs/mips/libscrypt.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/jniLibs/mips/libscrypt.so -------------------------------------------------------------------------------- /android/src/main/jniLibs/x86/libscrypt.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/jniLibs/x86/libscrypt.so -------------------------------------------------------------------------------- /android/src/main/res/drawable-hdpi/ic_contact_picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-hdpi/ic_contact_picture.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-hdpi/ic_navigation_accept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-hdpi/ic_navigation_accept.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-hdpi/ic_notif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-hdpi/ic_notif.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-hdpi/ic_scan_qr_code_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-hdpi/ic_scan_qr_code_white_24dp.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-hdpi/intro_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-hdpi/intro_1.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-hdpi/intro_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-hdpi/intro_3.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-hdpi/intro_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-hdpi/intro_4.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-mdpi/ic_contact_picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-mdpi/ic_contact_picture.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-mdpi/ic_navigation_accept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-mdpi/ic_navigation_accept.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-mdpi/ic_notif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-mdpi/ic_notif.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-mdpi/ic_scan_qr_code_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-mdpi/ic_scan_qr_code_white_24dp.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-mdpi/intro_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-mdpi/intro_1.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-mdpi/intro_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-mdpi/intro_3.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-mdpi/intro_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-mdpi/intro_4.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-v21/listitem_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/src/main/res/drawable-v21/listitem_background_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /android/src/main/res/drawable-xhdpi/ic_contact_picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-xhdpi/ic_contact_picture.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-xhdpi/ic_navigation_accept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-xhdpi/ic_navigation_accept.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-xhdpi/ic_notif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-xhdpi/ic_notif.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-xhdpi/ic_scan_qr_code_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-xhdpi/ic_scan_qr_code_white_24dp.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-xhdpi/intro_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-xhdpi/intro_1.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-xhdpi/intro_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-xhdpi/intro_3.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-xhdpi/intro_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-xhdpi/intro_4.png -------------------------------------------------------------------------------- /android/src/main/res/drawable-xxhdpi/ic_scan_qr_code_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/android/src/main/res/drawable-xxhdpi/ic_scan_qr_code_white_24dp.png -------------------------------------------------------------------------------- /android/src/main/res/drawable/attachment_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/src/main/res/drawable/drawer_header_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /android/src/main/res/drawable/fab_label_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 11 | -------------------------------------------------------------------------------- /android/src/main/res/drawable/listitem_background_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/src/main/res/drawable/picture_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | -------------------------------------------------------------------------------- /android/src/main/res/drawable/token_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /android/src/main/res/layout/activity_help.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 25 | 26 | 30 | 31 | -------------------------------------------------------------------------------- /android/src/main/res/layout/activity_intro.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 13 | 14 | 18 | 19 | 28 | -------------------------------------------------------------------------------- /android/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | 20 | 24 | -------------------------------------------------------------------------------- /android/src/main/res/layout/activity_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | 20 | -------------------------------------------------------------------------------- /android/src/main/res/layout/activity_toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 21 | -------------------------------------------------------------------------------- /android/src/main/res/layout/activity_view_email.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 15 | 16 | 20 | -------------------------------------------------------------------------------- /android/src/main/res/layout/contact_token.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 27 | 28 | -------------------------------------------------------------------------------- /android/src/main/res/layout/dialog_password.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 19 | 20 | 21 | 22 | 23 | 29 | 30 | -------------------------------------------------------------------------------- /android/src/main/res/layout/dialog_status.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /android/src/main/res/layout/fragment_authenticated.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 14 | 19 | -------------------------------------------------------------------------------- /android/src/main/res/layout/listitem_attachment_warning.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 18 | 19 | 26 | -------------------------------------------------------------------------------- /android/src/main/res/layout/listitem_contact.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 18 | 19 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /android/src/main/res/layout/listitem_empty.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /android/src/main/res/layout/listitem_folder.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /android/src/main/res/layout/listitem_folder_with_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /android/src/main/res/layout/listitem_incomplete.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /android/src/main/res/layout/listitem_text.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /android/src/main/res/menu/address_book.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 15 | -------------------------------------------------------------------------------- /android/src/main/res/menu/attachment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /android/src/main/res/menu/authenticated_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /android/src/main/res/menu/edit_contact.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /android/src/main/res/menu/edit_identity.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /android/src/main/res/menu/email_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /android/src/main/res/menu/email_list_context.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 13 | 17 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/menu/identity_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 15 | -------------------------------------------------------------------------------- /android/src/main/res/menu/main.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 10 | 15 | 16 | 21 | 22 | 27 | 28 | -------------------------------------------------------------------------------- /android/src/main/res/menu/new_email.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /android/src/main/res/menu/set_password.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /android/src/main/res/menu/view_address.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /android/src/main/res/menu/view_email.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /android/src/main/res/raw-ar/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

ما هي الهوية؟

5 |

الهوية هي مثل حساب البريد الإلكتروني ، ولكن بدون مزود - أنت تتحكم في حسابك ، بدلاً من طرف ثالث مثل Google أو Yahoo

6 | 7 |

ما هي الوجهة؟

8 |

الوجهة هي العنوان الذي تعطيه لأصدقائك حتى يتمكنوا من إرسال الرسائل اﻹلكترونية إليك.

9 | 10 |

لماذا عناوين البريد الإلكتروني طويلة جدا؟

11 |

يتم تشفير كل بريد إلكتروني تلقائيًا بواسطة Bote. يحتوي كل عنوان على مجموعة من المفاتيح العامة ، والتي تستخدم لتشفير رسائل البريد الإلكتروني المرسلة إلى هذا العنوان. يعتمد طول العنوان على نوع التشفير المستخدم.

12 | 13 |

هل هناك حد معين لعدد الهويات التي يمكنني الحصول عليها؟

14 |

يمكنك إنشاء العديد من الهويات كما تريد ، واستخدام هويات مختلفة لأغراض مختلفة.

15 | 16 |

متى تنتهي صلاحية الهويات؟

17 |

لا حدّ هناك لانتهاء صلاحية الهوية. طالما لديك المفاتيح الخاصة بالهوية ، يمكنك استخدامها. هذا يعني أيضًا أنه لا يوجد "استرداد حساب" - فإذا فقدت هاتفك ، فإنك تفقد هويتك.

18 |

يمكنك عمل نسخة احتياطية للهويات الخاصة بك عن طريق تصديرها من قائمة "الإعدادات". سيؤدي ذلك إلى حفظ نسخة منها في ملف في سعة تخزين هاتفك. يمكن استخدام الملف لاستعادة الهويات الخاصة بك ، أو نقلها إلى جهاز آخر.

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-ar/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

الشروع في العمل

5 |

أولا تحتاج إلى هوية. قم بإنشاء واحدة عبر قائمة "الإعدادات" ، أو استورد هوية موجودة مسبقًا. بعد ذلك ، يمكنك إضافة عناوين أصدقائك عن طريق النسخ والّصق ، أو استبدالها عبر رموز QR أو NFC.

6 | 7 |

على Android أقل من إصدار 4.4 ، يوصى بتثبيت OI File Manager من أجل تحديد الملف المحسّن. للمشاركة عبر رموز QR Code قم بتثبيت ماسح الباركود . يؤدي النقر على الروابط إلى فتح متجر Google Play أو F-Droid للتثبيت.

8 | 9 |

لقد وجدت خللا في بوت!

10 |

الرجاء الإبلاغ عن الخطأ باستخدام متعقب الأخطاء I2P.

11 | 12 |

الترجمات

13 |

ساعد في ترجمة Bote! يمكن للجميع المشاركة في ترجمة I2P على Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-az/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Kimlik nədir?

5 |

Kimlik bir email hesabı kimidir, sadəcə təqdimatçısı yoxdur - siz hesabınızı, Google yaxud Yahoo kimi üçüncü tərəf olmadan idarə edirsiniz.

6 | 7 |

Hədəf nədir?

8 |

Hədəf dostlarınıza verdiyiniz və sizə email göndərə biləcəkləri ünvandır.

9 | 10 |

Email ünvanları niyə belə uzundur?

11 |

Hər bir email Bote tərəfindən avtomatik olaraq şifrələnir. Hər bir ünvan, bu ünvana göndərilən e-məktubları şifrələmək üçün istifadə olunan ictimai açarlardan ibarətdir. Ünvanın uzunluğu istifadə olunan şifrənin növündən asılıdır.

12 | 13 |

Sahib ola biləcəyim kimliklərin sayına məhdudiyyət varmı?

14 |

İstədiyiniz qədər kimlik yarada və müxtəlif məqsədlər üçün fərqli kimliklərdən istifadə edə bilərsiniz.

15 | 16 |

Kimliyin müddəti nə zaman bitir?

17 |

Heç vaxt. Kimlik üçün məxfi açarlarınız olduğu müddətcə ondan istifadə edə bilərsiniz. Bu həmçinin telefonunuz yaxud kimliyiniz itdiyi təqdirdə, "hesabı bərpa etmə" funksiyasının olmadığı deməkdir.

18 |

Kimliklərinizi "Tənzimləmələr" menyusundan ixrac etməklə yedəkləyə bilərsiniz. Bunun bir nüsxəsi telefonunuzdakı bir faylda saxlanacaq. Fayl, kimliyinizi bərpa etmək və ya onları başqa bir qurğuya daşımaq üçün istifadə oluna bilər.

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-az/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Başlayır

5 |

Əvvəlcə bir kimliyə ehtiyacınız var. "Tənzimləmələr" menyusundan birini yaradın və ya mövcud kimliyi idxal edin. Daha sonra dostlarınızın ünvanlarını kopyalayıb-yapışdıraraq əlavə edə və ya QR kodları və ya NFC vasitəsilə dəyişdirə bilərsiz.

6 | 7 |

4.4-dən aşağı Android-də inkişaf etdirilmiş fayl seçimi üçün OI File Manager-i qurmaq məsləhətdir. QR Kodları vasitəsilə bölüşmək üçün Barcode Scanner-i quraşdırın. Linkləri klikləməklə quraşdırma üçün Google Play Store və ya F-Droid açılacaq.

8 | 9 |

Bote-da bir xəta tapdım!

10 |

I2P xəta izləyicisindən istifadə edərək xəta haqda məlumat verin.

11 | 12 |

Tərcümələr

13 |

Bote-un tərcüməsinə kömək edin! Hamı Transifex-də I2P-yə qatıla bilər.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-de/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Der Start mit Bote

5 |

Zuerst benötigen Sie eine Identität. Erstellen Sie eine unter dem Menüpunkt "Einstellungen", oder importieren Sie bereits existierende Identitäten. Anschließend fügen Sie die Adressen Ihrer Freunde mittels Kopie, NFC oder QR-Code hinzu.

6 | 7 |

Auf Android älter als Version 4.4 sollten Sie den OI File Manager zur besseren Dateiverwaltung installieren. Zum Austauschen von QR Codes ist der Barcode Scanner gut. Diese Links öffnen diese Pakete zur Installation im Google Play Store oder in F-Droid.

8 | 9 |

Ich habe einen Bug in Bote gefunden!

10 |

Bitte teilen Sie uns diesen Bug auf unserem I2P bug tracker mit.

11 | 12 |

Übersetzungen

13 |

Helfen Sie mit, Bote zu übersetzen! Jeder kann sich unter I2P auf Transifex beteiligen.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-el/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Ξεκινώντας

5 |

Πρώτα χρειάζεστε μια ταυτότητα. Δημιουργήστε μία μέσω του μενού "Ρυθμίσεις" ή εισαγάγετε μια υπάρχουσα ταυτότητα. Στη συνέχεια, μπορείτε να προσθέσετε τις διευθύνσεις των φίλων σας με αντιγραφή-επικόλληση ή να τις ανταλλάξετε μέσω Κωδίκων QR ή NFC.

6 | 7 |

Σε εκδόσεις Android κάτω από 4.4, συνιστάται να εγκαταστήσετε το OI File Manager για βελτιωμένη επιλογή αρχείων. Για να μοιραστείτε μέσω Κωδίκων QR, εγκαταστήστε το Barcode Scanner. Κάνοντας κλικ στους συνδέσμους θα ανοίξει το Google Play Store ή το F-Droid για εγκατάσταση.

8 | 9 |

Βρήκα ένα σφάλμα στο Bote!

10 |

Παρακαλούμε αναφέρετε το σφάλμα χρησιμοποιώντας το I2P bug tracker.

11 | 12 |

Μεταφράσεις

13 |

Βοηθήστε τη μετάφραση του Bote! Όλοι μπορούν να συμμετάσχουν στο I2P στο Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-es/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Comenzar

5 |

Primero necesita una identidad. Cree una mediante el menú "Configuración", o importe una identidad existente. Después, puede añadir las direcciones de sus amigos mediante copiar-pegar, o intercambiándolas mediante códigos QR o vía NFC.

6 | 7 |

En Android inferior a 4.4, se recomienda que instale el administrador de ficheros OI File Manager para una selección de ficheros mejorada. Para compartir mediante códigos QR instale Barcode Scanner. Haciendo clic en los enlaces abrirá la tienda Google Play o el sitio de F-Droid para la instalación.

8 | 9 |

¡Encontré un fallo en Bote!

10 |

Por favor informe del fallo utilizando el rastreador de fallos de I2P.

11 | 12 |

Traducciones

13 |

¡Ayude a traducir Bote! Todos pueden participar en I2P en Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-fi/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Mikä on Identiteetti?

5 |

Identiteetti on kuin sähköpostiosoite, mutta ilman palveluntarjoajaa - kolmannen osapuolen, kuten Google tai Yahoo, sijaan sinä hallitset itse omaa käyttäjätiliäsi.

6 | 7 |

Mikä on kohde?

8 |

Kohde on osoite, jonka annat ystävillesi, jotta he voivat lähettää sinulle sähköpostia.

9 | 10 |

Miksi sähköpostiosoitteet ovat niin pitkiä?

11 |

Bote salakirjoittaa automaattisesti jokaisen sähköpostin. Jokainen osoite sisältää joukon julkisavaimia, joita käytetään salakirjoittamaan sähköpostit, jotka lähetetään tuohon osoitteeseen. Osoitteen pituus riippuu käytetystä salakirjoitusmenetelmästä.

12 | 13 |

Montako identiteettiä minulla voi olla?

14 |

Niin monta kuin haluat, ja voit käyttää eri identiteettejä eri tarkoituksiin.

15 | 16 |

Milloin identiteetti vanhenee?

17 |

Ei koskaan. Niin kauan kuin sinulla on identiteettisi salainen avain, voit käyttää sitä. Toisaalta tämä tarkoittaa, ettei käyttäjätilejä voi palauttaa - jos hukkaat puhelimesi, hukkaat kaikki identiteettisi.

18 |

Voit tehdä varmuuskopioita identiteeteistäsi viemällä niiitä Asetukset -valikon kautta. Tämä tallentaa niistä kopion tiedostoon puhelimesi kestomuistiin. Tätä tiedostoa voi käyttää identiteettien palauttamiseksi tai siirtämiseksi toiseen laitteeseen.

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-fi/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Aloitus

5 |

Ensimmäiseksi tarvitset identiteetin. Luo sellainen ”Asetukset”-valikon kautta, tai tuo olemassa oleva identiteetti. Myöhemmin voit lisätä ystävien osoitteet copy-paste-menetelmällä, tai vaihtamalla niitä QR-koodien tai NFC:n avulla.

6 | 7 |

Android 4.4 -versiota vanhemmissa järjestelmissä on suositeltavaa asentaa OI File Manager tehokkaampaa tiedostojen valitsemista varten. Jakaaksesi QR -koodeilla asenna Barcode Scanner. Linkkejä napsauttamalla avautuu asennusta varten joko Google Play-sovellus tai F-Droid.

8 | 9 |

Löysin bugin Bote-ohjelmasta!

10 |

Ilmoita viasta käyttäen I2P-vikailmoituspalvelua.

11 | 12 |

Kotoistamiset

13 |

Auta Bote-ohjelman kotoistamisessa! Jokainen voi osallistua I2P Transifexissa.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-fr/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Débuter

5 |

D'abord vous aurez besoin d'une identité. Créez en une via le menu "Paramètres", ou importez une identité existante. Ensuite, vous pourrez ajouter les adresses de vos amis via copier/coller, ou les échanger via des QR Codes ou NFC.

6 | 7 |

Sur Android antérieur à 4.4, et il recommandé d'installer OI File Manager pour disposer d'une sélection de fichiers améliorée. Pour partager via QR Codes, installez Barcode Scanner. Cliquez sur les liens ouvrira Google Play Store ou F-Droid afin de permettre l'installation.

8 | 9 |

J'ai trouvé un bug dans Bote !

10 |

Veuillez signaler le bug (en anglais) en utilisant le I2P bug tracker.

11 | 12 |

Traductions

13 |

Aidez à traduire Bote ! Tout le monde peut participer via I2P sur Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-gl/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Comezando

5 |

Primeiro necesitarás unha identidade. Crea unha a través do menú de configuración ou importa unha identidade existente. A continuación poderás engadi-los enderezos das túas amizades cun simple copia-pega, intercambiándoos mediante códigos QR ou con NFC.

6 | 7 |

En versións de Android anteriores á 4.4 recoméndase instalar OI File Manager para unha selección de arquivos ampliada. Para compartir mediante códigos QR instalar Escáner de códigos de barras. Ó facer clic sobre as ligazóns lanzará Google Play Store ou F-Droid para a súa instalación.

8 | 9 |

Atopei un fallo en Bote!

10 |

Por favor reporta o fallo usando I2P bug tracker.

11 | 12 |

Traducións

13 |

¡Axuda a traducir Bote! Todo o mundo pode participar no proxecto I2P en Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-in/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Mari memulai

5 |

Pertama-tama anda memerlukan sebuah identitas. Buatlah satu identitas melalui menu "Setelan", atau impor identitas yang sudah ada. Setelah itu, anda dapat menambahkan alamat teman-teman anda dengan menyalin-tempel, atau bertukar melalui Kode QR atau NFC.

6 | 7 |

Pada Android dibawah 4.4, direkomendasikan agar memasang OI File Manager untuk pemilihan file yang lebih baik. Untuk berbagi melalui Kode QR silahkan pasaang Barcode Scanner. Mengklik tautan akan membuka Google Play Store atau F-Droid untuk pemasang.

8 | 9 |

Saya menemukan bug di Bote!

10 |

Silahkan laporkan bug dengan menggunakan I2P bug tracker.

11 | 12 |

Penerjemahan

13 |

Bantu menerjemahkan Bote! Semua orang bisa berpartisipasi di I2P di Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-it/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Come iniziare

5 |

First you need an identity. Create one via the "Settings" menu, or import an existing identity. Afterwards, you can add your friends' addresses by copy-paste, or exchange them via QR Codes or NFC.

6 | 7 |

On Android lower than 4.4, it is recommended that you install OI File Manager for enhanced file selection. To share via QR Codes install Barcode Scanner. Clicking on the links will open Google Play Store or F-Droid for installation.

8 | 9 |

Ho trovato un bug in Bote!

10 |

Per favore segnalaci il bug tramite I2P bug tracker.

11 | 12 |

Traduzioni

13 |

Aiuta la traduzione di Bote! Tutti possono aiutarci tramite I2P su Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-ko/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

신원이란 무엇입니까?

5 |

신원은 이메일 계정과 비슷합니다. 하지만 구글과 야후와 같이 계정을 컨트롤 할 중앙 매체가 없습니다.

6 | 7 |

목적지는 무엇입니까?

8 |

목적지는 이메일 주소와 비슷합니다. 친구들에게 나눠주고 나에게 이메일을 보내게 할 수 있죠.

9 | 10 |

왜 이렇게 이메일 주소가 길죠?

11 |

모든 이메일은 자동으로 암호화됩니다. 모든 이메일은 Public Key를 가지고 있습니다. 이는 이메일을 암호화하는데 사용됩니다. 이메일 주소는 암호화 알고리즘에 따라 길이가 유동적입니다.

12 | 13 |

가질 수 있는 신원에 제한이 있나요?

14 |

만들고 싶은대로 만드셔도 됩니다. 목적에 따라 말이죠.

15 | 16 |

신원은 언제 만료되나요?

17 |

평생입니다. 사용자가 Private Key를 가지고 있는 한, 평생 사용 가능합니다. 단 "계정 복구" 기능은 없다는 것을 명심하세요. 폰을 잃어버리면, 신원을 잃어버리는 겁니다.

18 |

"설정" 메뉴에서 신원을 내보낼 수 있습니다. 이 파일은 신원을 복구하는데 사용할 수 있고, 다른 디바이스들로 복사 가능합니다.

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-ko/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

시작해 볼까요

5 |

먼저 신원이 필요합니다. "설정" 메뉴에서 새로 만드시거나, 기존의 신원을 가져올 수 있습니다. 다음, 복사-붙여넣기 하거나 QR 코드, NFC를 통해 친구와 주소를 교환하십시오.

6 | 7 |

안드로이드 4.4 이하 단말기에서는 OI File Manager 를 설치하는 것을 추천합니다. QR 코드로 주소를 공유하기 위해서는 Barcode Scanner를 설치하세요. 주소를 클릭하면 구글 플레이스토어나 F-Droid 마켓으로 이동합니다.

8 | 9 |

버그를 발견했어요!

10 |

I2P bug tracker를 통해 버그를 제보해주세요.

11 | 12 |

번역

13 |

Bote를 번역하는 것을 도와주세요! 누구든지 지원 가능합니다. I2P on Transifex에 가입하셔서 도와주세요~ :D

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-nb/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Hva er en identitet?

5 |

En identitet er som en e-postkonto, men uten en tilbyder - du kan kontrollere kontoen din, istedenfor en tredjepart som Google eller Yahoo.

6 | 7 |

Hva er et mål?

8 |

Et mål er en adresse du gir til dine venner slik at de kan sende deg e-poster.

9 | 10 |

Hvorfor er e-postadressene så lange?

11 |

Hver e-post blir automatisk kryptert av Bote. Hver adresse inneholder et offentlig sett nøkler som brukes til å kryptere e-poster sendt til den adressen. Lengden på adressen avhenger av typen kryptering som brukes.

12 | 13 |

Er det en grense for hvor mange identiteter jeg kan ha?

14 |

Du kan ha så mange identiteter du vil, og du kan bruke forskjellige identiteter i forskjellige henseender.

15 | 16 |

Når utløper identiteter?

17 |

Aldri. Så lenge du har private nøkler for en identitet, kan du bruke den. Dette betyr også at det ikke er noen "konto-gjenoppretting" - hvis du mister telefonen din, mister du identitetene dine.

18 |

Du kan sikkerhetskopiere identitetene dine ved å eksportere dem fra "Innstillinger" i menyen. Dette lagrer en kopi av den i ei fil på din telefons lagringsmedie. Fila kan brukes til å gjenopprette dine identiteter, eller å flytte dem til en annen enhet.

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-nb/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Kom igang

5 |

Først trenger du en identitet. Opprett en via "Innstillinger"-menyen, eller importer en eksisterende identitet. Etterpå kan du legge til dine venners adresser eller kopiere og lime inn, eller utveksle med via QR-koder eller NFC.

6 | 7 |

På Android-versjoner lavere enn 4.4 anbefales det at du installerer OI filbehandler for forbedret filutvelgelse. For å dele QR-koder, installer Strekkodeskanner. Å klikke på lenker vil åpne Google Play-butikken eller F-droid for installasjon.

8 | 9 |

Jeg har funnet en feil i Bote!

10 |

Innrapporter en feil på I2P-feilsporingsplatformen.

11 | 12 |

Oversettelser

13 |

Hjelp til med å oversette Bote! Alle kan delta i I2P på Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-nl/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Aan de slag

5 |

Eerst moet je een identiteit aanmaken. Maak er een aan via het "Instellingen"-menu, of importeer een bestaande identiteit. Vervolgens kan je de adressen van je vrienden toevoegen door kopiëren-plakken, of door ze uit te wisselen via QR-codes of NFC.

6 | 7 |

Op Android-versies lager dan 4.4 raden we aan dat je OI File Manager installeert voor een verbeterde bestandsselectie. Om via QR codes te delen raden we aan dat je Barcode Scanner installeert. Wanneer je op deze links klikt zal F-Droid of Google Play Store worden geopend voor installatie.

8 | 9 |

Ik heb een bug in Bote gevonden!

10 |

Gelieve de bug de melden via de I2P-bug tracker.

11 | 12 |

Vertalingen

13 |

Help mee Bote te vertalen! Iedereen kan meewerken op I2P op Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-pl/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Czym jest Tożsamość?

5 |

Tożsamość działa jak regularne konto emailowe ale bez dostawcy - sam kontrolujesz swoje konto, nie tak jak ma to miejsce w przypadku firm takich jak Google czy Yahoo.

6 | 7 |

Czym jest Cel?

8 |

Cel jest adresem który podajesz swoim znajomym, by mogli wysyłać do Ciebie emaile.

9 | 10 |

Dlaczego adresy emailowe są tak długie?

11 |

Każdy email jest automatycznie szyfrowany przez Bote. Każdy adres zawiera grupe kluczy publicznych które są wykorzystywane do szyfrowania maili wysłanych pod ten adres. Długość adresu jest uzależniona od wybranej metody szyfrowania.

12 | 13 |

Czy jest limit ile tożsamości mogę utworzyć?

14 |

Możesz utworzyć tak wiele tożsamości na ile masz ochote oraz używać różnych tożsamości do różnych celów.

15 | 16 |

Kiedy tożsamość wygasa?

17 |

Nigdy. Tak długo jak posiadasz klucz prywanty Tożsamości tak długo możesz jej używać. Oznacza to również, że nie istnieje "odzyskiwanie konta" - jeśli zgubisz swój telefon stracisz swoje Tożsamości.

18 |

Możesz zapisać kopię swoich Tożsamości poprzez eksport w zakładce "Ustawienia". Kopia zostanie zapisana w pamięci Twojego telefonu i może posłużyć do odzyskania Tożsamości lub do przeniesienia jej na inne urządzenie.

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-pl/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Pierwsze kroki

5 |

Najpierw musisz stworzyć sobie tożsamość. Stwórz ją w menu "Ustawienia", lub zaimportuj istniejącą tożsamość. Po tym wszystkim możesz dodać adres kolegi metodą kopiuj-wklej, lub przesłać go używając kodów QR lub NFC.

6 | 7 |

Na Androidach w wersjach starszych niż 4.4 zaleca się instalację eksploratora plików OI File Manager. Aby dzielić się używając kodów QR zainstaluj Barcode Scanner. Kliknięcie w linki otworzy instalację w Sklepie Google Play lub F-Droidzie.

8 | 9 |

Znalazłem błąd w Bote!

10 |

Prosimy zgłosić błąd na stronie Systemu Raportowania Błędów I2P.

11 | 12 |

Tłumaczenia

13 |

Pomóż tłumaczyć Bote! Każdy może wziąć udział na I2P on Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-pt/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Iniciação

5 |

First you need an identity. Create one via the "Settings" menu, or import an existing identity. Afterwards, you can add your friends' addresses by copy-paste, or exchange them via QR Codes or NFC.

6 | 7 |

On Android lower than 4.4, it is recommended that you install OI File Manager for enhanced file selection. To share via QR Codes install Barcode Scanner. Clicking on the links will open Google Play Store or F-Droid for installation.

8 | 9 |

Eu encontrei um erro no Bote!

10 |

Por favor, reporte o erro, usando "rastrear erros I2P".

11 | 12 |

Traduções

13 |

Help translating Bote! Everybody can participate at I2P on Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-ro/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Ce este o Identitate?

5 |

An Identity is like an email account, but without a provider - you control your account, instead of a third party like Google or Yahoo.

6 | 7 |

Ce este o destinație?

8 |

A Destination is the address that you give to your friends so they can send you emails.

9 | 10 |

De ce este adresa de email așa de lungă?

11 |

Every email is automatically encrypted by Bote. Each address contains a set of public keys, which are used to encrypt emails sent to that address. The length of the address depends on the type of encryption used.

12 | 13 |

Există o limită a numărului de identități pe care le pot avea?

14 |

Puteți creea cât de multe identități doriți și puteți utiliza diferite identități pentru diferite scopuri.

15 | 16 |

Când expiră identitățile?

17 |

Never. As long as you have the private keys for an Identity, you can use it. This also means that there is no "account recovery" - if you lose your phone, you lose your Identities.

18 |

You can back up your Identities by exporting them from the "Settings" menu. This will save a copy of them to a file in your phone's storage. The file can be used to recover your Identities, or move them to another device.

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-ro/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Inceput

5 |

Inițial ai nevoie de o identitate. Creați-vă una din meniul Setări, sau importați una deja creată. După aceasta, puteți adăuga identitatea prietenilor prin copiere și lipire sau prin transfer de coduri QR sau NFC.

6 | 7 |

Pe distribuții mai vechi de 4,4 este recomandat să instalați OI Manager de fișiere pentru a îmbunătăți selecția fișierelor. Pentru a partaja prin coduri QR instalați Scanner coduri de bare . Dând click pe link se va deschide magazinul Google Play sau F-Droid pentru instalare.

8 | 9 |

Am găsit o eroare în Bote!

10 |

Vă rugăm să raportați eroarea la I2P bug tracker .

11 | 12 |

Traduceri

13 |

Ajutați la traducerea Bote! Fiecare poate participa la I2P on Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-ru/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Что такое идентификатор?

5 |

Идентификатор похож на адрес электронной почты, только без посредника: вы сами контролируете ваш аккаунт, а не третья сторона, как Google или Yahoo.

6 | 7 |

Что такое пункт назначения?

8 |

Пункт назначения — это адрес, который вы даете друзьям, чтобы они могли отправлять вам письма.

9 | 10 |

Почему адреса такие длинные?

11 |

Bote автоматически шифрует каждое письмо. Адрес содержит набор открытых ключей, которые используются для шифрования писем, отправляемых на этот адрес. Длина адреса зависит от используемого вида шифрования.

12 | 13 |

Есть ли ограничение на количество идентификаторов?

14 |

Вы можете создать столько идентификаторов, сколько хотите, и использовать различные идентификаторы для разных целей.

15 | 16 |

Когда заканчивается время действия идентификатора?

17 |

Никогда. Пока у вас есть закрытый ключ для идентификатора, вы можете им пользоваться. Это также означает, что возможность восстановить аккаунт отсутствует: если вы потеряете телефон, вы потеряете ключи и идентификаторы.

18 |

Вы можете создать резервную копию идентификаторов с помощью функции экспорта в меню "Настройки". В результате вы получите файл в хранилище вашего телефона. Файл можно использовать для восстановления идентифкаторов или переноса на другое устройство.

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-ru/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Начало работы

5 |

Для начала вам понадобится идентификатор. Создайте его в меню "Настройки" или импортируйте уже существующий. После этого вы сможете добавить адреса друзей, скопировав и вставив их, или обменяться ими с помощью QR-кодов или NFC.

6 | 7 |

На Android до версии 4.4 рекомендуется установить OI File Manager для удобства выбора файлов. Для использования QR-кодов установите Barcode Scanner. При нажатии на ссылку откроется Google Play Store или F-Droid.

8 | 9 |

Я нашёл ошибку в Bote!

10 |

Пожалуйста, сообщите об ошибке на багтрекере I2P.

11 | 12 |

Переводы

13 |

Помогите перевести Bote! Каждый может принять участие на странице I2P на Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-sq/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Si t’ia fillohet

5 |

Së pari ju duhet një identitet. Krijoni një të tillë përmes menusë "Rregullime", ose importoni një identitet ekzistues. Më pas, mund të shtoni adresat e miqve tuaj duke i kopjuar dhe hedhur këtu, ose t’i shkëmbeni ato përmes Kodesh QR ose NFC.

6 | 7 |

Në Android më të hershëm se 4.4, këshillohet të instaloni OI File Manager për përzgjedhje të thelluar kartelash. Që të ndani me të tjerët përmes Kodesh QR, instaloni Barcode Scanner. Klikimi mbi lidhjet do të hapë Google Play Store ose F-Droid për instalim.

8 | 9 |

Gjeta një të metë te Bote!

10 |

Ju lutemi, njoftojeni një të metë duke përdorur ndjekësin e të meta për I2P-në.

11 | 12 |

Përkthime

13 |

Ndihmoni të përkthehet Bote! Gjithkush mund të marrë pjesë te I2P në Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-sv/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Vad är en identitet?

5 |

En identitet är som ett e-post-konto, men utan någon leverantör - du kontrollerar ditt konto i stället för en tredje part som Google eller Yahoo.

6 | 7 |

Vad är en Destination?

8 |

En Destination är adressen du ger till dina vänner så att de kan skicka email till dig.

9 | 10 |

Varför är email-adresser så långa?

11 |

Varje mail krypteras automatiskt av Bote. Varje adress innehåller en uppsättning offentliga nycklar, vilka används för att kryptera email som skickas till den adressen. Adressens längd är beroende av vilken typ av kryptering som används.

12 | 13 |

Finns det en gräns för hur många Identiter jag kan ha?

14 |

Du kan skapa hur många Identiter du vill, och använda olika Identiteter för olika ändamål.

15 | 16 |

När blir Identiteter för gamla?

17 |

Aldrig. Så länge du har de privata nycklarna för en Identitet kan du använda den. Det innebär också att det inte finns någon "kontoåterställning" - om du förlorar din telefon förlorar du dina Identiteter.

18 |

Du kan göra en backup på dina Identiteter genom att exportera dem från "Inställningsmenyn". Detta kommer att skapa en kopia av dem i en fil på din telefons lagringsutrymme. Filen kan användas för att återskapa dina Identiteter, eller flytta dem till en annan enhet.

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-sv/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Komma igång

5 |

Först behöver du en identitet. Skapa en via menyn "Inställningar", eller importera en existerande identitet. Efteråt kan du lägga till vänners adresser genom att kopiera-klistra in, eller utbyta dem med QR-koder eller NFC.

6 | 7 |

På Androidversioner lägre än 4.4, rekommenderar vi att du installerar OI File Manager för att bättre kunna välja filer. För att dela via QR-koder, installera Barcode Scanner. När du klickar på länkarna öppnas Google Play Store eller F-Droid för installation.

8 | 9 |

Jag har hittat ett fel i Bote!

10 |

Var vänlig rapportera felet med hjälp av I2Ps bug tracker.

11 | 12 |

Översättningar

13 |

Hjälp till att översätta Bote! Alla kan delta på I2P Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-tr/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Kimlik nedir?

5 |

Bir kimlik, bir e*posta hesabı gibidir, ancak bir hizmet sağlayıcısı yoktur. Hesabınızı Google ya da Yahoo gibi başka biri yerine siz denetlersiniz.

6 | 7 |

Hedef nedir?

8 |

Bir hedef, e-posta göndermeleri için arkadaşlarınıza verebileceğiniz bir adrestir.

9 | 10 |

Neden e-posta adresleri bu kadar uzun?

11 |

Her e-posta Bote tarafından otomatik olarak şifrelenir. Her adreste bu adrese gönderilen e-postaları şifreleyen herkese açık bir anahtar kümesi bulunur. Adresin uzunluğu seçtiğiniz şifreleme türüne göre değişir.

12 | 13 |

Sahip olabileceğim kimlik sayısı sınırlı mıdır?

14 |

İstediğiniz kadar kimlik sahibi olabilir ve farklı amaçlar için farklı kimlikler kullanabilirsiniz.

15 | 16 |

Kimliklerin kullanım süresi ne zaman dolar?

17 |

Asla. Bir kimlik için kişisel anahtarlara sahip olduğunuz sürece o kimliği kullanabilirsiniz. Bunun bir başka anlamı da "hesap kurtarma" işleminin yapılamayacağıdır. Telefonunuzu kaydederseniz, kimliklerinizi kaybedersiniz

18 |

"Ayarlar" menüsünden kimliklerinizi vererek yedekleyebilirsiniz. Bu işlem kimlik bilgilerini telefon belleğindeki bir dosyaya kaydeder. Bu dosyayı başka bir aygıta aktararak kimliklerinizi yükleyebilirsiniz.

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-tr/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Başlarken

5 |

Başlamak için tek gerek duyacağınız şey bir kimliktir. "Ayarlar" menüsünden yeni bir kimlik oluşturun ya da barolan varolan bir kimliği alın. Ardından arkadaşlarınızın adreslerini kopyalayıp yapıştırarak, QR kodu ya da NFC kullanarak ekleyebilirsiniz.

6 | 7 |

Android 4.4 öncesi sürümlerde gelişmiş dosya seçimi yapabilmek için OI File Manager uygulamasını yüklemeniz önerilir. QR kodları ile paylaşabilmek için Barcode Scanner uygulamasını yükleyin. Bağlantılara tıklandığında yükleme için Google Play Store ya da F-Droid açılır.

8 | 9 |

Bote üzerinde bir hata buldum!

10 |

Lütfen bulduğunuz hataları I2P bug tracker üzerinden bildirin.

11 | 12 |

Çeviriler

13 |

Bote çevirisine yardımcı olun! Her isteyen Transifex üzerinde I2P çevirisine katkıda bulunabilir.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-uk/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Що таке ідентифікатор?

5 |

Ідентифікатор — це щось, схоже на поштовий аккаунт, але без центру, своїм аккаунтом керуєте ви, а не хтось інший, як наприклад Google чи Yahoo.

6 | 7 |

Що таке призначення?

8 |

Призначення — це адреса, яку ви даєте друзям і на яку вони можуть відправляти вам повідомлення.

9 | 10 |

Чому електронні адрси такі довгі?

11 |

Кожне повідомлення автоматично шифрується Bote'ом. Кожна адреса містить у собі набір відкритих ключів, якими шифруються надіслані на цю адресу. Довжина адреси залежить від використовуваного типу шифрування.

12 | 13 |

Чи є обмеження на кількість ідентифікаторів, які я можу мати?

14 |

Ви можете робити скільки завгодно ідентифікаторів і використовувати кожен для різних цілей.

15 | 16 |

Коли ідентифікатори закінчуються?

17 |

Ніколи. Поки ви маєте секретні ключі, ви можете його використовувати. Це також означає, що не існує такого, як відновлення аккаунту: втрачаєте телефон — втрачаєте й ідентифікатори.

18 |

Ви можете зробити резервну копію ідентифікаторів з меню налаштувань. Це створить їх копію в пам’яті телфона. Файл можна буде використати для відновлення ваших ідентифікаторів або переміщення їх на інший пристрій.

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-uk/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Розпочати

5 |

Спочатку вам потрібен ідентифікатор. Створіть через меню налаштувань або імпортуйте існуючий. Після цього ви зможете додавати адреси друзів, копіюючи й вставляючи їх або обмінюючись ними через QR-коди чи NFC.

6 | 7 |

На Android нижче 4.4 рекомендовано встановити OI File Manager для зручнішого вибору файлів. Щоб поділитись через QR-код, встановіть Barcode Scanner. Натискаючи на посилання, ви відкриєте Google Play Store чи F-Droid для встановлення.

8 | 9 |

Я знайшов помилку в Bote!

10 |

Будь ласка, повідомте про ваду на баг-трекері I2P.

11 | 12 |

Переклади

13 |

Допоможіть перекласти Bote! Кожен може взяти участь у I2P на Transifex.

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw-zh/help_identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

身份是什么?

5 |

身份就像是一个电子邮件帐户,但没有一个可以控制它的提供商 —— 取代第三者方服务商,如谷歌或雅虎帐户。

6 | 7 |

目标是什么?

8 |

所谓的目标就是一个供您的朋友可以发送邮件给您的邮箱地址

9 | 10 |

为什么电子邮件地址那么长?

11 |

每封电子邮件都是由 Bote 系统自动加密的。每个地址包含一组公开密钥,它用于加密发送电子邮件到该地址。该地址的长度取决于所用的加密类型。

12 | 13 |

我可以拥有的身份有数量限制吗?

14 |

你可以使用无限多的身份,并使用不同的名称用于不同的目的。

15 | 16 |

身份什么时候过期?

17 |

永不过期。只要您有一个身份的私钥,您可以一直使用它。这也意味着,没有“找回帐号” —— 如果您失去了您的手机,您也失去了您的身份。

18 |

您可以在“设置”菜单中将它们导出以备份您的身份。这将使它们的副本保存在您的手机存储空间的一个文件中。该文件可用于恢复您的身份,或将其移动到另一台设备。

19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/raw-zh/help_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

入门

5 |

首先,你需要一个身份。通过“设置”菜单创建一个,或导入现有的身份。之后,你可以通过复制粘贴添加您的朋友的地址,或通过QR码或是NFC交换。

6 | 7 |

如果你的安卓系统版本低于4.4,我们建议您安装 OI文件管理器 增强文件选择功能。通过QR码分享,安装条码扫描器。点击链接会打开Google Play应用商店或者F-Droid以供安装。

8 | 9 |

找到了Bote的bug了!

10 |

请使用 I2P 缺陷跟踪系统进行报告。

11 | 12 |

译者

13 |

帮忙翻译 Bote!每个人都可以在 Transifex 的 I2P 项目上参与翻译

14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/src/main/res/raw/help_start.html: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 |

Getting started

9 |

First you need an identity. Create one via the "Settings" menu, or import an existing identity. Afterwards, you can add your friends' addresses by copy-paste, or exchange them via QR Codes or NFC.

10 | 11 |

On Android lower than 4.4, it is recommended that you install OI File Manager for enhanced file selection. To share via QR Codes install Barcode Scanner. Clicking on the links will open Google Play Store or F-Droid for installation.

12 | 13 |

I found a bug in Bote!

14 |

Please report the bug using the I2P bug tracker.

15 | 16 |

Translations

17 |

Help translating Bote! Everybody can participate at I2P on Transifex.

18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /android/src/main/res/values-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 112dp 4 | -------------------------------------------------------------------------------- /android/src/main/res/values-sw600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 400dp 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/src/main/res/values-sw720dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 128dp 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/src/main/res/values-v11/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @android:dimen/notification_large_icon_width 4 | @android:dimen/notification_large_icon_height 5 | -------------------------------------------------------------------------------- /android/src/main/res/values-v14/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /android/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /android/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /android/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /android/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #3f51b5 5 | #303f9f 6 | #ffab40 7 | #ff9100 8 | 9 | #e0e0e0 10 | #bdbdbd 11 | #c31756 12 | #f00 13 | #e51e25 14 | 15 | #4caf50 16 | #f44336 17 | 18 | #B2000000 19 | 20 | @android:color/black 21 | 22 | -------------------------------------------------------------------------------- /android/src/main/res/values/refs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @drawable/listitem_background_selector 4 | -------------------------------------------------------------------------------- /android/src/main/res/xml/settings_advanced.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/src/main/res/xml/settings_app_protection.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 13 | 14 | -------------------------------------------------------------------------------- /android/src/main/res/xml/settings_appearance.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | -------------------------------------------------------------------------------- /android/src/main/res/xml/settings_network.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 15 | 16 | 21 | 22 | -------------------------------------------------------------------------------- /core/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'java-library' 2 | 3 | archivesBaseName = 'i2pbote' 4 | 5 | dependencies { 6 | implementation project(':crypto') 7 | 8 | api "net.i2p:i2p:$rootProject.i2pVersion" 9 | implementation "net.i2p.client:streaming:$rootProject.i2pVersion" 10 | 11 | api 'com.sun.mail:mailapi:1.6.3' 12 | implementation 'com.sun.activation:jakarta.activation:1.2.1' 13 | implementation 'com.lambdaworks:scrypt:1.4.0' 14 | implementation 'org.apache.james:apache-mime4j-core:0.8.3' 15 | implementation 'org.b1.pack:lzma-sdk-4j:9.22.0' 16 | implementation 'org.bouncycastle:bcprov-jdk15on:1.58' 17 | 18 | testImplementation 'junit:junit:4.12' 19 | testImplementation 'org.jmock:jmock:2.11.0' 20 | testImplementation 'org.jmock:jmock-legacy:2.11.0' 21 | testImplementation 'org.mockito:mockito-core:2.27.0' 22 | } 23 | 24 | test { 25 | exclude 'i2p/bote/AllTests.class' 26 | } 27 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/MailSender.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote; 23 | 24 | import i2p.bote.email.Email; 25 | import i2p.bote.fileencryption.PasswordException; 26 | 27 | import java.io.IOException; 28 | import java.security.GeneralSecurityException; 29 | 30 | import javax.mail.MessagingException; 31 | 32 | import net.i2p.data.DataFormatException; 33 | 34 | public interface MailSender { 35 | 36 | void sendEmail(Email email) throws MessagingException, PasswordException, IOException, GeneralSecurityException; 37 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/addressbook/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Implementation of the local address book. 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/crypto/KeyUpdateHandler.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.crypto; 23 | 24 | import i2p.bote.fileencryption.PasswordException; 25 | 26 | import java.io.IOException; 27 | import java.security.GeneralSecurityException; 28 | 29 | /** 30 | * Called when a private key in an Email Identity was changed and 31 | * needs to be written back to the identities file. 32 | */ 33 | public interface KeyUpdateHandler { 34 | 35 | void updateKey() throws GeneralSecurityException, PasswordException, IOException; 36 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/crypto/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes for asymmetric cryptography 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/crypto/wordlist/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Word lists for each locale and a class to access them. 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/email/Attachment.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2014 str4d@mail.i2p 3 | * 4 | * This file is part of I2P-Bote. 5 | * I2P-Bote is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * I2P-Bote is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with I2P-Bote. If not, see . 17 | */ 18 | 19 | package i2p.bote.email; 20 | 21 | import javax.activation.DataHandler; 22 | 23 | public interface Attachment { 24 | public String getFileName(); 25 | public DataHandler getDataHandler(); 26 | public boolean clean(); 27 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/email/EmailAttribute.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.email; 23 | 24 | /** 25 | * A email header field such as "To" or "Subject". 26 | * STATUS is special. It is not a header field, and it is only used by {@link i2p.bote.folder.Outbox}. 27 | * 28 | * I would have made this an inner class of Email, but Tomcat doesn't like inner classes in JSP functions. 29 | */ 30 | public enum EmailAttribute {FROM, TO, SUBJECT, DATE, CREATE_TIME, DELIVERED, STATUS} -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/email/IdentitiesListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2015 str4d@mail.i2p 3 | * 4 | * This file is part of I2P-Bote. 5 | * I2P-Bote is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * I2P-Bote is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with I2P-Bote. If not, see . 17 | */ 18 | 19 | package i2p.bote.email; 20 | 21 | /** Listens to identities being added or removed. */ 22 | public interface IdentitiesListener { 23 | 24 | void identityAdded(String key); 25 | 26 | void identityUpdated(String key); 27 | 28 | void identityRemoved(String key); 29 | } 30 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/email/NoIdentityForSenderException.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.email; 2 | 3 | import javax.mail.MessagingException; 4 | 5 | public class NoIdentityForSenderException extends MessagingException { 6 | private String sender; 7 | 8 | public NoIdentityForSenderException(String sender) { 9 | super(); 10 | this.sender = sender; 11 | } 12 | 13 | public String getSender() { 14 | return sender; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/email/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes that represent emails, email metadata, email destinations, etc. 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/fileencryption/PasswordCacheListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.fileencryption; 23 | 24 | public interface PasswordCacheListener { 25 | 26 | /** 27 | * Called after the user enters a password (which may or may not be correct), 28 | * but before any encrypted files are accessed. 29 | */ 30 | void passwordProvided(); 31 | 32 | /** Called when the user chooses to clear the password, or the cache expires. */ 33 | void passwordCleared(); 34 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/fileencryption/PasswordException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.fileencryption; 23 | 24 | /** 25 | * This exception is thrown when a password is invalid or missing. 26 | */ 27 | public class PasswordException extends Exception { 28 | private static final long serialVersionUID = 9105407855443550137L; 29 | 30 | public PasswordException() { 31 | } 32 | 33 | public PasswordException(String message) { 34 | super(message); 35 | } 36 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/fileencryption/PasswordHolder.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.fileencryption; 23 | 24 | import java.io.IOException; 25 | import java.security.GeneralSecurityException; 26 | 27 | public interface PasswordHolder { 28 | 29 | byte[] getPassword(); 30 | 31 | DerivedKey getKey() throws IOException, GeneralSecurityException; 32 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/fileencryption/PasswordIncorrectException.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.fileencryption; 2 | 3 | public class PasswordIncorrectException extends PasswordException { 4 | public PasswordIncorrectException() { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/fileencryption/PasswordMismatchException.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.fileencryption; 2 | 3 | public class PasswordMismatchException extends PasswordException { 4 | public PasswordMismatchException() { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/fileencryption/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes for encrypting local files with a password. 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/folder/EmailFolderManager.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.folder; 23 | 24 | import java.util.List; 25 | 26 | public interface EmailFolderManager { 27 | 28 | List getEmailFolders(); 29 | 30 | boolean deleteEmail(EmailFolder folder, String messageId); 31 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/folder/ExpirationListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.folder; 23 | 24 | /** Interface for folders whose content expires */ 25 | public interface ExpirationListener { 26 | final static long EXPIRATION_TIME_MILLISECONDS = 100 * 24 * 3600 * 1000L; // keep for up to 100 days 27 | 28 | /** Deletes any expired content */ 29 | void deleteExpired(); 30 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/folder/FolderIterator.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.folder; 23 | 24 | import i2p.bote.fileencryption.PasswordException; 25 | 26 | /** 27 | * Same as {@link java.util.Iterator}, except hasNext() and 28 | * next() can throw a PasswordException. 29 | * @param 30 | */ 31 | public interface FolderIterator { 32 | 33 | boolean hasNext() throws PasswordException; 34 | 35 | T next() throws PasswordException; 36 | 37 | void remove(); 38 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/folder/FolderListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.folder; 23 | 24 | /** Listens to elements being added or removed from a {@link EmailFolder}. */ 25 | public interface FolderListener { 26 | 27 | void elementAdded(String messageId); 28 | 29 | void elementUpdated(); 30 | 31 | void elementRemoved(String messageId); 32 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/folder/NewEmailListener.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.folder; 2 | 3 | /** Listens to emails being received. */ 4 | public interface NewEmailListener { 5 | 6 | void emailReceived(String messageId); 7 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/folder/TrashFolder.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.folder; 23 | 24 | import i2p.bote.fileencryption.PasswordHolder; 25 | 26 | import java.io.File; 27 | 28 | /** 29 | * Subclassed for distinction between folders that move emails to 30 | * the trash, and the trash folder which deletes them permanently. 31 | */ 32 | public class TrashFolder extends EmailFolder { 33 | 34 | public TrashFolder(File storageDir, PasswordHolder passwordHolder) { 35 | super(storageDir, passwordHolder); 36 | } 37 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/folder/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Folders store emails and I2P datagrams. 4 | 5 | 6 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/migration/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Code for migrating local files to newer versions of I2P-Bote. 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/network/BanReason.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.network; 2 | 3 | public class BanReason { 4 | public enum Reason { 5 | WRONG_PROTO_VER, 6 | } 7 | 8 | private Reason reason; 9 | private String[] args; 10 | 11 | public BanReason(Reason reason, String... args) { 12 | this.reason = reason; 13 | this.args = args; 14 | } 15 | 16 | public Reason getReason() { 17 | return reason; 18 | } 19 | 20 | public String[] getArgs() { 21 | return args; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/network/DhtException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.network; 23 | 24 | public class DhtException extends Exception { 25 | private static final long serialVersionUID = -1286128818859245017L; 26 | 27 | public DhtException(String message) { 28 | super(message); 29 | } 30 | 31 | public DhtException(String message, Throwable cause) { 32 | super(message, cause); 33 | } 34 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/network/DhtPeerSource.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.network; 23 | 24 | import java.util.Collection; 25 | 26 | import net.i2p.data.Destination; 27 | 28 | /** 29 | * An interface through which a DHT implementation can 30 | * get additional peers. 31 | */ 32 | public interface DhtPeerSource { 33 | 34 | Collection getPeers(); 35 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/network/DhtPeerStatsRenderer.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2017 str4d@mail.i2p 3 | * 4 | * This file is part of I2P-Bote. 5 | * I2P-Bote is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * I2P-Bote is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with I2P-Bote. If not, see . 17 | */ 18 | 19 | package i2p.bote.network; 20 | 21 | /** 22 | * A factory for creating 23 | */ 24 | public interface DhtPeerStatsRenderer { 25 | 26 | String translateHeading(DhtPeerStats.Columns column); 27 | 28 | String translateContent(DhtPeerStats.Content content); 29 | } 30 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/network/DhtPeerStatsRow.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2017 str4d@mail.i2p 3 | * 4 | * This file is part of I2P-Bote. 5 | * I2P-Bote is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * I2P-Bote is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with I2P-Bote. If not, see . 17 | */ 18 | 19 | package i2p.bote.network; 20 | 21 | import java.util.List; 22 | 23 | /** 24 | * Holds information on a single peer's data, for displaying in the UI. 25 | */ 26 | public interface DhtPeerStatsRow { 27 | 28 | boolean isReachable(); 29 | 30 | /** 31 | * Returns the data in each cell as a String. 32 | */ 33 | List toStrings(); 34 | } 35 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/network/NetworkStatus.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.network; 23 | 24 | // TODO comment 25 | public enum NetworkStatus { 26 | 27 | NOT_STARTED, DELAY, CONNECTING, CONNECTED, ERROR; 28 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/network/NetworkStatusListener.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.network; 2 | 3 | public interface NetworkStatusListener { 4 | 5 | /** 6 | * Called when the network status changes. 7 | */ 8 | void networkStatusChanged(); 9 | } 10 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/network/PacketListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.network; 23 | 24 | import i2p.bote.packet.CommunicationPacket; 25 | 26 | import java.util.EventListener; 27 | 28 | import net.i2p.data.Destination; 29 | 30 | public interface PacketListener extends EventListener { 31 | 32 | void packetReceived(CommunicationPacket packet, Destination sender, long receiveTime); 33 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/network/PeerFileAnchor.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.network; 23 | 24 | import java.net.URL; 25 | 26 | /** 27 | * A resource anchor for the built-in peer file. 28 | */ 29 | public class PeerFileAnchor { 30 | 31 | public static URL getBuiltInPeersFile() { 32 | return PeerFileAnchor.class.getResource("built-in-peers.txt"); 33 | } 34 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/network/kademlia/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The Kademlia implementation. 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/network/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Code used for communicating with peers; also contains generic DHT classes 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Contains the main class and a few classes that didn't fit anywhere else. 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/packet/EmptyResponse.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.packet; 23 | 24 | public class EmptyResponse extends DataPacket { 25 | 26 | @Override 27 | public byte[] toByteArray() { 28 | return new byte[0]; 29 | } 30 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/packet/MalformedCommunicationPacket.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.packet; 23 | 24 | /** 25 | * Represents an invalid packet that a peer sent. 26 | */ 27 | public class MalformedCommunicationPacket extends CommunicationPacket { 28 | 29 | public MalformedCommunicationPacket() { 30 | } 31 | 32 | @Override 33 | public byte[] toByteArray() { 34 | throw new UnsupportedOperationException(); 35 | } 36 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/packet/MalformedDataPacket.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.packet; 23 | 24 | public class MalformedDataPacket extends DataPacket { 25 | 26 | @Override 27 | public byte[] toByteArray() { 28 | throw new UnsupportedOperationException(); 29 | } 30 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/packet/MalformedPacketException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.packet; 23 | 24 | /** 25 | * Thown when a packet cannot be decoded from a byte array. 26 | */ 27 | public class MalformedPacketException extends Exception { 28 | private static final long serialVersionUID = -600763395717614292L; 29 | 30 | public MalformedPacketException(String message) { 31 | super(message); 32 | } 33 | 34 | public MalformedPacketException(String message, Throwable cause) { 35 | super(message, cause); 36 | } 37 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/packet/StatusCode.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.packet; 23 | 24 | public enum StatusCode { 25 | OK, GENERAL_ERROR, NO_DATA_FOUND, INVALID_PACKET, INVALID_HASHCASH, INSUFFICIENT_HASHCASH, NO_DISK_SPACE; 26 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/packet/TypeCode.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.packet; 23 | 24 | import java.lang.annotation.ElementType; 25 | import java.lang.annotation.Retention; 26 | import java.lang.annotation.RetentionPolicy; 27 | import java.lang.annotation.Target; 28 | 29 | /** 30 | * This annotation assigns a char to an {@link I2PBotePacket}. 31 | */ 32 | @Retention(RetentionPolicy.RUNTIME) 33 | @Target(ElementType.TYPE) 34 | public @interface TypeCode { 35 | char value(); 36 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/packet/dht/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Packet types for the DHT. 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/packet/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Packet types for communicating with peers 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/packet/relay/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Packet types for communicating via relays 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/service/ApiService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2016 str4d@mail.i2p 3 | * 4 | * This file is part of I2P-Bote. 5 | * I2P-Bote is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * I2P-Bote is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with I2P-Bote. If not, see . 17 | */ 18 | 19 | package i2p.bote.service; 20 | 21 | public interface ApiService { 22 | public static final int IMAP = 0; 23 | public static final int SMTP = 1; 24 | 25 | public void start(int type); 26 | public void stop(int type); 27 | public void stopAll(); 28 | public void printRunningThreads(); 29 | } 30 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/service/OutboxListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.service; 23 | 24 | import i2p.bote.email.Email; 25 | 26 | public interface OutboxListener { 27 | 28 | void emailSent(Email email); 29 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/service/POP3Service.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.service; 23 | 24 | import net.i2p.util.I2PAppThread; 25 | 26 | public class POP3Service extends I2PAppThread { 27 | 28 | public POP3Service() { 29 | super("POP3Service"); 30 | } 31 | 32 | @Override 33 | public void run() { 34 | } 35 | } -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/service/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Background tasks 5 | 6 | 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/status/ChangeIdentityStatus.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.status; 2 | 3 | public enum ChangeIdentityStatus { 4 | GENERATING_KEYS, 5 | SAVING_IDENTITY, 6 | } 7 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/status/ChangePasswordStatus.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.status; 2 | 3 | public enum ChangePasswordStatus { 4 | CHECKING_PASSWORD, 5 | RE_ENCRYPTING_IDENTITIES, 6 | RE_ENCRYPTING_ADDRESS_BOOK, 7 | RE_ENCRYPTING_FOLDER, 8 | UPDATING_PASSWORD_FILE, 9 | } 10 | -------------------------------------------------------------------------------- /core/src/main/java/i2p/bote/status/StatusListener.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.status; 2 | 3 | /** 4 | * Listens to general status updates from methods. 5 | */ 6 | public interface StatusListener { 7 | 8 | void updateStatus(Status status, String... args); 9 | } 10 | -------------------------------------------------------------------------------- /core/src/main/scripts/decrypt.bat: -------------------------------------------------------------------------------- 1 | REM This script only works if I2P is installed in the standard directory 2 | @java -cp "%PROGRAMFILES%\\i2p\\lib\\i2p.jar;i2pbote.jar;scrypt-1.4.0.jar" i2p.bote.fileencryption.Decrypt %* 3 | -------------------------------------------------------------------------------- /core/src/main/scripts/decrypt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | java -cp $I2P/lib/i2p.jar:`dirname $0`/i2pbote.jar:`dirname $0`/scrypt-1.4.0.jar i2p.bote.fileencryption.Decrypt $@ 3 | -------------------------------------------------------------------------------- /core/src/main/scripts/encrypt.bat: -------------------------------------------------------------------------------- 1 | REM This script only works if I2P is installed in the standard directory 2 | @java -cp "%PROGRAMFILES%\\i2p\\lib\\i2p.jar;i2pbote.jar;scrypt-1.4.0.jar" i2p.bote.fileencryption.Encrypt %* 3 | -------------------------------------------------------------------------------- /core/src/main/scripts/encrypt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | java -cp $I2P/lib/i2p.jar:`dirname $0`/i2pbote.jar:`dirname $0`/scrypt-1.4.0.jar i2p.bote.fileencryption.Encrypt $@ 3 | -------------------------------------------------------------------------------- /core/src/main/scripts/fileinfo.bat: -------------------------------------------------------------------------------- 1 | REM This scrypt only works if I2P is installed in the standard directory 2 | @java -cp "%PROGRAMFILES%\\i2p\\lib\\i2p.jar;i2pbote.jar" i2p.bote.fileencryption.FileInfo %* 3 | -------------------------------------------------------------------------------- /core/src/main/scripts/fileinfo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | java -cp $I2P/lib/i2p.jar:`dirname $0`/i2pbote.jar i2p.bote.fileencryption.FileInfo $@ 3 | -------------------------------------------------------------------------------- /core/src/test/resources/i2p/bote/packet/dht/Struwwelpeter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/core/src/test/resources/i2p/bote/packet/dht/Struwwelpeter.jpg -------------------------------------------------------------------------------- /crypto/build.gradle: -------------------------------------------------------------------------------- 1 | // http://tools.android.com/tech-docs/new-build-system/tips#TOC-Handling-transitive-dependencies-for-local-artifacts-jars-and-aar- 2 | configurations.create('default') 3 | artifacts.add('default', file('libs/flexi-gmss-1.7p1.jar')) 4 | artifacts.add('default', file('libs/ntruenc-1.2.jar')) 5 | -------------------------------------------------------------------------------- /crypto/libs/flexi-gmss-1.7p1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/crypto/libs/flexi-gmss-1.7p1.jar -------------------------------------------------------------------------------- /crypto/libs/ntruenc-1.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/crypto/libs/ntruenc-1.2.jar -------------------------------------------------------------------------------- /doc/manual.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/doc/manual.odt -------------------------------------------------------------------------------- /doc/manual_fr.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/doc/manual_fr.odt -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Override these in ~/.gradle/gradle.properties if necessary 2 | java7BootClasspath= 3 | -------------------------------------------------------------------------------- /gradle/signing.gradle: -------------------------------------------------------------------------------- 1 | android { 2 | signingConfigs { 3 | release 4 | } 5 | buildTypes { 6 | release { 7 | signingConfig signingConfigs.release 8 | } 9 | } 10 | } 11 | 12 | def Properties props = new Properties() 13 | def propFile = new File(project.rootDir, 'signing.properties') 14 | 15 | if (propFile.canRead()) { 16 | props.load(new FileInputStream(propFile)) 17 | 18 | if (props != null && 19 | props.containsKey('STORE_FILE') && 20 | props.containsKey('STORE_PASSWORD') && 21 | props.containsKey('KEY_ALIAS') && 22 | props.containsKey('KEY_PASSWORD')) { 23 | android.signingConfigs.release.storeFile = file(props['STORE_FILE']) 24 | android.signingConfigs.release.storePassword = props['STORE_PASSWORD'] 25 | android.signingConfigs.release.keyAlias = props['KEY_ALIAS'] 26 | android.signingConfigs.release.keyPassword = props['KEY_PASSWORD'] 27 | } else { 28 | println 'signing.properties found but some entries are missing' 29 | android.buildTypes.release.signingConfig = null 30 | } 31 | } else { 32 | println 'signing.properties not found' 33 | android.buildTypes.release.signingConfig = null 34 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | LICENSES 2 | -------- 3 | 4 | This software is licensed under the GPL version 3 (see licenses/GPLv3.txt), 5 | except for: 6 | 7 | - bcprov-jdk15on-152.jar which is licensed under the Bouncy Castle License 8 | (see licenses/BouncyCastle.txt). 9 | - nl.jteam.tls.StrongTls which is licensed under the Apache License, Version 10 | 2.0 (see licenses/LICENSE-Apache2.0.txt). 11 | 12 | Several Android libraries and classes are licensed under the Apache License, 13 | Version 2.0 (see licenses/LICENSE-Apache2.0.txt). The full list of libraries 14 | in use can be found in android/src/main/res/raw/help_about_libraries.html 15 | 16 | Images used in the introduction are adapted from the Free Software Foundation 17 | Email Self-Defense guide (https://emailselfdefense.fsf.org/), and are licensed 18 | under the Creative Commons Attribution 4.0 license (or later version) (see 19 | https://creativecommons.org/licenses/by/4.0/). 20 | -------------------------------------------------------------------------------- /licenses/BouncyCastle.txt: -------------------------------------------------------------------------------- 1 | License 2 | 3 | Copyright (c) 2000 - 2009 The Legion Of The Bouncy Castle 4 | (http://www.bouncycastle.org) 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy of 7 | this software and associated documentation files (the "Software"), to deal in 8 | the Software without restriction, including without limitation the rights to 9 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 10 | of the Software, and to permit persons to whom the Software is furnished to do 11 | so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include 'crypto', 'core', 'webapp' 2 | 3 | def localPropsFile = new File('local.properties') 4 | if (localPropsFile.canRead()) { 5 | def Properties props = new Properties() 6 | props.load(new FileInputStream(localPropsFile)) 7 | 8 | if (props != null && props.containsKey('sdk.dir')) { 9 | include 'android' 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /webapp/src/main/java/i2p/bote/imap/BoteMailboxId.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.imap; 2 | 3 | import org.apache.james.mailbox.model.MailboxId; 4 | 5 | class BoteMailboxId implements MailboxId { 6 | private final String folderName; 7 | 8 | BoteMailboxId(String folderName) { 9 | this.folderName = folderName; 10 | } 11 | 12 | @Override 13 | public String serialize() { 14 | return folderName; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /webapp/src/main/java/i2p/bote/imap/BoteMessageId.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.imap; 2 | 3 | import org.apache.james.mailbox.model.MessageId; 4 | 5 | import i2p.bote.UniqueId; 6 | 7 | class BoteMessageId implements MessageId { 8 | private final String mid; 9 | 10 | BoteMessageId(String mid) { 11 | this.mid = mid; 12 | } 13 | 14 | static class Factory implements MessageId.Factory { 15 | @Override 16 | public MessageId fromString(String serialized) { 17 | return new BoteMessageId(serialized); 18 | } 19 | 20 | @Override 21 | public MessageId generate() { 22 | return new BoteMessageId(new UniqueId().toBase64()); 23 | } 24 | } 25 | 26 | @Override 27 | public String serialize() { 28 | return mid; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /webapp/src/main/java/i2p/bote/service/seedless/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Background tasks for interfacing with Seedless 5 | 6 | 7 | -------------------------------------------------------------------------------- /webapp/src/main/java/i2p/bote/web/ClearPasswordCacheTag.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.web; 23 | 24 | import i2p.bote.I2PBote; 25 | 26 | import javax.servlet.jsp.tagext.SimpleTagSupport; 27 | 28 | public class ClearPasswordCacheTag extends SimpleTagSupport { 29 | 30 | @Override 31 | public void doTag() { 32 | I2PBote.getInstance().clearPassword(); 33 | } 34 | } -------------------------------------------------------------------------------- /webapp/src/main/java/i2p/bote/web/ConnectTag.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.web; 23 | 24 | import i2p.bote.I2PBote; 25 | 26 | import javax.servlet.jsp.tagext.SimpleTagSupport; 27 | 28 | public class ConnectTag extends SimpleTagSupport { 29 | 30 | @Override 31 | public void doTag() { 32 | I2PBote.getInstance().connectNow(); 33 | } 34 | } -------------------------------------------------------------------------------- /webapp/src/main/java/i2p/bote/web/SaveConfigurationTag.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.web; 23 | 24 | import i2p.bote.I2PBote; 25 | 26 | import javax.servlet.jsp.tagext.SimpleTagSupport; 27 | 28 | public class SaveConfigurationTag extends SimpleTagSupport { 29 | 30 | @Override 31 | public void doTag() { 32 | I2PBote.getInstance().getConfiguration().save(); 33 | } 34 | } -------------------------------------------------------------------------------- /webapp/src/main/java/i2p/bote/web/SaveIdentitiesTag.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.web; 23 | 24 | import i2p.bote.I2PBote; 25 | 26 | import javax.servlet.jsp.JspException; 27 | import javax.servlet.jsp.tagext.SimpleTagSupport; 28 | 29 | public class SaveIdentitiesTag extends SimpleTagSupport { 30 | 31 | @Override 32 | public void doTag() throws JspException { 33 | try { 34 | I2PBote.getInstance().getIdentities().save(); 35 | } 36 | catch (Exception e) { 37 | throw new JspException(e); 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /webapp/src/main/java/i2p/bote/web/WaitForPasswordChangeTag.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.web; 23 | 24 | import i2p.bote.I2PBote; 25 | 26 | import javax.servlet.jsp.JspException; 27 | import javax.servlet.jsp.tagext.SimpleTagSupport; 28 | 29 | public class WaitForPasswordChangeTag extends SimpleTagSupport { 30 | 31 | @Override 32 | public void doTag() throws JspException { 33 | try { 34 | I2PBote.getInstance().waitForPasswordChange(); 35 | } catch (Throwable e) { 36 | throw new JspException(e); 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /webapp/src/main/java/i2p/bote/web/WebappUtil.java: -------------------------------------------------------------------------------- 1 | package i2p.bote.web; 2 | 3 | import net.i2p.I2PAppContext; 4 | import net.i2p.util.Translate; 5 | 6 | public class WebappUtil { 7 | private static final String BUNDLE_NAME = "i2p.bote.locale.Messages"; 8 | 9 | public static String _t(String messageKey) { 10 | return Translate.getString(messageKey, I2PAppContext.getGlobalContext(), BUNDLE_NAME); 11 | } 12 | 13 | public static String _t(String messageKey, Object parameter) { 14 | return Translate.getString(messageKey, parameter, I2PAppContext.getGlobalContext(), BUNDLE_NAME); 15 | } 16 | 17 | public static String _t(String messageKey, Object parameter1, Object parameter2) { 18 | return Translate.getString(messageKey, parameter1, parameter2, I2PAppContext.getGlobalContext(), BUNDLE_NAME); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /webapp/src/main/java/i2p/bote/web/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Code for the web interface 5 | 6 | 7 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Class-Path: 3 | 4 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/WEB-INF/classes/javax/annotation/concurrent/GuardedBy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/WEB-INF/classes/javax/annotation/concurrent/GuardedBy.class -------------------------------------------------------------------------------- /webapp/src/main/webapp/checkMail.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Copyright (C) 2009 HungryHobo@mail.i2p 3 | 4 | The GPG fingerprint for HungryHobo@mail.i2p is: 5 | 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | 7 | This file is part of I2P-Bote. 8 | I2P-Bote is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation, either version 3 of the License, or 11 | (at your option) any later version. 12 | 13 | I2P-Bote is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with I2P-Bote. If not, see . 20 | --%> 21 | 22 | <%@ page language="java" contentType="text/html; charset=UTF-8" 23 | pageEncoding="UTF-8"%> 24 | 25 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 26 | <%@ taglib prefix="ib" uri="I2pBoteTags" %> 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/clearPasswordCache.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Copyright (C) 2009 HungryHobo@mail.i2p 3 | 4 | The GPG fingerprint for HungryHobo@mail.i2p is: 5 | 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | 7 | This file is part of I2P-Bote. 8 | I2P-Bote is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation, either version 3 of the License, or 11 | (at your option) any later version. 12 | 13 | I2P-Bote is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with I2P-Bote. If not, see . 20 | --%> 21 | 22 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 23 | 24 | <%@ taglib prefix="ib" uri="I2pBoteTags" %> 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/connect.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Copyright (C) 2009 HungryHobo@mail.i2p 3 | 4 | The GPG fingerprint for HungryHobo@mail.i2p is: 5 | 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | 7 | This file is part of I2P-Bote. 8 | I2P-Bote is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation, either version 3 of the License, or 11 | (at your option) any later version. 12 | 13 | I2P-Bote is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with I2P-Bote. If not, see . 20 | --%> 21 | 22 | <%@ page language="java" contentType="text/html; charset=UTF-8" 23 | pageEncoding="UTF-8"%> 24 | 25 | <%@ taglib prefix="ib" uri="I2pBoteTags" %> 26 | 27 | 28 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/csrfError.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Copyright (C) 2009 HungryHobo@mail.i2p 3 | 4 | The GPG fingerprint for HungryHobo@mail.i2p is: 5 | 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | 7 | This file is part of I2P-Bote. 8 | I2P-Bote is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation, either version 3 of the License, or 11 | (at your option) any later version. 12 | 13 | I2P-Bote is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with I2P-Bote. If not, see . 20 | --%> 21 | 22 | <%@ page language="java" contentType="text/html; charset=UTF-8" 23 | pageEncoding="UTF-8"%> 24 | 25 | <%@ taglib prefix="ib" uri="I2pBoteTags" %> 26 | 27 | 28 | 29 | 30 | 31 |

32 | ${ib:csrfErrorMsg()} 33 | 34 | 35 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/faq.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Copyright (C) 2015 str4d@mail.i2p 3 | 4 | This file is part of I2P-Bote. 5 | I2P-Bote is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | I2P-Bote is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with I2P-Bote. If not, see . 17 | --%> 18 | 19 | <%@ page language="java" contentType="text/html; charset=UTF-8" 20 | pageEncoding="UTF-8"%> 21 | 22 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 23 | <%@ taglib prefix="ib" uri="I2pBoteTags" %> 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/footer.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Copyright (C) 2009 HungryHobo@mail.i2p 3 | 4 | The GPG fingerprint for HungryHobo@mail.i2p is: 5 | 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | 7 | This file is part of I2P-Bote. 8 | I2P-Bote is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation, either version 3 of the License, or 11 | (at your option) any later version. 12 | 13 | I2P-Bote is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with I2P-Bote. If not, see . 20 | --%> 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Copyright (C) 2009 HungryHobo@mail.i2p 3 | 4 | The GPG fingerprint for HungryHobo@mail.i2p is: 5 | 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | 7 | This file is part of I2P-Bote. 8 | I2P-Bote is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation, either version 3 of the License, or 11 | (at your option) any later version. 12 | 13 | I2P-Bote is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with I2P-Bote. If not, see . 20 | --%> 21 | 22 | <%@ page language="java" contentType="text/html; charset=UTF-8" 23 | pageEncoding="UTF-8"%> 24 | 25 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/showHtml.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Copyright (C) 2015 str4d@mail.i2p 3 | 4 | This file is part of I2P-Bote. 5 | I2P-Bote is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | I2P-Bote is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with I2P-Bote. If not, see . 17 | --%> 18 | 19 | <%@ page language="java" contentType="text/html; charset=UTF-8" 20 | pageEncoding="UTF-8"%> 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/addressbook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/addressbook.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/attachment.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/background-alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/background-alt.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/background.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/clear_password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/clear_password.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/connect_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/connect_error.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/connected.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/connecting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/connecting.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/default.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/delay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/delay.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/delete.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/favicon.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/folder.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/not_started.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/not_started.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/wait.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/wait.gif -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/lblue/images/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/lblue/images/warning.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/NotoSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/NotoSans-Bold.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/NotoSans-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/NotoSans-BoldItalic.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/NotoSans-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/NotoSans-Italic.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/NotoSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/NotoSans-Regular.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-Black.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-BlackItalic.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-Bold.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-BoldItalic.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-Italic.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-Light.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-LightItalic.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-Medium.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-MediumItalic.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-Thin.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/fonts/Roboto-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/fonts/Roboto-ThinItalic.ttf -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/icon.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/addressbook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/addressbook.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/attachment.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/clear_password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/clear_password.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/compose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/compose.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/connect_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/connect_error.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/connected.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/connecting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/connecting.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/default.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/delay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/delay.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/delete.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/favicon.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/folder.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/identities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/identities.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/inbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/inbox.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/not_started.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/not_started.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/outbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/outbox.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/refresh.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/send_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/send_white.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/sent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/sent.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/settings.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/wait.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/wait.gif -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/images/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/material/images/warning.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/material/noto.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'NotoSans'; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: local('NotoSans'), local('NotoSans-Regular'), url(fonts/NotoSans-Regular.ttf) format('truetype'); 6 | } 7 | @font-face { 8 | font-family: 'NotoSans'; 9 | font-style: normal; 10 | font-weight: 700; 11 | src: local('NotoSans Bold'), local('NotoSans-Bold'), url(fonts/NotoSans-Bold.ttf) format('truetype'); 12 | } 13 | @font-face { 14 | font-family: 'NotoSans'; 15 | font-style: italic; 16 | font-weight: 400; 17 | src: local('NotoSans Italic'), local('NotoSans-Italic'), url(fonts/NotoSans-Italic.ttf) format('truetype'); 18 | } 19 | @font-face { 20 | font-family: 'NotoSans'; 21 | font-style: italic; 22 | font-weight: 700; 23 | src: local('NotoSans Bold Italic'), local('NotoSans-BoldItalic'), url(fonts/NotoSans-BoldItalic.ttf) format('truetype'); 24 | } 25 | -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/addressbook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/addressbook.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/attachment.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/background-alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/background-alt.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/background.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/bling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/bling.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/clear_password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/clear_password.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/connect_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/connect_error.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/connected.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/connecting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/connecting.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/default.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/delay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/delay.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/delete.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/favicon.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/folder.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/graytile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/graytile.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/not_started.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/not_started.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/wait.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/wait.gif -------------------------------------------------------------------------------- /webapp/src/main/webapp/themes/vanilla/images/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/i2p/i2p.i2p-bote/0775c4dd499ccc09ab4332e7d5faf7bb3b9e8540/webapp/src/main/webapp/themes/vanilla/images/warning.png -------------------------------------------------------------------------------- /webapp/src/main/webapp/userGuide.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Copyright (C) 2015 str4d@mail.i2p 3 | 4 | This file is part of I2P-Bote. 5 | I2P-Bote is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | I2P-Bote is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with I2P-Bote. If not, see . 17 | --%> 18 | 19 | <%@ page language="java" contentType="text/html; charset=UTF-8" 20 | pageEncoding="UTF-8"%> 21 | 22 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 23 | <%@ taglib prefix="ib" uri="I2pBoteTags" %> 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /webapp/src/poupdate/java/i2p/bote/ant/PrintAppVersion.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2009 HungryHobo@mail.i2p 3 | * 4 | * The GPG fingerprint for HungryHobo@mail.i2p is: 5 | * 6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12 6 | * 7 | * This file is part of I2P-Bote. 8 | * I2P-Bote is free software: you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation, either version 3 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * I2P-Bote is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with I2P-Bote. If not, see . 20 | */ 21 | 22 | package i2p.bote.ant; 23 | 24 | import i2p.bote.I2PBote; 25 | 26 | public class PrintAppVersion { 27 | 28 | public static void main(String[] args) { 29 | System.out.println(I2PBote.getAppVersion()); 30 | } 31 | } -------------------------------------------------------------------------------- /win32installer/config.txt: -------------------------------------------------------------------------------- 1 | ;!@Install@!UTF-8! 2 | Title="I2P + I2P-Bote Installer" 3 | BeginPrompt="Do you want to install I2P?" 4 | RunProgram="launcher-Win32.exe" 5 | ;!@InstallEnd@! 6 | -------------------------------------------------------------------------------- /win32installer/i2pbote_pack.txt: -------------------------------------------------------------------------------- 1 | 2 | The I2P-Bote email plugin 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /win32installer/jreinstall.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | echo Please wait / Bitte warten... 3 | :: The /s option does a silent install, 4 | :: and it has the nice side effect of 5 | :: disabling the Yahoo toolbar annoyance 6 | jre /s 7 | -------------------------------------------------------------------------------- /win32installer/launcher.ini: -------------------------------------------------------------------------------- 1 | # Global entries, can be overridden by specific ones. 2 | jar = install.jar 3 | download = http://www.java.com/ 4 | 5 | # Win32 specific entries 6 | [win32] 7 | jre = jreinstall.bat 8 | -------------------------------------------------------------------------------- /win32installer/packspanel.txt: -------------------------------------------------------------------------------- 1 | 2 | --------------------------------------------------------------------------------