service object to write out config files

This commit is contained in:
Mark Moser 2016-10-06 19:31:31 -05:00
parent 44cc15befd
commit c5e79fc427
8 changed files with 78 additions and 0 deletions

3
_vsftpd/ftpd.passwd Normal file
View 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
View File

@ -0,0 +1 @@
local_root=_vsftpd/root/client_one

View File

@ -0,0 +1 @@
local_root=_vsftpd/root/client_three

1
_vsftpd/users/client-two Normal file
View File

@ -0,0 +1 @@
local_root=_vsftpd/root/client_two

View 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

View File

@ -10,6 +10,9 @@ defaults: &defaults
client_key: client-id client_key: client-id
secret_key: client-secret secret_key: client-secret
callback_url: local-callback callback_url: local-callback
htpasswd: "/path/to/vsftpd/password.file"
ftpusers: "/path/to/vsftpd/users/configs"
ftproot: "/path/to/root/ftp/prefix/"
development: development:
<<: *defaults <<: *defaults

View File

@ -5,3 +5,15 @@ account1:
password: <%= CryptSerializer.dump('1q2w3e4r5t6y7u') %> password: <%= CryptSerializer.dump('1q2w3e4r5t6y7u') %>
home_folder: client_one home_folder: client_one
contact_email: ftp-user@mailinator.com 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

View 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