Newer
Older
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import os
import utils
def setup(interactive=True):
dir_path = utils.get_dir(__file__)
pwd_path = '/etc/pure-ftpd/pureftpd.passwd'
# Get passwords
ftpincoming = utils.get_conf('FTP_INCOMING_PWD')
ftpmsuploader = utils.get_conf('FTP_MSUPLOADER_PWD')
ftpstorage = utils.get_conf('FTP_STORAGE_PWD')
ftpadmin = utils.get_conf('FTP_ADMIN_PWD')
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
if not ftpincoming or not ftpmsuploader or not ftpstorage or not ftpadmin:
raise Exception('Some passwords for FTP accounts are missing.\nPlease add them in the configuration file for EnvSetup script.')
# Run commands
cmds = [
'apt-get install --yes pure-ftpd python3-unidecode',
dict(line='adduser --disabled-login --gecos "" --shell /bin/false ftp', cond='id ftp', cond_neg=True, cond_skip=True),
'mkdir -p /home/ftp/storage',
'mkdir -p /home/ftp/storage/incoming',
'mkdir -p /home/ftp/storage/msuploads',
'mkdir -p /home/ftp/storage/www',
'chmod -R 775 /home/ftp/storage/incoming',
'chmod -R 777 /home/ftp/storage/msuploads',
'chmod -R 775 /home/ftp/storage/www',
'chown -R ftp:ftp /home/ftp/storage',
'mkdir -p /var/www',
'ln -sfn /home/ftp/storage/www /var/www/videos',
# Config
'echo "no" > /etc/pure-ftpd/conf/AllowDotFiles',
'echo "yes" > /etc/pure-ftpd/conf/CallUploadScript',
'echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone',
'echo "yes" > /etc/pure-ftpd/conf/DontResolve',
'echo "no" > /etc/pure-ftpd/conf/PAMAuthentication',
# Post upload script
'cp "%s/on_ftp_upload.py" /home/ftp/on_ftp_upload.py' % dir_path,
'chown ftp:ftp /home/ftp/on_ftp_upload.py',
'chmod +x /home/ftp/on_ftp_upload.py',
'pure-uploadscript -p /home/ftp/.on_upload.pid -B -g $(id -g ftp) -r /home/ftp/on_ftp_upload.py -u $(id -u ftp)',
'cp "%s/pure-ftpd-common" /etc/default/pure-ftpd-common.tmp' % dir_path,
'sed "s/UPLOADUID=UID/UPLOADUID=$(id -u ftp)/g" /etc/default/pure-ftpd-common.tmp > /etc/default/pure-ftpd-common.tmp2',
'mv -f /etc/default/pure-ftpd-common.tmp2 /etc/default/pure-ftpd-common.tmp',
'sed "s/UPLOADGID=GID/UPLOADGID=$(id -g ftp)/g" /etc/default/pure-ftpd-common.tmp > /etc/default/pure-ftpd-common.tmp2',
'mv -f /etc/default/pure-ftpd-common.tmp2 /etc/default/pure-ftpd-common',
'rm -f /etc/default/pure-ftpd-common.tmp',
'cp "%s/remove_empty_dirs.py" /etc/cron.hourly/remove_empty_dirs.py' % dir_path,
# Create FTP accounts
'([ -f "%s" ] || [ -f "%s" ] && cp "%s" "%s") || true' % (pwd_path + '.back', pwd_path, pwd_path, pwd_path + '.back'),
'([ -f "%s" ] && mv -f "%s" pureftpd.passwd.tmp) || true' % (pwd_path, pwd_path),
'"%s/create_account.sh" ftpincoming "%s" /home/ftp/storage/incoming' % (dir_path, ftpincoming),
'"%s/create_account.sh" ftpmsuploader "%s" /home/ftp/storage/msuploads' % (dir_path, ftpmsuploader),
'"%s/create_account.sh" ftpstorage "%s" /home/ftp/storage/www' % (dir_path, ftpstorage),
'"%s/create_account.sh" ftpadmin "%s" /home/ftp/storage' % (dir_path, ftpadmin),
'rm -f pureftpd.passwd.tmp',
'pure-pw mkdb',
'ln -sfn /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50puredb',
'/etc/init.d/pure-ftpd force-reload',
]
try:
utils.run_commands(cmds)
except Exception:
raise
finally:
# Restore password conf if required
if os.path.exists('pureftpd.passwd.tmp'):
os.rename('pureftpd.passwd.tmp', pwd_path)