Skip to content
Snippets Groups Projects
Verified Commit 1fcfd90e authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Added functionality to require SSL for certain connections

parent f20c9a0d
Branches
Tags
No related merge requests found
Showing
with 210 additions and 158 deletions
......@@ -104,13 +104,13 @@ android {
}
compileOptions {
setSourceCompatibility(JavaVersion.VERSION_1_8)
sourceCompatibility = JavaVersion.VERSION_1_8
setTargetCompatibility(JavaVersion.VERSION_1_8)
}
lintOptions {
isWarningsAsErrors = true
lintConfig = file("../lint.xml")
setLintConfig(file("../lint.xml"))
}
}
......
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?><!--
Quasseldroid - Quassel client for Android
Copyright (c) 2019 Janne Koschinski
Copyright (c) 2019 The Quassel Project
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License version 3 as published
by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<string name="package_name" translatable="false">com.iskrembilen.quasseldroid.debug</string>
</resources>
......@@ -83,6 +83,7 @@ class Quasseldroid : DaggerApplication() {
host = it.host,
port = it.port,
user = it.user,
requireSsl = false,
pass = it.pass,
name = it.name,
lastUsed = 0,
......
......@@ -77,7 +77,7 @@ import de.kuschku.quasseldroid.ui.coresettings.networkconfig.NetworkConfigFragme
import de.kuschku.quasseldroid.ui.coresettings.networkserver.NetworkServerActivity
import de.kuschku.quasseldroid.ui.coresettings.networkserver.NetworkServerFragmentProvider
import de.kuschku.quasseldroid.ui.setup.accounts.edit.AccountEditActivity
import de.kuschku.quasseldroid.ui.setup.accounts.edit.AccountEditModule
import de.kuschku.quasseldroid.ui.setup.accounts.edit.AccountEditFragmentProvider
import de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionActivity
import de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionFragmentProvider
import de.kuschku.quasseldroid.ui.setup.accounts.setup.AccountSetupActivity
......@@ -204,7 +204,7 @@ abstract class ActivityModule {
abstract fun bindAccountSelectionActivity(): AccountSelectionActivity
@ActivityScope
@ContributesAndroidInjector(modules = [AccountEditModule::class, SettingsModule::class, DatabaseModule::class, ActivityBaseModule::class])
@ContributesAndroidInjector(modules = [AccountEditFragmentProvider::class, SettingsModule::class, DatabaseModule::class, ActivityBaseModule::class])
abstract fun bindAccountEditActivity(): AccountEditActivity
@ActivityScope
......
......@@ -40,15 +40,16 @@ class AsyncBackend(
}
override fun connectUnlessConnected(address: SocketAddress, user: String, pass: String,
reconnect: Boolean) {
requireSsl: Boolean, reconnect: Boolean) {
handler.backend {
backend.connectUnlessConnected(address, user, pass, reconnect)
backend.connectUnlessConnected(address, user, pass, requireSsl, reconnect)
}
}
override fun connect(address: SocketAddress, user: String, pass: String, reconnect: Boolean) {
override fun connect(address: SocketAddress, user: String, pass: String, requireSsl: Boolean,
reconnect: Boolean) {
handler.backend {
backend.connect(address, user, pass, reconnect)
backend.connect(address, user, pass, requireSsl, reconnect)
}
}
......
......@@ -117,6 +117,7 @@ class QuasselService : DaggerLifecycleService(),
SocketAddress(account.host, account.port),
account.user,
account.pass,
account.requireSsl,
true
)
}
......@@ -273,19 +274,20 @@ class QuasselService : DaggerLifecycleService(),
override fun sessionManager() = service?.sessionManager
override fun connectUnlessConnected(address: SocketAddress, user: String, pass: String,
reconnect: Boolean) {
requireSsl: Boolean, reconnect: Boolean) {
service?.apply {
sessionManager.ifDisconnected {
connect(address, user, pass, reconnect)
connect(address, user, pass, requireSsl, reconnect)
}
}
}
override fun connect(address: SocketAddress, user: String, pass: String, reconnect: Boolean) {
override fun connect(address: SocketAddress, user: String, pass: String, requireSsl: Boolean,
reconnect: Boolean) {
service?.apply {
disconnect()
sessionManager.connect(
clientData, trustManager, hostnameVerifier, address, user to pass, reconnect
clientData, trustManager, hostnameVerifier, address, user to pass, requireSsl, reconnect
)
}
}
......
......@@ -417,6 +417,18 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
}
is Error.SslError -> {
it.exception.let {
if (it == QuasselSecurityException.NoSsl) {
// Ssl is required but not available
MaterialDialog.Builder(this)
.title(R.string.label_error_ssl)
.content(R.string.label_error_ssl_required_unavailable)
.neutralText(R.string.label_close)
.titleColorAttr(R.attr.colorTextPrimary)
.backgroundColorAttr(R.attr.colorBackgroundCard)
.contentColorAttr(R.attr.colorTextPrimary)
.build()
.show()
} else {
val leafCertificate = it.certificateChain?.firstOrNull()
if (leafCertificate == null) {
// No certificate exists in the chain
......@@ -563,6 +575,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
}
}
}
}
})
// Connection errors that should show up as toast
......
......@@ -35,15 +35,16 @@ import de.kuschku.quasseldroid.settings.AppearanceSettings
import de.kuschku.quasseldroid.settings.AutoCompleteSettings
import de.kuschku.quasseldroid.settings.MessageSettings
import de.kuschku.quasseldroid.ui.chat.input.*
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.util.helper.invoke
import de.kuschku.quasseldroid.util.helper.toLiveData
import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
import de.kuschku.quasseldroid.util.irc.format.IrcFormatSerializer
import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
import de.kuschku.quasseldroid.viewmodel.EditorViewModel
import javax.inject.Inject
class TopicFragment : SettingsFragment(), SettingsFragment.Savable {
class TopicFragment : ServiceBoundSettingsFragment(), Savable {
@BindView(R.id.chatline)
lateinit var chatline: RichEditText
......
......@@ -34,12 +34,14 @@ import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.persistence.QuasselDatabase
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.util.helper.visibleIf
import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
import de.kuschku.quasseldroid.util.ui.settings.fragment.SettingsFragment
import javax.inject.Inject
class WhitelistFragment : SettingsFragment(), SettingsFragment.Changeable,
SettingsFragment.Savable {
class WhitelistFragment : SettingsFragment(), Changeable,
Savable {
@BindView(R.id.certificate_whitelist)
lateinit var certificateList: RecyclerView
......
......@@ -38,15 +38,15 @@ import de.kuschku.quasseldroid.settings.AppearanceSettings
import de.kuschku.quasseldroid.settings.AutoCompleteSettings
import de.kuschku.quasseldroid.settings.MessageSettings
import de.kuschku.quasseldroid.ui.chat.input.*
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
import de.kuschku.quasseldroid.util.irc.format.IrcFormatSerializer
import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
import de.kuschku.quasseldroid.viewmodel.EditorViewModel
import javax.inject.Inject
class AliasItemFragment : SettingsFragment(), SettingsFragment.Savable,
SettingsFragment.Changeable {
class AliasItemFragment : ServiceBoundSettingsFragment(), Savable, Changeable {
@BindView(R.id.name)
lateinit var name: EditText
......
......@@ -34,13 +34,14 @@ import de.kuschku.libquassel.quassel.syncables.AliasManager
import de.kuschku.libquassel.quassel.syncables.interfaces.IAliasManager
import de.kuschku.libquassel.util.Optional
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.ui.coresettings.aliasitem.AliasItemActivity
import de.kuschku.quasseldroid.util.helper.toLiveData
import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
import javax.inject.Inject
class AliasListFragment : SettingsFragment(), SettingsFragment.Savable,
SettingsFragment.Changeable {
class AliasListFragment : ServiceBoundSettingsFragment(), Savable, Changeable {
@BindView(R.id.list)
lateinit var list: RecyclerView
......
......@@ -42,12 +42,14 @@ import de.kuschku.libquassel.util.flag.minus
import de.kuschku.libquassel.util.flag.plus
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.defaults.Defaults
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.util.helper.combineLatest
import de.kuschku.quasseldroid.util.helper.toLiveData
import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
abstract class ChatListBaseFragment(private val initDefault: Boolean) :
SettingsFragment(), SettingsFragment.Savable, SettingsFragment.Changeable {
ServiceBoundSettingsFragment(), Savable, Changeable {
@BindView(R.id.buffer_view_name)
lateinit var bufferViewName: EditText
......
......@@ -20,9 +20,9 @@
package de.kuschku.quasseldroid.ui.coresettings.chatlist
import de.kuschku.libquassel.util.helpers.value
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.util.ui.settings.fragment.Deletable
class ChatListEditFragment : ChatListBaseFragment(false), SettingsFragment.Deletable {
class ChatListEditFragment : ChatListBaseFragment(false), Deletable {
override fun onSave() = chatlist?.let { (it, data) ->
applyChanges(data, it)
it?.requestUpdate(data.toVariantMap())
......
......@@ -40,13 +40,14 @@ import de.kuschku.libquassel.quassel.syncables.HighlightRuleManager
import de.kuschku.libquassel.quassel.syncables.interfaces.IHighlightRuleManager
import de.kuschku.libquassel.util.Optional
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.ui.coresettings.highlightrule.HighlightRuleActivity
import de.kuschku.quasseldroid.util.helper.toLiveData
import de.kuschku.quasseldroid.util.ui.WarningBarView
import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
class HighlightListFragment : SettingsFragment(), SettingsFragment.Savable,
SettingsFragment.Changeable {
class HighlightListFragment : ServiceBoundSettingsFragment(), Savable, Changeable {
@BindView(R.id.feature_context_coresidehighlights)
lateinit var featureContextCoreSideHighlights: WarningBarView
......
......@@ -31,10 +31,12 @@ import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.libquassel.quassel.syncables.HighlightRuleManager
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
class HighlightRuleFragment : SettingsFragment(), SettingsFragment.Savable,
SettingsFragment.Changeable {
class HighlightRuleFragment : ServiceBoundSettingsFragment(), Savable,
Changeable {
@BindView(R.id.enabled)
lateinit var enabled: SwitchCompat
......
......@@ -39,12 +39,14 @@ import de.kuschku.libquassel.session.ISession
import de.kuschku.libquassel.util.Optional
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.defaults.Defaults
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.util.helper.setDependent
import de.kuschku.quasseldroid.util.helper.toLiveData
import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
abstract class IdentityBaseFragment(private val initDefault: Boolean) :
SettingsFragment(), SettingsFragment.Savable, SettingsFragment.Changeable {
ServiceBoundSettingsFragment(), Savable, Changeable {
@BindView(R.id.identity_name)
lateinit var identityName: EditText
......
......@@ -20,9 +20,9 @@
package de.kuschku.quasseldroid.ui.coresettings.identity
import de.kuschku.libquassel.util.helpers.value
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.util.ui.settings.fragment.Deletable
class IdentityEditFragment : IdentityBaseFragment(false), SettingsFragment.Deletable {
class IdentityEditFragment : IdentityBaseFragment(false), Deletable {
override fun onSave() = identity?.let { (it, data) ->
applyChanges(data)
it?.requestUpdate(data.toVariantMap())
......
......@@ -33,11 +33,13 @@ import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.libquassel.quassel.syncables.IgnoreListManager
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.util.ui.AnimationHelper
import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
class IgnoreItemFragment : SettingsFragment(), SettingsFragment.Savable,
SettingsFragment.Changeable {
class IgnoreItemFragment : ServiceBoundSettingsFragment(), Savable,
Changeable {
@BindView(R.id.enabled)
lateinit var enabled: SwitchCompat
......
......@@ -36,12 +36,14 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton
import de.kuschku.libquassel.quassel.syncables.IgnoreListManager
import de.kuschku.libquassel.util.Optional
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.ui.coresettings.ignoreitem.IgnoreItemActivity
import de.kuschku.quasseldroid.util.helper.toLiveData
import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
class IgnoreListFragment : SettingsFragment(), SettingsFragment.Savable,
SettingsFragment.Changeable {
class IgnoreListFragment : ServiceBoundSettingsFragment(), Savable,
Changeable {
@BindView(R.id.list)
lateinit var list: RecyclerView
......
......@@ -44,15 +44,17 @@ import de.kuschku.libquassel.util.Optional
import de.kuschku.libquassel.util.helpers.nullIf
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.defaults.Defaults
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.ui.coresettings.networkserver.NetworkServerActivity
import de.kuschku.quasseldroid.util.helper.combineLatest
import de.kuschku.quasseldroid.util.helper.setDependent
import de.kuschku.quasseldroid.util.helper.toLiveData
import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
import kotlin.math.roundToInt
abstract class NetworkBaseFragment(private val initDefault: Boolean) :
SettingsFragment(), SettingsFragment.Savable, SettingsFragment.Changeable {
ServiceBoundSettingsFragment(), Savable, Changeable {
@BindView(R.id.network_name)
lateinit var networkName: EditText
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment