Compare commits

...

8 commits

Author SHA1 Message Date
3c4e4271b2 ci: switch to alpine for static linking
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
2023-11-18 22:32:22 +00:00
e6a9d01175 ci: bump crystal version 2023-11-18 22:32:22 +00:00
9f0902d91d ci: add missing dependencies 2023-11-18 22:32:22 +00:00
592f0fbe41 fix: add templating support in configuration
Refs: #15
2023-11-18 22:32:22 +00:00
576b7c62c6 Merge pull request 'fix: delay config file discovery' (#20) from feature/14-add-support-for-global-config-file into develop
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #20
2023-11-18 22:31:21 +00:00
1c184a5557 fix: delay config file discovery
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-11-18 23:31:04 +01:00
2990e18b27 Merge pull request 'fix: add support for global config file' (#17) from feature/14-add-support-for-global-config-file into develop
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #17
2023-11-18 19:06:05 +00:00
f94d0f1f39 fix: add support for global config file
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
Refs: #14
2023-11-18 19:32:12 +01:00
6 changed files with 82 additions and 11 deletions

View file

@ -5,7 +5,7 @@ name: default
steps:
- name: build:binary
image: crystallang/crystal:1.7.3
image: crystallang/crystal:1.10.1-alpine
environment:
PACKAGE_BASENAME: mfm_linux_amd64
volumes:
@ -13,11 +13,16 @@ steps:
path: /_cache
commands:
- pwd
- apt-get update &&
apt-get install -y cmake g++ libevent-dev libpcre3-dev libyaml-dev
# - |
# apt-get update && \
# apt-get install -y \
# cmake g++ \
# libevent-dev libpcre3-dev \
# libyaml-dev liblzma-dev
- shards install
- shards build --production --static
- strip bin/mfm
- ./bin/mfm --version
- mkdir -p /_cache/bin
- cp -r bin/mfm /_cache/bin/$PACKAGE_BASENAME

View file

@ -1,5 +1,9 @@
version: 2.0
shards:
crinja:
git: https://github.com/straight-shoota/crinja.git
version: 0.8.1
shellwords:
git: https://github.com/sztheory/shellwords-crystal.git
version: 0.1.0

View file

@ -18,6 +18,8 @@ targets:
# Short description of gx-vault
dependencies:
crinja:
github: straight-shoota/crinja
shellwords:
github: szTheory/shellwords-crystal

View file

@ -11,6 +11,7 @@ module GX
VERSION="v0.1.9"
class Cli
Log = ::Log.for("cli")
@config : Config
@ -29,10 +30,12 @@ module GX
parser.banner = "Usage: #{PROGRAM_NAME} [options]\n\nGlobal options"
parser.on("-c", "--config FILE", "Set configuration file") do |path|
Log.info { "Configuration set to #{path}" }
@config.path = path
end
parser.on("-v", "--verbose", "Set more verbosity") do |flag|
Log.info { "Verbosity enabled" }
@config.verbose = true
end

View file

@ -3,10 +3,14 @@
# SPDX-FileCopyrightText: 2023 Glenn Y. Rolland <glenux@glenux.net>
# Copyright © 2023 Glenn Y. Rolland <glenux@glenux.net>
require "crinja"
require "./filesystems"
module GX
class Config
Log = ::Log.for("config")
enum Mode
ConfigAdd
ConfigDelete
@ -23,11 +27,9 @@ module GX
getter home_dir : String
property verbose : Bool
property mode : Mode
property path : String
property path : String?
property args : AddArgs.class | DelArgs.class | NoArgs.class
DEFAULT_CONFIG_PATH = "mfm.yml"
def initialize()
if !ENV["HOME"]?
raise "Home directory not found"
@ -37,22 +39,55 @@ module GX
@verbose = false
@mode = Mode::Mount
@filesystems = [] of Filesystem
@path = File.join(@home_dir, ".config", DEFAULT_CONFIG_PATH)
@path = nil
@args = NoArgs
end
def detect_config_file()
possible_files = [
File.join(@home_dir, ".config", "mfm", "config.yaml"),
File.join(@home_dir, ".config", "mfm", "config.yml"),
File.join(@home_dir, ".config", "mfm.yaml"),
File.join(@home_dir, ".config", "mfm.yml"),
File.join("/etc", "mfm", "config.yaml"),
File.join("/etc", "mfm", "config.yml"),
]
possible_files.each do |file_path|
if File.exists?(file_path)
Log.info { "Configuration file found: #{file_path}" }
return file_path if File.exists?(file_path)
else
Log.debug { "Configuration file not found: #{file_path}" }
end
end
Log.error { "No configuration file found in any of the standard locations" }
raise "Configuration file not found"
end
def load_from_file
path = @path
if path.nil?
path = detect_config_file()
end
@path = path
@filesystems = [] of Filesystem
if !File.exists? @path
STDERR.puts "Error: file #{@path} does not exist!".colorize(:red)
if !File.exists? path
Log.error { "File #{path} does not exist!".colorize(:red) }
exit(1)
end
load_filesystems(@path)
load_filesystems(path)
end
private def load_filesystems(config_path : String)
yaml_data = YAML.parse(File.read(config_path))
file_data = File.read(config_path)
# FIXME: render template on a value basis (instead of global)
file_patched = Crinja.render(file_data, {"env" => ENV.to_h})
yaml_data = YAML.parse(file_patched)
vaults_data = yaml_data["filesystems"].as_a
vaults_data.each do |filesystem_data|

View file

@ -6,11 +6,33 @@
require "yaml"
require "colorize"
require "json"
require "log"
require "./filesystems/gocryptfs"
require "./config"
require "./cli"
struct BaseFormat < Log::StaticFormatter
def run
string @entry.severity.label.downcase
string "("
source
string "): "
message
end
end
Log.setup do |config|
backend = Log::IOBackend.new(formatter: BaseFormat)
config.bind "*", Log::Severity::Info, backend
if ENV["LOG_LEVEL"]?
level = Log::Severity.parse(ENV["LOG_LEVEL"]) || Log::Severity::Info
config.bind "*", level, backend
end
end
app = GX::Cli.new
app.parse_command_line(ARGV)
app.run