diff --git a/build.gradle b/build.gradle index fd68037..7b2048c 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,7 @@ changelog { patchPluginXml { //https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html#intellij-platform-based-products-of-recent-ide-versions - sinceBuild = "203" + sinceBuild = "213" pluginDescription = """ Helps you create and edit Ansible Vaults diff --git a/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/Vault.kt b/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/Vault.kt index f4a4b62..34fbb9d 100644 --- a/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/Vault.kt +++ b/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/Vault.kt @@ -3,6 +3,7 @@ package ru.sadv1r.idea.plugin.ansible.vault.editor import com.intellij.openapi.fileTypes.FileType import ru.sadv1r.ansible.vault.VaultHandler import ru.sadv1r.ansible.vault.crypto.VaultInfo +import ru.sadv1r.idea.plugin.ansible.vault.editor.settings.AnsibleVaultEditorSettings import ru.sadv1r.idea.plugin.ansible.vault.editor.ui.VaultEditorDialog import ru.sadv1r.idea.plugin.ansible.vault.editor.ui.VaultPasswordDialog import java.io.BufferedReader @@ -62,7 +63,8 @@ abstract class Vault { } private fun tryWithDefaultOrAsk() { - val defaultPasswordFile = getPasswordFilePath() + val defaultPasswordFile = AnsibleVaultEditorSettings.getInstance().passwordFilePath + ?: getPasswordFilePath() if (defaultPasswordFile != null) { try { diff --git a/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/settings/AnsibleVaultEditorConfigurable.kt b/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/settings/AnsibleVaultEditorConfigurable.kt new file mode 100644 index 0000000..8cdc37f --- /dev/null +++ b/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/settings/AnsibleVaultEditorConfigurable.kt @@ -0,0 +1,39 @@ +package ru.sadv1r.idea.plugin.ansible.vault.editor.settings + +import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory +import com.intellij.openapi.options.BoundSearchableConfigurable +import com.intellij.openapi.ui.DialogPanel +import com.intellij.ui.dsl.builder.* +import com.intellij.ui.dsl.gridLayout.HorizontalAlign +import ru.sadv1r.idea.plugin.ansible.vault.editor.getPasswordFilePath + +class AnsibleVaultEditorConfigurable : BoundSearchableConfigurable( + "Ansible Vault Editor", + "Ansible Vault Editor", + _id = "ru.sadv1r.idea.plugin.ansible.vault.editor.settings.AnsibleVaultEditorConfigurable" +) { + + private val settings get() = AnsibleVaultEditorSettings.getInstance() + + override fun createPanel(): DialogPanel { + return panel { + row("Vault password file:") { + val fileChooserDescriptor = FileChooserDescriptorFactory.createSingleFileDescriptor() + + val overridePasswordFilePathCheckBox = checkBox("Override") + .bindSelected(settings::overridePasswordFilePath) + //TODO Flip this two + textFieldWithBrowseButton(fileChooserDescriptor = fileChooserDescriptor) + .enabledIf(overridePasswordFilePathCheckBox.selected) + .applyIfEnabled() + .bindText( + getter = { settings.passwordFilePath ?: getPasswordFilePath().orEmpty() }, + setter = { settings.passwordFilePath = it } + ) + .horizontalAlign(HorizontalAlign.FILL) + .columns(COLUMNS_MEDIUM) + } + } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/settings/AnsibleVaultEditorSettings.kt b/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/settings/AnsibleVaultEditorSettings.kt new file mode 100644 index 0000000..64cf811 --- /dev/null +++ b/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/settings/AnsibleVaultEditorSettings.kt @@ -0,0 +1,26 @@ +package ru.sadv1r.idea.plugin.ansible.vault.editor.settings + +import com.intellij.openapi.components.ServiceManager +import com.intellij.openapi.components.SimplePersistentStateComponent +import com.intellij.openapi.components.State +import com.intellij.openapi.components.Storage + +@State(name = "AnsibleVaultEditorSettings", storages = [Storage("ansible-vault-editor.xml")]) +class AnsibleVaultEditorSettings : + SimplePersistentStateComponent(AnsibleVaultEditorSettingsState()) { + + var overridePasswordFilePath + get() = state.saveOverridePasswordFilePath + set(value) { state.saveOverridePasswordFilePath = value } + + var passwordFilePath + get() = state.savePasswordFilePath.takeIf { overridePasswordFilePath } + set(value) { state.savePasswordFilePath = value } + + companion object { + fun getInstance(): AnsibleVaultEditorSettings { + return ServiceManager.getService(AnsibleVaultEditorSettings::class.java) + } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/settings/AnsibleVaultEditorSettingsState.kt b/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/settings/AnsibleVaultEditorSettingsState.kt new file mode 100644 index 0000000..b3c706a --- /dev/null +++ b/src/main/kotlin/ru/sadv1r/idea/plugin/ansible/vault/editor/settings/AnsibleVaultEditorSettingsState.kt @@ -0,0 +1,11 @@ +package ru.sadv1r.idea.plugin.ansible.vault.editor.settings + +import com.intellij.openapi.components.BaseState + +class AnsibleVaultEditorSettingsState : BaseState() { + + // "save" prefix because of "probably contains sensitive information" warning in BaseXmlOutputter + var saveOverridePasswordFilePath by property(false) + var savePasswordFilePath by string() + +} \ No newline at end of file diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 3399284..f40fce9 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -37,6 +37,14 @@ implementationClass="ru.sadv1r.idea.plugin.ansible.vault.editor.gutter.FileVaultLineMarkerProvider"/> + + +