AdminKnobs: allow enterprise admins to disable private key export
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
9597d719ac
commit
3748a1da88
@ -112,5 +112,8 @@
|
|||||||
android:name="android.service.quicksettings.ACTIVE_TILE"
|
android:name="android.service.quicksettings.ACTIVE_TILE"
|
||||||
android:value="false" />
|
android:value="false" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
<meta-data android:name="android.content.APP_RESTRICTIONS"
|
||||||
|
android:resource="@xml/app_restrictions" />
|
||||||
</application>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@ -17,6 +17,7 @@ import androidx.preference.PreferenceFragmentCompat
|
|||||||
import com.wireguard.android.Application
|
import com.wireguard.android.Application
|
||||||
import com.wireguard.android.R
|
import com.wireguard.android.R
|
||||||
import com.wireguard.android.backend.WgQuickBackend
|
import com.wireguard.android.backend.WgQuickBackend
|
||||||
|
import com.wireguard.android.util.AdminKnobs
|
||||||
import com.wireguard.android.util.ModuleLoader
|
import com.wireguard.android.util.ModuleLoader
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
import java.util.Arrays
|
import java.util.Arrays
|
||||||
@ -87,6 +88,10 @@ class SettingsActivity : ThemeChangeAwareActivity() {
|
|||||||
val remoteApps = preferenceManager.findPreference<Preference>("allow_remote_control_intents")
|
val remoteApps = preferenceManager.findPreference<Preference>("allow_remote_control_intents")
|
||||||
remoteApps?.parent?.removePreference(remoteApps)
|
remoteApps?.parent?.removePreference(remoteApps)
|
||||||
}
|
}
|
||||||
|
if (AdminKnobs.disableConfigExport) {
|
||||||
|
val zipExporter = preferenceManager.findPreference<Preference>("zip_exporter")
|
||||||
|
zipExporter?.parent?.removePreference(zipExporter)
|
||||||
|
}
|
||||||
val wgQuickOnlyPrefs = arrayOf(
|
val wgQuickOnlyPrefs = arrayOf(
|
||||||
preferenceManager.findPreference("tools_installer"),
|
preferenceManager.findPreference("tools_installer"),
|
||||||
preferenceManager.findPreference("restore_on_boot"),
|
preferenceManager.findPreference("restore_on_boot"),
|
||||||
|
@ -26,6 +26,7 @@ import com.wireguard.android.databinding.TunnelEditorFragmentBinding
|
|||||||
import com.wireguard.android.fragment.AppListDialogFragment.AppSelectionListener
|
import com.wireguard.android.fragment.AppListDialogFragment.AppSelectionListener
|
||||||
import com.wireguard.android.model.ObservableTunnel
|
import com.wireguard.android.model.ObservableTunnel
|
||||||
import com.wireguard.android.util.BiometricAuthenticator
|
import com.wireguard.android.util.BiometricAuthenticator
|
||||||
|
import com.wireguard.android.util.AdminKnobs
|
||||||
import com.wireguard.android.util.ErrorMessages
|
import com.wireguard.android.util.ErrorMessages
|
||||||
import com.wireguard.android.viewmodel.ConfigProxy
|
import com.wireguard.android.viewmodel.ConfigProxy
|
||||||
import com.wireguard.android.widget.EdgeToEdge.setUpRoot
|
import com.wireguard.android.widget.EdgeToEdge.setUpRoot
|
||||||
@ -252,6 +253,7 @@ class TunnelEditorFragment : BaseFragment(), AppSelectionListener {
|
|||||||
val edit = view as? EditText ?: return
|
val edit = view as? EditText ?: return
|
||||||
if (edit.inputType == InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) return
|
if (edit.inputType == InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) return
|
||||||
if (!haveShownKeys && edit.text.isNotEmpty()) {
|
if (!haveShownKeys && edit.text.isNotEmpty()) {
|
||||||
|
if (AdminKnobs.disableConfigExport) return
|
||||||
showingAuthenticator = true
|
showingAuthenticator = true
|
||||||
BiometricAuthenticator.authenticate(R.string.biometric_prompt_private_key_title, this) {
|
BiometricAuthenticator.authenticate(R.string.biometric_prompt_private_key_title, this) {
|
||||||
showingAuthenticator = false
|
showingAuthenticator = false
|
||||||
|
@ -16,6 +16,7 @@ import com.wireguard.android.R
|
|||||||
import com.wireguard.android.model.ObservableTunnel
|
import com.wireguard.android.model.ObservableTunnel
|
||||||
import com.wireguard.android.util.BiometricAuthenticator
|
import com.wireguard.android.util.BiometricAuthenticator
|
||||||
import com.wireguard.android.util.DownloadsFileSaver
|
import com.wireguard.android.util.DownloadsFileSaver
|
||||||
|
import com.wireguard.android.util.AdminKnobs
|
||||||
import com.wireguard.android.util.ErrorMessages
|
import com.wireguard.android.util.ErrorMessages
|
||||||
import com.wireguard.android.util.FragmentUtils
|
import com.wireguard.android.util.FragmentUtils
|
||||||
import java9.util.concurrent.CompletableFuture
|
import java9.util.concurrent.CompletableFuture
|
||||||
@ -82,6 +83,7 @@ class ZipExporterPreference(context: Context, attrs: AttributeSet?) : Preference
|
|||||||
override fun getTitle() = context.getString(R.string.zip_export_title)
|
override fun getTitle() = context.getString(R.string.zip_export_title)
|
||||||
|
|
||||||
override fun onClick() {
|
override fun onClick() {
|
||||||
|
if (AdminKnobs.disableConfigExport) return
|
||||||
val prefActivity = FragmentUtils.getPrefActivity(this)
|
val prefActivity = FragmentUtils.getPrefActivity(this)
|
||||||
val fragment = prefActivity.supportFragmentManager.fragments.first()
|
val fragment = prefActivity.supportFragmentManager.fragments.first()
|
||||||
BiometricAuthenticator.authenticate(R.string.biometric_prompt_zip_exporter_title, fragment) {
|
BiometricAuthenticator.authenticate(R.string.biometric_prompt_zip_exporter_title, fragment) {
|
||||||
|
16
ui/src/main/java/com/wireguard/android/util/AdminKnobs.kt
Normal file
16
ui/src/main/java/com/wireguard/android/util/AdminKnobs.kt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
* Copyright © 2020 WireGuard LLC. All Rights Reserved.
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.wireguard.android.util
|
||||||
|
|
||||||
|
import android.content.RestrictionsManager
|
||||||
|
import androidx.core.content.getSystemService
|
||||||
|
import com.wireguard.android.Application
|
||||||
|
|
||||||
|
object AdminKnobs {
|
||||||
|
private val restrictions: RestrictionsManager? = Application.get().getSystemService()
|
||||||
|
val disableConfigExport: Boolean
|
||||||
|
get() = restrictions?.applicationRestrictions?.getBoolean("disable_config_export", false) ?: false
|
||||||
|
}
|
@ -101,6 +101,8 @@
|
|||||||
<string name="dark_theme_summary_on">Currently using dark (night) theme</string>
|
<string name="dark_theme_summary_on">Currently using dark (night) theme</string>
|
||||||
<string name="dark_theme_title">Use dark theme</string>
|
<string name="dark_theme_title">Use dark theme</string>
|
||||||
<string name="delete">Delete</string>
|
<string name="delete">Delete</string>
|
||||||
|
<string name="disable_config_export_title">Disable config exporting</string>
|
||||||
|
<string name="disable_config_export_description">Disabling config exporting makes private keys less accessible</string>
|
||||||
<string name="dns_servers">DNS servers</string>
|
<string name="dns_servers">DNS servers</string>
|
||||||
<string name="edit">Edit</string>
|
<string name="edit">Edit</string>
|
||||||
<string name="endpoint">Endpoint</string>
|
<string name="endpoint">Endpoint</string>
|
||||||
|
13
ui/src/main/res/xml/app_restrictions.xml
Normal file
13
ui/src/main/res/xml/app_restrictions.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright © 2020 WireGuard LLC. All Rights Reserved.
|
||||||
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
|
-->
|
||||||
|
|
||||||
|
<restrictions xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<restriction
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:description="@string/disable_config_export_description"
|
||||||
|
android:key="disable_config_export"
|
||||||
|
android:restrictionType="bool"
|
||||||
|
android:title="@string/disable_config_export_title" />
|
||||||
|
</restrictions>
|
Loading…
Reference in New Issue
Block a user