From 002db7026b32360e9ee5363fcfa49e9a33874ca8 Mon Sep 17 00:00:00 2001 From: Glenn Date: Tue, 24 Oct 2023 14:49:46 +0200 Subject: [PATCH] refactor: remove all mentions of vaults, make it generic for fs --- README.md | 2 +- src/cli.cr | 28 +++++++++++----------- src/config.cr | 15 ++++++------ src/{vault.cr => filesystems/gocryptfs.cr} | 6 ++--- src/main.cr | 2 +- 5 files changed, 27 insertions(+), 26 deletions(-) rename src/{vault.cr => filesystems/gocryptfs.cr} (86%) diff --git a/README.md b/README.md index fb4d218..5dc86d6 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ version: "1" global: mountpoint: "/home/user/mnt/{{name}}" -fsmap: +filesystems: - type: "gocryptfs" name: "Work - SSH Keys" encrypted_path: "/home/user/.ssh/keyring.work" diff --git a/src/cli.cr b/src/cli.cr index f903f1f..cd5da39 100644 --- a/src/cli.cr +++ b/src/cli.cr @@ -20,7 +20,7 @@ module GX add_args = { name: "", path: "" } delete_args = { name: "" } pparser = OptionParser.new do |parser| - parser.banner = "Usage: gx-vault [options]\n\nGlobal options" + parser.banner = "Usage: #{PROGRAM_NAME} [options]\n\nGlobal options" parser.on("-c", "--config FILE", "Set configuration file") do |path| @config.path = path @@ -34,7 +34,7 @@ module GX parser.on("create", "Create vault") do @config.mode = Config::Mode::Add - parser.banner = "Usage: gx-vault create [options]\n\nGlobal options" + parser.banner = "Usage: #{PROGRAM_NAME} create [options]\n\nGlobal options" parser.separator("\nCommand options") parser.on("-n", "--name", "Set vault name") do |name| @@ -48,7 +48,7 @@ module GX parser.on("delete", "Delete vault") do @config.mode = Config::Mode::Add - parser.banner = "Usage: gx-vault delete [options]\n\nGlobal options" + parser.banner = "Usage: #{PROGRAM_NAME} delete [options]\n\nGlobal options" parser.separator("\nCommand options") parser.on("-n", "--name", "Set vault name") do |name| @@ -67,25 +67,25 @@ module GX def run() @config.load_from_file - names_display = {} of String => NamedTuple(vault: Vault, ansi_name: String) - @config.vaults.each do |vault| - result_name = vault.mounted? ? "#{vault.name} [open]" : vault.name - ansi_name = vault.mounted? ? "#{vault.name} [#{ "open".colorize(:green) }]" : vault.name + names_display = {} of String => NamedTuple(filesystem: GoCryptFS, ansi_name: String) + @config.filesystems.each do |filesystem| + result_name = filesystem.mounted? ? "#{filesystem.name} [open]" : filesystem.name + ansi_name = filesystem.mounted? ? "#{filesystem.name} [#{ "open".colorize(:green) }]" : filesystem.name names_display[result_name] = { - vault: vault, + filesystem: filesystem, ansi_name: ansi_name } end - result_vault_name = Fzf.run(names_display.values.map(&.[:ansi_name]).sort) - selected_vault = names_display[result_vault_name][:vault] - puts ">> #{selected_vault.name}".colorize(:yellow) + result_filesystem_name = Fzf.run(names_display.values.map(&.[:ansi_name]).sort) + selected_filesystem = names_display[result_filesystem_name][:filesystem] + puts ">> #{selected_filesystem.name}".colorize(:yellow) - if selected_vault - selected_vault.mounted? ? selected_vault.unmount : selected_vault.mount + if selected_filesystem + selected_filesystem.mounted? ? selected_filesystem.unmount : selected_filesystem.mount else - STDERR.puts "Vault not found: #{selected_vault}.".colorize(:red) + STDERR.puts "Vault not found: #{selected_filesystem}.".colorize(:red) end end diff --git a/src/config.cr b/src/config.cr index 94ef077..393f5c1 100644 --- a/src/config.cr +++ b/src/config.cr @@ -1,5 +1,5 @@ -require "./vault" +require "./filesystems/gocryptfs" module GX class Config @@ -13,13 +13,13 @@ module GX record AddArgs, name : String, path : String record DelArgs, name : String - getter vaults : Array(Vault) + getter filesystems : Array(GoCryptFS) getter home_dir : String property mode : Mode property path : String property args : AddArgs.class | DelArgs.class | NoArgs.class - DEFAULT_CONFIG_PATH = "gx-vault.yml" + DEFAULT_CONFIG_PATH = "mfm.yml" def initialize() if !ENV["HOME"]? @@ -28,13 +28,13 @@ module GX @home_dir = ENV["HOME"] @mode = Mode::Run - @vaults = [] of Vault + @filesystems = [] of GoCryptFS @path = File.join(@home_dir, ".config", DEFAULT_CONFIG_PATH) @args = NoArgs end def load_from_file - @vaults = [] of Vault + @filesystems = [] of GoCryptFS if !File.exists? @path STDERR.puts "Error: file #{@path} does not exist!".colorize(:red) @@ -45,12 +45,13 @@ module GX private def load_vaults(config_path : String) yaml_data = YAML.parse(File.read(config_path)) - vaults_data = yaml_data["vaults"].as_a + vaults_data = yaml_data["filesystems"].as_a vaults_data.each do |vault_data| + type = vault_data["type"].as_s name = vault_data["name"].as_s encrypted_path = vault_data["encrypted_path"].as_s - @vaults << Vault.new(name, encrypted_path, "#{name}.Open") + @filesystems << GoCryptFS.new(name, encrypted_path, "#{name}.Open") end end end diff --git a/src/vault.cr b/src/filesystems/gocryptfs.cr similarity index 86% rename from src/vault.cr rename to src/filesystems/gocryptfs.cr index 31c9807..54c99ce 100644 --- a/src/vault.cr +++ b/src/filesystems/gocryptfs.cr @@ -1,7 +1,7 @@ require "shellwords" module GX - class Vault + class GoCryptFS getter name : String getter encrypted_path : String getter mount_dir : String @@ -29,13 +29,13 @@ module GX puts "Error mounting the vault".colorize(:red) return end - puts "Vault #{name} is now available on #{mount_dir}".colorize(:green) + puts "GoCryptFS #{name} is now available on #{mount_dir}".colorize(:green) end end def unmount system("fusermount -u #{mount_dir.shellescape}") - puts "Vault #{name} is now closed.".colorize(:green) + puts "GoCryptFS #{name} is now closed.".colorize(:green) end end end diff --git a/src/main.cr b/src/main.cr index 1a4dcf9..ce14227 100644 --- a/src/main.cr +++ b/src/main.cr @@ -2,7 +2,7 @@ require "yaml" require "colorize" require "json" -require "./vault" +require "./filesystems/gocryptfs" require "./config" require "./cli"