1
0
Fork 0
forked from glenux/mfm

refactor: define abstract defs & move most functions to concerns/base

This commit is contained in:
Glenn Y. Rolland 2023-11-21 23:11:21 +01:00
parent 994f9e1885
commit ee3f57ec20
5 changed files with 69 additions and 72 deletions

View file

@ -17,34 +17,11 @@ module GX
} }
property type : String property type : String
end
module FilesystemBase abstract def mount()
def unmount abstract def unmount()
system("fusermount -u #{mount_dir.shellescape}") abstract def mounted_prefix()
fusermount_status = $?
if fusermount_status.success?
puts "Filesystem #{name} is now closed.".colorize(:green)
else
puts "Error: Unable to unmount filesystem #{name} (exit code: #{fusermount_status.exit_code}).".colorize(:red)
end
end
def mount(&block)
Dir.mkdir_p(mount_dir) unless Dir.exists?(mount_dir)
if mounted?
puts "Already mounted. Skipping.".colorize(:yellow)
return
end
yield
puts "Filesystem #{name} is now available on #{mount_dir}".colorize(:green)
end
end end
end end
end end
require "./gocryptfs"
require "./sshfs"

View file

@ -0,0 +1,41 @@
module GX::Filesystem::Concerns
module Base
def after_initialize()
home_dir = ENV["HOME"] || raise "Home directory not found"
# Use default mountpoint if none defined
if @mount_dir.empty?
@mount_dir = File.join(home_dir, "mnt/#{@name}")
end
end
def mounted? : Bool
`mount`.includes?(" on #{mount_dir} type ")
end
def unmount : Nil
system("fusermount -u #{mount_dir.shellescape}")
fusermount_status = $?
if fusermount_status.success?
puts "Filesystem #{name} is now closed.".colorize(:green)
else
puts "Error: Unable to unmount filesystem #{name} (exit code: #{fusermount_status.exit_code}).".colorize(:red)
end
end
def _mount_wrapper(&block) : Nil
Dir.mkdir_p(mount_dir) unless Dir.exists?(mount_dir)
if mounted?
puts "Already mounted. Skipping.".colorize(:yellow)
return
end
yield
puts "Filesystem #{name} is now available on #{mount_dir}".colorize(:green)
end
end
end

View file

@ -5,6 +5,7 @@
require "shellwords" require "shellwords"
require "./abstract_filesystem" require "./abstract_filesystem"
require "./concerns/base"
module GX module GX
module Filesystem module Filesystem
@ -15,28 +16,20 @@ module GX
@[YAML::Field(key: "mount_dir", ignore: true)] @[YAML::Field(key: "mount_dir", ignore: true)]
getter mount_dir : String = "" getter mount_dir : String = ""
include FilesystemBase include Concerns::Base
def after_initialize() def mounted_prefix()
home_dir = ENV["HOME"] || raise "Home directory not found" "#{encrypted_path}"
@mount_dir = File.join(home_dir, "mnt/#{@name}.Open")
end
def mounted? : Bool
`mount`.includes?("#{encrypted_path} on #{mount_dir}")
end end
def mount def mount
super do _mount_wrapper do
input = STDIN
output = STDOUT
error = STDERR
process = Process.new( process = Process.new(
"gocryptfs", "gocryptfs",
["-idle", "15m", encrypted_path, mount_dir], ["-idle", "15m", encrypted_path, mount_dir],
input: input, input: STDIN,
output: output, output: STDOUT,
error: error error: STDERR
) )
unless process.wait.success? unless process.wait.success?
puts "Error mounting the vault".colorize(:red) puts "Error mounting the vault".colorize(:red)

View file

@ -5,6 +5,7 @@
require "shellwords" require "shellwords"
require "./abstract_filesystem" require "./abstract_filesystem"
require "./concerns/base"
module GX module GX
module Filesystem module Filesystem
@ -15,28 +16,20 @@ module GX
@[YAML::Field(key: "mount_dir", ignore: true)] @[YAML::Field(key: "mount_dir", ignore: true)]
getter mount_dir : String = "" getter mount_dir : String = ""
include FilesystemBase include Concerns::Base
def after_initialize() def mounted_prefix()
home_dir = ENV["HOME"] || raise "Home directory not found" "httpdirfs"
@mount_dir = File.join(home_dir, "mnt/#{@name}")
end
def mounted? : Bool
`mount`.includes?("httpdirfs on #{mount_dir}")
end end
def mount def mount
super do _mount_wrapper do
input = STDIN
output = STDOUT
error = STDERR
process = Process.new( process = Process.new(
"httpdirfs", "httpdirfs",
["#{url}", mount_dir], ["#{url}", mount_dir],
input: input, input: STDIN,
output: output, output: STDOUT,
error: error error: STDERR
) )
unless process.wait.success? unless process.wait.success?
puts "Error mounting the filesystem".colorize(:red) puts "Error mounting the filesystem".colorize(:red)

View file

@ -5,6 +5,7 @@
require "shellwords" require "shellwords"
require "./abstract_filesystem" require "./abstract_filesystem"
require "./concerns/base"
module GX module GX
module Filesystem module Filesystem
@ -18,22 +19,14 @@ module GX
@[YAML::Field(key: "mount_dir", ignore: true)] @[YAML::Field(key: "mount_dir", ignore: true)]
getter mount_dir : String = "" getter mount_dir : String = ""
include FilesystemBase include Concerns::Base
def after_initialize() def mounted_prefix()
home_dir = ENV["HOME"] || raise "Home directory not found" "#{remote_user}@#{remote_host}:#{remote_path}"
@mount_dir = File.join(home_dir, "mnt/#{@name}")
end end
def mounted? : Bool def mount()
`mount`.includes?("#{remote_user}@#{remote_host}:#{remote_path} on #{mount_dir}") _mount_wrapper do
end
def mount
super do
input = STDIN
output = STDOUT
error = STDERR
process = Process.new( process = Process.new(
"sshfs", "sshfs",
[ [
@ -41,9 +34,9 @@ module GX
"#{remote_user}@#{remote_host}:#{remote_path}", "#{remote_user}@#{remote_host}:#{remote_path}",
mount_dir mount_dir
], ],
input: input, input: STDIN,
output: output, output: STDOUT,
error: error error: STDERR
) )
unless process.wait.success? unless process.wait.success?
puts "Error mounting the filesystem".colorize(:red) puts "Error mounting the filesystem".colorize(:red)