service object to write out config files
This commit is contained in:
parent
44cc15befd
commit
c5e79fc427
3
_vsftpd/ftpd.passwd
Normal file
3
_vsftpd/ftpd.passwd
Normal file
@ -0,0 +1,3 @@
|
||||
client-two:$1$Uoqdsd1f$A39luV6N91OtA/VvcdBfC0
|
||||
client-one:$1$cVA6ZMIU$K/ITsDMZWeEDFEvoWk0op.
|
||||
client-three:$1$pGYnsuhu$3MPEsgikbEhX1mZQE/qDc/
|
1
_vsftpd/users/client-one
Normal file
1
_vsftpd/users/client-one
Normal file
@ -0,0 +1 @@
|
||||
local_root=_vsftpd/root/client_one
|
1
_vsftpd/users/client-three
Normal file
1
_vsftpd/users/client-three
Normal file
@ -0,0 +1 @@
|
||||
local_root=_vsftpd/root/client_three
|
1
_vsftpd/users/client-two
Normal file
1
_vsftpd/users/client-two
Normal file
@ -0,0 +1 @@
|
||||
local_root=_vsftpd/root/client_two
|
36
app/services/ftp_config.rb
Normal file
36
app/services/ftp_config.rb
Normal file
@ -0,0 +1,36 @@
|
||||
# frozen_string_literal: true
|
||||
class FtpConfig
|
||||
def build_password_list accounts
|
||||
File.open(password_file, "w+") do |file|
|
||||
Array(accounts).each do |account|
|
||||
file.write "#{account.username}:#{hash_password(account.password)}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def build_user_configs accounts
|
||||
Array(accounts).each do |account|
|
||||
File.open("#{config_path}#{account.username}", "w+") do |file|
|
||||
file.write "local_root=#{ftp_root}#{account.home_folder}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def password_file
|
||||
AppConfig.htpasswd
|
||||
end
|
||||
|
||||
def config_path
|
||||
AppConfig.ftpusers
|
||||
end
|
||||
|
||||
def ftp_root
|
||||
AppConfig.ftproot
|
||||
end
|
||||
|
||||
def hash_password password
|
||||
`openssl passwd -1 -noverify -quiet #{password}`
|
||||
end
|
||||
end
|
@ -10,6 +10,9 @@ defaults: &defaults
|
||||
client_key: client-id
|
||||
secret_key: client-secret
|
||||
callback_url: local-callback
|
||||
htpasswd: "/path/to/vsftpd/password.file"
|
||||
ftpusers: "/path/to/vsftpd/users/configs"
|
||||
ftproot: "/path/to/root/ftp/prefix/"
|
||||
|
||||
development:
|
||||
<<: *defaults
|
||||
|
12
test/fixtures/accounts.yml
vendored
12
test/fixtures/accounts.yml
vendored
@ -5,3 +5,15 @@ account1:
|
||||
password: <%= CryptSerializer.dump('1q2w3e4r5t6y7u') %>
|
||||
home_folder: client_one
|
||||
contact_email: ftp-user@mailinator.com
|
||||
|
||||
account2:
|
||||
username: client-two
|
||||
password: <%= CryptSerializer.dump('azsxdcfvgbhnjmk,l.;/') %>
|
||||
home_folder: client_two
|
||||
contact_email: ftp-user@mailinator.com
|
||||
|
||||
account3:
|
||||
username: client-three
|
||||
password: <%= CryptSerializer.dump('p0o9i8u7y6t5r4e3w2q1') %>
|
||||
home_folder: client_three
|
||||
contact_email: ftp-user@mailinator.com
|
||||
|
21
test/services/ftp_config_test.rb
Normal file
21
test/services/ftp_config_test.rb
Normal file
@ -0,0 +1,21 @@
|
||||
# frozen_string_literal: true
|
||||
require 'test_helper'
|
||||
|
||||
class FtpConfigTest < ActiveSupport::TestCase
|
||||
test 'should write new password file' do
|
||||
config = FtpConfig.new
|
||||
config.build_password_list Account.all
|
||||
|
||||
assert_match "#{accounts(:account2).username}:", File.read(AppConfig.htpasswd)
|
||||
end
|
||||
|
||||
test 'should build user config files' do
|
||||
config = FtpConfig.new
|
||||
config.build_user_configs Account.all
|
||||
|
||||
account = accounts(:account1)
|
||||
fconfig = File.read("#{AppConfig.ftpusers}#{account.username}")
|
||||
|
||||
assert_match account.home_folder, fconfig
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user