From 8d915c82d28a656ad8a062b77c548a41786917ba Mon Sep 17 00:00:00 2001 From: harshadyeola Date: Mon, 19 Oct 2015 15:27:03 +0530 Subject: [PATCH] Set up PHP Developement Environment --- .editorconfig | 20 + .gitignore | 72 +- config/bash_completion.d/ee_auto.rc | 384 --- config/ee.conf | 82 - config/plugins.d/clean.conf | 8 - config/plugins.d/debug.conf | 8 - config/plugins.d/import_slow_log.conf | 8 - config/plugins.d/info.conf | 11 - config/plugins.d/log.conf | 8 - config/plugins.d/secure.conf | 8 - config/plugins.d/site.conf | 8 - config/plugins.d/stack.conf | 8 - config/plugins.d/update.conf | 8 - docs/ee.8 | 329 --- ee/__init__.py | 1 - ee/cli/__init__.py | 0 ee/cli/bootstrap.py | 11 - ee/cli/controllers/__init__.py | 0 ee/cli/controllers/base.py | 25 - ee/cli/ext/__init__.py | 0 ee/cli/ext/ee_outputhandler.py | 20 - ee/cli/main.py | 135 -- ee/cli/plugins/__init__.py | 0 ee/cli/plugins/clean.py | 126 - ee/cli/plugins/debug.py | 702 ------ ee/cli/plugins/import_slow_log.py | 34 - ee/cli/plugins/info.py | 198 -- ee/cli/plugins/log.py | 578 ----- ee/cli/plugins/models.py | 57 - ee/cli/plugins/secure.py | 144 -- ee/cli/plugins/site.py | 1552 ------------ ee/cli/plugins/site_functions.py | 1164 --------- ee/cli/plugins/sitedb.py | 126 - ee/cli/plugins/stack.py | 2085 ----------------- ee/cli/plugins/stack_migrate.py | 128 - ee/cli/plugins/stack_services.py | 374 --- ee/cli/plugins/stack_upgrade.py | 244 -- ee/cli/plugins/sync.py | 95 - ee/cli/plugins/update.py | 45 - .../templates/15-content_filter_mode.mustache | 27 - ee/cli/templates/22222.mustache | 64 - ee/cli/templates/50-user.mustache | 17 - ee/cli/templates/__init__.py | 0 ee/cli/templates/acl.mustache | 8 - ee/cli/templates/anemometer.mustache | 255 -- ee/cli/templates/auth-sql-conf.mustache | 11 - ee/cli/templates/blockips.mustache | 2 - ee/cli/templates/default-sieve.mustache | 4 - ee/cli/templates/dovecot-sql-conf.mustache | 12 - ee/cli/templates/dovecot.mustache | 60 - ee/cli/templates/ee-plus.mustache | 84 - ee/cli/templates/fastcgi.mustache | 10 - ee/cli/templates/info_mysql.mustache | 9 - ee/cli/templates/info_nginx.mustache | 10 - ee/cli/templates/info_php.mustache | 35 - ee/cli/templates/locations.mustache | 65 - ee/cli/templates/nginx-core.mustache | 60 - ee/cli/templates/pagespeed-common.mustache | 44 - ee/cli/templates/pagespeed-global.mustache | 21 - ee/cli/templates/php-hhvm.mustache | 10 - ee/cli/templates/php.mustache | 10 - ee/cli/templates/redis-hhvm.mustache | 58 - ee/cli/templates/redis.mustache | 57 - ee/cli/templates/siteinfo.mustache | 12 - ee/cli/templates/upstream.mustache | 16 - ee/cli/templates/vimbadmin.mustache | 662 ------ ee/cli/templates/virtual_alias_maps.mustache | 5 - .../templates/virtual_domains_maps.mustache | 5 - .../templates/virtual_mailbox_maps.mustache | 7 - ee/cli/templates/virtualconf.mustache | 49 - ee/cli/templates/w3tc-hhvm.mustache | 31 - ee/cli/templates/w3tc.mustache | 31 - ee/cli/templates/wpcommon.mustache | 35 - ee/cli/templates/wpfc-hhvm.mustache | 37 - ee/cli/templates/wpfc.mustache | 37 - ee/cli/templates/wpsc-hhvm.mustache | 31 - ee/cli/templates/wpsc.mustache | 31 - ee/cli/templates/wpsubdir.mustache | 10 - ee/core/__init__.py | 0 ee/core/addswap.py | 48 - ee/core/apt_repo.py | 91 - ee/core/aptget.py | 197 -- ee/core/checkfqdn.py | 23 - ee/core/database.py | 28 - ee/core/domainvalidate.py | 24 - ee/core/download.py | 43 - ee/core/exc.py | 26 - ee/core/extract.py | 21 - ee/core/fileutils.py | 245 -- ee/core/git.py | 57 - ee/core/logging.py | 47 - ee/core/logwatch.py | 195 -- ee/core/mysql.py | 137 -- ee/core/nginxhashbucket.py | 44 - ee/core/sendmail.py | 33 - ee/core/services.py | 132 -- ee/core/shellexec.py | 52 - ee/core/variables.py | 185 -- ee/utils/__init__.py | 0 ee/utils/test.py | 15 - install | 563 ----- requirements.txt | 1 - setup.cfg | 9 - setup.py | 99 - tests/__init__.py | 0 tests/cli/13_test_stack.py | 76 - tests/cli/2_test_stack_services_start.py | 52 - tests/cli/3_test_stack_services_status.py | 52 - tests/cli/4_test_stack_services_stop.py | 52 - tests/cli/5_test_stack_services_restart.py | 52 - tests/cli/8_test_site_create.py | 73 - tests/cli/91_test_site_info.py | 16 - tests/cli/93_test_site_list.py | 22 - tests/cli/95_test_site_show.py | 16 - tests/cli/97_test_site_update.py | 73 - tests/cli/9_test_site_enable.py | 16 - tests/cli/__init__.py | 0 tests/cli/a_test_site_disable.py | 16 - tests/cli/ext/__init__.py | 0 tests/cli/plugins/__init__.py | 0 tests/cli/plugins/test_example.py | 8 - tests/cli/test_clean.py | 40 - tests/cli/test_debug.py | 95 - tests/cli/test_info.py | 28 - tests/cli/test_secure.py | 28 - tests/cli/test_site_delete.py | 38 - tests/cli/test_stack_purge.py | 76 - tests/cli/test_stack_remove.py | 76 - tests/core/__init__.py | 0 129 files changed, 26 insertions(+), 13932 deletions(-) create mode 100644 .editorconfig delete mode 100644 config/bash_completion.d/ee_auto.rc delete mode 100644 config/ee.conf delete mode 100644 config/plugins.d/clean.conf delete mode 100644 config/plugins.d/debug.conf delete mode 100644 config/plugins.d/import_slow_log.conf delete mode 100644 config/plugins.d/info.conf delete mode 100644 config/plugins.d/log.conf delete mode 100644 config/plugins.d/secure.conf delete mode 100644 config/plugins.d/site.conf delete mode 100644 config/plugins.d/stack.conf delete mode 100644 config/plugins.d/update.conf delete mode 100644 docs/ee.8 delete mode 100644 ee/__init__.py delete mode 100644 ee/cli/__init__.py delete mode 100644 ee/cli/bootstrap.py delete mode 100644 ee/cli/controllers/__init__.py delete mode 100644 ee/cli/controllers/base.py delete mode 100644 ee/cli/ext/__init__.py delete mode 100644 ee/cli/ext/ee_outputhandler.py delete mode 100644 ee/cli/main.py delete mode 100644 ee/cli/plugins/__init__.py delete mode 100644 ee/cli/plugins/clean.py delete mode 100644 ee/cli/plugins/debug.py delete mode 100644 ee/cli/plugins/import_slow_log.py delete mode 100644 ee/cli/plugins/info.py delete mode 100644 ee/cli/plugins/log.py delete mode 100644 ee/cli/plugins/models.py delete mode 100644 ee/cli/plugins/secure.py delete mode 100644 ee/cli/plugins/site.py delete mode 100644 ee/cli/plugins/site_functions.py delete mode 100644 ee/cli/plugins/sitedb.py delete mode 100644 ee/cli/plugins/stack.py delete mode 100644 ee/cli/plugins/stack_migrate.py delete mode 100644 ee/cli/plugins/stack_services.py delete mode 100644 ee/cli/plugins/stack_upgrade.py delete mode 100644 ee/cli/plugins/sync.py delete mode 100644 ee/cli/plugins/update.py delete mode 100644 ee/cli/templates/15-content_filter_mode.mustache delete mode 100644 ee/cli/templates/22222.mustache delete mode 100644 ee/cli/templates/50-user.mustache delete mode 100644 ee/cli/templates/__init__.py delete mode 100644 ee/cli/templates/acl.mustache delete mode 100644 ee/cli/templates/anemometer.mustache delete mode 100644 ee/cli/templates/auth-sql-conf.mustache delete mode 100644 ee/cli/templates/blockips.mustache delete mode 100644 ee/cli/templates/default-sieve.mustache delete mode 100644 ee/cli/templates/dovecot-sql-conf.mustache delete mode 100644 ee/cli/templates/dovecot.mustache delete mode 100644 ee/cli/templates/ee-plus.mustache delete mode 100644 ee/cli/templates/fastcgi.mustache delete mode 100644 ee/cli/templates/info_mysql.mustache delete mode 100644 ee/cli/templates/info_nginx.mustache delete mode 100644 ee/cli/templates/info_php.mustache delete mode 100644 ee/cli/templates/locations.mustache delete mode 100644 ee/cli/templates/nginx-core.mustache delete mode 100644 ee/cli/templates/pagespeed-common.mustache delete mode 100644 ee/cli/templates/pagespeed-global.mustache delete mode 100644 ee/cli/templates/php-hhvm.mustache delete mode 100644 ee/cli/templates/php.mustache delete mode 100644 ee/cli/templates/redis-hhvm.mustache delete mode 100644 ee/cli/templates/redis.mustache delete mode 100644 ee/cli/templates/siteinfo.mustache delete mode 100644 ee/cli/templates/upstream.mustache delete mode 100644 ee/cli/templates/vimbadmin.mustache delete mode 100644 ee/cli/templates/virtual_alias_maps.mustache delete mode 100644 ee/cli/templates/virtual_domains_maps.mustache delete mode 100644 ee/cli/templates/virtual_mailbox_maps.mustache delete mode 100644 ee/cli/templates/virtualconf.mustache delete mode 100644 ee/cli/templates/w3tc-hhvm.mustache delete mode 100644 ee/cli/templates/w3tc.mustache delete mode 100644 ee/cli/templates/wpcommon.mustache delete mode 100644 ee/cli/templates/wpfc-hhvm.mustache delete mode 100644 ee/cli/templates/wpfc.mustache delete mode 100644 ee/cli/templates/wpsc-hhvm.mustache delete mode 100644 ee/cli/templates/wpsc.mustache delete mode 100644 ee/cli/templates/wpsubdir.mustache delete mode 100644 ee/core/__init__.py delete mode 100644 ee/core/addswap.py delete mode 100644 ee/core/apt_repo.py delete mode 100644 ee/core/aptget.py delete mode 100644 ee/core/checkfqdn.py delete mode 100644 ee/core/database.py delete mode 100644 ee/core/domainvalidate.py delete mode 100644 ee/core/download.py delete mode 100644 ee/core/exc.py delete mode 100644 ee/core/extract.py delete mode 100644 ee/core/fileutils.py delete mode 100644 ee/core/git.py delete mode 100644 ee/core/logging.py delete mode 100644 ee/core/logwatch.py delete mode 100644 ee/core/mysql.py delete mode 100644 ee/core/nginxhashbucket.py delete mode 100644 ee/core/sendmail.py delete mode 100644 ee/core/services.py delete mode 100644 ee/core/shellexec.py delete mode 100644 ee/core/variables.py delete mode 100644 ee/utils/__init__.py delete mode 100644 ee/utils/test.py delete mode 100644 install delete mode 100644 requirements.txt delete mode 100644 setup.cfg delete mode 100644 setup.py delete mode 100644 tests/__init__.py delete mode 100644 tests/cli/13_test_stack.py delete mode 100644 tests/cli/2_test_stack_services_start.py delete mode 100644 tests/cli/3_test_stack_services_status.py delete mode 100644 tests/cli/4_test_stack_services_stop.py delete mode 100644 tests/cli/5_test_stack_services_restart.py delete mode 100644 tests/cli/8_test_site_create.py delete mode 100644 tests/cli/91_test_site_info.py delete mode 100644 tests/cli/93_test_site_list.py delete mode 100644 tests/cli/95_test_site_show.py delete mode 100644 tests/cli/97_test_site_update.py delete mode 100644 tests/cli/9_test_site_enable.py delete mode 100644 tests/cli/__init__.py delete mode 100644 tests/cli/a_test_site_disable.py delete mode 100644 tests/cli/ext/__init__.py delete mode 100644 tests/cli/plugins/__init__.py delete mode 100644 tests/cli/plugins/test_example.py delete mode 100644 tests/cli/test_clean.py delete mode 100644 tests/cli/test_debug.py delete mode 100644 tests/cli/test_info.py delete mode 100644 tests/cli/test_secure.py delete mode 100644 tests/cli/test_site_delete.py delete mode 100644 tests/cli/test_stack_purge.py delete mode 100644 tests/cli/test_stack_remove.py delete mode 100644 tests/core/__init__.py diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..1ab50238 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +# Matches project php files the composer.json and .travis.yml +[php/**/*.php, php/**/*.php] +indent_style = space +indent_size = 4 + +# Matches the composer.json and .travis.yml +[{composer.json,.travis.yml}] +indent_style = space +indent_size = 2 diff --git a/.gitignore b/.gitignore index 41b775bf..ee37a1d6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,66 +1,6 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -.idea/ - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.cache -nosetests.xml -coverage.xml - -# Translations -*.mo -*.pot - -# Django stuff: -*.log - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - - -# Vim .swp file -*.swp - -# Folder created for Nose testing -bin/ -coverage_report/ -include/ -local/ -man/ +composer.lock +config.yml +/cache +/vendor +/*.phar +/phpunit.xml diff --git a/config/bash_completion.d/ee_auto.rc b/config/bash_completion.d/ee_auto.rc deleted file mode 100644 index 0b7011cc..00000000 --- a/config/bash_completion.d/ee_auto.rc +++ /dev/null @@ -1,384 +0,0 @@ -_ee_complete() -{ - local cur prev BASE_LEVEL - - COMPREPLY=() - cur=${COMP_WORDS[COMP_CWORD]} - prev=${COMP_WORDS[COMP_CWORD-1]} - mprev=${COMP_WORDS[COMP_CWORD-2]} - - - # SETUP THE BASE LEVEL (everything after "ee") - if [ $COMP_CWORD -eq 1 ]; then - COMPREPLY=( $(compgen \ - -W "stack site debug clean secure import-slow-log log update sync info --version --help --quiet" \ - -- $cur) ) - - - # SETUP THE SECOND LEVEL (EVERYTHING AFTER "ee second") - elif [ $COMP_CWORD -eq 2 ]; then - case "$prev" in - - # HANDLE EVERYTHING AFTER THE SECOND LEVEL NAMESPACE - "clean") - COMPREPLY=( $(compgen \ - -W "--memcache --opcache --fastcgi --pagespeed --redis --all" \ - -- $cur) ) - ;; - - # IF YOU HAD ANOTHER CONTROLLER, YOU'D HANDLE THAT HERE - "debug") - COMPREPLY=( $(compgen \ - -W "$(command find /etc/nginx/sites-enabled/ -type l -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql -i --interactive --all --import-slow-log --import-slow-log-interval= --nginx=off --php=off --fpm=off --mysql=off --all=off " \ - -- $cur) ) - ;; - - "stack") - COMPREPLY=( $(compgen \ - -W "upgrade install purge reload remove restart start status stop migrate" \ - -- $cur) ) - ;; - - "site") - COMPREPLY=( $(compgen \ - -W "cd create delete disable edit enable info list log show update" \ - -- $cur) ) - ;; - - "secure") - COMPREPLY=( $(compgen \ - -W "--auth --port --ip" \ - -- $cur) ) - ;; - - "info") - COMPREPLY=( $(compgen \ - -W "--mysql --php --nginx" \ - -- $cur) ) - ;; - - "log") - COMPREPLY=( $(compgen \ - -W "show reset gzip mail" \ - -- $cur) ) - ;; - - # EVERYTHING ELSE - *) - ;; - esac - - # SETUP THE THIRD LEVEL (EVERYTHING AFTER "ee second third") - elif [ $COMP_CWORD -eq 3 ]; then - case "$prev" in - # HANDLE EVERYTHING AFTER THE THIRD LEVEL NAMESPACE - "install" | "purge" | "remove" ) - COMPREPLY=( $(compgen \ - -W "--pagespeed --web --admin --mail --nginx --php --mysql --postfix --wpcli --phpmyadmin --adminer --utils --all --mailscanner --hhvm --redis --phpredisadmin" \ - -- $cur) ) - ;; - "upgrade" ) - COMPREPLY=( $(compgen \ - -W "--web --mail --nginx --php --mysql --postfix --all --hhvm --php56 --no-prompt --wpcli" \ - -- $cur) ) - ;; - "start" | "stop" | "reload" | "restart" | "status") - COMPREPLY=( $(compgen \ - -W "--nginx --php --mysql --postfix --memcache --dovecot --redis" \ - -- $cur) ) - ;; - "migrate") - COMPREPLY=( $(compgen \ - -W "--mariadb" \ - -- $cur) ) - ;; - "list") - COMPREPLY=( $(compgen \ - -W "--enabled --disabled" \ - -- $cur) ) - ;; - - "edit" | "enable" | "info" | "log" | "show" | "cd" | "delete") - if [ ${COMP_WORDS[1]} == "log" ]; then - COMPREPLY=( $(compgen \ - -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql --access" \ - -- $cur) ) - else - COMPREPLY=( $(compgen \ - -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null)" \ - -- $cur) ) - fi - ;; - "update") - COMPREPLY=( $(compgen \ - -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null) --all" \ - -- $cur) ) - ;; - "gzip") - COMPREPLY=( $(compgen \ - -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql --access" \ - -- $cur) ) - ;; - - "mail") - COMPREPLY=( $(compgen \ - -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql --access --to=" \ - -- $cur) ) - ;; - - "reset") - COMPREPLY=( $(compgen \ - -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql --wp --access --slow-log-db" \ - -- $cur) ) - ;; - - "disable") - COMPREPLY=( $(compgen \ - -W "$(command find /etc/nginx/sites-enabled/ -type l -printf "%P " 2> /dev/null)" \ - -- $cur) ) - ;; - - *) - ;; - esac - - if [ ${COMP_WORDS[1]} == "debug" ] && ([ "$prev" != "--start" ] && [ "$prev" != "--nginx" ] && [ "$prev" != "--php" ] && [ "$prev" != "--fpm" ] && [ "$prev" != "--mysql" ] && [ "$prev" != "-i" ] && [ "$prev" != "--interactive" ] && [ "$prev" != "--import-slow-log" ] && [ "$prev" != "--stop" ]); then - retlist="--all --wp --rewrite -i --all=off --wp=off --rewrite=off" - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - fi - - #if [ ${COMP_WORDS[1]} == "log" ] && ([ "$prev" != "--access" ] || [ "$prev" != "--nginx" ] || [ "$prev" != "--php" ] || [ "$prev" != "--fpm" ] || [ "$prev" != "--mysql" ] || [ "$prev" != "-i" ] || ["$prev" != "--interactive" ] || ["$prev" != "--stop" ]); then - # retlist="--all --wp --rewrite -i --all=off --wp=off --rewrite=off" - # ret="${retlist[@]/$prev}" - # COMPREPLY=( $(compgen \ - # -W "$(echo $ret)" \ - # -- $cur) ) - #fi - - - elif [ $COMP_CWORD -eq 4 ]; then - case "$mprev" in - # HANDLE EVERYTHING AFTER THE THIRD LEVEL NAMESPACE - - "create") - COMPREPLY=( $(compgen \ - -W "--user --pass --email --html --php --mysql --wp --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --proxy= --pagespeed --wpredis" \ - -- $cur) ) - ;; - - "update") - COMPREPLY=( $(compgen \ - -W "--password --php --mysql --wp --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --hhvm=off --pagespeed --pagespeed=off --wpredis" \ - -- $cur) ) - ;; - "delete") - COMPREPLY=( $(compgen \ - -W "--db --files --all --no-prompt --force -f" \ - -- $cur) ) - ;; - "show") - COMPREPLY=( $(compgen \ - -W "--wp --nginx --php --fpm --mysql --access" \ - -- $cur) ) - ;; - - "gzip") - COMPREPLY=( $(compgen \ - -W "--wp --nginx --php --fpm --mysql --access" \ - -- $cur) ) - ;; - - "mail") - COMPREPLY=( $(compgen \ - -W "--wp --nginx --php --fpm --mysql --access --to=" \ - -- $cur) ) - ;; - - "reset") - COMPREPLY=( $(compgen \ - -W "--wp --nginx --php --fpm --mysql --wp --access --slow-log-db" \ - -- $cur) ) - ;; - edit) - COMPREPLY=( $(compgen \ - -W "--pagespeed" \ - -- $cur) ) - ;; - *) - ;; - esac - - fi - - case "$prev" in - "--wp") - if [ ${COMP_WORDS[1]} != "debug" ]; then - if [ ${COMP_WORDS[2]} == "create" ]; then - retlist="--wp --wpsc --w3tc --wpfc --pagespeed --hhvm --user --email --pass --wpredis" - elif [ ${COMP_WORDS[2]} == "update" ]; then - retlist="--wp --w3tc --wpfc --wpsc --pagespeed --hhvm --pagespeed=off --hhvm=off --wpredis" - else - retlist="" - fi - else - retlist="--wp --wp=off --rewrite --rewrite=off -i --interactive" - fi - - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - ;; - - "--wpsubdir" | "--wpsubdomain") - if [ ${COMP_WORDS[1]} != "debug" ]; then - if [ ${COMP_WORDS[2]} == "create" ]; then - retlist="--wpsc --w3tc --wpfc --pagespeed --hhvm --user --email --pass --wpredis" - elif [ ${COMP_WORDS[2]} == "update" ]; then - retlist="--w3tc --wpfc --wpsc --pagespeed --hhvm --pagespeed=off --hhvm=off --wpredis" - else - retlist="" - fi - else - retlist="--wp=off --rewrite --rewrite=off -i --interactive" - fi - - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - ;; - - "--pagespeed" | "--hhvm" | "--wpredis" | "--w3tc" | "--wpfc" | "--wpsc" | "--wpsubdir" | "--wpsubdomain" | "--user" | "--pass" | "--email" | "--wp") - if [ ${COMP_WORDS[2]} == "create" ]; then - retlist="--user --pass --email --wp --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --pagespeed --experimenal --wpredis" - else - retlist="" - fi - - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - ;; - - "--pagespeed" | "--hhvm" | "--wpredis" | "--w3tc" | "--wpfc") - if [ ${COMP_WORDS[2]} == "update" ]; then - retlist="--password --php --mysql --wp --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --hhvm=off --pagespeed --pagespeed=off --experimenal --wpredis" - else - retlist="" - fi - - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - ;; - - "--web" | "--admin" | "--mail" | "--nginx" | "--php" | "--mysql" | "--postfix" | "--wpcli" | "--phpmyadmin" | "--adminer" | "--utils" | "--memcache" | "--dovecot" | "--redis | --phpredisadmin") - if [[ ${COMP_WORDS[2]} == "install" || ${COMP_WORDS[2]} == "purge" || ${COMP_WORDS[2]} == "remove" ]]; then - retlist="--web --admin --mail --nginx --php --mysql --postfix --wpcli --phpmyadmin --adminer --utils --memcache --dovecot --redis --phpredisadmin" - elif [[ ${COMP_WORDS[2]} == "start" || ${COMP_WORDS[2]} == "reload" || ${COMP_WORDS[2]} == "restart" || ${COMP_WORDS[2]} == "stop" ]]; then - retlist="--nginx --php --mysql --postfix --memcache --dovecot --redis" - elif [[ ${COMP_WORDS[1]} == "debug" ]]; then - retlist="--start --nginx --php --fpm --mysql -i --interactive -stop --import-slow-log --import-slow-log-interval= -" - if [[ $prev == '--mysql' ]]; then - retlist="--start --nginx --php --fpm --mysql -i --interactive --stop --import-slow-log" - fi - elif [[ ${COMP_WORDS[1]} == "log" ]]; then - if [ ${COMP_WORDS[2]} == "show" ]; then - retlist="--access --nginx --php --mysql --fpm --wp" - - elif [ ${COMP_WORDS[2]} == "reset" ]; then - retlist="--access --nginx --php --mysql --fpm --wp --slow-log-db" - - elif [ ${COMP_WORDS[2]} == "mail" ]; then - retlist="--access --nginx --php --mysql --fpm --wp --to=" - - fi - fi - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - ;; - - "--db" | "--files" | "--force") - retlist="--db --files --all --force" - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - ;; - - "--all") - if [ ${COMP_WORDS[1]} == "clean" ]; then - retlist="--memcache --opcache --fastcgi --redis" - elif [ ${COMP_WORDS[2]} == "delete" ]; then - retlist="--db --files --force" - elif [ ${COMP_WORDS[2]} == "update" ]; then - retlist="--password --php --mysql --wp --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --hhvm=off --pagespeed --pagespeed=off --wpredis" - else - retlist="" - fi - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - ;; - - "--memcache" | "--opcache" | "--fastcgi" | "--all" | "--redis" | "--pagespeed") - retlist="--memcache --opcache --fastcgi --pagespeed --redis --all" - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - ;; - "--auth" | "--port" | "--ip") - retlist="--auth --port --ip" - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - ;; - "--access" | "--fpm" | "--wp" | "--slow-log-db") - if [[ ${COMP_WORDS[1]} == "log" ]]; then - if [ ${COMP_WORDS[2]} == "show" ]; then - retlist="--access --nginx --php --mysql --fpm --wp" - - elif [ ${COMP_WORDS[2]} == "reset" ]; then - retlist="--access --nginx --php --mysql --fpm --wp --slow-log-db" - - - elif [ ${COMP_WORDS[2]} == "mail" ]; then - retlist="--access --nginx --php --mysql --fpm --wp --to=" - - fi - fi - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - ;; - *) - ;; - esac - case "$mprev" in - "--user" | "--email" | "--pass") - if [ ${COMP_WORDS[2]} == "create" ]; then - retlist="--user --pass --email --html --php --mysql --wp --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --pagespeed --wpredis" - fi - ret="${retlist[@]/$prev}" - COMPREPLY=( $(compgen \ - -W "$(echo $ret)" \ - -- $cur) ) - ;; - esac - - return 0 - -} && -complete -F _ee_complete ee diff --git a/config/ee.conf b/config/ee.conf deleted file mode 100644 index 9d94df02..00000000 --- a/config/ee.conf +++ /dev/null @@ -1,82 +0,0 @@ -# EasyEngine Configuration -# -# All commented values are the application default -# - -[ee] - -### Toggle application level debug (does not toggle framework debugging) -# debug = false - -### Where external (third-party) plugins are loaded from -# plugin_dir = /var/lib/ee/plugins/ - -### Where all plugin configurations are loaded from -# plugin_config_dir = /etc/ee/plugins.d/ - -### Where external templates are loaded from -# template_dir = /var/lib/ee/templates/ - - -[log.logging] - -### Where the log file lives (no log file by default) -file = /var/log/ee/ee.log - -### The level for which to log. One of: info, warn, error, fatal, debug -level = debug - -### Whether or not to log to console -to_console = false - -### Whether or not to rotate the log file when it reaches `max_bytes` -rotate = true - -### Max size in bytes that a log file can grow until it is rotated. -max_bytes = 512000 - -### The maximun number of log files to maintain when rotating -max_files = 7 - -[stack] - -### IP address that will be used in Nginx configurations while installing -ip-address = 127.0.0.1 - -[mysql] - -### MySQL database grant host name -grant-host = localhost - -### Ask for MySQL db name while site creation -db-name = False - -### Ask for MySQL user name while site creation -db-user = False - -[wordpress] - -### Ask for WordPress prefix while site creation -prefix = False - -### User name for WordPress sites -user = - -### Password for WordPress sites -password = - -### EMail for WordPress sites -email = - -[update] - -### If enabled, load a plugin named `update` either from the Python module -### `ee.cli.plugins.example` or from the file path -### `/var/lib/ee/plugins/example.py` -enable_plugin = true - -[sync] -### If enabled, load a plugin named `update` either from the Python module -### `ee.cli.plugins.example` or from the file path -### `/var/lib/ee/plugins/example.py` -enable_plugin = true diff --git a/config/plugins.d/clean.conf b/config/plugins.d/clean.conf deleted file mode 100644 index be834348..00000000 --- a/config/plugins.d/clean.conf +++ /dev/null @@ -1,8 +0,0 @@ -### Example Plugin Configuration for EasyEngine - -[clean] - -### If enabled, load a plugin named `example` either from the Python module -### `ee.cli.plugins.example` or from the file path -### `/var/lib/ee/plugins/example.py` -enable_plugin = true diff --git a/config/plugins.d/debug.conf b/config/plugins.d/debug.conf deleted file mode 100644 index 9ccdf106..00000000 --- a/config/plugins.d/debug.conf +++ /dev/null @@ -1,8 +0,0 @@ -### Example Plugin Configuration for EasyEngine - -[debug] - -### If enabled, load a plugin named `example` either from the Python module -### `ee.cli.plugins.example` or from the file path -### `/var/lib/ee/plugins/example.py` -enable_plugin = true diff --git a/config/plugins.d/import_slow_log.conf b/config/plugins.d/import_slow_log.conf deleted file mode 100644 index d7841dbe..00000000 --- a/config/plugins.d/import_slow_log.conf +++ /dev/null @@ -1,8 +0,0 @@ -### Example Plugin Configuration for EasyEngine - -[import_slow_log] - -### If enabled, load a plugin named `example` either from the Python module -### `ee.cli.plugins.example` or from the file path -### `/var/lib/ee/plugins/example.py` -enable_plugin = true diff --git a/config/plugins.d/info.conf b/config/plugins.d/info.conf deleted file mode 100644 index 59f51a03..00000000 --- a/config/plugins.d/info.conf +++ /dev/null @@ -1,11 +0,0 @@ -### Example Plugin Configuration for EasyEngine - -[info] - -### If enabled, load a plugin named `example` either from the Python module -### `ee.cli.plugins.example` or from the file path -### `/var/lib/ee/plugins/example.py` -enable_plugin = true - -### Additional plugin configuration settings -foo = bar diff --git a/config/plugins.d/log.conf b/config/plugins.d/log.conf deleted file mode 100644 index a17893f5..00000000 --- a/config/plugins.d/log.conf +++ /dev/null @@ -1,8 +0,0 @@ -### Example Plugin Configuration for EasyEngine - -[log] - -### If enabled, load a plugin named `example` either from the Python module -### `ee.cli.plugins.example` or from the file path -### `/var/lib/ee/plugins/example.py` -enable_plugin = true diff --git a/config/plugins.d/secure.conf b/config/plugins.d/secure.conf deleted file mode 100644 index b70f167b..00000000 --- a/config/plugins.d/secure.conf +++ /dev/null @@ -1,8 +0,0 @@ -### Example Plugin Configuration for EasyEngine - -[secure] - -### If enabled, load a plugin named `example` either from the Python module -### `ee.cli.plugins.example` or from the file path -### `/var/lib/ee/plugins/example.py` -enable_plugin = true diff --git a/config/plugins.d/site.conf b/config/plugins.d/site.conf deleted file mode 100644 index 2fb468fe..00000000 --- a/config/plugins.d/site.conf +++ /dev/null @@ -1,8 +0,0 @@ -### Example Plugin Configuration for EasyEngine - -[site] - -### If enabled, load a plugin named `example` either from the Python module -### `ee.cli.plugins.example` or from the file path -### `/var/lib/ee/plugins/example.py` -enable_plugin = true diff --git a/config/plugins.d/stack.conf b/config/plugins.d/stack.conf deleted file mode 100644 index f7bf9b80..00000000 --- a/config/plugins.d/stack.conf +++ /dev/null @@ -1,8 +0,0 @@ -### Example Plugin Configuration for EasyEngine - -[stack] - -### If enabled, load a plugin named `example` either from the Python module -### `ee.cli.plugins.example` or from the file path -### `/var/lib/ee/plugins/example.py` -enable_plugin = true diff --git a/config/plugins.d/update.conf b/config/plugins.d/update.conf deleted file mode 100644 index 27e9c53a..00000000 --- a/config/plugins.d/update.conf +++ /dev/null @@ -1,8 +0,0 @@ -### Example Plugin Configuration for EasyEngine - -[update] - -### If enabled, load a plugin named `example` either from the Python module -### `ee.cli.plugins.example` or from the file path -### `/var/lib/ee/plugins/example.py` -enable_plugin = true diff --git a/docs/ee.8 b/docs/ee.8 deleted file mode 100644 index 7b5d0658..00000000 --- a/docs/ee.8 +++ /dev/null @@ -1,329 +0,0 @@ -.TH ee 8 "EasyEngine (ee) version: 3.3.8" "Sep 10,2015" "EasyEngine" -.SH NAME -.B EasyEngine (ee) -\- Manage Nginx Based Websites. -.SH SYNOPSIS -ee [ --version | --help | info | stack | site | debug | update | clean | import_slow_log | log | secure | sync] -.TP -ee stack [ install | remove | purge | migrate | upgrade] [ --web | --mail | --all | --nginx | --php | --mysql | --admin | --postfix | --mailscanner | --adminer | --redis | --hhvm | --phpmyadmin | --phpredisadmin | --wpcli | --utils ] -.TP -ee stack [ status | start | stop | reload | restart ] [--all | --nginx | --php | --mysql | --devcot | --web | --postfix | --memcache | --redis] -.TP -ee site [ list | info | show | enable | disable | edit | cd | show ] [ example.com ] -.TP -ee site create example.com [ --html | --php | --mysql] [[--wp | --wpsubdir | --wpsubdomain ] [--wpsc | --w3tc | --wpfc | --wpredis | --hhvm | --pagespeed ]] -.TP -ee site update example.com [ --php | --mysql] [[--wp | --wpsubdir | --wpsubdomain ] [--wpsc | --w3tc | --wpfc | --wpredis | --hhvm | --pagespeed ] [--password]] -.TP -ee site delete example.com [--db | --files | --all | --no-prompt | --force/-f ] -.TP -ee debug [ -i | --all=on/off |--nginx=on/off | --rewrite=on/off | --php=on/off | --fpm=on/off | --mysql=on/off ] -.TP -ee debug example.com [ -i | --all=on/off | --nginx=on/off | --rewrite=on/off | --wp=on/off ] -.TP -ee secure [ --auth | --port | --ip ] -.SH DESCRIPTION -EasyEngine aka ee is the opensource project developed with the purpose to automate web-server configuration. -.br -EasyEngine is the collection of python script that provides automation for the web-server -.br -installation, site creation, services debugging & monitoring. -.SH OPTIONS -.TP -.B --version -.br -Display easyengine (ee) version information. -.TP -.B info -.br -ee info - Display Nginx, PHP, MySQL and ee common location information -.br -ee site info - Diplay given website details like enable, disable. weboot and log files. -.TP -.B --help -.br -Display easyengine (ee) help. -.TP -.B stack -.TP -.B install [ --all | --web | --mail | --nginx | --php | --mysql | --redis | --postfix | --adminer | --phpmyadmin | --phpredismyadmin | --wpcli | --utils ] -.br -Install Nginx PHP5 MySQL Postfix stack Packages if not used with -.br -any options.Installs specific package if used with option. -.TP -.B remove [ --all | --web | --mail | --nginx | --php | --mysql | --redis | --postfix | --adminer | --phpmyadmin | --phpredismyadmin | --wpcli | --utils ] -.br -Remove Nginx PHP5 MySQL Postfix stack Packages if not used with -.br -any options. Remove specific package if used with option. -.TP -.B purge [ --all | --web | --mail | --nginx | --php | --mysql | --redis | --postfix | --adminer | --phpmyadmin | --phpredismyadmin | --wpcli | --utils ] -.br -Purge Nginx PHP5 MySQL Postfix stack Packages if not used with any -.br -options.Purge specific package if used with option. -.TP -.B status -.br -Display status of NGINX, PHP5-FPM, MySQL, Postfix, Redis-Server services. -.TP -.B start -.br -Start services NGINX, PHP5-FPM, MySQL, Postfix, Redis-Server. -.TP -.B stop -.br -Stop services NGINX, PHP5-FPM, MySQL, Postfix, Redis-Server. -.TP -.B reload -.br -Reload services NGINX, PHP5-FPM, MySQL, Postfix, Redis-Server. -.TP -.B restart -.br -Restart services NGINX, PHP5-FPM, MySQL, Postfix, Redis-Server. -.TP -.B site -.br -.TP -.B cd [ example.com ] -.br -Change directory to webroot of specified site in subshell. -.TP -.B log [ example.com ] -.br -monitor access and error logs for site specified. -.TP -.B list [ --enabled | --disabled ] -.br -Lists all available sites from /etc/nginx/sites-enabled/ -.br -by default & enable argument. Display sites list from -.br -/etc/nginx/sites-available/ if used with available option. -.TP -.B info [ example.com ] -.br -prints information about site such as access log, error log -.br -location and type of site. -.TP -.B show [ example.com ] -.br -Display NGINX configuration of site. -.TP -.B enable [ example.com ] -.br -Enable site by creating softlink with site file in -.br -/etc/nginx/sites-available to /etc/nginx/sites-enabled/. -.TP -.B disable [ example.com ] -.br -Disable site by Destroying softlink with site file in -.br -/etc/nginx/sites-available to /etc/nginx/sites-enabled/. -.TP -.B edit [ example.com ] -.br -Edit NGINX configuration of site. -.TP -.B create [ example.com ] [ --html | --php | --mysql] [[--wp | --wpsubdir | --wpsubdomain ] [--wpsc | --w3tc | --wpfc | --wpredis | --hhvm | --pagespeed ]] -.br -Create new site according to given options. If no options provided -.br -create static site with html only. -.TP -.B update [ example.com ] [ --html | --php | --mysql] [[--wp | --wpsubdir | --wpsubdomain ] [ --wpsc | --w3tc | --wpfc | --wpredis | --hhvm | --pagespeed ] [--password]] -.br -Update site configuration according to specified options. -.TP -.B delete [ example.com ] [--no-prompt ] [--force/-f] [ --db | --files | --all ] -.br -Delete site i.e webroot, database, ad configuration permanently. -.TP -.B debug [ -i | --nginx=on/off | --php=on/off | --mysql=on/off | --rewrite=on/off | --fpm=on/off ] -.br -Starts server level debugging. If this is used without arguments it will start debugging -.br -all services.Else it will debug only service provided with argument.This will Stop -.br -Debugging if used with --all=off argument. -.TP -.B debug example.com [ -i | --nginx=on/off | --rewrite=on/off | --wp=on/off | --all=on/off ] -.br -Starts site level debugging. If this is used without arguments it will start debugging all -.br -services.Else it will debug only service provided with argument.This will Stop Debugging -.br -if used with --all=off argument. -.TP -.B secure [ --auth | --port | --ip ] -.br -Update security settings. -.TP -.B clean [ --fastcgi | --opcache | --memcache | --redis | --pagespeed | --all ] -.br -Clean NGINX fastCGI cache, Opcache, Memcache, Redis cache, Pagespeed cache. -.br -Clean NGINX fastCGI cache if no option specified. -.SH ARGUMENTS -.TP -.B -i -.br -setup intractive mode while used with debug. -.TP -.B --nginx=on/off -.br -used with ee debug command. used to start or stop nginx debugging. -.TP -.B --php=on/off -.br -used with ee debug command. used to start or stop php debugging. -.TP -.B --mysql=on/off -.br -used with ee debug command. used to start or stop mysql debugging. -.TP -.B --rewrite=on/off -.br -used with ee debug command. used to start or stop nginx rewrite rules debugging. -.TP -.B --fpm=on/off -.br -used with ee debug command. used to start or stop fpm debugging. -.TP -.B --wp=on/off -.br -used with ee debug command. used to start or stop wordpress site debugging. -.TP -.B --all=on/off -.br -used with ee debug command. used to stop debugging. -.TP -.B --all=off -.br -used with ee debug command. used to stop debugging. -.TP -.B --html -.br -Create a HTML website. -.TP -.B --php -.br -Create a PHP website. -.TP -.B --mysql -.br -Create a PHP+MySQL website. -.TP -.B --wp -.br -Create a WordPress Website. -.TP -.B --wpsubdir -.br -Create a Wordpress Multisite with Sub Directories Setup. -.TP -.B --wpsubdomain -.br -Create a Wordpress Multisite with Sub Domains Setup. -.br -.TP -.B --db -.br -Delete website database. -.br -.TP -.B --files -.br -Delete website webroot. -.br -.TP -.B --no-prompt -.br -Does not prompt for confirmation when delete command used. -.br -.TP -.B --force/-f -.br -Delete website webroot and database forcefully.Remove nginx configuration for site. -.br -.TP -.B --auth -.br -used with ee secure command. Update credential of HTTP authentication -.TP -.B --port -.br -used with ee secure command. Change EasyEngine admin port 22222. -.TP -.B --ip -.br -used with ee secure command. Update whitelist IP address -.SH WORDPRESS CACHING OPTIONS -.TP -.B --w3tc -.br -Install and activate Nginx-helper and W3 Total Cache plugin. -.TP -.B --wpsc -.br -Install and activate Nginx-helper and WP Super Cache plugin. -.TP -.B --wpfc -.br -Install and activate Nginx-helper and W3 Total Cache plugin with -.br -Nginx FastCGI cache. -.TP -.B --wpredis -.br -Install, activate, configure Nginx-helper and Redis Object Cache Plugin, Configure NGINX for Redis Page Caching. -.TP -.B --hhvm -.br -Install, activate Nginx-helper and configure NGINX for HHVM. -.SH FILES -.br -/etc/easyengine/ee.conf -.SH BUGS -Report bugs at -.SH AUTHOR -.br -.B rtCamp Team -.I \ -.br -.B Mitesh Shah -.I \ -.br -.B Manish -.I \ -.br -.B Gaurav -.I \ -.br -.B Harshad -.I \ -.br -.B Shital -.I \ -.br -.B Prabuddha -.I \ -.br -.B Rajdeep Sharma -.I \ -.br - -.SH "SEE ALSO" -.br -EE: -.I https://rtcamp.com/easyengine/ -.br -FAQ: -.I https://rtcamp.com/easyengine/faq/ -.br -DOCS: -.I https://rtcamp.com/easyengine/docs/ diff --git a/ee/__init__.py b/ee/__init__.py deleted file mode 100644 index de40ea7c..00000000 --- a/ee/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__import__('pkg_resources').declare_namespace(__name__) diff --git a/ee/cli/__init__.py b/ee/cli/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ee/cli/bootstrap.py b/ee/cli/bootstrap.py deleted file mode 100644 index a5ce6d75..00000000 --- a/ee/cli/bootstrap.py +++ /dev/null @@ -1,11 +0,0 @@ -"""EasyEngine bootstrapping.""" - -# All built-in application controllers should be imported, and registered -# in this file in the same way as EEBaseController. - -from cement.core import handler -from ee.cli.controllers.base import EEBaseController - - -def load(app): - handler.register(EEBaseController) diff --git a/ee/cli/controllers/__init__.py b/ee/cli/controllers/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ee/cli/controllers/base.py b/ee/cli/controllers/base.py deleted file mode 100644 index 3c2354ab..00000000 --- a/ee/cli/controllers/base.py +++ /dev/null @@ -1,25 +0,0 @@ -"""EasyEngine base controller.""" - -from cement.core.controller import CementBaseController, expose -from ee.core.variables import EEVariables -VERSION = EEVariables.ee_version - -BANNER = """ -EasyEngine v%s -Copyright (c) 2015 rtCamp Solutions Pvt. Ltd. -""" % VERSION - - -class EEBaseController(CementBaseController): - class Meta: - label = 'base' - description = ("EasyEngine is the commandline tool to manage your" - " websites based on WordPress and Nginx with easy to" - " use commands") - arguments = [ - (['-v', '--version'], dict(action='version', version=BANNER)), - ] - - @expose(hide=True) - def default(self): - self.app.args.print_help() diff --git a/ee/cli/ext/__init__.py b/ee/cli/ext/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ee/cli/ext/ee_outputhandler.py b/ee/cli/ext/ee_outputhandler.py deleted file mode 100644 index 89e397d4..00000000 --- a/ee/cli/ext/ee_outputhandler.py +++ /dev/null @@ -1,20 +0,0 @@ -# Based on https://github.com/datafolklabs/cement/issues/295 -# To avoid encoding releated error,we defined our custom output handler -# I hope we will remove this when we upgarde to Cement 2.6 (Not released yet) -import os -from cement.utils import fs -from cement.ext.ext_mustache import MustacheOutputHandler - - -class EEOutputHandler(MustacheOutputHandler): - class Meta: - label = 'ee_output_handler' - - def _load_template_from_file(self, path): - for templ_dir in self.app._meta.template_dirs: - full_path = fs.abspath(os.path.join(templ_dir, path)) - if os.path.exists(full_path): - self.app.log.debug('loading template file %s' % full_path) - return open(full_path, encoding='utf-8', mode='r').read() - else: - continue diff --git a/ee/cli/main.py b/ee/cli/main.py deleted file mode 100644 index cd72f0d1..00000000 --- a/ee/cli/main.py +++ /dev/null @@ -1,135 +0,0 @@ -"""EasyEngine main application entry point.""" -import sys -import os - -# this has to happen after you import sys, but before you import anything -# from Cement "source: https://github.com/datafolklabs/cement/issues/290" -if '--debug' in sys.argv: - sys.argv.remove('--debug') - TOGGLE_DEBUG = True -else: - TOGGLE_DEBUG = False - -from cement.core import foundation -from cement.utils.misc import init_defaults -from cement.core.exc import FrameworkError, CaughtSignal -from cement.ext.ext_argparse import ArgParseArgumentHandler -from ee.core import exc -from ee.cli.ext.ee_outputhandler import EEOutputHandler - -# Application default. Should update config/ee.conf to reflect any -# changes, or additions here. -defaults = init_defaults('ee') - -# All internal/external plugin configurations are loaded from here -defaults['ee']['plugin_config_dir'] = '/etc/ee/plugins.d' - -# External plugins (generally, do not ship with application code) -defaults['ee']['plugin_dir'] = '/var/lib/ee/plugins' - -# External templates (generally, do not ship with application code) -defaults['ee']['template_dir'] = '/var/lib/ee/templates' - - -class EEArgHandler(ArgParseArgumentHandler): - class Meta: - label = 'ee_args_handler' - - def error(self, message): - super(EEArgHandler, self).error("unknown args") - - -class EEApp(foundation.CementApp): - class Meta: - label = 'ee' - - config_defaults = defaults - - # All built-in application bootstrapping (always run) - bootstrap = 'ee.cli.bootstrap' - - # Optional plugin bootstrapping (only run if plugin is enabled) - plugin_bootstrap = 'ee.cli.plugins' - - # Internal templates (ship with application code) - template_module = 'ee.cli.templates' - - # Internal plugins (ship with application code) - plugin_bootstrap = 'ee.cli.plugins' - - extensions = ['mustache'] - - # default output handler - output_handler = EEOutputHandler - - arg_handler = EEArgHandler - - debug = TOGGLE_DEBUG - - -class EETestApp(EEApp): - """A test app that is better suited for testing.""" - class Meta: - argv = [] - config_files = [] - - -# Define the applicaiton object outside of main, as some libraries might wish -# to import it as a global (rather than passing it into another class/func) -app = EEApp() - - -def main(): - try: - global sys - # Default our exit status to 0 (non-error) - code = 0 - - # if not root...kick out - if not os.geteuid() == 0: - print("\nOnly root or sudo user can run this EasyEngine\n") - app.close(1) - - # Setup the application - app.setup() - - # Dump all arguments into ee log - app.log.debug(sys.argv) - - # Run the application - app.run() - except exc.EEError as e: - # Catch our application errors and exit 1 (error) - code = 1 - print(e) - except FrameworkError as e: - # Catch framework errors and exit 1 (error) - code = 1 - print(e) - except CaughtSignal as e: - # Default Cement signals are SIGINT and SIGTERM, exit 0 (non-error) - code = 0 - print(e) - except Exception as e: - code = 1 - print(e) - finally: - # Print an exception (if it occurred) and --debug was passed - if app.debug: - import sys - import traceback - - exc_type, exc_value, exc_traceback = sys.exc_info() - if exc_traceback is not None: - traceback.print_exc() - - # # Close the application - app.close(code) - - -def get_test_app(**kw): - app = EEApp(**kw) - return app - -if __name__ == '__main__': - main() diff --git a/ee/cli/plugins/__init__.py b/ee/cli/plugins/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ee/cli/plugins/clean.py b/ee/cli/plugins/clean.py deleted file mode 100644 index b8657998..00000000 --- a/ee/cli/plugins/clean.py +++ /dev/null @@ -1,126 +0,0 @@ -"""Clean Plugin for EasyEngine.""" - -from ee.core.shellexec import EEShellExec -from ee.core.aptget import EEAptGet -from ee.core.services import EEService -from ee.core.logging import Log -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -import os -import urllib.request - - -def ee_clean_hook(app): - # do something with the ``app`` object here. - pass - - -class EECleanController(CementBaseController): - class Meta: - label = 'clean' - stacked_on = 'base' - stacked_type = 'nested' - description = ('Clean NGINX FastCGI cache, Opcacache, Memcache, Pagespeed Cache, Redis Cache') - arguments = [ - (['--all'], - dict(help='Clean all cache', action='store_true')), - (['--fastcgi'], - dict(help='Clean FastCGI cache', action='store_true')), - (['--memcache'], - dict(help='Clean MemCache', action='store_true')), - (['--opcache'], - dict(help='Clean OpCache', action='store_true')), - (['--pagespeed'], - dict(help='Clean Pagespeed Cache', action='store_true')), - (['--redis'], - dict(help='Clean Redis Cache', action='store_true')), - ] - usage = "ee clean [options]" - - @expose(hide=True) - def default(self): - if (not (self.app.pargs.all or self.app.pargs.fastcgi or - self.app.pargs.memcache or self.app.pargs.opcache or - self.app.pargs.pagespeed or self.app.pargs.redis)): - self.clean_fastcgi() - if self.app.pargs.all: - self.clean_memcache() - self.clean_fastcgi() - self.clean_opcache() - self.clean_redis() - self.clean_pagespeed() - if self.app.pargs.fastcgi: - self.clean_fastcgi() - if self.app.pargs.memcache: - self.clean_memcache() - if self.app.pargs.opcache: - self.clean_opcache() - if self.app.pargs.pagespeed: - self.clean_pagespeed() - if self.app.pargs.redis: - self.clean_redis() - - @expose(hide=True) - def clean_redis(self): - """This function clears Redis cache""" - if(EEAptGet.is_installed(self, "redis-server")): - Log.info(self, "Cleaning Redis cache") - EEShellExec.cmd_exec(self, "redis-cli flushall") - else: - Log.info(self, "Redis is not installed") - - @expose(hide=True) - def clean_memcache(self): - """This function Clears memcache """ - try: - if(EEAptGet.is_installed(self, "memcached")): - EEService.restart_service(self, "memcached") - Log.info(self, "Cleaning MemCache") - else: - Log.info(self, "Memcache not installed") - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to restart Memcached", False) - - @expose(hide=True) - def clean_fastcgi(self): - """This function clears Fastcgi cache""" - if(os.path.isdir("/var/run/nginx-cache")): - Log.info(self, "Cleaning NGINX FastCGI cache") - EEShellExec.cmd_exec(self, "rm -rf /var/run/nginx-cache/*") - else: - Log.error(self, "Unable to clean FastCGI cache", False) - - @expose(hide=True) - def clean_opcache(self): - """This function clears opcache""" - try: - Log.info(self, "Cleaning opcache") - wp = urllib.request.urlopen(" https://127.0.0.1:22222/cache" - "/opcache/opgui.php?page=reset").read() - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.debug(self, "Unable hit url, " - " https://127.0.0.1:22222/cache/opcache/opgui.php?page=reset," - " please check you have admin tools installed") - Log.debug(self, "please check you have admin tools installed," - " or install them with `ee stack install --admin`") - Log.error(self, "Unable to clean opcache", False) - - @expose(hide=True) - def clean_pagespeed(self): - """This function clears Pagespeed cache""" - if(os.path.isdir("/var/ngx_pagespeed_cache")): - Log.info(self, "Cleaning PageSpeed cache") - EEShellExec.cmd_exec(self, "rm -rf /var/ngx_pagespeed_cache/*") - else: - Log.debug(self, "/var/ngx_pagespeed_cache does not exist," - " so cache not cleared") - Log.error(self, "Unable to clean pagespeed cache", False) - - -def load(app): - # register the plugin class.. this only happens if the plugin is enabled - handler.register(EECleanController) - # register a hook (function) to run after arguments are parsed. - hook.register('post_argument_parsing', ee_clean_hook) diff --git a/ee/cli/plugins/debug.py b/ee/cli/plugins/debug.py deleted file mode 100644 index 23bd6aa3..00000000 --- a/ee/cli/plugins/debug.py +++ /dev/null @@ -1,702 +0,0 @@ -"""Debug Plugin for EasyEngine""" - -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from ee.core.shellexec import * -from ee.core.mysql import EEMysql -from ee.core.services import EEService -from ee.core.logging import Log -from ee.cli.plugins.site_functions import logwatch -from ee.core.variables import EEVariables -from ee.core.fileutils import EEFileUtils -from pynginxconfig import NginxConfig -import os -import configparser -import glob -import signal -import subprocess - - -def ee_debug_hook(app): - # do something with the ``app`` object here. - pass - - -class EEDebugController(CementBaseController): - class Meta: - label = 'debug' - description = 'Used for server level debugging' - stacked_on = 'base' - stacked_type = 'nested' - arguments = [ - (['--stop'], - dict(help='Stop debug', action='store_true')), - (['--start'], - dict(help='Start debug', action='store_true')), - (['--import-slow-log'], - dict(help='Import MySQL slow log to Anemometer database', - action='store_true')), - (['--nginx'], - dict(help='start/stop debugging nginx server ' - 'configuration for site', - action='store' or 'store_const', - choices=('on', 'off'), const='on', nargs='?')), - (['--php'], - dict(help='start/stop debugging server php configuration', - action='store' or 'store_const', - choices=('on', 'off'), const='on', nargs='?')), - (['--fpm'], - dict(help='start/stop debugging fastcgi configuration', - action='store' or 'store_const', - choices=('on', 'off'), const='on', nargs='?')), - (['--mysql'], - dict(help='start/stop debugging mysql server', - action='store' or 'store_const', - choices=('on', 'off'), const='on', nargs='?')), - (['--wp'], - dict(help='start/stop wordpress debugging for site', - action='store' or 'store_const', choices=('on', 'off'), - const='on', nargs='?')), - (['--rewrite'], - dict(help='start/stop debugging nginx rewrite rules for site', - action='store' or 'store_const', choices=('on', 'off'), - const='on', nargs='?')), - (['--all'], - dict(help='start/stop debugging all server parameters', - action='store' or 'store_const', choices=('on', 'off'), - const='on', nargs='?')), - (['-i', '--interactive'], - dict(help='Interactive debug', action='store_true')), - (['--import-slow-log-interval'], - dict(help='Import MySQL slow log to Anemometer', - action='store', dest='interval')), - (['site_name'], - dict(help='Website Name', nargs='?', default=None)) - ] - usage = "ee debug [] [options] " - - @expose(hide=True) - def debug_nginx(self): - """Start/Stop Nginx debug""" - # start global debug - if (self.app.pargs.nginx == 'on' and not self.app.pargs.site_name): - try: - debug_address = (self.app.config.get('stack', 'ip-address') - .split()) - except Exception as e: - debug_address = ['0.0.0.0/0'] - - # Check if IP address is 127.0.0.1 then enable debug globally - if debug_address == ['127.0.0.1'] or debug_address == []: - debug_address = ['0.0.0.0/0'] - - for ip_addr in debug_address: - if not ("debug_connection "+ip_addr in open('/etc/nginx/' - 'nginx.conf', encoding='utf-8').read()): - Log.info(self, "Setting up Nginx debug connection" - " for "+ip_addr) - EEShellExec.cmd_exec(self, "sed -i \"/events {{/a\\ \\ \\ " - "\\ $(echo debug_connection " - "{ip}\;)\" /etc/nginx/" - "nginx.conf".format(ip=ip_addr)) - self.trigger_nginx = True - - if not self.trigger_nginx: - Log.info(self, "Nginx debug connection already enabled") - - self.msg = self.msg + ["/var/log/nginx/*.error.log"] - - # stop global debug - elif (self.app.pargs.nginx == 'off' and not self.app.pargs.site_name): - if "debug_connection " in open('/etc/nginx/nginx.conf', - encoding='utf-8').read(): - Log.info(self, "Disabling Nginx debug connections") - EEShellExec.cmd_exec(self, "sed -i \"/debug_connection.*/d\"" - " /etc/nginx/nginx.conf") - self.trigger_nginx = True - else: - Log.info(self, "Nginx debug connection already disabled") - - # start site specific debug - elif (self.app.pargs.nginx == 'on'and self.app.pargs.site_name): - config_path = ("/etc/nginx/sites-available/{0}" - .format(self.app.pargs.site_name)) - if os.path.isfile(config_path): - if not EEShellExec.cmd_exec(self, "grep \"error.log debug\" " - "{0}".format(config_path)): - Log.info(self, "Starting NGINX debug connection for " - "{0}".format(self.app.pargs.site_name)) - EEShellExec.cmd_exec(self, "sed -i \"s/error.log;/" - "error.log " - "debug;/\" {0}".format(config_path)) - self.trigger_nginx = True - - else: - Log.info(self, "Nginx debug for site already enabled") - - self.msg = self.msg + ['{0}{1}/logs/error.log' - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - - else: - Log.info(self, "{0} domain not valid" - .format(self.app.pargs.site_name)) - - # stop site specific debug - elif (self.app.pargs.nginx == 'off' and self.app.pargs.site_name): - config_path = ("/etc/nginx/sites-available/{0}" - .format(self.app.pargs.site_name)) - if os.path.isfile(config_path): - if EEShellExec.cmd_exec(self, "grep \"error.log debug\" {0}" - .format(config_path)): - Log.info(self, "Stoping NGINX debug connection for {0}" - .format(self.app.pargs.site_name)) - EEShellExec.cmd_exec(self, "sed -i \"s/error.log debug;/" - "error.log;/\" {0}" - .format(config_path)) - self.trigger_nginx = True - - else: - - Log.info(self, "Nginx debug for site already disabled") - else: - Log.info(self, "{0} domain not valid" - .format(self.app.pargs.site_name)) - - @expose(hide=True) - def debug_php(self): - """Start/Stop PHP debug""" - # PHP global debug start - if (self.app.pargs.php == 'on' and not self.app.pargs.site_name): - if not (EEShellExec.cmd_exec(self, "sed -n \"/upstream php" - "{/,/}/p \" /etc/nginx/" - "conf.d/upstream.conf " - "| grep 9001")): - - Log.info(self, "Enabling PHP debug") - - # Change upstream.conf - nc = NginxConfig() - nc.loadf('/etc/nginx/conf.d/upstream.conf') - nc.set([('upstream','php',), 'server'], '127.0.0.1:9001') - if os.path.isfile("/etc/nginx/common/wpfc-hhvm.conf"): - nc.set([('upstream','hhvm',), 'server'], '127.0.0.1:9001') - nc.savef('/etc/nginx/conf.d/upstream.conf') - - # Enable xdebug - EEFileUtils.searchreplace(self, "/etc/php5/mods-available/" - "xdebug.ini", - ";zend_extension", - "zend_extension") - - # Fix slow log is not enabled default in PHP5.6 - config = configparser.ConfigParser() - config.read('/etc/php5/fpm/pool.d/debug.conf') - config['debug']['slowlog'] = '/var/log/php5/slow.log' - config['debug']['request_slowlog_timeout'] = '10s' - with open('/etc/php5/fpm/pool.d/debug.conf', - encoding='utf-8', mode='w') as confifile: - Log.debug(self, "Writting debug.conf configuration into " - "/etc/php5/fpm/pool.d/debug.conf") - config.write(confifile) - - self.trigger_php = True - self.trigger_nginx = True - else: - Log.info(self, "PHP debug is already enabled") - - self.msg = self.msg + ['/var/log/php5/slow.log'] - - # PHP global debug stop - elif (self.app.pargs.php == 'off' and not self.app.pargs.site_name): - if EEShellExec.cmd_exec(self, " sed -n \"/upstream php {/,/}/p\" " - "/etc/nginx/conf.d/upstream.conf " - "| grep 9001"): - Log.info(self, "Disabling PHP debug") - - # Change upstream.conf - nc = NginxConfig() - nc.loadf('/etc/nginx/conf.d/upstream.conf') - nc.set([('upstream','php',), 'server'], '127.0.0.1:9000') - if os.path.isfile("/etc/nginx/common/wpfc-hhvm.conf"): - nc.set([('upstream','hhvm',), 'server'], '127.0.0.1:8000') - nc.savef('/etc/nginx/conf.d/upstream.conf') - - # Disable xdebug - EEFileUtils.searchreplace(self, "/etc/php5/mods-available/" - "xdebug.ini", - "zend_extension", - ";zend_extension") - - self.trigger_php = True - self.trigger_nginx = True - else: - Log.info(self, "PHP debug is already disabled") - - @expose(hide=True) - def debug_fpm(self): - """Start/Stop PHP5-FPM debug""" - # PHP5-FPM start global debug - if (self.app.pargs.fpm == 'on' and not self.app.pargs.site_name): - if not EEShellExec.cmd_exec(self, "grep \"log_level = debug\" " - "/etc/php5/fpm/php-fpm.conf"): - Log.info(self, "Setting up PHP5-FPM log_level = debug") - config = configparser.ConfigParser() - config.read('/etc/php5/fpm/php-fpm.conf') - config.remove_option('global', 'include') - config['global']['log_level'] = 'debug' - config['global']['include'] = '/etc/php5/fpm/pool.d/*.conf' - with open('/etc/php5/fpm/php-fpm.conf', - encoding='utf-8', mode='w') as configfile: - Log.debug(self, "Writting php5-FPM configuration into " - "/etc/php5/fpm/php-fpm.conf") - config.write(configfile) - self.trigger_php = True - else: - Log.info(self, "PHP5-FPM log_level = debug already setup") - - self.msg = self.msg + ['/var/log/php5/fpm.log'] - - # PHP5-FPM stop global debug - elif (self.app.pargs.fpm == 'off' and not self.app.pargs.site_name): - if EEShellExec.cmd_exec(self, "grep \"log_level = debug\" " - "/etc/php5/fpm/php-fpm.conf"): - Log.info(self, "Disabling PHP5-FPM log_level = debug") - config = configparser.ConfigParser() - config.read('/etc/php5/fpm/php-fpm.conf') - config.remove_option('global', 'include') - config['global']['log_level'] = 'notice' - config['global']['include'] = '/etc/php5/fpm/pool.d/*.conf' - with open('/etc/php5/fpm/php-fpm.conf', - encoding='utf-8', mode='w') as configfile: - Log.debug(self, "writting php5 configuration into " - "/etc/php5/fpm/php-fpm.conf") - config.write(configfile) - - self.trigger_php = True - else: - Log.info(self, "PHP5-FPM log_level = debug already disabled") - - @expose(hide=True) - def debug_mysql(self): - """Start/Stop MySQL debug""" - # MySQL start global debug - if (self.app.pargs.mysql == 'on' and not self.app.pargs.site_name): - if not EEShellExec.cmd_exec(self, "mysql -e \"show variables like" - " \'slow_query_log\';\" | " - "grep ON"): - Log.info(self, "Setting up MySQL slow log") - EEMysql.execute(self, "set global slow_query_log = " - "\'ON\';") - EEMysql.execute(self, "set global slow_query_log_file = " - "\'/var/log/mysql/mysql-slow.log\';") - EEMysql.execute(self, "set global long_query_time = 2;") - EEMysql.execute(self, "set global log_queries_not_using" - "_indexes = \'ON\';") - else: - Log.info(self, "MySQL slow log is already enabled") - - self.msg = self.msg + ['/var/log/mysql/mysql-slow.log'] - - # MySQL stop global debug - elif (self.app.pargs.mysql == 'off' and not self.app.pargs.site_name): - if EEShellExec.cmd_exec(self, "mysql -e \"show variables like \'" - "slow_query_log\';\" | grep ON"): - Log.info(self, "Disabling MySQL slow log") - EEMysql.execute(self, "set global slow_query_log = \'OFF\';") - EEMysql.execute(self, "set global slow_query_log_file = \'" - "/var/log/mysql/mysql-slow.log\';") - EEMysql.execute(self, "set global long_query_time = 10;") - EEMysql.execute(self, "set global log_queries_not_using_index" - "es = \'OFF\';") - EEShellExec.cmd_exec(self, "crontab -l | sed \'/#EasyEngine " - "start/,/#EasyEngine end/d\' | crontab -") - else: - Log.info(self, "MySQL slow log already disabled") - - @expose(hide=True) - def debug_wp(self): - """Start/Stop WordPress debug""" - if (self.app.pargs.wp == 'on' and self.app.pargs.site_name): - wp_config = ("{0}/{1}/wp-config.php" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)) - webroot = "{0}{1}".format(EEVariables.ee_webroot, - self.app.pargs.site_name) - # Check wp-config.php file into htdocs folder - if not os.path.isfile(wp_config): - wp_config = ("{0}/{1}/htdocs/wp-config.php" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)) - if os.path.isfile(wp_config): - if not EEShellExec.cmd_exec(self, "grep \"\'WP_DEBUG\'\" {0} |" - " grep true".format(wp_config)): - Log.info(self, "Starting WordPress debug") - open("{0}/htdocs/wp-content/debug.log".format(webroot), - encoding='utf-8', mode='a').close() - EEShellExec.cmd_exec(self, "chown {1}: {0}/htdocs/wp-" - "content/debug.log" - "".format(webroot, - EEVariables.ee_php_user)) - EEShellExec.cmd_exec(self, "sed -i \"s/define(\'WP_DEBUG\'" - ".*/define(\'WP_DEBUG\', true);\\n" - "define(\'WP_DEBUG_DISPLAY\', false);" - "\\ndefine(\'WP_DEBUG_LOG\', true);" - "\\ndefine(\'SAVEQUERIES\', true);/\"" - " {0}".format(wp_config)) - EEShellExec.cmd_exec(self, "cd {0}/htdocs/ && wp" - " plugin --allow-root install " - "developer query-monitor" - .format(webroot)) - EEShellExec.cmd_exec(self, "chown -R {1}: {0}/htdocs/" - "wp-content/plugins" - .format(webroot, - EEVariables.ee_php_user)) - - self.msg = self.msg + ['{0}{1}/htdocs/wp-content' - '/debug.log' - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - - else: - Log.info(self, "Unable to find wp-config.php for site: {0}" - .format(self.app.pargs.site_name)) - - elif (self.app.pargs.wp == 'off' and self.app.pargs.site_name): - wp_config = ("{0}{1}/wp-config.php" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)) - webroot = "{0}{1}".format(EEVariables.ee_webroot, - self.app.pargs.site_name) - # Check wp-config.php file into htdocs folder - if not os.path.isfile(wp_config): - wp_config = ("{0}/{1}/htdocs/wp-config.php" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)) - if os.path.isfile(wp_config): - if EEShellExec.cmd_exec(self, "grep \"\'WP_DEBUG\'\" {0} | " - "grep true".format(wp_config)): - Log.info(self, "Disabling WordPress debug") - EEShellExec.cmd_exec(self, "sed -i \"s/define(\'WP_DEBUG\'" - ", true);/define(\'WP_DEBUG\', " - "false);/\" {0}".format(wp_config)) - EEShellExec.cmd_exec(self, "sed -i \"/define(\'" - "WP_DEBUG_DISPLAY\', false);/d\" {0}" - .format(wp_config)) - EEShellExec.cmd_exec(self, "sed -i \"/define(\'" - "WP_DEBUG_LOG\', true);/d\" {0}" - .format(wp_config)) - EEShellExec.cmd_exec(self, "sed -i \"/define(\'" - "SAVEQUERIES\', " - "true);/d\" {0}".format(wp_config)) - else: - Log.info(self, "WordPress debug all already disabled") - else: - Log.error(self, "Missing argument site name") - - @expose(hide=True) - def debug_rewrite(self): - """Start/Stop Nginx rewrite rules debug""" - # Start Nginx rewrite debug globally - if (self.app.pargs.rewrite == 'on' and not self.app.pargs.site_name): - if not EEShellExec.cmd_exec(self, "grep \"rewrite_log on;\" " - "/etc/nginx/nginx.conf"): - Log.info(self, "Setting up Nginx rewrite logs") - EEShellExec.cmd_exec(self, "sed -i \'/http {/a \\\\t" - "rewrite_log on;\' /etc/nginx/nginx.conf") - self.trigger_nginx = True - else: - Log.info(self, "Nginx rewrite logs already enabled") - - if '/var/log/nginx/*.error.log' not in self.msg: - self.msg = self.msg + ['/var/log/nginx/*.error.log'] - - # Stop Nginx rewrite debug globally - elif (self.app.pargs.rewrite == 'off' - and not self.app.pargs.site_name): - if EEShellExec.cmd_exec(self, "grep \"rewrite_log on;\" " - "/etc/nginx/nginx.conf"): - Log.info(self, "Disabling Nginx rewrite logs") - EEShellExec.cmd_exec(self, "sed -i \"/rewrite_log.*/d\"" - " /etc/nginx/nginx.conf") - self.trigger_nginx = True - else: - Log.info(self, "Nginx rewrite logs already disabled") - # Start Nginx rewrite for site - elif (self.app.pargs.rewrite == 'on' and self.app.pargs.site_name): - config_path = ("/etc/nginx/sites-available/{0}" - .format(self.app.pargs.site_name)) - if not EEShellExec.cmd_exec(self, "grep \"rewrite_log on;\" {0}" - .format(config_path)): - Log.info(self, "Setting up Nginx rewrite logs for {0}" - .format(self.app.pargs.site_name)) - EEShellExec.cmd_exec(self, "sed -i \"/access_log/i \\\\\\t" - "rewrite_log on;\" {0}" - .format(config_path)) - self.trigger_nginx = True - else: - Log.info(self, "Nginx rewrite logs for {0} already setup" - .format(self.app.pargs.site_name)) - - if ('{0}{1}/logs/error.log'.format(EEVariables.ee_webroot, - self.app.pargs.site_name) - not in self.msg): - self.msg = self.msg + ['{0}{1}/logs/error.log' - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - - # Stop Nginx rewrite for site - elif (self.app.pargs.rewrite == 'off' and self.app.pargs.site_name): - config_path = ("/etc/nginx/sites-available/{0}" - .format(self.app.pargs.site_name)) - if EEShellExec.cmd_exec(self, "grep \"rewrite_log on;\" {0}" - .format(config_path)): - Log.info(self, "Disabling Nginx rewrite logs for {0}" - .format(self.app.pargs.site_name)) - EEShellExec.cmd_exec(self, "sed -i \"/rewrite_log.*/d\" {0}" - .format(config_path)) - self.trigger_nginx = True - else: - Log.info(self, "Nginx rewrite logs for {0} already " - " disabled".format(self.app.pargs.site_name)) - - @expose(hide=True) - def signal_handler(self, signal, frame): - """Handle Ctrl+c hevent for -i option of debug""" - self.start = False - if self.app.pargs.nginx: - self.app.pargs.nginx = 'off' - self.debug_nginx() - if self.app.pargs.php: - self.app.pargs.php = 'off' - self.debug_php() - if self.app.pargs.fpm: - self.app.pargs.fpm = 'off' - self.debug_fpm() - if self.app.pargs.mysql: - # MySQL debug will not work for remote MySQL - if EEVariables.ee_mysql_host is "localhost": - self.app.pargs.mysql = 'off' - self.debug_mysql() - else: - Log.warn(self, "Remote MySQL found, EasyEngine will not " - "enable remote debug") - if self.app.pargs.wp: - self.app.pargs.wp = 'off' - self.debug_wp() - if self.app.pargs.rewrite: - self.app.pargs.rewrite = 'off' - self.debug_rewrite() - - # Reload Nginx - if self.trigger_nginx: - EEService.reload_service(self, 'nginx') - - # Reload PHP - if self.trigger_php: - EEService.reload_service(self, 'php5-fpm') - self.app.close(0) - - @expose(hide=True) - def default(self): - """Default function of debug""" - # self.start = True - self.interactive = False - self.msg = [] - self.trigger_nginx = False - self.trigger_php = False - - if ((not self.app.pargs.nginx) and (not self.app.pargs.php) - and (not self.app.pargs.fpm) and (not self.app.pargs.mysql) - and (not self.app.pargs.wp) and (not self.app.pargs.rewrite) - and (not self.app.pargs.all) - and (not self.app.pargs.site_name) - and (not self.app.pargs.import_slow_log) - and (not self.app.pargs.interval)): - if self.app.pargs.stop or self.app.pargs.start: - print("--start/stop option is deprecated since ee3.0.5") - self.app.args.print_help() - else: - self.app.args.print_help() - - if self.app.pargs.import_slow_log: - self.import_slow_log() - - if self.app.pargs.interval: - try: - cron_time = int(self.app.pargs.interval) - except Exception as e: - cron_time = 5 - - try: - if not EEShellExec.cmd_exec(self, "crontab -l | grep " - "'ee debug --import-slow-log'"): - if not cron_time == 0: - Log.info(self, "setting up crontab entry," - " please wait...") - EEShellExec.cmd_exec(self, "/bin/bash -c \"crontab -l " - "2> /dev/null | {{ cat; echo -e" - " \\\"#EasyEngine start MySQL " - "slow log \\n*/{0} * * * * " - "/usr/local/bin/ee debug" - " --import-slow-log\\n" - "#EasyEngine end MySQL slow log" - "\\\"; }} | crontab -\"" - .format(cron_time)) - else: - if not cron_time == 0: - Log.info(self, "updating crontab entry," - " please wait...") - if not EEShellExec.cmd_exec(self, "/bin/bash -c " - "\"crontab " - "-l | sed '/EasyEngine " - "start MySQL slow " - "log/!b;n;c\*\/{0} " - "\* \* \* " - "\* \/usr" - "\/local\/bin\/ee debug " - "--import\-slow\-log' " - "| crontab -\"" - .format(cron_time)): - Log.error(self, "failed to update crontab entry") - else: - Log.info(self, "removing crontab entry," - " please wait...") - if not EEShellExec.cmd_exec(self, "/bin/bash -c " - "\"crontab " - "-l | sed '/EasyEngine " - "start MySQL slow " - "log/,+2d'" - "| crontab -\"" - .format(cron_time)): - Log.error(self, "failed to remove crontab entry") - except CommandExecutionError as e: - Log.debug(self, str(e)) - - if self.app.pargs.all == 'on': - if self.app.pargs.site_name: - self.app.pargs.wp = 'on' - self.app.pargs.nginx = 'on' - self.app.pargs.php = 'on' - self.app.pargs.fpm = 'on' - self.app.pargs.mysql = 'on' - self.app.pargs.rewrite = 'on' - - if self.app.pargs.all == 'off': - if self.app.pargs.site_name: - self.app.pargs.wp = 'off' - self.app.pargs.nginx = 'off' - self.app.pargs.php = 'off' - self.app.pargs.fpm = 'off' - self.app.pargs.mysql = 'off' - self.app.pargs.rewrite = 'off' - - if ((not self.app.pargs.nginx) and (not self.app.pargs.php) - and (not self.app.pargs.fpm) and (not self.app.pargs.mysql) - and (not self.app.pargs.wp) and (not self.app.pargs.rewrite) - and self.app.pargs.site_name): - self.app.args.print_help() - # self.app.pargs.nginx = 'on' - # self.app.pargs.wp = 'on' - # self.app.pargs.rewrite = 'on' - - if self.app.pargs.nginx: - self.debug_nginx() - if self.app.pargs.php: - self.debug_php() - if self.app.pargs.fpm: - self.debug_fpm() - if self.app.pargs.mysql: - # MySQL debug will not work for remote MySQL - if EEVariables.ee_mysql_host is "localhost": - self.debug_mysql() - else: - Log.warn(self, "Remote MySQL found, EasyEngine will not " - "enable remote debug") - if self.app.pargs.wp: - self.debug_wp() - if self.app.pargs.rewrite: - self.debug_rewrite() - - if self.app.pargs.interactive: - self.interactive = True - - # Reload Nginx - if self.trigger_nginx: - EEService.reload_service(self, 'nginx') - # Reload PHP - if self.trigger_php: - EEService.restart_service(self, 'php5-fpm') - - if len(self.msg) > 0: - if not self.app.pargs.interactive: - disp_msg = ' '.join(self.msg) - Log.info(self, "Use following command to check debug logs:\n" - + Log.ENDC + "tail -f {0}".format(disp_msg)) - else: - signal.signal(signal.SIGINT, self.signal_handler) - watch_list = [] - for w_list in self.msg: - watch_list = watch_list + glob.glob(w_list) - - logwatch(self, watch_list) - - @expose(hide=True) - def import_slow_log(self): - """Default function for import slow log""" - if os.path.isdir("{0}22222/htdocs/db/anemometer" - .format(EEVariables.ee_webroot)): - if os.path.isfile("/var/log/mysql/mysql-slow.log"): - # Get Anemometer user name and password - Log.info(self, "Importing MySQL slow log to Anemometer") - host = os.popen("grep -e \"\'host\'\" {0}22222/htdocs/" - .format(EEVariables.ee_webroot) - + "db/anemometer/conf/config.inc.php " - "| head -1 | cut -d\\\' -f4 | " - "tr -d '\n'").read() - user = os.popen("grep -e \"\'user\'\" {0}22222/htdocs/" - .format(EEVariables.ee_webroot) - + "db/anemometer/conf/config.inc.php " - "| head -1 | cut -d\\\' -f4 | " - "tr -d '\n'").read() - password = os.popen("grep -e \"\'password\'\" {0}22222/" - .format(EEVariables.ee_webroot) - + "htdocs/db/anemometer/conf" - "/config.inc.php " - "| head -1 | cut -d\\\' -f4 | " - "tr -d '\n'").read() - - # Import slow log Anemometer using pt-query-digest - try: - EEShellExec.cmd_exec(self, "pt-query-digest --user={0} " - "--password={1} " - "--review D=slow_query_log," - "t=global_query_review " - "--history D=slow_query_log,t=" - "global_query_review_history " - "--no-report --limit=0% " - "--filter=\" \\$event->{{Bytes}} = " - "length(\\$event->{{arg}}) " - "and \\$event->{{hostname}}=\\\"" - "{2}\\\"\" " - "/var/log/mysql/mysql-slow.log" - .format(user, password, host)) - except CommandExecutionError as e: - Log.debug(self, str(e)) - Log.error(self, "MySQL slow log import failed.") - else: - Log.error(self, "MySQL slow log file not found," - " so not imported slow logs") - else: - Log.error(self, "Anemometer is not installed." + - Log.ENDC + "\nYou can install Anemometer with " - "this command " - + Log.BOLD + "\n `ee stack install --utils`" - + Log.ENDC) - - -def load(app): - # register the plugin class.. this only happens if the plugin is enabled - handler.register(EEDebugController) - # register a hook (function) to run after arguments are parsed. - hook.register('post_argument_parsing', ee_debug_hook) diff --git a/ee/cli/plugins/import_slow_log.py b/ee/cli/plugins/import_slow_log.py deleted file mode 100644 index ea035aee..00000000 --- a/ee/cli/plugins/import_slow_log.py +++ /dev/null @@ -1,34 +0,0 @@ -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from ee.core.shellexec import EEShellExec -from ee.core.logging import Log -from ee.core.variables import EEVariables -import os - - -def ee_import_slow_log_hook(app): - pass - - -class EEImportslowlogController(CementBaseController): - class Meta: - label = 'import_slow_log' - stacked_on = 'base' - stacked_type = 'nested' - description = 'Import MySQL slow log to Anemometer database' - usage = "ee import-slow-log" - - @expose(hide=True) - def default(self): - Log.info(self, "This command is deprecated." - " You can use this command instead, " + - Log.ENDC + Log.BOLD + "\n`ee debug --import-slow-log`" + - Log.ENDC) - - -def load(app): - # register the plugin class.. this only happens if the plugin is enabled - handler.register(EEImportslowlogController) - - # register a hook (function) to run after arguments are parsed. - hook.register('post_argument_parsing', ee_import_slow_log_hook) diff --git a/ee/cli/plugins/info.py b/ee/cli/plugins/info.py deleted file mode 100644 index d79eb05b..00000000 --- a/ee/cli/plugins/info.py +++ /dev/null @@ -1,198 +0,0 @@ -"""EEInfo Plugin for EasyEngine.""" - -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from pynginxconfig import NginxConfig -from ee.core.aptget import EEAptGet -from ee.core.shellexec import EEShellExec -from ee.core.logging import Log -import os -import configparser - - -def ee_info_hook(app): - # do something with the ``app`` object here. - pass - - -class EEInfoController(CementBaseController): - class Meta: - label = 'info' - stacked_on = 'base' - stacked_type = 'nested' - description = ('Display configuration information related to Nginx,' - ' PHP and MySQL') - arguments = [ - (['--mysql'], - dict(help='Get MySQL configuration information', - action='store_true')), - (['--php'], - dict(help='Get PHP configuration information', - action='store_true')), - (['--nginx'], - dict(help='Get Nginx configuration information', - action='store_true')), - ] - usage = "ee info [options]" - - @expose(hide=True) - def info_nginx(self): - """Display Nginx information""" - version = os.popen("nginx -v 2>&1 | cut -d':' -f2 | cut -d' ' -f2 | " - "cut -d'/' -f2 | tr -d '\n'").read() - allow = os.popen("grep ^allow /etc/nginx/common/acl.conf | " - "cut -d' ' -f2 | cut -d';' -f1 | tr '\n' ' '").read() - nc = NginxConfig() - nc.loadf('/etc/nginx/nginx.conf') - user = nc.get('user')[1] - worker_processes = nc.get('worker_processes')[1] - worker_connections = nc.get([('events',), 'worker_connections'])[1] - keepalive_timeout = nc.get([('http',), 'keepalive_timeout'])[1] - fastcgi_read_timeout = nc.get([('http',), - 'fastcgi_read_timeout'])[1] - client_max_body_size = nc.get([('http',), - 'client_max_body_size'])[1] - data = dict(version=version, allow=allow, user=user, - worker_processes=worker_processes, - keepalive_timeout=keepalive_timeout, - worker_connections=worker_connections, - fastcgi_read_timeout=fastcgi_read_timeout, - client_max_body_size=client_max_body_size) - self.app.render((data), 'info_nginx.mustache') - - @expose(hide=True) - def info_php(self): - """Display PHP information""" - version = os.popen("php -v | head -n1 | cut -d' ' -f2 |" - " cut -d'+' -f1 | tr -d '\n'").read - config = configparser.ConfigParser() - config.read('/etc/php5/fpm/php.ini') - expose_php = config['PHP']['expose_php'] - memory_limit = config['PHP']['memory_limit'] - post_max_size = config['PHP']['post_max_size'] - upload_max_filesize = config['PHP']['upload_max_filesize'] - max_execution_time = config['PHP']['max_execution_time'] - - config.read('/etc/php5/fpm/pool.d/www.conf') - www_listen = config['www']['listen'] - www_ping_path = config['www']['ping.path'] - www_pm_status_path = config['www']['pm.status_path'] - www_pm = config['www']['pm'] - www_pm_max_requests = config['www']['pm.max_requests'] - www_pm_max_children = config['www']['pm.max_children'] - www_pm_start_servers = config['www']['pm.start_servers'] - www_pm_min_spare_servers = config['www']['pm.min_spare_servers'] - www_pm_max_spare_servers = config['www']['pm.max_spare_servers'] - www_request_terminate_time = (config['www'] - ['request_terminate_timeout']) - try: - www_xdebug = (config['www']['php_admin_flag[xdebug.profiler_enable' - '_trigger]']) - except Exception as e: - www_xdebug = 'off' - - config.read('/etc/php5/fpm/pool.d/debug.conf') - debug_listen = config['debug']['listen'] - debug_ping_path = config['debug']['ping.path'] - debug_pm_status_path = config['debug']['pm.status_path'] - debug_pm = config['debug']['pm'] - debug_pm_max_requests = config['debug']['pm.max_requests'] - debug_pm_max_children = config['debug']['pm.max_children'] - debug_pm_start_servers = config['debug']['pm.start_servers'] - debug_pm_min_spare_servers = config['debug']['pm.min_spare_servers'] - debug_pm_max_spare_servers = config['debug']['pm.max_spare_servers'] - debug_request_terminate = (config['debug'] - ['request_terminate_timeout']) - try: - debug_xdebug = (config['debug']['php_admin_flag[xdebug.profiler_' - 'enable_trigger]']) - except Exception as e: - debug_xdebug = 'off' - - data = dict(version=version, expose_php=expose_php, - memory_limit=memory_limit, post_max_size=post_max_size, - upload_max_filesize=upload_max_filesize, - max_execution_time=max_execution_time, - www_listen=www_listen, www_ping_path=www_ping_path, - www_pm_status_path=www_pm_status_path, www_pm=www_pm, - www_pm_max_requests=www_pm_max_requests, - www_pm_max_children=www_pm_max_children, - www_pm_start_servers=www_pm_start_servers, - www_pm_min_spare_servers=www_pm_min_spare_servers, - www_pm_max_spare_servers=www_pm_max_spare_servers, - www_request_terminate_timeout=www_request_terminate_time, - www_xdebug_profiler_enable_trigger=www_xdebug, - debug_listen=debug_listen, debug_ping_path=debug_ping_path, - debug_pm_status_path=debug_pm_status_path, - debug_pm=debug_pm, - debug_pm_max_requests=debug_pm_max_requests, - debug_pm_max_children=debug_pm_max_children, - debug_pm_start_servers=debug_pm_start_servers, - debug_pm_min_spare_servers=debug_pm_min_spare_servers, - debug_pm_max_spare_servers=debug_pm_max_spare_servers, - debug_request_terminate_timeout=debug_request_terminate, - debug_xdebug_profiler_enable_trigger=debug_xdebug) - self.app.render((data), 'info_php.mustache') - - @expose(hide=True) - def info_mysql(self): - """Display MySQL information""" - version = os.popen("mysql -V | awk '{print($5)}' | cut -d ',' " - "-f1 | tr -d '\n'").read() - host = "localhost" - port = os.popen("mysql -e \"show variables\" | grep ^port | awk " - "'{print($2)}' | tr -d '\n'").read() - wait_timeout = os.popen("mysql -e \"show variables\" | grep " - "^wait_timeout | awk '{print($2)}' | " - "tr -d '\n'").read() - interactive_timeout = os.popen("mysql -e \"show variables\" | grep " - "^interactive_timeout | awk " - "'{print($2)}' | tr -d '\n'").read() - max_used_connections = os.popen("mysql -e \"show global status\" | " - "grep Max_used_connections | awk " - "'{print($2)}' | tr -d '\n'").read() - datadir = os.popen("mysql -e \"show variables\" | grep datadir | awk" - " '{print($2)}' | tr -d '\n'").read() - socket = os.popen("mysql -e \"show variables\" | grep \"^socket\" | " - "awk '{print($2)}' | tr -d '\n'").read() - data = dict(version=version, host=host, port=port, - wait_timeout=wait_timeout, - interactive_timeout=interactive_timeout, - max_used_connections=max_used_connections, - datadir=datadir, socket=socket) - self.app.render((data), 'info_mysql.mustache') - - @expose(hide=True) - def default(self): - """default function for info""" - if (not self.app.pargs.nginx and not self.app.pargs.php - and not self.app.pargs.mysql): - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - - if self.app.pargs.nginx: - if EEAptGet.is_installed(self, 'nginx-common'): - self.info_nginx() - else: - Log.error(self, "Nginx is not installed") - - if self.app.pargs.php: - if EEAptGet.is_installed(self, 'php5-fpm'): - self.info_php() - else: - Log.error(self, "PHP5 is not installed") - - if self.app.pargs.mysql: - if EEShellExec.cmd_exec(self, "mysqladmin ping"): - self.info_mysql() - else: - Log.error(self, "MySQL is not installed") - - -def load(app): - # register the plugin class.. this only happens if the plugin is enabled - handler.register(EEInfoController) - - # register a hook (function) to run after arguments are parsed. - hook.register('post_argument_parsing', ee_info_hook) diff --git a/ee/cli/plugins/log.py b/ee/cli/plugins/log.py deleted file mode 100644 index fbaffd94..00000000 --- a/ee/cli/plugins/log.py +++ /dev/null @@ -1,578 +0,0 @@ -"""Debug Plugin for EasyEngine""" - -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from ee.core.logging import Log -from ee.cli.plugins.site_functions import logwatch -from ee.core.variables import EEVariables -from ee.core.fileutils import EEFileUtils -from ee.core.shellexec import EEShellExec -from ee.core.sendmail import EESendMail -from ee.core.mysql import EEMysql -import os -import glob -import gzip - - -def ee_log_hook(app): - # do something with the ``app`` object here. - pass - - -class EELogController(CementBaseController): - class Meta: - label = 'log' - description = 'Perform operations on Nginx, PHP, MySQL log file' - stacked_on = 'base' - stacked_type = 'nested' - usage = "ee log [] [options]" - - @expose(hide=True) - def default(self): - self.app.args.print_help() - - -class EELogShowController(CementBaseController): - class Meta: - label = 'show' - description = 'Show Nginx, PHP, MySQL log file' - stacked_on = 'log' - stacked_type = 'nested' - arguments = [ - (['--all'], - dict(help='Show All logs file', action='store_true')), - (['--nginx'], - dict(help='Show Nginx Error logs file', action='store_true')), - (['--php'], - dict(help='Show PHP Error logs file', action='store_true')), - (['--fpm'], - dict(help='Show PHP5-fpm slow logs file', - action='store_true')), - (['--mysql'], - dict(help='Show MySQL logs file', action='store_true')), - (['--wp'], - dict(help='Show Site specific WordPress logs file', - action='store_true')), - (['--access'], - dict(help='Show Nginx access log file', - action='store_true')), - (['site_name'], - dict(help='Website Name', nargs='?', default=None)) - ] - usage = "ee log show [] [options]" - - @expose(hide=True) - def default(self): - """Default function of log show""" - self.msg = [] - - if self.app.pargs.php: - self.app.pargs.nginx = True - - if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm) - and (not self.app.pargs.mysql) and (not self.app.pargs.access) - and (not self.app.pargs.wp) and (not self.app.pargs.site_name)): - self.app.pargs.nginx = True - self.app.pargs.fpm = True - self.app.pargs.mysql = True - self.app.pargs.access = True - - if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm) - and (not self.app.pargs.mysql) and (not self.app.pargs.access) - and (not self.app.pargs.wp) and (self.app.pargs.site_name)): - self.app.pargs.nginx = True - self.app.pargs.wp = True - self.app.pargs.access = True - self.app.pargs.mysql = True - - if self.app.pargs.nginx and (not self.app.pargs.site_name): - self.msg = self.msg + ["/var/log/nginx/*error.log"] - - if self.app.pargs.access and (not self.app.pargs.site_name): - self.msg = self.msg + ["/var/log/nginx/*access.log"] - - if self.app.pargs.fpm: - open('/var/log/php5/slow.log', 'a').close() - open('/var/log/php5/fpm.log', 'a').close() - self.msg = self.msg + ['/var/log/php5/slow.log', - '/var/log/php5/fpm.log'] - if self.app.pargs.mysql: - # MySQL debug will not work for remote MySQL - if EEVariables.ee_mysql_host is "localhost": - if os.path.isfile('/var/log/mysql/mysql-slow.log'): - self.msg = self.msg + ['/var/log/mysql/mysql-slow.log'] - else: - Log.info(self, "MySQL slow-log not found, skipped") - else: - Log.warn(self, "Remote MySQL found, EasyEngine is not able to" - "show MySQL log file") - - if self.app.pargs.site_name: - webroot = "{0}{1}".format(EEVariables.ee_webroot, - self.app.pargs.site_name) - - if not os.path.isdir(webroot): - Log.error(self, "Site not present, quitting") - if self.app.pargs.access: - self.msg = self.msg + ["{0}/{1}/logs/access.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - if self.app.pargs.nginx: - self.msg = self.msg + ["{0}/{1}/logs/error.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - if self.app.pargs.wp: - if os.path.isdir('{0}/htdocs/wp-content'.format(webroot)): - if not os.path.isfile('{0}/logs/debug.log' - .format(webroot)): - if not os.path.isfile('{0}/htdocs/wp-content/debug.log' - .format(webroot)): - open("{0}/htdocs/wp-content/debug.log" - .format(webroot), - encoding='utf-8', mode='a').close() - EEShellExec.cmd_exec(self, "chown {1}: {0}/htdocs/" - "wp-content/debug.log" - "".format(webroot, - EEVariables - .ee_php_user) - ) - # create symbolic link for debug log - EEFileUtils.create_symlink(self, ["{0}/htdocs/wp-content/" - "debug.log" - .format(webroot), - '{0}/logs/debug.log' - .format(webroot)]) - - self.msg = self.msg + ["{0}/{1}/logs/debug.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - else: - Log.info(self, "Site is not WordPress site, skipping " - "WordPress logs") - - watch_list = [] - for w_list in self.msg: - watch_list = watch_list + glob.glob(w_list) - - logwatch(self, watch_list) - - -class EELogResetController(CementBaseController): - class Meta: - label = 'reset' - description = 'Reset Nginx, PHP, MySQL log file' - stacked_on = 'log' - stacked_type = 'nested' - arguments = [ - (['--all'], - dict(help='Reset All logs file', action='store_true')), - (['--nginx'], - dict(help='Reset Nginx Error logs file', action='store_true')), - (['--php'], - dict(help='Reset PHP Error logs file', action='store_true')), - (['--fpm'], - dict(help='Reset PHP5-fpm slow logs file', - action='store_true')), - (['--mysql'], - dict(help='Reset MySQL logs file', action='store_true')), - (['--wp'], - dict(help='Reset Site specific WordPress logs file', - action='store_true')), - (['--access'], - dict(help='Reset Nginx access log file', - action='store_true')), - (['--slow-log-db'], - dict(help='Drop all rows from slowlog table in database', - action='store_true')), - (['site_name'], - dict(help='Website Name', nargs='?', default=None)) - ] - usage = "ee log reset [] [options]" - - @expose(hide=True) - def default(self): - """Default function of log reset""" - self.msg = [] - - if self.app.pargs.php: - self.app.pargs.nginx = True - - if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm) - and (not self.app.pargs.mysql) and (not self.app.pargs.access) - and (not self.app.pargs.wp) and (not self.app.pargs.site_name) - and (not self.app.pargs.slow_log_db)): - self.app.pargs.nginx = True - self.app.pargs.fpm = True - self.app.pargs.mysql = True - self.app.pargs.access = True - self.app.pargs.slow_log_db = True - - if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm) - and (not self.app.pargs.mysql) and (not self.app.pargs.access) - and (not self.app.pargs.wp) and (self.app.pargs.site_name) - and (not self.app.pargs.slow-log-db)): - self.app.pargs.nginx = True - self.app.pargs.wp = True - self.app.pargs.access = True - self.app.pargs.mysql = True - - if self.app.pargs.slow_log_db: - if os.path.isdir("/var/www/22222/htdocs/db/anemometer"): - Log.info(self, "Resetting MySQL slow_query_log database table") - EEMysql.execute(self, "TRUNCATE TABLE " - "slow_query_log.global_query_review_history") - EEMysql.execute(self, "TRUNCATE TABLE " - "slow_query_log.global_query_review") - - if self.app.pargs.nginx and (not self.app.pargs.site_name): - self.msg = self.msg + ["/var/log/nginx/*error.log"] - - if self.app.pargs.access and (not self.app.pargs.site_name): - self.msg = self.msg + ["/var/log/nginx/*access.log"] - - if self.app.pargs.fpm: - open('/var/log/php5/slow.log', 'a').close() - open('/var/log/php5/fpm.log', 'a').close() - self.msg = self.msg + ['/var/log/php5/slow.log', - '/var/log/php5/fpm.log'] - if self.app.pargs.mysql: - # MySQL debug will not work for remote MySQL - if EEVariables.ee_mysql_host is "localhost": - if os.path.isfile('/var/log/mysql/mysql-slow.log'): - self.msg = self.msg + ['/var/log/mysql/mysql-slow.log'] - else: - Log.info(self, "MySQL slow-log not found, skipped") - else: - Log.warn(self, "Remote MySQL found, EasyEngine is not able to" - "show MySQL log file") - - if self.app.pargs.site_name: - webroot = "{0}{1}".format(EEVariables.ee_webroot, - self.app.pargs.site_name) - - if not os.path.isdir(webroot): - Log.error(self, "Site not present, quitting") - if self.app.pargs.access: - self.msg = self.msg + ["{0}/{1}/logs/access.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - if self.app.pargs.nginx: - self.msg = self.msg + ["{0}/{1}/logs/error.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - if self.app.pargs.wp: - if os.path.isdir('{0}/htdocs/wp-content'.format(webroot)): - if not os.path.isfile('{0}/logs/debug.log' - .format(webroot)): - if not os.path.isfile('{0}/htdocs/wp-content/debug.log' - .format(webroot)): - open("{0}/htdocs/wp-content/debug.log" - .format(webroot), - encoding='utf-8', mode='a').close() - EEShellExec.cmd_exec(self, "chown {1}: {0}/htdocs/" - "wp-content/debug.log" - "".format(webroot, - EEVariables - .ee_php_user) - ) - # create symbolic link for debug log - EEFileUtils.create_symlink(self, ["{0}/htdocs/wp-content/" - "debug.log" - .format(webroot), - '{0}/logs/debug.log' - .format(webroot)]) - - self.msg = self.msg + ["{0}/{1}/logs/debug.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - else: - Log.info(self, "Site is not WordPress site, skipping " - "WordPress logs") - - reset_list = [] - for r_list in self.msg: - reset_list = reset_list + glob.glob(r_list) - - # Clearing content of file - for r_list in reset_list: - Log.info(self, "Resetting file {file}".format(file=r_list)) - open(r_list, 'w').close() - - -class EELogGzipController(CementBaseController): - class Meta: - label = 'gzip' - description = 'GZip Nginx, PHP, MySQL log file' - stacked_on = 'log' - stacked_type = 'nested' - arguments = [ - (['--all'], - dict(help='GZip All logs file', action='store_true')), - (['--nginx'], - dict(help='GZip Nginx Error logs file', action='store_true')), - (['--php'], - dict(help='GZip PHP Error logs file', action='store_true')), - (['--fpm'], - dict(help='GZip PHP5-fpm slow logs file', - action='store_true')), - (['--mysql'], - dict(help='GZip MySQL logs file', action='store_true')), - (['--wp'], - dict(help='GZip Site specific WordPress logs file', - action='store_true')), - (['--access'], - dict(help='GZip Nginx access log file', - action='store_true')), - (['site_name'], - dict(help='Website Name', nargs='?', default=None)) - ] - usage = "ee log gzip [] [options]" - - @expose(hide=True) - def default(self): - """Default function of log GZip""" - self.msg = [] - - if self.app.pargs.php: - self.app.pargs.nginx = True - - if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm) - and (not self.app.pargs.mysql) and (not self.app.pargs.access) - and (not self.app.pargs.wp) and (not self.app.pargs.site_name)): - self.app.pargs.nginx = True - self.app.pargs.fpm = True - self.app.pargs.mysql = True - self.app.pargs.access = True - - if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm) - and (not self.app.pargs.mysql) and (not self.app.pargs.access) - and (not self.app.pargs.wp) and (self.app.pargs.site_name)): - self.app.pargs.nginx = True - self.app.pargs.wp = True - self.app.pargs.access = True - self.app.pargs.mysql = True - - if self.app.pargs.nginx and (not self.app.pargs.site_name): - self.msg = self.msg + ["/var/log/nginx/*error.log"] - - if self.app.pargs.access and (not self.app.pargs.site_name): - self.msg = self.msg + ["/var/log/nginx/*access.log"] - - if self.app.pargs.fpm: - open('/var/log/php5/slow.log', 'a').close() - open('/var/log/php5/fpm.log', 'a').close() - self.msg = self.msg + ['/var/log/php5/slow.log', - '/var/log/php5/fpm.log'] - if self.app.pargs.mysql: - # MySQL debug will not work for remote MySQL - if EEVariables.ee_mysql_host is "localhost": - if os.path.isfile('/var/log/mysql/mysql-slow.log'): - self.msg = self.msg + ['/var/log/mysql/mysql-slow.log'] - else: - Log.info(self, "MySQL slow-log not found, skipped") - - else: - Log.warn(self, "Remote MySQL found, EasyEngine is not able to" - "show MySQL log file") - - if self.app.pargs.site_name: - webroot = "{0}{1}".format(EEVariables.ee_webroot, - self.app.pargs.site_name) - - if not os.path.isdir(webroot): - Log.error(self, "Site not present, quitting") - if self.app.pargs.access: - self.msg = self.msg + ["{0}/{1}/logs/access.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - if self.app.pargs.nginx: - self.msg = self.msg + ["{0}/{1}/logs/error.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - if self.app.pargs.wp: - if os.path.isdir('{0}/htdocs/wp-content'.format(webroot)): - if not os.path.isfile('{0}/logs/debug.log' - .format(webroot)): - if not os.path.isfile('{0}/htdocs/wp-content/debug.log' - .format(webroot)): - open("{0}/htdocs/wp-content/debug.log" - .format(webroot), - encoding='utf-8', mode='a').close() - EEShellExec.cmd_exec(self, "chown {1}: {0}/htdocs/" - "wp-content/debug.log" - "".format(webroot, - EEVariables - .ee_php_user) - ) - # create symbolic link for debug log - EEFileUtils.create_symlink(self, ["{0}/htdocs/wp-content/" - "debug.log" - .format(webroot), - '{0}/logs/debug.log' - .format(webroot)]) - - self.msg = self.msg + ["{0}/{1}/logs/debug.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - else: - Log.info(self, "Site is not WordPress site, skipping " - "WordPress logs") - - gzip_list = [] - for g_list in self.msg: - gzip_list = gzip_list + glob.glob(g_list) - - # Gzip content of file - for g_list in gzip_list: - Log.info(self, "Gzipping file {file}".format(file=g_list)) - in_file = g_list - in_data = open(in_file, "rb").read() - out_gz = g_list + ".gz" - gzf = gzip.open(out_gz, "wb") - gzf.write(in_data) - gzf.close() - - -class EELogMailController(CementBaseController): - class Meta: - label = 'mail' - description = 'Mail Nginx, PHP, MySQL log file' - stacked_on = 'log' - stacked_type = 'nested' - arguments = [ - (['--all'], - dict(help='Mail All logs file', action='store_true')), - (['--nginx'], - dict(help='Mail Nginx Error logs file', action='store_true')), - (['--php'], - dict(help='Mail PHP Error logs file', action='store_true')), - (['--fpm'], - dict(help='Mail PHP5-fpm slow logs file', - action='store_true')), - (['--mysql'], - dict(help='Mail MySQL logs file', action='store_true')), - (['--wp'], - dict(help='Mail Site specific WordPress logs file', - action='store_true')), - (['--access'], - dict(help='Mail Nginx access log file', - action='store_true')), - (['site_name'], - dict(help='Website Name', nargs='?', default=None)), - (['--to'], - dict(help='EMail addresses to send log files', action='append', - dest='to', nargs=1, required=True)), - ] - usage = "ee log mail [] [options]" - - @expose(hide=True) - def default(self): - """Default function of log Mail""" - self.msg = [] - - if self.app.pargs.php: - self.app.pargs.nginx = True - - if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm) - and (not self.app.pargs.mysql) and (not self.app.pargs.access) - and (not self.app.pargs.wp) and (not self.app.pargs.site_name)): - self.app.pargs.nginx = True - self.app.pargs.fpm = True - self.app.pargs.mysql = True - self.app.pargs.access = True - - if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm) - and (not self.app.pargs.mysql) and (not self.app.pargs.access) - and (not self.app.pargs.wp) and (self.app.pargs.site_name)): - self.app.pargs.nginx = True - self.app.pargs.wp = True - self.app.pargs.access = True - self.app.pargs.mysql = True - - if self.app.pargs.nginx and (not self.app.pargs.site_name): - self.msg = self.msg + ["/var/log/nginx/*error.log"] - - if self.app.pargs.access and (not self.app.pargs.site_name): - self.msg = self.msg + ["/var/log/nginx/*access.log"] - - if self.app.pargs.fpm: - open('/var/log/php5/slow.log', 'a').close() - open('/var/log/php5/fpm.log', 'a').close() - self.msg = self.msg + ['/var/log/php5/slow.log', - '/var/log/php5/fpm.log'] - if self.app.pargs.mysql: - # MySQL debug will not work for remote MySQL - if EEVariables.ee_mysql_host is "localhost": - if os.path.isfile('/var/log/mysql/mysql-slow.log'): - self.msg = self.msg + ['/var/log/mysql/mysql-slow.log'] - else: - Log.info(self, "MySQL slow-log not found, skipped") - else: - Log.warn(self, "Remote MySQL found, EasyEngine is not able to" - "show MySQL log file") - - if self.app.pargs.site_name: - webroot = "{0}{1}".format(EEVariables.ee_webroot, - self.app.pargs.site_name) - - if not os.path.isdir(webroot): - Log.error(self, "Site not present, quitting") - if self.app.pargs.access: - self.msg = self.msg + ["{0}/{1}/logs/access.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - if self.app.pargs.nginx: - self.msg = self.msg + ["{0}/{1}/logs/error.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - if self.app.pargs.wp: - if os.path.isdir('{0}/htdocs/wp-content'.format(webroot)): - if not os.path.isfile('{0}/logs/debug.log' - .format(webroot)): - if not os.path.isfile('{0}/htdocs/wp-content/debug.log' - .format(webroot)): - open("{0}/htdocs/wp-content/debug.log" - .format(webroot), - encoding='utf-8', mode='a').close() - EEShellExec.cmd_exec(self, "chown {1}: {0}/htdocs/" - "wp-content/debug.log" - "".format(webroot, - EEVariables - .ee_php_user) - ) - # create symbolic link for debug log - EEFileUtils.create_symlink(self, ["{0}/htdocs/wp-content/" - "debug.log" - .format(webroot), - '{0}/logs/debug.log' - .format(webroot)]) - - self.msg = self.msg + ["{0}/{1}/logs/debug.log" - .format(EEVariables.ee_webroot, - self.app.pargs.site_name)] - else: - Log.info(self, "Site is not WordPress site, skipping " - "WordPress logs") - - mail_list = [] - for m_list in self.msg: - mail_list = mail_list + glob.glob(m_list) - - for tomail in self.app.pargs.to: - Log.info(self, "Sending mail to {0}".format(tomail[0])) - EESendMail("easyengine", tomail[0], "{0} Log Files" - .format(EEVariables.ee_fqdn), - "Hey Hi,\n Please find attached server log files" - "\n\n\nYour's faithfully,\nEasyEngine", - files=mail_list, port=25, isTls=False) - - -def load(app): - # register the plugin class.. this only happens if the plugin is enabled - handler.register(EELogController) - handler.register(EELogShowController) - handler.register(EELogResetController) - handler.register(EELogGzipController) - handler.register(EELogMailController) - # register a hook (function) to run after arguments are parsed. - hook.register('post_argument_parsing', ee_log_hook) diff --git a/ee/cli/plugins/models.py b/ee/cli/plugins/models.py deleted file mode 100644 index 0593210b..00000000 --- a/ee/cli/plugins/models.py +++ /dev/null @@ -1,57 +0,0 @@ -from sqlalchemy import Column, DateTime, String, Integer, Boolean, func -from ee.core.database import Base - - -class SiteDB(Base): - """ - Databse model for site table - """ - __tablename__ = 'sites' - __table_args__ = {'extend_existing': True} - id = Column(Integer, primary_key=True) - sitename = Column(String, unique=True) - - site_type = Column(String) - cache_type = Column(String) - site_path = Column(String) - - # Use default=func.now() to set the default created time - # of a site to be the current time when a - # Site record was created - - created_on = Column(DateTime, default=func.now()) - is_enabled = Column(Boolean, unique=False, default=True, nullable=False) - is_ssl = Column(Boolean, unique=False, default=False) - storage_fs = Column(String) - storage_db = Column(String) - db_name = Column(String) - db_user = Column(String) - db_password = Column(String) - db_host = Column(String) - is_hhvm = Column(Boolean, unique=False, default=False) - is_pagespeed = Column(Boolean, unique=False, default=False) - - def __init__(self, sitename=None, site_type=None, cache_type=None, - site_path=None, site_enabled=None, - is_ssl=None, storage_fs=None, storage_db=None, db_name=None, - db_user=None, db_password=None, db_host='localhost', - hhvm=None, pagespeed=None): - self.sitename = sitename - self.site_type = site_type - self.cache_type = cache_type - self.site_path = site_path - self.is_enabled = site_enabled - self.is_ssl = is_ssl - self.storage_fs = storage_fs - self.storage_db = storage_db - self.db_name = db_name - self.db_user = db_user - self.db_password = db_password - self.db_host = db_host - self.is_hhvm = hhvm - self.is_pagespeed = pagespeed - # def __repr__(self): - # return '' % (self.site_type) - # - # def getType(self): - # return '%r>' % (self.site_type) diff --git a/ee/cli/plugins/secure.py b/ee/cli/plugins/secure.py deleted file mode 100644 index ee1f069f..00000000 --- a/ee/cli/plugins/secure.py +++ /dev/null @@ -1,144 +0,0 @@ -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from ee.core.shellexec import EEShellExec -from ee.core.variables import EEVariables -from ee.core.logging import Log -from ee.core.git import EEGit -from ee.core.services import EEService -import string -import random -import sys -import hashlib -import getpass - - -def ee_secure_hook(app): - # do something with the ``app`` object here. - pass - - -class EESecureController(CementBaseController): - class Meta: - label = 'secure' - stacked_on = 'base' - stacked_type = 'nested' - description = ('Secure command secure auth, ip and port') - arguments = [ - (['--auth'], - dict(help='secure auth', action='store_true')), - (['--port'], - dict(help='secure port', action='store_true')), - (['--ip'], - dict(help='secure ip', action='store_true')), - (['user_input'], - dict(help='user input', nargs='?', default=None)), - (['user_pass'], - dict(help='user pass', nargs='?', default=None))] - usage = "ee secure [options]" - - @expose(hide=True) - def default(self): - if self.app.pargs.auth: - self.secure_auth() - if self.app.pargs.port: - self.secure_port() - if self.app.pargs.ip: - self.secure_ip() - - @expose(hide=True) - def secure_auth(self): - """This function Secures authentication""" - passwd = ''.join([random.choice - (string.ascii_letters + string.digits) - for n in range(6)]) - if not self.app.pargs.user_input: - username = input("Provide HTTP authentication user " - "name [{0}] :".format(EEVariables.ee_user)) - self.app.pargs.user_input = username - if username == "": - self.app.pargs.user_input = EEVariables.ee_user - if not self.app.pargs.user_pass: - password = getpass.getpass("Provide HTTP authentication " - "password [{0}] :".format(passwd)) - self.app.pargs.user_pass = password - if password == "": - self.app.pargs.user_pass = passwd - Log.debug(self, "printf username:" - "$(openssl passwd -crypt " - "password 2> /dev/null)\n\"" - "> /etc/nginx/htpasswd-ee 2>/dev/null") - EEShellExec.cmd_exec(self, "printf \"{username}:" - "$(openssl passwd -crypt " - "{password} 2> /dev/null)\n\"" - "> /etc/nginx/htpasswd-ee 2>/dev/null" - .format(username=self.app.pargs.user_input, - password=self.app.pargs.user_pass), - log=False) - EEGit.add(self, ["/etc/nginx"], - msg="Adding changed secure auth into Git") - - @expose(hide=True) - def secure_port(self): - """This function Secures port""" - if self.app.pargs.user_input: - while not self.app.pargs.user_input.isdigit(): - Log.info(self, "Please Enter valid port number ") - self.app.pargs.user_input = input("EasyEngine " - "admin port [22222]:") - if not self.app.pargs.user_input: - port = input("EasyEngine admin port [22222]:") - if port == "": - self.app.pargs.user_input = 22222 - while not port.isdigit() and port != "": - Log.info(self, "Please Enter valid port number :") - port = input("EasyEngine admin port [22222]:") - self.app.pargs.user_input = port - if EEVariables.ee_platform_distro == 'ubuntu': - EEShellExec.cmd_exec(self, "sed -i \"s/listen.*/listen " - "{port} default_server ssl spdy;/\" " - "/etc/nginx/sites-available/22222" - .format(port=self.app.pargs.user_input)) - if EEVariables.ee_platform_distro == 'debian': - EEShellExec.cmd_exec(self, "sed -i \"s/listen.*/listen " - "{port} default_server ssl;/\" " - "/etc/nginx/sites-available/22222" - .format(port=self.app.pargs.user_input)) - EEGit.add(self, ["/etc/nginx"], - msg="Adding changed secure port into Git") - if not EEService.reload_service(self, 'nginx'): - Log.error(self, "service nginx reload failed. " - "check issues with `nginx -t` command") - Log.info(self, "Successfully port changed {port}" - .format(port=self.app.pargs.user_input)) - - @expose(hide=True) - def secure_ip(self): - """This function Secures IP""" - # TODO:remaining with ee.conf updation in file - newlist = [] - if not self.app.pargs.user_input: - ip = input("Enter the comma separated IP addresses " - "to white list [127.0.0.1]:") - self.app.pargs.user_input = ip - try: - user_ip = self.app.pargs.user_input.split(',') - except Exception as e: - user_ip = ['127.0.0.1'] - for ip_addr in user_ip: - if not ("exist_ip_address "+ip_addr in open('/etc/nginx/common/' - 'acl.conf').read()): - EEShellExec.cmd_exec(self, "sed -i " - "\"/deny/i allow {whitelist_adre}\;\"" - " /etc/nginx/common/acl.conf" - .format(whitelist_adre=ip_addr)) - EEGit.add(self, ["/etc/nginx"], - msg="Adding changed secure ip into Git") - - Log.info(self, "Successfully added IP address in acl.conf file") - - -def load(app): - # register the plugin class.. this only happens if the plugin is enabled - handler.register(EESecureController) - # register a hook (function) to run after arguments are parsed. - hook.register('post_argument_parsing', ee_secure_hook) diff --git a/ee/cli/plugins/site.py b/ee/cli/plugins/site.py deleted file mode 100644 index 3e393642..00000000 --- a/ee/cli/plugins/site.py +++ /dev/null @@ -1,1552 +0,0 @@ -# """EasyEngine site controller.""" -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from ee.core.variables import EEVariables -from ee.core.domainvalidate import ValidateDomain -from ee.core.fileutils import EEFileUtils -from ee.cli.plugins.site_functions import * -from ee.core.services import EEService -from ee.cli.plugins.sitedb import * -from ee.core.git import EEGit -from subprocess import Popen -from ee.core.nginxhashbucket import hashbucket -import sys -import os -import glob -import subprocess - - -def ee_site_hook(app): - # do something with the ``app`` object here. - from ee.core.database import init_db - import ee.cli.plugins.models - init_db(app) - - -class EESiteController(CementBaseController): - class Meta: - label = 'site' - stacked_on = 'base' - stacked_type = 'nested' - description = ('Performs website specific operations') - arguments = [ - (['site_name'], - dict(help='Website name', nargs='?')), - ] - usage = "ee site (command) [options]" - - @expose(hide=True) - def default(self): - self.app.args.print_help() - - @expose(help="Enable site example.com") - def enable(self): - if not self.app.pargs.site_name: - try: - while not self.app.pargs.site_name: - self.app.pargs.site_name = (input('Enter site name : ') - .strip()) - except IOError as e: - Log.error(self, 'could not input site name') - - self.app.pargs.site_name = self.app.pargs.site_name.strip() - # validate domain name - (ee_domain, ee_www_domain) = ValidateDomain(self.app.pargs.site_name) - - # check if site exists - if not check_domain_exists(self, ee_domain): - Log.error(self, "site {0} does not exist".format(ee_domain)) - if os.path.isfile('/etc/nginx/sites-available/{0}' - .format(ee_domain)): - Log.info(self, "Enable domain {0:10} \t".format(ee_domain), end='') - EEFileUtils.create_symlink(self, - ['/etc/nginx/sites-available/{0}' - .format(ee_domain), - '/etc/nginx/sites-enabled/{0}' - .format(ee_domain)]) - EEGit.add(self, ["/etc/nginx"], - msg="Enabled {0} " - .format(ee_domain)) - updateSiteInfo(self, ee_domain, enabled=True) - Log.info(self, "[" + Log.ENDC + "OK" + Log.OKBLUE + "]") - if not EEService.reload_service(self, 'nginx'): - Log.error(self, "service nginx reload failed. " - "check issues with `nginx -t` command") - else: - Log.error(self, "nginx configuration file does not exist" - .format(ee_domain)) - - @expose(help="Disable site example.com") - def disable(self): - if not self.app.pargs.site_name: - try: - while not self.app.pargs.site_name: - self.app.pargs.site_name = (input('Enter site name : ') - .strip()) - - except IOError as e: - Log.error(self, 'could not input site name') - self.app.pargs.site_name = self.app.pargs.site_name.strip() - (ee_domain, ee_www_domain) = ValidateDomain(self.app.pargs.site_name) - # check if site exists - if not check_domain_exists(self, ee_domain): - Log.error(self, "site {0} does not exist".format(ee_domain)) - - if os.path.isfile('/etc/nginx/sites-available/{0}' - .format(ee_domain)): - Log.info(self, "Disable domain {0:10} \t" - .format(ee_domain), end='') - if not os.path.isfile('/etc/nginx/sites-enabled/{0}' - .format(ee_domain)): - Log.debug(self, "Site {0} already disabled".format(ee_domain)) - Log.info(self, "[" + Log.FAIL + "Failed" + Log.OKBLUE+"]") - else: - EEFileUtils.remove_symlink(self, - '/etc/nginx/sites-enabled/{0}' - .format(ee_domain)) - EEGit.add(self, ["/etc/nginx"], - msg="Disabled {0} " - .format(ee_domain)) - updateSiteInfo(self, ee_domain, enabled=False) - Log.info(self, "[" + Log.ENDC + "OK" + Log.OKBLUE + "]") - if not EEService.reload_service(self, 'nginx'): - Log.error(self, "service nginx reload failed. " - "check issues with `nginx -t` command") - else: - Log.error(self, "nginx configuration file does not exist" - .format(ee_domain)) - - @expose(help="Get example.com information") - def info(self): - if not self.app.pargs.site_name: - try: - while not self.app.pargs.site_name: - self.app.pargs.site_name = (input('Enter site name : ') - .strip()) - except IOError as e: - Log.error(self, 'could not input site name') - self.app.pargs.site_name = self.app.pargs.site_name.strip() - (ee_domain, ee_www_domain) = ValidateDomain(self.app.pargs.site_name) - ee_db_name = '' - ee_db_user = '' - ee_db_pass = '' - hhvm = '' - - if not check_domain_exists(self, ee_domain): - Log.error(self, "site {0} does not exist".format(ee_domain)) - if os.path.isfile('/etc/nginx/sites-available/{0}' - .format(ee_domain)): - siteinfo = getSiteInfo(self, ee_domain) - - sitetype = siteinfo.site_type - cachetype = siteinfo.cache_type - ee_site_webroot = siteinfo.site_path - access_log = (ee_site_webroot + '/logs/access.log') - error_log = (ee_site_webroot + '/logs/error.log') - ee_db_name = siteinfo.db_name - ee_db_user = siteinfo.db_user - ee_db_pass = siteinfo.db_password - ee_db_host = siteinfo.db_host - if sitetype != "html": - hhvm = ("enabled" if siteinfo.is_hhvm else "disabled") - if sitetype == "proxy": - access_log = "/var/log/nginx/{0}.access.log".format(ee_domain) - error_log = "/var/log/nginx/{0}.error.log".format(ee_domain) - ee_site_webroot = '' - - pagespeed = ("enabled" if siteinfo.is_pagespeed else "disabled") - - data = dict(domain=ee_domain, webroot=ee_site_webroot, - accesslog=access_log, errorlog=error_log, - dbname=ee_db_name, dbuser=ee_db_user, - dbpass=ee_db_pass, hhvm=hhvm, pagespeed=pagespeed, - type=sitetype + " " + cachetype + " ({0})" - .format("enabled" if siteinfo.is_enabled else - "disabled")) - self.app.render((data), 'siteinfo.mustache') - else: - Log.error(self, "nginx configuration file does not exist" - .format(ee_domain)) - - @expose(help="Monitor example.com logs") - def log(self): - self.app.pargs.site_name = self.app.pargs.site_name.strip() - (ee_domain, ee_www_domain) = ValidateDomain(self.app.pargs.site_name) - ee_site_webroot = getSiteInfo(self, ee_domain).site_path - - if not check_domain_exists(self, ee_domain): - Log.error(self, "site {0} does not exist".format(ee_domain)) - logfiles = glob.glob(ee_site_webroot + '/logs/*.log') - if logfiles: - logwatch(self, logfiles) - - @expose(help="Display Nginx configuration of example.com") - def show(self): - if not self.app.pargs.site_name: - try: - while not self.app.pargs.site_name: - self.app.pargs.site_name = (input('Enter site name : ') - .strip()) - except IOError as e: - Log.error(self, 'could not input site name') - # TODO Write code for ee site edit command here - self.app.pargs.site_name = self.app.pargs.site_name.strip() - (ee_domain, ee_www_domain) = ValidateDomain(self.app.pargs.site_name) - - if not check_domain_exists(self, ee_domain): - Log.error(self, "site {0} does not exist".format(ee_domain)) - - if os.path.isfile('/etc/nginx/sites-available/{0}' - .format(ee_domain)): - Log.info(self, "Display NGINX configuration for {0}" - .format(ee_domain)) - f = open('/etc/nginx/sites-available/{0}'.format(ee_domain), - encoding='utf-8', mode='r') - text = f.read() - Log.info(self, Log.ENDC + text) - f.close() - else: - Log.error(self, "nginx configuration file does not exists" - .format(ee_domain)) - - @expose(help="Change directory to site webroot") - def cd(self): - if not self.app.pargs.site_name: - try: - while not self.app.pargs.site_name: - self.app.pargs.site_name = (input('Enter site name : ') - .strip()) - except IOError as e: - Log.error(self, 'Unable to read input, please try again') - - self.app.pargs.site_name = self.app.pargs.site_name.strip() - (ee_domain, ee_www_domain) = ValidateDomain(self.app.pargs.site_name) - - if not check_domain_exists(self, ee_domain): - Log.error(self, "site {0} does not exist".format(ee_domain)) - - ee_site_webroot = getSiteInfo(self, ee_domain).site_path - EEFileUtils.chdir(self, ee_site_webroot) - - try: - subprocess.call(['bash']) - except OSError as e: - Log.debug(self, "{0}{1}".format(e.errno, e.strerror)) - Log.error(self, "unable to change directory") - - -class EESiteEditController(CementBaseController): - class Meta: - label = 'edit' - stacked_on = 'site' - stacked_type = 'nested' - description = ('Edit Nginx configuration of site') - arguments = [ - (['site_name'], - dict(help='domain name for the site', - nargs='?')), - (['--pagespeed'], - dict(help="edit pagespeed configuration for site", - action='store_true')), - ] - - @expose(hide=True) - def default(self): - if not self.app.pargs.site_name: - try: - while not self.app.pargs.site_name: - self.app.pargs.site_name = (input('Enter site name : ') - .strip()) - except IOError as e: - Log.error(self, 'Unable to read input, Please try again') - - self.app.pargs.site_name = self.app.pargs.site_name.strip() - (ee_domain, ee_www_domain) = ValidateDomain(self.app.pargs.site_name) - - if not check_domain_exists(self, ee_domain): - Log.error(self, "site {0} does not exist".format(ee_domain)) - - ee_site_webroot = EEVariables.ee_webroot + ee_domain - - if not self.app.pargs.pagespeed: - if os.path.isfile('/etc/nginx/sites-available/{0}' - .format(ee_domain)): - try: - EEShellExec.invoke_editor(self, '/etc/nginx/sites-availa' - 'ble/{0}'.format(ee_domain)) - except CommandExecutionError as e: - Log.error(self, "Failed invoke editor") - if (EEGit.checkfilestatus(self, "/etc/nginx", - '/etc/nginx/sites-available/{0}'.format(ee_domain))): - EEGit.add(self, ["/etc/nginx"], msg="Edit website: {0}" - .format(ee_domain)) - # Reload NGINX - if not EEService.reload_service(self, 'nginx'): - Log.error(self, "service nginx reload failed. " - "check issues with `nginx -t` command") - else: - Log.error(self, "nginx configuration file does not exists" - .format(ee_domain)) - - elif self.app.pargs.pagespeed: - if os.path.isfile('{0}/conf/nginx/pagespeed.conf' - .format(ee_site_webroot)): - try: - EEShellExec.invoke_editor(self, '{0}/conf/nginx/' - 'pagespeed.conf' - .format(ee_site_webroot)) - except CommandExecutionError as e: - Log.error(self, "Failed invoke editor") - if (EEGit.checkfilestatus(self, "{0}/conf/nginx" - .format(ee_site_webroot), - '{0}/conf/nginx/pagespeed.conf'.format(ee_site_webroot))): - EEGit.add(self, ["{0}/conf/nginx".format(ee_site_webroot)], - msg="Edit Pagespped config of site: {0}" - .format(ee_domain)) - # Reload NGINX - if not EEService.reload_service(self, 'nginx'): - Log.error(self, "service nginx reload failed. " - "check issues with `nginx -t` command") - else: - Log.error(self, "Pagespeed configuration file does not exists" - .format(ee_domain)) - - -class EESiteCreateController(CementBaseController): - class Meta: - label = 'create' - stacked_on = 'site' - stacked_type = 'nested' - description = ('this commands set up configuration and installs ' - 'required files as options are provided') - arguments = [ - (['site_name'], - dict(help='domain name for the site to be created.', - nargs='?')), - (['--html'], - dict(help="create html site", action='store_true')), - (['--php'], - dict(help="create php site", action='store_true')), - (['--mysql'], - dict(help="create mysql site", action='store_true')), - (['--wp'], - dict(help="create wordpress single site", - action='store_true')), - (['--wpsubdir'], - dict(help="create wordpress multisite with subdirectory setup", - action='store_true')), - (['--wpsubdomain'], - dict(help="create wordpress multisite with subdomain setup", - action='store_true')), - (['--w3tc'], - dict(help="create wordpress single/multi site with w3tc cache", - action='store_true')), - (['--wpfc'], - dict(help="create wordpress single/multi site with wpfc cache", - action='store_true')), - (['--wpsc'], - dict(help="create wordpress single/multi site with wpsc cache", - action='store_true')), - (['--wpredis'], - dict(help="create wordpress single/multi site with redis cache", - action='store_true')), - (['--hhvm'], - dict(help="create HHVM site", action='store_true')), - (['--pagespeed'], - dict(help="create pagespeed site", action='store_true')), - (['--user'], - dict(help="provide user for wordpress site")), - (['--email'], - dict(help="provide email address for wordpress site")), - (['--pass'], - dict(help="provide password for wordpress user", - dest='wppass')), - (['--proxy'], - dict(help="create proxy for site", nargs='+')), - (['--experimental'], - dict(help="Enable Experimenal packages without prompt", - action='store_true')), - ] - - @expose(hide=True) - def default(self): - # self.app.render((data), 'default.mustache') - # Check domain name validation - data = dict() - host, port = None, None - try: - stype, cache = detSitePar(vars(self.app.pargs)) - except RuntimeError as e: - Log.debug(self, str(e)) - Log.error(self, "Please provide valid options to creating site") - - if stype is None and self.app.pargs.proxy: - stype, cache = 'proxy', '' - proxyinfo = self.app.pargs.proxy[0].strip() - if not proxyinfo: - Log.error(self, "Please provide proxy server host information") - proxyinfo = proxyinfo.split(':') - host = proxyinfo[0].strip() - port = '80' if len(proxyinfo) < 2 else proxyinfo[1].strip() - elif stype is None and not self.app.pargs.proxy: - stype, cache = 'html', 'basic' - elif stype and self.app.pargs.proxy: - Log.error(self, "proxy should not be used with other site types") - if (self.app.pargs.proxy and (self.app.pargs.pagespeed - or self.app.pargs.hhvm)): - Log.error(self, "Proxy site can not run on pagespeed or hhvm") - - if not self.app.pargs.site_name: - try: - while not self.app.pargs.site_name: - # preprocessing before finalize site name - self.app.pargs.site_name = (input('Enter site name : ') - .strip()) - except IOError as e: - Log.debug(self, str(e)) - Log.error(self, "Unable to input site name, Please try again!") - - self.app.pargs.site_name = self.app.pargs.site_name.strip() - (ee_domain, ee_www_domain) = ValidateDomain(self.app.pargs.site_name) - - if not ee_domain.strip(): - Log.error("Invalid domain name, " - "Provide valid domain name") - - ee_site_webroot = EEVariables.ee_webroot + ee_domain - - if check_domain_exists(self, ee_domain): - Log.error(self, "site {0} already exists".format(ee_domain)) - elif os.path.isfile('/etc/nginx/sites-available/{0}' - .format(ee_domain)): - Log.error(self, "Nginx configuration /etc/nginx/sites-available/" - "{0} already exists".format(ee_domain)) - - if stype == 'proxy': - data['site_name'] = ee_domain - data['www_domain'] = ee_www_domain - data['proxy'] = True - data['host'] = host - data['port'] = port - ee_site_webroot = "" - - if stype in ['html', 'php']: - data = dict(site_name=ee_domain, www_domain=ee_www_domain, - static=True, basic=False, wp=False, w3tc=False, - wpfc=False, wpsc=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot) - - if stype == 'php': - data['static'] = False - data['basic'] = True - - elif stype in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']: - - data = dict(site_name=ee_domain, www_domain=ee_www_domain, - static=False, basic=True, wp=False, w3tc=False, - wpfc=False, wpsc=False, wpredis=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot, - ee_db_name='', ee_db_user='', ee_db_pass='', - ee_db_host='') - - if stype in ['wp', 'wpsubdir', 'wpsubdomain']: - data['wp'] = True - data['basic'] = False - data[cache] = True - data['wp-user'] = self.app.pargs.user - data['wp-email'] = self.app.pargs.email - data['wp-pass'] = self.app.pargs.wppass - if stype in ['wpsubdir', 'wpsubdomain']: - data['multisite'] = True - if stype == 'wpsubdir': - data['wpsubdir'] = True - else: - pass - - if stype == "html" and self.app.pargs.hhvm: - Log.error(self, "Can not create HTML site with HHVM") - - if data and self.app.pargs.hhvm: - if (not self.app.pargs.experimental): - Log.info(self, "HHVM is experimental feature and it may not " - "work with all plugins of your site.\nYou can " - "disable it by passing --hhvm=off later.\nDo you wish" - " to enable HHVM now for {0}?".format(ee_domain)) - - # Check prompt - check_prompt = input("Type \"y\" to continue [n]:") - if check_prompt != "Y" and check_prompt != "y": - Log.info(self, "Not using HHVM for site.") - data['hhvm'] = False - hhvm = 0 - self.app.pargs.hhvm = False - else: - data['hhvm'] = True - hhvm = 1 - else: - data['hhvm'] = True - hhvm = 1 - - elif data: - data['hhvm'] = False - hhvm = 0 - - if data and self.app.pargs.pagespeed: - if (not self.app.pargs.experimental): - Log.info(self, "PageSpeed is experimental feature and it may not " - "work with all CSS/JS/Cache of your site.\nYou can " - "disable it by passing --pagespeed=off later.\nDo you wish" - " to enable PageSpeed now for {0}?".format(ee_domain)) - - # Check prompt - check_prompt = input("Type \"y\" to continue [n]:") - if check_prompt != "Y" and check_prompt != "y": - Log.info(self, "Not using PageSpeed for site.") - data['pagespeed'] = False - pagespeed = 0 - self.app.pargs.pagespeed = False - else: - data['pagespeed'] = True - pagespeed = 1 - else: - data['pagespeed'] = True - pagespeed = 1 - elif data: - data['pagespeed'] = False - pagespeed = 0 - - if (cache == 'wpredis' and (not self.app.pargs.experimental)): - Log.info(self, "Redis is experimental feature and it may not " - "work with all CSS/JS/Cache of your site.\nYou can " - "disable it by changing cache later.\nDo you wish" - " to enable Redis now for {0}?".format(ee_domain)) - - # Check prompt - check_prompt = input("Type \"y\" to continue [n]:") - if check_prompt != "Y" and check_prompt != "y": - Log.error(self, "Not using Redis for site") - cache = 'basic' - data['wpredis'] = False - data['basic'] = True - self.app.pargs.wpredis = False - - # self.app.args.print_help() - # if not data: - # self.app.close(1) - - # Check rerequired packages are installed or not - ee_auth = site_package_check(self, stype) - - try: - pre_run_checks(self) - except SiteError as e: - Log.debug(self, str(e)) - Log.error(self, "NGINX configuration check failed.") - - try: - try: - # setup NGINX configuration, and webroot - setupdomain(self, data) - - # Fix Nginx Hashbucket size error - hashbucket(self) - except SiteError as e: - # call cleanup actions on failure - Log.info(self, Log.FAIL + "Oops Something went wrong !!") - Log.info(self, Log.FAIL + "Calling cleanup actions ...") - doCleanupAction(self, domain=ee_domain, - webroot=data['webroot']) - Log.debug(self, str(e)) - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - - if 'proxy' in data.keys() and data['proxy']: - addNewSite(self, ee_domain, stype, cache, ee_site_webroot) - # Service Nginx Reload - if not EEService.reload_service(self, 'nginx'): - Log.info(self, Log.FAIL + "Oops Something went wrong !!") - Log.info(self, Log.FAIL + "Calling cleanup actions ...") - doCleanupAction(self, domain=ee_domain) - Log.debug(self, str(e)) - Log.error(self, "service nginx reload failed. " - "check issues with `nginx -t` command") - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - if ee_auth and len(ee_auth): - for msg in ee_auth: - Log.info(self, Log.ENDC + msg, log=False) - Log.info(self, "Successfully created site" - " http://{0}".format(ee_domain)) - return - # Update pagespeed config - if self.app.pargs.pagespeed: - operateOnPagespeed(self, data) - - addNewSite(self, ee_domain, stype, cache, ee_site_webroot, - hhvm=hhvm, pagespeed=pagespeed) - - # Setup database for MySQL site - if 'ee_db_name' in data.keys() and not data['wp']: - try: - data = setupdatabase(self, data) - # Add database information for site into database - updateSiteInfo(self, ee_domain, db_name=data['ee_db_name'], - db_user=data['ee_db_user'], - db_password=data['ee_db_pass'], - db_host=data['ee_db_host']) - except SiteError as e: - # call cleanup actions on failure - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Oops Something went wrong !!") - Log.info(self, Log.FAIL + "Calling cleanup actions ...") - doCleanupAction(self, domain=ee_domain, - webroot=data['webroot'], - dbname=data['ee_db_name'], - dbuser=data['ee_db_user'], - dbhost=data['ee_db_host']) - deleteSiteInfo(self, ee_domain) - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - - try: - eedbconfig = open("{0}/ee-config.php" - .format(ee_site_webroot), - encoding='utf-8', mode='w') - eedbconfig.write("" - .format(data['ee_db_name'], - data['ee_db_user'], - data['ee_db_pass'], - data['ee_db_host'])) - eedbconfig.close() - stype = 'mysql' - except IOError as e: - Log.debug(self, str(e)) - Log.debug(self, "Error occured while generating " - "ee-config.php") - Log.info(self, Log.FAIL + "Oops Something went wrong !!") - Log.info(self, Log.FAIL + "Calling cleanup actions ...") - doCleanupAction(self, domain=ee_domain, - webroot=data['webroot'], - dbname=data['ee_db_name'], - dbuser=data['ee_db_user'], - dbhost=data['ee_db_host']) - deleteSiteInfo(self, ee_domain) - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - - # Setup WordPress if Wordpress site - if data['wp']: - try: - ee_wp_creds = setupwordpress(self, data) - # Add database information for site into database - updateSiteInfo(self, ee_domain, db_name=data['ee_db_name'], - db_user=data['ee_db_user'], - db_password=data['ee_db_pass'], - db_host=data['ee_db_host']) - except SiteError as e: - # call cleanup actions on failure - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Oops Something went wrong !!") - Log.info(self, Log.FAIL + "Calling cleanup actions ...") - doCleanupAction(self, domain=ee_domain, - webroot=data['webroot'], - dbname=data['ee_db_name'], - dbuser=data['ee_db_user'], - dbhost=data['ee_mysql_grant_host']) - deleteSiteInfo(self, ee_domain) - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - - # Service Nginx Reload call cleanup if failed to reload nginx - if not EEService.reload_service(self, 'nginx'): - Log.info(self, Log.FAIL + "Oops Something went wrong !!") - Log.info(self, Log.FAIL + "Calling cleanup actions ...") - doCleanupAction(self, domain=ee_domain, - webroot=data['webroot']) - if 'ee_db_name' in data.keys(): - doCleanupAction(self, domain=ee_domain, - dbname=data['ee_db_name'], - dbuser=data['ee_db_user'], - dbhost=data['ee_mysql_grant_host']) - deleteSiteInfo(self, ee_domain) - Log.info(self, Log.FAIL + "service nginx reload failed." - " check issues with `nginx -t` command.") - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - - EEGit.add(self, ["/etc/nginx"], - msg="{0} created with {1} {2}" - .format(ee_www_domain, stype, cache)) - # Setup Permissions for webroot - try: - setwebrootpermissions(self, data['webroot']) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Oops Something went wrong !!") - Log.info(self, Log.FAIL + "Calling cleanup actions ...") - doCleanupAction(self, domain=ee_domain, - webroot=data['webroot']) - if 'ee_db_name' in data.keys(): - print("Inside db cleanup") - doCleanupAction(self, domain=ee_domain, - dbname=data['ee_db_name'], - dbuser=data['ee_db_user'], - dbhost=data['ee_mysql_grant_host']) - deleteSiteInfo(self, ee_domain) - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - - if ee_auth and len(ee_auth): - for msg in ee_auth: - Log.info(self, Log.ENDC + msg, log=False) - - if data['wp']: - Log.info(self, Log.ENDC + "WordPress admin user :" - " {0}".format(ee_wp_creds['wp_user']), log=False) - Log.info(self, Log.ENDC + "WordPress admin user password : {0}" - .format(ee_wp_creds['wp_pass']), log=False) - - display_cache_settings(self, data) - - Log.info(self, "Successfully created site" - " http://{0}".format(ee_domain)) - except SiteError as e: - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - - -class EESiteUpdateController(CementBaseController): - class Meta: - label = 'update' - stacked_on = 'site' - stacked_type = 'nested' - description = ('This command updates websites configuration to ' - 'another as per the options are provided') - arguments = [ - (['site_name'], - dict(help='domain name for the site to be updated', - nargs='?')), - (['--password'], - dict(help="update to password for wordpress site user", - action='store_true')), - (['--html'], - dict(help="update to html site", action='store_true')), - (['--php'], - dict(help="update to php site", action='store_true')), - (['--mysql'], - dict(help="update to mysql site", action='store_true')), - (['--wp'], - dict(help="update to wordpress single site", - action='store_true')), - (['--wpsubdir'], - dict(help="update to wpsubdir site", action='store_true')), - (['--wpsubdomain'], - dict(help="update to wpsubdomain site", action='store_true')), - (['--w3tc'], - dict(help="update to w3tc cache", action='store_true')), - (['--wpfc'], - dict(help="update to wpfc cache", action='store_true')), - (['--wpsc'], - dict(help="update to wpsc cache", action='store_true')), - (['--wpredis'], - dict(help="update to redis cache", action='store_true')), - (['--hhvm'], - dict(help='Use HHVM for site', - action='store' or 'store_const', - choices=('on', 'off'), const='on', nargs='?')), - (['--pagespeed'], - dict(help='Use PageSpeed for site', - action='store' or 'store_const', - choices=('on', 'off'), const='on', nargs='?')), - (['--proxy'], - dict(help="update to proxy site", nargs='+')), - (['--experimental'], - dict(help="Enable Experimenal packages without prompt", - action='store_true')), - (['--all'], - dict(help="update all sites", action='store_true')), - ] - - @expose(help="Update site type or cache") - def default(self): - pargs = self.app.pargs - - if pargs.all: - if pargs.site_name: - Log.error(self, "`--all` option cannot be used with site name" - " provided") - if pargs.html: - Log.error(self, "No site can be updated to html") - - if not (pargs.php or - pargs.mysql or pargs.wp or pargs.wpsubdir or - pargs.wpsubdomain or pargs.w3tc or pargs.wpfc or - pargs.wpsc or pargs.hhvm or pargs.pagespeed or pargs.wpredis): - Log.error(self, "Please provide options to update sites.") - - if pargs.all: - if pargs.site_name: - Log.error(self, "`--all` option cannot be used with site name" - " provided") - - sites = getAllsites(self) - if not sites: - pass - else: - for site in sites: - pargs.site_name = site.sitename - Log.info(self, Log.ENDC + Log.BOLD + "Updating site {0}," - " please wait..." - .format(pargs.site_name)) - self.doupdatesite(pargs) - print("\n") - else: - self.doupdatesite(pargs) - - def doupdatesite(self, pargs): - hhvm = None - pagespeed = None - - data = dict() - try: - stype, cache = detSitePar(vars(pargs)) - except RuntimeError as e: - Log.debug(self, str(e)) - Log.error(self, "Please provide valid options combination for" - " site update") - - if stype is None and pargs.proxy: - stype, cache = 'proxy', '' - proxyinfo = pargs.proxy[0].strip() - if not proxyinfo: - Log.error(self, "Please provide proxy server host information") - proxyinfo = proxyinfo.split(':') - host = proxyinfo[0].strip() - port = '80' if len(proxyinfo) < 2 else proxyinfo[1].strip() - elif stype is None and not pargs.proxy: - stype, cache = 'html', 'basic' - elif stype and pargs.proxy: - Log.error(self, "--proxy can not be used with other site types") - if (pargs.proxy and (pargs.pagespeed or pargs.hhvm)): - Log.error(self, "Proxy site can not run on pagespeed or hhvm") - - if not pargs.site_name: - try: - while not pargs.site_name: - pargs.site_name = (input('Enter site name : ').strip()) - except IOError as e: - Log.error(self, 'Unable to input site name, Please try again!') - - pargs.site_name = pargs.site_name.strip() - (ee_domain, - ee_www_domain, ) = ValidateDomain(pargs.site_name) - ee_site_webroot = EEVariables.ee_webroot + ee_domain - - check_site = getSiteInfo(self, ee_domain) - - if check_site is None: - Log.error(self, " Site {0} does not exist.".format(ee_domain)) - else: - oldsitetype = check_site.site_type - oldcachetype = check_site.cache_type - old_hhvm = check_site.is_hhvm - old_pagespeed = check_site.is_pagespeed - - if (pargs.password and not (pargs.html or - pargs.php or pargs.mysql or pargs.wp or - pargs.w3tc or pargs.wpfc or pargs.wpsc - or pargs.wpsubdir or pargs.wpsubdomain)): - try: - updatewpuserpassword(self, ee_domain, ee_site_webroot) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, "\nPassword Unchanged.") - return 0 - - if ((stype == "proxy" and stype == oldsitetype and self.app.pargs.hhvm) - or (stype == "proxy" and - stype == oldsitetype and self.app.pargs.pagespeed)): - Log.info(self, Log.FAIL + - "Can not update proxy site to HHVM or Pagespeed") - return 1 - if stype == "html" and stype == oldsitetype and self.app.pargs.hhvm: - Log.info(self, Log.FAIL + "Can not update HTML site to HHVM") - return 1 - - if ((stype == 'php' and oldsitetype not in ['html', 'proxy']) or - (stype == 'mysql' and oldsitetype not in ['html', 'php', - 'proxy']) or - (stype == 'wp' and oldsitetype not in ['html', 'php', 'mysql', - 'proxy', 'wp']) or - (stype == 'wpsubdir' and oldsitetype in ['wpsubdomain']) or - (stype == 'wpsubdomain' and oldsitetype in ['wpsubdir']) or - (stype == oldsitetype and cache == oldcachetype) and - not pargs.pagespeed): - Log.info(self, Log.FAIL + "can not update {0} {1} to {2} {3}". - format(oldsitetype, oldcachetype, stype, cache)) - return 1 - - if stype == 'proxy': - data['site_name'] = ee_domain - data['www_domain'] = ee_www_domain - data['proxy'] = True - data['host'] = host - data['port'] = port - pagespeed = False - hhvm = False - data['webroot'] = ee_site_webroot - data['currsitetype'] = oldsitetype - data['currcachetype'] = oldcachetype - - if stype == 'php': - data = dict(site_name=ee_domain, www_domain=ee_www_domain, - static=False, basic=True, wp=False, w3tc=False, - wpfc=False, wpsc=False, wpredis=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot, - currsitetype=oldsitetype, currcachetype=oldcachetype) - - elif stype in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']: - - data = dict(site_name=ee_domain, www_domain=ee_www_domain, - static=False, basic=True, wp=False, w3tc=False, - wpfc=False, wpsc=False, wpredis=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot, - ee_db_name='', ee_db_user='', ee_db_pass='', - ee_db_host='', - currsitetype=oldsitetype, currcachetype=oldcachetype) - - if stype in ['wp', 'wpsubdir', 'wpsubdomain']: - data['wp'] = True - data['basic'] = False - data[cache] = True - if stype in ['wpsubdir', 'wpsubdomain']: - data['multisite'] = True - if stype == 'wpsubdir': - data['wpsubdir'] = True - - if pargs.pagespeed or pargs.hhvm: - if not data: - data = dict(site_name=ee_domain, www_domain=ee_www_domain, - currsitetype=oldsitetype, - currcachetype=oldcachetype, - webroot=ee_site_webroot) - - stype = oldsitetype - cache = oldcachetype - if oldsitetype == 'html' or oldsitetype == 'proxy': - data['static'] = True - data['wp'] = False - data['multisite'] = False - data['wpsubdir'] = False - elif oldsitetype == 'php' or oldsitetype == 'mysql': - data['static'] = False - data['wp'] = False - data['multisite'] = False - data['wpsubdir'] = False - elif oldsitetype == 'wp': - data['static'] = False - data['wp'] = True - data['multisite'] = False - data['wpsubdir'] = False - elif oldsitetype == 'wpsubdir': - data['static'] = False - data['wp'] = True - data['multisite'] = True - data['wpsubdir'] = True - elif oldsitetype == 'wpsubdomain': - data['static'] = False - data['wp'] = True - data['multisite'] = True - data['wpsubdir'] = False - - if oldcachetype == 'basic': - data['basic'] = True - data['w3tc'] = False - data['wpfc'] = False - data['wpsc'] = False - data['wpredis'] = False - elif oldcachetype == 'w3tc': - data['basic'] = False - data['w3tc'] = True - data['wpfc'] = False - data['wpsc'] = False - data['wpredis'] = False - elif oldcachetype == 'wpfc': - data['basic'] = False - data['w3tc'] = False - data['wpfc'] = True - data['wpsc'] = False - data['wpredis'] = False - elif oldcachetype == 'wpsc': - data['basic'] = False - data['w3tc'] = False - data['wpfc'] = False - data['wpsc'] = True - data['wpredis'] = False - elif oldcachetype == 'wpredis': - data['basic'] = False - data['w3tc'] = False - data['wpfc'] = False - data['wpsc'] = False - data['wpredis'] = True - - if pargs.hhvm != 'off': - data['hhvm'] = True - hhvm = True - elif pargs.hhvm == 'off': - data['hhvm'] = False - hhvm = False - - if pargs.pagespeed != 'off': - data['pagespeed'] = True - pagespeed = True - elif pargs.pagespeed == 'off': - data['pagespeed'] = False - pagespeed = False - - if pargs.pagespeed: - if pagespeed is old_pagespeed: - if pagespeed is False: - Log.info(self, "Pagespeed is already disabled for given " - "site") - elif pagespeed is True: - Log.info(self, "Pagespeed is allready enabled for given " - "site") - pargs.pagespeed = False - - if pargs.hhvm: - if hhvm is old_hhvm: - if hhvm is False: - Log.info(self, "HHVM is allready disabled for given " - "site") - elif hhvm is True: - Log.info(self, "HHVM is allready enabled for given " - "site") - - pargs.hhvm = False - - if data and (not pargs.hhvm): - if old_hhvm is True: - data['hhvm'] = True - hhvm = True - else: - data['hhvm'] = False - hhvm = False - - if data and (not pargs.pagespeed): - if old_pagespeed is True: - data['pagespeed'] = True - pagespeed = True - else: - data['pagespeed'] = False - pagespeed = False - - if pargs.pagespeed=="on" or pargs.hhvm=="on": - if pargs.hhvm == "on": - if (not pargs.experimental): - Log.info(self, "HHVM is experimental feature and it may not" - " work with all plugins of your site.\nYou can " - "disable it by passing --hhvm=off later.\nDo you wish" - " to enable HHVM now for {0}?".format(ee_domain)) - - # Check prompt - check_prompt = input("Type \"y\" to continue [n]:") - if check_prompt != "Y" and check_prompt != "y": - Log.info(self, "Not using HHVM for site") - data['hhvm'] = False - hhvm = False - else: - data['hhvm'] = True - hhvm = True - else: - data['hhvm'] = True - hhvm = True - - if pargs.pagespeed=="on": - if (not pargs.experimental): - Log.info(self, "PageSpeed is experimental feature and it may not" - " work with all CSS/JS/Cache of your site.\nYou can " - "disable it by passing --pagespeed=off later.\nDo you wish" - " to enable PageSpeed now for {0}?".format(ee_domain)) - - # Check prompt - check_prompt = input("Type \"y\" to continue [n]:") - if check_prompt != "Y" and check_prompt != "y": - Log.info(self, "Not using Pagespeed for given site") - data['pagespeed'] = False - pagespeed = False - else: - data['pagespeed'] = True - pagespeed = True - else: - data['pagespeed'] = True - pagespeed = True - - if data['currcachetype'] != 'wpredis' and pargs.wpredis: - if (not pargs.experimental): - Log.info(self, "Redis is experimental feature and it may not" - " work with all plugins of your site.\nYou can " - "disable it by changing cache type later.\nDo you wish" - " to enable Redis now for {0}?".format(ee_domain)) - - # Check prompt - check_prompt = input("Type \"y\" to continue [n]: ") - if check_prompt != "Y" and check_prompt != "y": - Log.error(self, "Not using Redis for site") - data['wpredis'] = False - data['basic'] = True - cache = 'basic' - - if ((hhvm is old_hhvm) and (pagespeed is old_pagespeed) and - (stype == oldsitetype and cache == oldcachetype)): - return 1 - - if not data: - Log.error(self, "Cannot update {0}, Invalid Options" - .format(ee_domain)) - - ee_auth = site_package_check(self, stype) - data['ee_db_name'] = check_site.db_name - data['ee_db_user'] = check_site.db_user - data['ee_db_pass'] = check_site.db_password - data['ee_db_host'] = check_site.db_host - - try: - pre_run_checks(self) - except SiteError as e: - Log.debug(self, str(e)) - Log.error(self, "NGINX configuration check failed.") - - try: - sitebackup(self, data) - except Exception as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - # setup NGINX configuration, and webroot - try: - setupdomain(self, data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update site failed." - "Check logs for reason" - "`tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - if 'proxy' in data.keys() and data['proxy']: - updateSiteInfo(self, ee_domain, stype=stype, cache=cache, - hhvm=hhvm, pagespeed=pagespeed) - Log.info(self, "Successfully updated site" - " http://{0}".format(ee_domain)) - return 0 - - # Update pagespeed config - if pargs.pagespeed: - operateOnPagespeed(self, data) - - if stype == oldsitetype and cache == oldcachetype: - - # Service Nginx Reload - if not EEService.reload_service(self, 'nginx'): - Log.error(self, "service nginx reload failed. " - "check issues with `nginx -t` command") - - updateSiteInfo(self, ee_domain, stype=stype, cache=cache, - hhvm=hhvm, pagespeed=pagespeed) - - Log.info(self, "Successfully updated site" - " http://{0}".format(ee_domain)) - return 0 - - #if data['ee_db_name'] and not data['wp']: - if 'ee_db_name' in data.keys() and not data['wp']: - try: - data = setupdatabase(self, data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update site failed." - "Check logs for reason" - "`tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - try: - eedbconfig = open("{0}/ee-config.php".format(ee_site_webroot), - encoding='utf-8', mode='w') - eedbconfig.write("" - .format(data['ee_db_name'], - data['ee_db_user'], - data['ee_db_pass'], - data['ee_db_host'])) - eedbconfig.close() - except IOError as e: - Log.debug(self, str(e)) - Log.debug(self, "creating ee-config.php failed.") - Log.info(self, Log.FAIL + "Update site failed. " - "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - # Setup WordPress if old sites are html/php/mysql sites - if data['wp'] and oldsitetype in ['html', 'proxy', 'php', 'mysql']: - try: - ee_wp_creds = setupwordpress(self, data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update site failed." - "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - # Uninstall unnecessary plugins - if oldsitetype in ['wp', 'wpsubdir', 'wpsubdomain']: - # Setup WordPress Network if update option is multisite - # and oldsite is WordPress single site - if data['multisite'] and oldsitetype == 'wp': - try: - setupwordpressnetwork(self, data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update site failed. " - "Check logs for reason" - " `tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - if (oldcachetype == 'w3tc' or oldcachetype == 'wpfc' and - not (data['w3tc'] or data['wpfc'])): - try: - uninstallwp_plugin(self, 'w3-total-cache', data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update site failed. " - "Check logs for reason" - " `tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - if ((oldcachetype in ['w3tc', 'wpsc', 'basic', 'wpredis'] and - (data['wpfc'])) or (oldsitetype == 'wp' and data['multisite'] and data['wpfc'])): - try: - plugin_data = '{"log_level":"INFO","log_filesize":5,"enable_purge":1,"enable_map":0,"enable_log":0,"enable_stamp":0,"purge_homepage_on_new":1,"purge_homepage_on_edit":1,"purge_homepage_on_del":1,"purge_archive_on_new":1,"purge_archive_on_edit":0,"purge_archive_on_del":0,"purge_archive_on_new_comment":0,"purge_archive_on_deleted_comment":0,"purge_page_on_mod":1,"purge_page_on_new_comment":1,"purge_page_on_deleted_comment":1,"cache_method":"enable_fastcgi","purge_method":"get_request","redis_hostname":"127.0.0.1","redis_port":"6379","redis_prefix":"nginx-cache:"}' - setupwp_plugin(self, 'nginx-helper', 'rt_wp_nginx_helper_options', plugin_data, data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update nginx-helper settings failed. " - "Check logs for reason" - " `tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - elif ((oldcachetype in ['w3tc', 'wpsc', 'basic', 'wpfc'] and - (data['wpredis'])) or (oldsitetype == 'wp' and data['multisite'] and data['wpredis'])): - try: - plugin_data = '{"log_level":"INFO","log_filesize":5,"enable_purge":1,"enable_map":0,"enable_log":0,"enable_stamp":0,"purge_homepage_on_new":1,"purge_homepage_on_edit":1,"purge_homepage_on_del":1,"purge_archive_on_new":1,"purge_archive_on_edit":0,"purge_archive_on_del":0,"purge_archive_on_new_comment":0,"purge_archive_on_deleted_comment":0,"purge_page_on_mod":1,"purge_page_on_new_comment":1,"purge_page_on_deleted_comment":1,"cache_method":"enable_redis","purge_method":"get_request","redis_hostname":"127.0.0.1","redis_port":"6379","redis_prefix":"nginx-cache:"}' - setupwp_plugin(self, 'nginx-helper', 'rt_wp_nginx_helper_options', plugin_data, data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update nginx-helper settings failed. " - "Check logs for reason" - " `tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - else: - try: - plugin_data = '{"log_level":"INFO","log_filesize":5,"enable_purge":0,"enable_map":0,"enable_log":0,"enable_stamp":0,"purge_homepage_on_new":1,"purge_homepage_on_edit":1,"purge_homepage_on_del":1,"purge_archive_on_new":1,"purge_archive_on_edit":0,"purge_archive_on_del":0,"purge_archive_on_new_comment":0,"purge_archive_on_deleted_comment":0,"purge_page_on_mod":1,"purge_page_on_new_comment":1,"purge_page_on_deleted_comment":1,"cache_method":"enable_redis","purge_method":"get_request","redis_hostname":"127.0.0.1","redis_port":"6379","redis_prefix":"nginx-cache:"}' - setupwp_plugin(self, 'nginx-helper', 'rt_wp_nginx_helper_options', plugin_data, data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update nginx-helper settings failed. " - "Check logs for reason" - " `tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - if oldcachetype == 'wpsc' and not data['wpsc']: - try: - uninstallwp_plugin(self, 'wp-super-cache', data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update site failed." - "Check logs for reason" - " `tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - if oldcachetype == 'wpredis' and not data['wpredis']: - try: - uninstallwp_plugin(self, 'redis-cache', data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update site failed." - "Check logs for reason" - " `tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - if (oldcachetype != 'w3tc' or oldcachetype != 'wpfc') and (data['w3tc'] - or data['wpfc']): - try: - installwp_plugin(self, 'w3-total-cache', data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update site failed." - "Check logs for reason" - " `tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - if oldcachetype != 'wpsc' and data['wpsc']: - try: - installwp_plugin(self, 'wp-super-cache', data) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update site failed." - "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - if oldcachetype != 'wpredis' and data['wpredis']: - try: - if installwp_plugin(self, 'redis-cache', data): - if EEShellExec.cmd_exec(self, "grep -q \"WP_CACHE_KEY_SALT\" {0}/wp-config.php" - .format(ee_site_webroot)): - pass - else: - try: - wpconfig = open("{0}/wp-config.php".format(ee_site_webroot), - encoding='utf-8', mode='a') - wpconfig.write("\n\ndefine( \'WP_CACHE_KEY_SALT\', \'{0}:\' );" - .format(ee_domain)) - wpconfig.close() - except IOError as e: - Log.debug(self, str(e)) - Log.debug(self, "Updating wp-config.php failed.") - Log.warn(self, "Updating wp-config.php failed. " - "Could not append:" - "\ndefine( \'WP_CACHE_KEY_SALT\', \'{0}:\' );".format(ee_domain) + - "\nPlease add manually") - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update site failed." - "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - # Service Nginx Reload - if not EEService.reload_service(self, 'nginx'): - Log.error(self, "service nginx reload failed. " - "check issues with `nginx -t` command") - - EEGit.add(self, ["/etc/nginx"], - msg="{0} updated with {1} {2}" - .format(ee_www_domain, stype, cache)) - # Setup Permissions for webroot - try: - setwebrootpermissions(self, data['webroot']) - except SiteError as e: - Log.debug(self, str(e)) - Log.info(self, Log.FAIL + "Update site failed." - "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - return 1 - - if ee_auth and len(ee_auth): - for msg in ee_auth: - Log.info(self, Log.ENDC + msg) - - display_cache_settings(self, data) - if data['wp'] and oldsitetype in ['html', 'php', 'mysql']: - Log.info(self, "\n\n" + Log.ENDC + "WordPress admin user :" - " {0}".format(ee_wp_creds['wp_user'])) - Log.info(self, Log.ENDC + "WordPress admin password : {0}" - .format(ee_wp_creds['wp_pass']) + "\n\n") - if oldsitetype in ['html', 'php'] and stype != 'php': - updateSiteInfo(self, ee_domain, stype=stype, cache=cache, - db_name=data['ee_db_name'], - db_user=data['ee_db_user'], - db_password=data['ee_db_pass'], - db_host=data['ee_db_host'], hhvm=hhvm, - pagespeed=pagespeed) - else: - updateSiteInfo(self, ee_domain, stype=stype, cache=cache, - hhvm=hhvm, pagespeed=pagespeed) - Log.info(self, "Successfully updated site" - " http://{0}".format(ee_domain)) - return 0 - - -class EESiteDeleteController(CementBaseController): - class Meta: - label = 'delete' - stacked_on = 'site' - stacked_type = 'nested' - description = 'delete an existing website' - arguments = [ - (['site_name'], - dict(help='domain name to be deleted', nargs='?')), - (['--no-prompt'], - dict(help="doesnt ask permission for delete", - action='store_true')), - (['-f','--force'], - dict(help="forcefully delete site and configuration", - action='store_true')), - (['--all'], - dict(help="delete all", action='store_true')), - (['--db'], - dict(help="delete db only", action='store_true')), - (['--files'], - dict(help="delete webroot only", action='store_true')), - ] - - @expose(help="Delete website configuration and files") - @expose(hide=True) - def default(self): - if not self.app.pargs.site_name: - try: - while not self.app.pargs.site_name: - self.app.pargs.site_name = (input('Enter site name : ') - .strip()) - except IOError as e: - Log.error(self, 'could not input site name') - - self.app.pargs.site_name = self.app.pargs.site_name.strip() - (ee_domain, ee_www_domain) = ValidateDomain(self.app.pargs.site_name) - ee_db_name = '' - ee_prompt = '' - ee_nginx_prompt = '' - mark_db_delete_prompt = False - mark_webroot_delete_prompt = False - mark_db_deleted = False - mark_webroot_deleted = False - if not check_domain_exists(self, ee_domain): - Log.error(self, "site {0} does not exist".format(ee_domain)) - - if ((not self.app.pargs.db) and (not self.app.pargs.files) and - (not self.app.pargs.all)): - self.app.pargs.all = True - - # Gather information from ee-db for ee_domain - check_site = getSiteInfo(self, ee_domain) - ee_site_type = check_site.site_type - ee_site_webroot = check_site.site_path - if ee_site_webroot == 'deleted': - mark_webroot_deleted = True - if ee_site_type in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']: - ee_db_name = check_site.db_name - ee_db_user = check_site.db_user - ee_mysql_grant_host = self.app.config.get('mysql', 'grant-host') - if ee_db_name == 'deleted': - mark_db_deleted = True - if self.app.pargs.all: - self.app.pargs.db = True - self.app.pargs.files = True - else: - if self.app.pargs.all: - mark_db_deleted = True - self.app.pargs.files = True - - # Delete website database - if self.app.pargs.db: - if ee_db_name != 'deleted' and ee_db_name != '': - if not self.app.pargs.no_prompt: - ee_db_prompt = input('Are you sure, you want to delete' - ' database [y/N]: ') - else: - ee_db_prompt = 'Y' - mark_db_delete_prompt = True - - if ee_db_prompt == 'Y' or ee_db_prompt == 'y': - mark_db_delete_prompt = True - Log.info(self, "Deleting Database, {0}, user {1}" - .format(ee_db_name, ee_db_user)) - deleteDB(self, ee_db_name, ee_db_user, ee_mysql_grant_host, False) - updateSiteInfo(self, ee_domain, - db_name='deleted', - db_user='deleted', - db_password='deleted') - mark_db_deleted = True - Log.info(self, "Deleted Database successfully.") - else: - mark_db_deleted = True - Log.info(self, "Does not seems to have database for this site." - ) - - # Delete webroot - if self.app.pargs.files: - if ee_site_webroot != 'deleted': - if not self.app.pargs.no_prompt: - ee_web_prompt = input('Are you sure, you want to delete ' - 'webroot [y/N]: ') - else: - ee_web_prompt = 'Y' - mark_webroot_delete_prompt = True - - if ee_web_prompt == 'Y' or ee_web_prompt == 'y': - mark_webroot_delete_prompt = True - Log.info(self, "Deleting Webroot, {0}" - .format(ee_site_webroot)) - deleteWebRoot(self, ee_site_webroot) - updateSiteInfo(self, ee_domain, webroot='deleted') - mark_webroot_deleted = True - Log.info(self, "Deleted webroot successfully") - else: - mark_webroot_deleted = True - Log.info(self, "Webroot seems to be already deleted") - - if not self.app.pargs.force: - if (mark_webroot_deleted and mark_db_deleted): - # TODO Delete nginx conf - removeNginxConf(self, ee_domain) - deleteSiteInfo(self, ee_domain) - Log.info(self, "Deleted site {0}".format(ee_domain)) - # else: - # Log.error(self, " site {0} does not exists".format(ee_domain)) - else: - if (mark_db_delete_prompt or mark_webroot_delete_prompt or (mark_webroot_deleted and mark_db_deleted)): - # TODO Delete nginx conf - removeNginxConf(self, ee_domain) - deleteSiteInfo(self, ee_domain) - Log.info(self, "Deleted site {0}".format(ee_domain)) - - -class EESiteListController(CementBaseController): - class Meta: - label = 'list' - stacked_on = 'site' - stacked_type = 'nested' - description = 'List websites' - arguments = [ - (['--enabled'], - dict(help='List enabled websites', action='store_true')), - (['--disabled'], - dict(help="List disabled websites", action='store_true')), - ] - - @expose(help="Lists websites") - def default(self): - sites = getAllsites(self) - if not sites: - pass - - if self.app.pargs.enabled: - for site in sites: - if site.is_enabled: - Log.info(self, "{0}".format(site.sitename)) - elif self.app.pargs.disabled: - for site in sites: - if not site.is_enabled: - Log.info(self, "{0}".format(site.sitename)) - else: - for site in sites: - Log.info(self, "{0}".format(site.sitename)) - - -def load(app): - # register the plugin class.. this only happens if the plugin is enabled - handler.register(EESiteController) - handler.register(EESiteCreateController) - handler.register(EESiteUpdateController) - handler.register(EESiteDeleteController) - handler.register(EESiteListController) - handler.register(EESiteEditController) - # register a hook (function) to run after arguments are parsed. - hook.register('post_argument_parsing', ee_site_hook) diff --git a/ee/cli/plugins/site_functions.py b/ee/cli/plugins/site_functions.py deleted file mode 100644 index 6d92448c..00000000 --- a/ee/cli/plugins/site_functions.py +++ /dev/null @@ -1,1164 +0,0 @@ -from ee.cli.plugins.stack import EEStackController -from ee.core.fileutils import EEFileUtils -from ee.core.mysql import * -from ee.core.shellexec import * -from ee.core.variables import EEVariables -from ee.cli.plugins.sitedb import * -from ee.core.aptget import EEAptGet -from ee.core.git import EEGit -from ee.core.logging import Log -from ee.core.services import EEService -import subprocess -from subprocess import CalledProcessError -import os -import random -import string -import sys -import getpass -import glob -import re -import platform - - -class SiteError(Exception): - """Custom Exception Occured when setting up site""" - def __init__(self, message): - self.message = message - - def __str__(self): - return repr(self.message) - - -def pre_run_checks(self): - - # Check nginx configuration - Log.info(self, "Running pre-update checks, please wait...") - try: - Log.debug(self, "checking NGINX configuration ...") - FNULL = open('/dev/null', 'w') - ret = subprocess.check_call(["nginx", "-t"], stdout=FNULL, - stderr=subprocess.STDOUT) - except CalledProcessError as e: - Log.debug(self, "{0}".format(str(e))) - raise SiteError("nginx configuration check failed.") - - -def check_domain_exists(self, domain): - if getSiteInfo(self, domain): - return True - else: - return False - - -def setupdomain(self, data): - - ee_domain_name = data['site_name'] - ee_site_webroot = data['webroot'] if 'webroot' in data.keys() else '' - - # Check if nginx configuration already exists - # if os.path.isfile('/etc/nginx/sites-available/{0}' - # .format(ee_domain_name)): - # raise SiteError("nginx configuration already exists for site") - - Log.info(self, "Setting up NGINX configuration \t", end='') - # write nginx config for file - try: - ee_site_nginx_conf = open('/etc/nginx/sites-available/{0}' - .format(ee_domain_name), encoding='utf-8', - mode='w') - - self.app.render((data), 'virtualconf.mustache', - out=ee_site_nginx_conf) - ee_site_nginx_conf.close() - except IOError as e: - Log.debug(self, "{0}".format(e)) - raise SiteError("create nginx configuration failed for site") - except Exception as e: - Log.debug(self, "{0}".format(e)) - raise SiteError("create nginx configuration failed for site") - finally: - # Check nginx -t and return status over it - try: - Log.debug(self, "Checking generated nginx conf, please wait...") - FNULL = open('/dev/null', 'w') - ret = subprocess.check_call(["nginx", "-t"], stdout=FNULL, - stderr=subprocess.STDOUT) - Log.info(self, "[" + Log.ENDC + "Done" + Log.OKBLUE + "]") - except CalledProcessError as e: - Log.debug(self, "{0}".format(str(e))) - Log.info(self, "[" + Log.ENDC + Log.FAIL + "Fail" - + Log.OKBLUE + "]") - raise SiteError("created nginx configuration failed for site." - " check with `nginx -t`") - - - # create symbolic link for - EEFileUtils.create_symlink(self, ['/etc/nginx/sites-available/{0}' - .format(ee_domain_name), - '/etc/nginx/sites-enabled/{0}' - .format(ee_domain_name)]) - - if 'proxy' in data.keys() and data['proxy']: - return - - # Creating htdocs & logs directory - Log.info(self, "Setting up webroot \t\t", end='') - try: - if not os.path.exists('{0}/htdocs'.format(ee_site_webroot)): - os.makedirs('{0}/htdocs'.format(ee_site_webroot)) - if not os.path.exists('{0}/logs'.format(ee_site_webroot)): - os.makedirs('{0}/logs'.format(ee_site_webroot)) - if not os.path.exists('{0}/conf/nginx'.format(ee_site_webroot)): - os.makedirs('{0}/conf/nginx'.format(ee_site_webroot)) - - EEFileUtils.create_symlink(self, ['/var/log/nginx/{0}.access.log' - .format(ee_domain_name), - '{0}/logs/access.log' - .format(ee_site_webroot)]) - EEFileUtils.create_symlink(self, ['/var/log/nginx/{0}.error.log' - .format(ee_domain_name), - '{0}/logs/error.log' - .format(ee_site_webroot)]) - except Exception as e: - Log.debug(self, "{0}".format(e)) - raise SiteError("setup webroot failed for site") - finally: - # TODO Check if directories are setup - if (os.path.exists('{0}/htdocs'.format(ee_site_webroot)) and - os.path.exists('{0}/logs'.format(ee_site_webroot))): - Log.info(self, "[" + Log.ENDC + "Done" + Log.OKBLUE + "]") - else: - Log.info(self, "[" + Log.ENDC + "Fail" + Log.OKBLUE + "]") - raise SiteError("setup webroot failed for site") - - -def setupdatabase(self, data): - ee_domain_name = data['site_name'] - ee_random = (''.join(random.sample(string.ascii_uppercase + - string.ascii_lowercase + string.digits, 15))) - ee_replace_dot = ee_domain_name.replace('.', '_') - prompt_dbname = self.app.config.get('mysql', 'db-name') - prompt_dbuser = self.app.config.get('mysql', 'db-user') - ee_mysql_grant_host = self.app.config.get('mysql', 'grant-host') - ee_db_name = '' - ee_db_username = '' - ee_db_password = '' - - if prompt_dbname == 'True' or prompt_dbname == 'true': - try: - ee_db_name = input('Enter the MySQL database name [{0}]: ' - .format(ee_replace_dot)) - except EOFError as e: - Log.debug(self, "{0}".format(e)) - raise SiteError("Unable to input database name") - - if not ee_db_name: - ee_db_name = ee_replace_dot - - if prompt_dbuser == 'True' or prompt_dbuser == 'true': - try: - ee_db_username = input('Enter the MySQL database user name [{0}]: ' - .format(ee_replace_dot)) - ee_db_password = getpass.getpass(prompt='Enter the MySQL database' - ' password [{0}]: ' - .format(ee_random)) - except EOFError as e: - Log.debug(self, "{0}".format(e)) - raise SiteError("Unable to input database credentials") - - if not ee_db_username: - ee_db_username = ee_replace_dot - if not ee_db_password: - ee_db_password = ee_random - - if len(ee_db_username) > 16: - Log.debug(self, 'Autofix MySQL username (ERROR 1470 (HY000)),' - ' please wait') - ee_db_username = (ee_db_name[0:6] + generate_random()) - - # create MySQL database - Log.info(self, "Setting up database\t\t", end='') - Log.debug(self, "Creating database {0}".format(ee_db_name)) - try: - if EEMysql.check_db_exists(self, ee_db_name): - Log.debug(self, "Database already exists, Updating DB_NAME .. ") - ee_db_name = (ee_db_name[0:6] + generate_random()) - ee_db_username = (ee_db_name[0:6] + generate_random()) - except MySQLConnectionError as e: - raise SiteError("MySQL Connectivity problem occured") - - try: - EEMysql.execute(self, "create database `{0}`" - .format(ee_db_name)) - except StatementExcecutionError as e: - Log.info(self, "[" + Log.ENDC + Log.FAIL + "Failed" + Log.OKBLUE + "]") - raise SiteError("create database execution failed") - # Create MySQL User - Log.debug(self, "Creating user {0}".format(ee_db_username)) - Log.debug(self, "create user `{0}`@`{1}` identified by ''" - .format(ee_db_username, ee_mysql_grant_host)) - try: - EEMysql.execute(self, - "create user `{0}`@`{1}` identified by '{2}'" - .format(ee_db_username, ee_mysql_grant_host, - ee_db_password), log=False) - except StatementExcecutionError as e: - Log.info(self, "[" + Log.ENDC + Log.FAIL + "Failed" + Log.OKBLUE + "]") - raise SiteError("creating user failed for database") - - # Grant permission - Log.debug(self, "Setting up user privileges") - try: - EEMysql.execute(self, - "grant all privileges on `{0}`.* to `{1}`@`{2}`" - .format(ee_db_name, - ee_db_username, ee_mysql_grant_host)) - except StatementExcecutionError as e: - Log.info(self, "[" + Log.ENDC + Log.FAIL + "Failed" + Log.OKBLUE + "]") - SiteError("grant privileges to user failed for database ") - - Log.info(self, "[" + Log.ENDC + "Done" + Log.OKBLUE + "]") - - data['ee_db_name'] = ee_db_name - data['ee_db_user'] = ee_db_username - data['ee_db_pass'] = ee_db_password - data['ee_db_host'] = EEVariables.ee_mysql_host - data['ee_mysql_grant_host'] = ee_mysql_grant_host - return(data) - - -def setupwordpress(self, data): - ee_domain_name = data['site_name'] - ee_site_webroot = data['webroot'] - prompt_wpprefix = self.app.config.get('wordpress', 'prefix') - ee_wp_user = self.app.config.get('wordpress', 'user') - ee_wp_pass = self.app.config.get('wordpress', 'password') - ee_wp_email = self.app.config.get('wordpress', 'email') - # Random characters - ee_random = (''.join(random.sample(string.ascii_uppercase + - string.ascii_lowercase + string.digits, 15))) - ee_wp_prefix = '' - # ee_wp_user = '' - # ee_wp_pass = '' - - if 'wp-user' in data.keys() and data['wp-user']: - ee_wp_user = data['wp-user'] - if 'wp-email' in data.keys() and data['wp-email']: - ee_wp_email = data['wp-email'] - if 'wp-pass' in data.keys() and data['wp-pass']: - ee_wp_pass = data['wp-pass'] - - Log.info(self, "Downloading Wordpress \t\t", end='') - EEFileUtils.chdir(self, '{0}/htdocs/'.format(ee_site_webroot)) - try: - if EEShellExec.cmd_exec(self, "wp --allow-root core" - " download"): - pass - else: - Log.info(self, "[" + Log.ENDC + Log.FAIL + "Fail" + Log.OKBLUE + "]") - raise SiteError("download wordpress core failed") - except CommandExecutionError as e: - Log.info(self, "[" + Log.ENDC + Log.FAIL + "Fail" + Log.OKBLUE + "]") - raise SiteError(self, "download wordpress core failed") - - Log.info(self, "[" + Log.ENDC + "Done" + Log.OKBLUE + "]") - - if not (data['ee_db_name'] and data['ee_db_user'] and data['ee_db_pass']): - data = setupdatabase(self, data) - if prompt_wpprefix == 'True' or prompt_wpprefix == 'true': - try: - ee_wp_prefix = input('Enter the WordPress table prefix [wp_]: ') - while not re.match('^[A-Za-z0-9_]*$', ee_wp_prefix): - Log.warn(self, "table prefix can only " - "contain numbers, letters, and underscores") - ee_wp_prefix = input('Enter the WordPress table prefix [wp_]: ' - ) - except EOFError as e: - Log.debug(self, "{0}".format(e)) - raise SiteError("input table prefix failed") - - if not ee_wp_prefix: - ee_wp_prefix = 'wp_' - - # Modify wp-config.php & move outside the webroot - - EEFileUtils.chdir(self, '{0}/htdocs/'.format(ee_site_webroot)) - Log.debug(self, "Setting up wp-config file") - if not data['multisite']: - Log.debug(self, "Generating wp-config for WordPress Single site") - Log.debug(self, "bash -c \"php {0} --allow-root " - .format(EEVariables.ee_wpcli_path) - + "core config " - + "--dbname=\'{0}\' --dbprefix=\'{1}\' --dbuser=\'{2}\' " - "--dbhost=\'{3}\' " - .format(data['ee_db_name'], ee_wp_prefix, - data['ee_db_user'], data['ee_db_host']) - + "--dbpass= " - "--extra-php< {1}/{0}.sql" - .format(data['ee_db_name'], - backup_path)): - Log.info(self, - "[" + Log.ENDC + Log.FAIL + "Fail" + Log.OKBLUE + "]") - raise SiteError("mysqldump failed to backup database") - except CommandExecutionError as e: - Log.info(self, "[" + Log.ENDC + "Fail" + Log.OKBLUE + "]") - raise SiteError("mysqldump failed to backup database") - Log.info(self, "[" + Log.ENDC + "Done" + Log.OKBLUE + "]") - # move wp-config.php/ee-config.php to backup - if data['currsitetype'] in ['mysql', 'proxy']: - EEFileUtils.mvfile(self, configfiles[0], backup_path) - else: - EEFileUtils.copyfile(self, configfiles[0], backup_path) - - -def site_package_check(self, stype): - apt_packages = [] - packages = [] - stack = EEStackController() - stack.app = self.app - if stype in ['html', 'proxy', 'php', 'mysql', 'wp', 'wpsubdir', - 'wpsubdomain']: - Log.debug(self, "Setting apt_packages variable for Nginx") - - # Check if server has nginx-custom package - if not EEAptGet.is_installed(self, 'nginx-custom'): - # check if Server has nginx-plus installed - if EEAptGet.is_installed(self, 'nginx-plus'): - # do something - # do post nginx installation configuration - Log.info(self, "NGINX PLUS Detected ...") - apt = ["nginx-plus"] + EEVariables.ee_nginx - #apt_packages = apt_packages + EEVariables.ee_nginx - stack.post_pref(apt, packages) - - else: - apt_packages = apt_packages + EEVariables.ee_nginx - else: - # Fix for Nginx white screen death - if not EEFileUtils.grep(self, '/etc/nginx/fastcgi_params', - 'SCRIPT_FILENAME'): - with open('/etc/nginx/fastcgi_params', encoding='utf-8', - mode='a') as ee_nginx: - ee_nginx.write('fastcgi_param \tSCRIPT_FILENAME ' - '\t$request_filename;\n') - - if stype in ['php', 'mysql', 'wp', 'wpsubdir', 'wpsubdomain']: - Log.debug(self, "Setting apt_packages variable for PHP") - if not EEAptGet.is_installed(self, 'php5-fpm'): - apt_packages = apt_packages + EEVariables.ee_php - - if stype in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']: - Log.debug(self, "Setting apt_packages variable for MySQL") - if not EEShellExec.cmd_exec(self, "mysqladmin ping"): - apt_packages = apt_packages + EEVariables.ee_mysql - packages = packages + [["https://raw.githubusercontent.com/" - "major/MySQLTuner-perl/master/" - "mysqltuner.pl", "/usr/bin/mysqltuner", - "MySQLTuner"]] - - if stype in ['php', 'mysql', 'wp', 'wpsubdir', 'wpsubdomain']: - Log.debug(self, "Setting apt_packages variable for Postfix") - if not EEAptGet.is_installed(self, 'postfix'): - apt_packages = apt_packages + EEVariables.ee_postfix - - if stype in ['wp', 'wpsubdir', 'wpsubdomain']: - Log.debug(self, "Setting packages variable for WP-CLI") - if not EEShellExec.cmd_exec(self, "which wp"): - packages = packages + [["https://github.com/wp-cli/wp-cli/" - "releases/download/v{0}/" - "wp-cli-{0}.phar" - .format(EEVariables.ee_wp_cli), - "/usr/bin/wp", "WP-CLI"]] - if self.app.pargs.wpredis: - Log.debug(self, "Setting apt_packages variable for redis") - if not EEAptGet.is_installed(self, 'redis-server'): - apt_packages = apt_packages + EEVariables.ee_redis - - if os.path.isfile("/etc/nginx/nginx.conf") and (not - os.path.isfile("/etc/nginx/common/redis.conf")): - - data = dict() - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/redis.conf') - ee_nginx = open('/etc/nginx/common/redis.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'redis.mustache', - out=ee_nginx) - ee_nginx.close() - - if os.path.isfile("/etc/nginx/nginx.conf") and (not - os.path.isfile("/etc/nginx/common/redis-hhvm.conf")): - - data = dict() - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/redis-hhvm.conf') - ee_nginx = open('/etc/nginx/common/redis-hhvm.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'redis-hhvm.mustache', - out=ee_nginx) - ee_nginx.close() - - if os.path.isfile("/etc/nginx/conf.d/upstream.conf"): - if not EEFileUtils.grep(self, "/etc/nginx/conf.d/" - "upstream.conf", - "redis"): - with open("/etc/nginx/conf.d/upstream.conf", - "a") as redis_file: - redis_file.write("upstream redis {\n" - " server 127.0.0.1:6379;\n" - " keepalive 10;\n}") - - if os.path.isfile("/etc/nginx/nginx.conf") and (not - os.path.isfile("/etc/nginx/conf.d/redis.conf")): - with open("/etc/nginx/conf.d/redis.conf", "a") as redis_file: - redis_file.write("# Log format Settings\n" - "log_format rt_cache_redis '$remote_addr $upstream_response_time $srcache_fetch_status [$time_local] '\n" - "'$http_host \"$request\" $status $body_bytes_sent '\n" - "'\"$http_referer\" \"$http_user_agent\"';\n") - - if self.app.pargs.hhvm: - if platform.architecture()[0] is '32bit': - Log.error(self, "HHVM is not supported by 32bit system") - Log.debug(self, "Setting apt_packages variable for HHVM") - if not EEAptGet.is_installed(self, 'hhvm'): - apt_packages = apt_packages + EEVariables.ee_hhvm - - if os.path.isdir("/etc/nginx/common") and (not - os.path.isfile("/etc/nginx/common/php-hhvm.conf")): - data = dict() - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/php-hhvm.conf') - ee_nginx = open('/etc/nginx/common/php-hhvm.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'php-hhvm.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/w3tc-hhvm.conf') - ee_nginx = open('/etc/nginx/common/w3tc-hhvm.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'w3tc-hhvm.mustache', out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpfc-hhvm.conf') - ee_nginx = open('/etc/nginx/common/wpfc-hhvm.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpfc-hhvm.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpsc-hhvm.conf') - ee_nginx = open('/etc/nginx/common/wpsc-hhvm.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpsc-hhvm.mustache', - out=ee_nginx) - ee_nginx.close() - - if os.path.isfile("/etc/nginx/conf.d/upstream.conf"): - if not EEFileUtils.grep(self, "/etc/nginx/conf.d/upstream.conf", - "hhvm"): - with open("/etc/nginx/conf.d/upstream.conf", "a") as hhvm_file: - hhvm_file.write("upstream hhvm {\nserver 127.0.0.1:8000;\n" - "server 127.0.0.1:9000 backup;\n}\n") - - # Check if Nginx is allready installed and Pagespeed config there or not - # If not then copy pagespeed config - if self.app.pargs.pagespeed: - if (os.path.isfile('/etc/nginx/nginx.conf') and - (not os.path.isfile('/etc/nginx/conf.d/pagespeed.conf'))): - # Pagespeed configuration - data = dict() - Log.debug(self, 'Writting the Pagespeed Global ' - 'configuration to file /etc/nginx/conf.d/' - 'pagespeed.conf') - ee_nginx = open('/etc/nginx/conf.d/pagespeed.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'pagespeed-global.mustache', - out=ee_nginx) - ee_nginx.close() - - return(stack.install(apt_packages=apt_packages, packages=packages, - disp_msg=False)) - - -def updatewpuserpassword(self, ee_domain, ee_site_webroot): - - ee_wp_user = '' - ee_wp_pass = '' - EEFileUtils.chdir(self, '{0}/htdocs/'.format(ee_site_webroot)) - - # Check if ee_domain is wordpress install - try: - is_wp = EEShellExec.cmd_exec(self, "wp --allow-root core" - " version") - except CommandExecutionError as e: - raise SiteError("is wordpress site? check command failed ") - - # Exit if ee_domain is not wordpress install - if not is_wp: - Log.error(self, "{0} does not seem to be a WordPress site" - .format(ee_domain)) - - try: - ee_wp_user = input("Provide WordPress user name [admin]: ") - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "\nCould not update password") - - if ee_wp_user == "?": - Log.info(self, "Fetching WordPress user list") - try: - EEShellExec.cmd_exec(self, "wp --allow-root user list " - "--fields=user_login | grep -v user_login") - except CommandExecutionError as e: - raise SiteError("fetch wp userlist command failed") - - if not ee_wp_user: - ee_wp_user = 'admin' - - try: - is_user_exist = EEShellExec.cmd_exec(self, "wp --allow-root user list " - "--fields=user_login | grep {0}$ " - .format(ee_wp_user)) - except CommandExecutionError as e: - raise SiteError("if wp user exists check command failed") - - if is_user_exist: - try: - ee_wp_pass = getpass.getpass(prompt="Provide password for " - "{0} user: " - .format(ee_wp_user)) - - while not ee_wp_pass: - ee_wp_pass = getpass.getpass(prompt="Provide password for " - "{0} user: " - .format(ee_wp_user)) - except Exception as e: - Log.debug(self, "{0}".format(e)) - raise SiteError("failed to read password input ") - - try: - EEShellExec.cmd_exec(self, "wp --allow-root user update {0}" - " --user_pass={1}" - .format(ee_wp_user, ee_wp_pass)) - except CommandExecutionError as e: - raise SiteError("wp user password update command failed") - Log.info(self, "Password updated successfully") - - else: - Log.error(self, "Invalid WordPress user {0} for {1}." - .format(ee_wp_user, ee_domain)) - - -def display_cache_settings(self, data): - if data['wpsc']: - if data['multisite']: - Log.info(self, "Configure WPSC:" - "\t\thttp://{0}/wp-admin/network/settings.php?" - "page=wpsupercache" - .format(data['site_name'])) - else: - Log.info(self, "Configure WPSC:" - "\t\thttp://{0}/wp-admin/options-general.php?" - "page=wpsupercache" - .format(data['site_name'])) - - if data['wpredis']: - if data['multisite']: - Log.info(self, "Configure redis-cache:" - "\thttp://{0}/wp-admin/network/settings.php?" - "page=redis-cache".format(data['site_name'])) - else: - Log.info(self, "Configure redis-cache:" - "\thttp://{0}/wp-admin/options-general.php?" - "page=redis-cache".format(data['site_name'])) - Log.info(self, "Object Cache:\t\tEnable") - - if data['wpfc'] or data['w3tc']: - if data['multisite']: - Log.info(self, "Configure W3TC:" - "\t\thttp://{0}/wp-admin/network/admin.php?" - "page=w3tc_general".format(data['site_name'])) - else: - Log.info(self, "Configure W3TC:" - "\t\thttp://{0}/wp-admin/admin.php?" - "page=w3tc_general".format(data['site_name'])) - - if data['wpfc']: - Log.info(self, "Page Cache:\t\tDisable") - elif data['w3tc']: - Log.info(self, "Page Cache:\t\tDisk Enhanced") - Log.info(self, "Database Cache:\t\tMemcached") - Log.info(self, "Object Cache:\t\tMemcached") - Log.info(self, "Browser Cache:\t\tDisable") - - -def logwatch(self, logfiles): - import zlib - import base64 - import time - from ee.core import logwatch - - def callback(filename, lines): - for line in lines: - if line.find(':::') == -1: - print(line) - else: - data = line.split(':::') - try: - print(data[0], data[1], - zlib.decompress(base64.decodestring(data[2]))) - except Exception as e: - Log.info(time.time(), - 'caught exception rendering a new log line in %s' - % filename) - - l = logwatch.LogWatcher(logfiles, callback) - l.loop() - - -def detSitePar(opts): - """ - Takes dictionary of parsed arguments - 1.returns sitetype and cachetype - 2. raises RuntimeError when wrong combination is used like - "--wp --wpsubdir" or "--html --wp" - """ - sitetype, cachetype = '', '' - typelist = list() - cachelist = list() - for key, val in opts.items(): - if val and key in ['html', 'php', 'mysql', 'wp', - 'wpsubdir', 'wpsubdomain']: - typelist.append(key) - elif val and key in ['wpfc', 'wpsc', 'w3tc', 'wpredis']: - cachelist.append(key) - - if len(typelist) > 1 or len(cachelist) > 1: - if len(cachelist) > 1: - raise RuntimeError("Could not determine cache type.Multiple cache parameter entered") - elif False not in [x in ('php','mysql','html') for x in typelist]: - sitetype = 'mysql' - if not cachelist: - cachetype = 'basic' - else: - cachetype = cachelist[0] - elif False not in [x in ('php','mysql') for x in typelist]: - sitetype = 'mysql' - if not cachelist: - cachetype = 'basic' - else: - cachetype = cachelist[0] - elif False not in [x in ('html','mysql') for x in typelist]: - sitetype = 'mysql' - if not cachelist: - cachetype = 'basic' - else: - cachetype = cachelist[0] - elif False not in [x in ('php','html') for x in typelist]: - sitetype = 'php' - if not cachelist: - cachetype = 'basic' - else: - cachetype = cachelist[0] - elif False not in [x in ('wp','wpsubdir') for x in typelist]: - sitetype = 'wpsubdir' - if not cachelist: - cachetype = 'basic' - else: - cachetype = cachelist[0] - elif False not in [x in ('wp','wpsubdomain') for x in typelist]: - sitetype = 'wpsubdomain' - if not cachelist: - cachetype = 'basic' - else: - cachetype = cachelist[0] - else: - raise RuntimeError("could not determine site and cache type") - - else: - if not typelist and not cachelist: - sitetype = None - cachetype = None - elif (not typelist) and cachelist: - sitetype = 'wp' - cachetype = cachelist[0] - elif typelist and (not cachelist): - sitetype = typelist[0] - cachetype = 'basic' - else: - sitetype = typelist[0] - cachetype = cachelist[0] - return (sitetype, cachetype) - - -def generate_random(): - ee_random10 = (''.join(random.sample(string.ascii_uppercase + - string.ascii_lowercase + string.digits, 10))) - return ee_random10 - - -def deleteDB(self, dbname, dbuser, dbhost, exit=True): - try: - # Check if Database exists - try: - if EEMysql.check_db_exists(self, dbname): - # Drop database if exists - Log.debug(self, "dropping database `{0}`".format(dbname)) - EEMysql.execute(self, - "drop database `{0}`".format(dbname), - errormsg='Unable to drop database {0}' - .format(dbname)) - except StatementExcecutionError as e: - Log.debug(self, "drop database failed") - Log.info(self, "Database {0} not dropped".format(dbname)) - - except MySQLConnectionError as e: - Log.debug(self, "Mysql Connection problem occured") - - if dbuser != 'root': - Log.debug(self, "dropping user `{0}`".format(dbuser)) - try: - EEMysql.execute(self, - "drop user `{0}`@`{1}`" - .format(dbuser, dbhost)) - except StatementExcecutionError as e: - Log.debug(self, "drop database user failed") - Log.info(self, "Database {0} not dropped".format(dbuser)) - try: - EEMysql.execute(self, "flush privileges") - except StatementExcecutionError as e: - Log.debug(self, "drop database failed") - Log.info(self, "Database {0} not dropped".format(dbname)) - except Exception as e: - Log.error(self, "Error occured while deleting database", exit) - - -def deleteWebRoot(self, webroot): - # do some preprocessing before proceeding - webroot = webroot.strip() - if (webroot == "/var/www/" or webroot == "/var/www" - or webroot == "/var/www/.." or webroot == "/var/www/."): - Log.debug(self, "Tried to remove {0}, but didn't remove it" - .format(webroot)) - return False - - if os.path.isdir(webroot): - Log.debug(self, "Removing {0}".format(webroot)) - EEFileUtils.rm(self, webroot) - return True - else: - Log.debug(self, "{0} does not exist".format(webroot)) - return False - - -def removeNginxConf(self, domain): - if os.path.isfile('/etc/nginx/sites-available/{0}' - .format(domain)): - Log.debug(self, "Removing Nginx configuration") - EEFileUtils.rm(self, '/etc/nginx/sites-enabled/{0}' - .format(domain)) - EEFileUtils.rm(self, '/etc/nginx/sites-available/{0}' - .format(domain)) - EEService.reload_service(self, 'nginx') - EEGit.add(self, ["/etc/nginx"], - msg="Deleted {0} " - .format(domain)) - - -def doCleanupAction(self, domain='', webroot='', dbname='', dbuser='', - dbhost=''): - """ - Removes the nginx configuration and database for the domain provided. - doCleanupAction(self, domain='sitename', webroot='', - dbname='', dbuser='', dbhost='') - """ - if domain: - if os.path.isfile('/etc/nginx/sites-available/{0}' - .format(domain)): - removeNginxConf(self, domain) - if webroot: - deleteWebRoot(self, webroot) - - if dbname: - if not dbuser: - raise SiteError("dbuser not provided") - if not dbhost: - raise SiteError("dbhost not provided") - deleteDB(self, dbname, dbuser, dbhost) - - -def operateOnPagespeed(self, data): - - ee_domain_name = data['site_name'] - ee_site_webroot = data['webroot'] - - if data['pagespeed'] is True: - if not os.path.isfile("{0}/conf/nginx/pagespeed.conf.disabled" - .format(ee_site_webroot)): - Log.debug(self, 'Writting the Pagespeed common ' - 'configuration to file {0}/conf/nginx/pagespeed.conf' - 'pagespeed.conf'.format(ee_site_webroot)) - ee_nginx = open('{0}/conf/nginx/pagespeed.conf' - .format(ee_site_webroot), encoding='utf-8', - mode='w') - self.app.render((data), 'pagespeed-common.mustache', - out=ee_nginx) - ee_nginx.close() - else: - EEFileUtils.mvfile(self, "{0}/conf/nginx/pagespeed.conf.disabled" - .format(ee_site_webroot), - '{0}/conf/nginx/pagespeed.conf' - .format(ee_site_webroot)) - - elif data['pagespeed'] is False: - if os.path.isfile("{0}/conf/nginx/pagespeed.conf" - .format(ee_site_webroot)): - EEFileUtils.mvfile(self, "{0}/conf/nginx/pagespeed.conf" - .format(ee_site_webroot), - '{0}/conf/nginx/pagespeed.conf.disabled' - .format(ee_site_webroot)) - - # Add nginx conf folder into GIT - EEGit.add(self, ["{0}/conf/nginx".format(ee_site_webroot)], - msg="Adding Pagespeed config of site: {0}" - .format(ee_domain_name)) diff --git a/ee/cli/plugins/sitedb.py b/ee/cli/plugins/sitedb.py deleted file mode 100644 index c81b1249..00000000 --- a/ee/cli/plugins/sitedb.py +++ /dev/null @@ -1,126 +0,0 @@ -from sqlalchemy import Column, DateTime, String, Integer, Boolean -from sqlalchemy import ForeignKey, func -from sqlalchemy.orm import relationship, backref -from sqlalchemy.ext.declarative import declarative_base -from ee.core.logging import Log -from ee.core.database import db_session -from ee.cli.plugins.models import SiteDB -import sys -import glob - - -def addNewSite(self, site, stype, cache, path, - enabled=True, ssl=False, fs='ext4', db='mysql', - db_name=None, db_user=None, db_password=None, - db_host='localhost', hhvm=0, pagespeed=0): - """ - Add New Site record information into ee database. - """ - try: - newRec = SiteDB(site, stype, cache, path, enabled, ssl, fs, db, - db_name, db_user, db_password, db_host, hhvm, - pagespeed) - db_session.add(newRec) - db_session.commit() - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to add site to database") - - -def getSiteInfo(self, site): - """ - Retrieves site record from ee databse - """ - try: - q = SiteDB.query.filter(SiteDB.sitename == site).first() - return q - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to query database for site info") - - -def updateSiteInfo(self, site, stype='', cache='', webroot='', - enabled=True, ssl=False, fs='', db='', db_name=None, - db_user=None, db_password=None, db_host=None, hhvm=None, - pagespeed=None): - """updates site record in database""" - try: - q = SiteDB.query.filter(SiteDB.sitename == site).first() - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to query database for site info") - - if not q: - Log.error(self, "{0} does not exist in database".format(site)) - - # Check if new record matches old if not then only update database - if stype and q.site_type != stype: - q.site_type = stype - - if cache and q.cache_type != cache: - q.cache_type = cache - - if q.is_enabled != enabled: - q.is_enabled = enabled - - if ssl and q.is_ssl != ssl: - q.is_ssl = ssl - - if db_name and q.db_name != db_name: - q.db_name = db_name - - if db_user and q.db_user != db_user: - q.db_user = db_user - - if db_user and q.db_password != db_password: - q.db_password = db_password - - if db_host and q.db_host != db_host: - q.db_host = db_host - - if webroot and q.site_path != webroot: - q.site_path = webroot - - if (hhvm is not None) and (q.is_hhvm is not hhvm): - q.is_hhvm = hhvm - - if (pagespeed is not None) and (q.is_pagespeed is not pagespeed): - q.is_pagespeed = pagespeed - - try: - q.created_on = func.now() - db_session.commit() - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to update site info in application database.") - - -def deleteSiteInfo(self, site): - """Delete site record in database""" - try: - q = SiteDB.query.filter(SiteDB.sitename == site).first() - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to query database") - - if not q: - Log.error(self, "{0} does not exist in database".format(site)) - - try: - db_session.delete(q) - db_session.commit() - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to delete site from application database.") - - -def getAllsites(self): - """ - 1. returns all records from ee database - """ - try: - q = SiteDB.query.all() - return q - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to query database") diff --git a/ee/cli/plugins/stack.py b/ee/cli/plugins/stack.py deleted file mode 100644 index 2b1db1b9..00000000 --- a/ee/cli/plugins/stack.py +++ /dev/null @@ -1,2085 +0,0 @@ -"""Stack Plugin for EasyEngine.""" - -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from ee.core.variables import EEVariables -from ee.core.aptget import EEAptGet -from ee.core.download import EEDownload -from ee.core.shellexec import EEShellExec, CommandExecutionError -from ee.core.fileutils import EEFileUtils -from ee.core.apt_repo import EERepo -from ee.core.extract import EEExtract -from ee.core.mysql import EEMysql -from ee.core.addswap import EESwap -from ee.core.git import EEGit -from ee.core.checkfqdn import check_fqdn -from pynginxconfig import NginxConfig -from ee.core.services import EEService -from ee.core.variables import EEVariables -import random -import string -import configparser -import time -import shutil -import os -import pwd -import grp -import codecs -import platform -from ee.cli.plugins.stack_services import EEStackStatusController -from ee.cli.plugins.stack_migrate import EEStackMigrateController -from ee.cli.plugins.stack_upgrade import EEStackUpgradeController -from ee.core.logging import Log - - -def ee_stack_hook(app): - # do something with the ``app`` object here. - pass - - -class EEStackController(CementBaseController): - class Meta: - label = 'stack' - stacked_on = 'base' - stacked_type = 'nested' - description = 'Stack command manages stack operations' - arguments = [ - (['--all'], - dict(help='Install all stack', action='store_true')), - (['--web'], - dict(help='Install web stack', action='store_true')), - (['--admin'], - dict(help='Install admin tools stack', action='store_true')), - (['--mail'], - dict(help='Install mail server stack', action='store_true')), - (['--mailscanner'], - dict(help='Install mail scanner stack', action='store_true')), - (['--nginx'], - dict(help='Install Nginx stack', action='store_true')), - (['--php'], - dict(help='Install PHP stack', action='store_true')), - (['--mysql'], - dict(help='Install MySQL stack', action='store_true')), - (['--hhvm'], - dict(help='Install HHVM stack', action='store_true')), - (['--postfix'], - dict(help='Install Postfix stack', action='store_true')), - (['--wpcli'], - dict(help='Install WPCLI stack', action='store_true')), - (['--phpmyadmin'], - dict(help='Install PHPMyAdmin stack', action='store_true')), - (['--adminer'], - dict(help='Install Adminer stack', action='store_true')), - (['--utils'], - dict(help='Install Utils stack', action='store_true')), - (['--pagespeed'], - dict(help='Install Pagespeed', action='store_true')), - (['--redis'], - dict(help='Install Redis', action='store_true')), - (['--phpredisadmin'], - dict(help='Install Redis', action='store_true')), - ] - usage = "ee stack (command) [options]" - - @expose(hide=True) - def default(self): - """default action of ee stack command""" - self.app.args.print_help() - - @expose(hide=True) - def pre_pref(self, apt_packages): - """Pre settings to do before installation packages""" - if set(EEVariables.ee_postfix).issubset(set(apt_packages)): - Log.debug(self, "Pre-seeding Postfix") - try: - EEShellExec.cmd_exec(self, "echo \"postfix postfix" - "/main_mailer_type string \'Internet Site" - "\'\"" - " | debconf-set-selections") - EEShellExec.cmd_exec(self, "echo \"postfix postfix/mailname" - " string $(hostname -f)\" | " - "debconf-set-selections") - except CommandExecutionError as e: - Log.error(self, "Failed to intialize postfix package") - - if set(EEVariables.ee_mysql).issubset(set(apt_packages)): - Log.info(self, "Adding repository for MySQL, please wait...") - mysql_pref = ("Package: *\nPin: origin mirror.aarnet.edu.au" - "\nPin-Priority: 1000\n") - with open('/etc/apt/preferences.d/' - 'MariaDB.pref', 'w') as mysql_pref_file: - mysql_pref_file.write(mysql_pref) - if EEVariables.ee_platform_codename != 'jessie': - EERepo.add(self, repo_url=EEVariables.ee_mysql_repo) - Log.debug(self, 'Adding key for {0}' - .format(EEVariables.ee_mysql_repo)) - EERepo.add_key(self, '0xcbcb082a1bb943db', - keyserver="keyserver.ubuntu.com") - chars = ''.join(random.sample(string.ascii_letters, 8)) - Log.debug(self, "Pre-seeding MySQL") - Log.debug(self, "echo \"mariadb-server-10.0 " - "mysql-server/root_password " - "password \" | " - "debconf-set-selections") - try: - EEShellExec.cmd_exec(self, "echo \"mariadb-server-10.0 " - "mysql-server/root_password " - "password {chars}\" | " - "debconf-set-selections" - .format(chars=chars), - log=False) - except CommandExecutionError as e: - Log.error("Failed to initialize MySQL package") - - Log.debug(self, "echo \"mariadb-server-10.0 " - "mysql-server/root_password_again " - "password \" | " - "debconf-set-selections") - try: - EEShellExec.cmd_exec(self, "echo \"mariadb-server-10.0 " - "mysql-server/root_password_again " - "password {chars}\" | " - "debconf-set-selections" - .format(chars=chars), - log=False) - except CommandExecutionError as e: - Log.error("Failed to initialize MySQL package") - - mysql_config = """ - [client] - user = root - password = {chars} - """.format(chars=chars) - config = configparser.ConfigParser() - config.read_string(mysql_config) - Log.debug(self, 'Writting configuration into MySQL file') - conf_path = "/etc/mysql/conf.d/my.cnf" - os.makedirs(os.path.dirname(conf_path), exist_ok=True) - with open(conf_path, encoding='utf-8', - mode='w') as configfile: - config.write(configfile) - Log.debug(self, 'Setting my.cnf permission') - EEFileUtils.chmod(self, "/etc/mysql/conf.d/my.cnf", 0o600) - - - if set(EEVariables.ee_nginx).issubset(set(apt_packages)): - Log.info(self, "Adding repository for NGINX, please wait...") - EERepo.add(self, repo_url=EEVariables.ee_nginx_repo) - Log.debug(self, 'Adding ppa of Nginx') - EERepo.add_key(self, EEVariables.ee_nginx_key) - - if set(EEVariables.ee_php).issubset(set(apt_packages)): - Log.info(self, "Adding repository for PHP, please wait...") - # Add repository for php - if EEVariables.ee_platform_distro == 'debian': - if EEVariables.ee_platform_codename != 'jessie': - Log.debug(self, 'Adding repo_url of php for debian') - EERepo.add(self, repo_url=EEVariables.ee_php_repo) - Log.debug(self, 'Adding Dotdeb/php GPG key') - EERepo.add_key(self, '89DF5277') - else: - Log.debug(self, 'Adding ppa for PHP') - EERepo.add(self, ppa=EEVariables.ee_php_repo) - - if set(EEVariables.ee_hhvm).issubset(set(apt_packages)): - Log.info(self, "Adding repository for HHVM, please wait...") - if EEVariables.ee_platform_codename == 'precise': - Log.debug(self, 'Adding PPA for Boost') - EERepo.add(self, ppa=EEVariables.ee_boost_repo) - Log.debug(self, 'Adding ppa repo for HHVM') - EERepo.add(self, repo_url=EEVariables.ee_hhvm_repo) - Log.debug(self, 'Adding HHVM GPG Key') - EERepo.add_key(self, '0x5a16e7281be7a449') - - if set(EEVariables.ee_mail).issubset(set(apt_packages)): - Log.debug(self, 'Executing the command debconf-set-selections.') - try: - EEShellExec.cmd_exec(self, "echo \"dovecot-core dovecot-core/" - "create-ssl-cert boolean yes\" " - "| debconf-set-selections") - EEShellExec.cmd_exec(self, "echo \"dovecot-core dovecot-core" - "/ssl-cert-name string $(hostname -f)\"" - " | debconf-set-selections") - except CommandExecutionError as e: - Log.error("Failed to initialize dovecot packages") - - if set(EEVariables.ee_redis).issubset(set(apt_packages)): - Log.info(self, "Adding repository for Redis, please wait...") - if EEVariables.ee_platform_distro == 'debian': - Log.debug(self, 'Adding repo_url of redis for debian') - EERepo.add(self, repo_url=EEVariables.ee_redis_repo) - Log.debug(self, 'Adding Dotdeb GPG key') - EERepo.add_key(self, '89DF5277') - else: - Log.debug(self, 'Adding ppa for redis') - EERepo.add(self, ppa=EEVariables.ee_redis_repo) - - @expose(hide=True) - def post_pref(self, apt_packages, packages): - """Post activity after installation of packages""" - if len(apt_packages): - if set(EEVariables.ee_postfix).issubset(set(apt_packages)): - EEGit.add(self, ["/etc/postfix"], - msg="Adding Postfix into Git") - EEService.reload_service(self, 'postfix') - - if set(EEVariables.ee_nginx).issubset(set(apt_packages)): - if set(["nginx-plus"]).issubset(set(apt_packages)): - # Fix for white screen death with NGINX PLUS - if not EEFileUtils.grep(self, '/etc/nginx/fastcgi_params', - 'SCRIPT_FILENAME'): - with open('/etc/nginx/fastcgi_params', encoding='utf-8', - mode='a') as ee_nginx: - ee_nginx.write('fastcgi_param \tSCRIPT_FILENAME ' - '\t$request_filename;\n') - - if not (os.path.isfile('/etc/nginx/common/wpfc.conf')): - # Change EasyEngine Version in nginx.conf file - EEFileUtils.searchreplace(self, "/etc/nginx/nginx.conf", - "# add_header", - "add_header") - - EEFileUtils.searchreplace(self, "/etc/nginx/nginx.conf", - "\"EasyEngine\"", - "\"EasyEngine {0}\"" - .format(EEVariables.ee_version)) - data = dict() - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/blockips.conf') - ee_nginx = open('/etc/nginx/conf.d/blockips.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'blockips.mustache', out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/fastcgi.conf') - ee_nginx = open('/etc/nginx/conf.d/fastcgi.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'fastcgi.mustache', out=ee_nginx) - ee_nginx.close() - - data = dict(php="9000", debug="9001", hhvm="8000", - hhvmconf=False) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/upstream.conf') - ee_nginx = open('/etc/nginx/conf.d/upstream.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'upstream.mustache', out=ee_nginx) - ee_nginx.close() - - # Setup Nginx common directory - if not os.path.exists('/etc/nginx/common'): - Log.debug(self, 'Creating directory' - '/etc/nginx/common') - os.makedirs('/etc/nginx/common') - - data = dict(webroot=EEVariables.ee_webroot) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/acl.conf') - ee_nginx = open('/etc/nginx/common/acl.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'acl.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/locations.conf') - ee_nginx = open('/etc/nginx/common/locations.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'locations.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/php.conf') - ee_nginx = open('/etc/nginx/common/php.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'php.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/w3tc.conf') - ee_nginx = open('/etc/nginx/common/w3tc.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'w3tc.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpcommon.conf') - ee_nginx = open('/etc/nginx/common/wpcommon.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpcommon.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpfc.conf') - ee_nginx = open('/etc/nginx/common/wpfc.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpfc.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpsc.conf') - ee_nginx = open('/etc/nginx/common/wpsc.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpsc.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpsubdir.conf') - ee_nginx = open('/etc/nginx/common/wpsubdir.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpsubdir.mustache', - out=ee_nginx) - ee_nginx.close() - - # Nginx-Plus does not have nginx package structure like this - # So craeting directories - if set(["nginx-plus"]).issubset(set(apt_packages)): - Log.info(self, - "Installing EasyEngine Configurations for" "NGINX PLUS") - if not os.path.exists('/etc/nginx/sites-available'): - Log.debug(self, 'Creating directory' - '/etc/nginx/sites-available') - os.makedirs('/etc/nginx/sites-available') - - if not os.path.exists('/etc/nginx/sites-enabled'): - Log.debug(self, 'Creating directory' - '/etc/nginx/sites-available') - os.makedirs('/etc/nginx/sites-enabled') - - - - # 22222 port settings - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/sites-available/' - '22222') - ee_nginx = open('/etc/nginx/sites-available/22222', - encoding='utf-8', mode='w') - self.app.render((data), '22222.mustache', - out=ee_nginx) - ee_nginx.close() - - passwd = ''.join([random.choice - (string.ascii_letters + string.digits) - for n in range(6)]) - try: - EEShellExec.cmd_exec(self, "printf \"easyengine:" - "$(openssl passwd -crypt " - "{password} 2> /dev/null)\n\"" - "> /etc/nginx/htpasswd-ee " - "2>/dev/null" - .format(password=passwd)) - except CommandExecutionError as e: - Log.error(self, "Failed to save HTTP Auth") - - # Create Symbolic link for 22222 - EEFileUtils.create_symlink(self, ['/etc/nginx/' - 'sites-available/' - '22222', - '/etc/nginx/' - 'sites-enabled/' - '22222']) - # Create log and cert folder and softlinks - if not os.path.exists('{0}22222/logs' - .format(EEVariables.ee_webroot)): - Log.debug(self, "Creating directory " - "{0}22222/logs " - .format(EEVariables.ee_webroot)) - os.makedirs('{0}22222/logs' - .format(EEVariables.ee_webroot)) - - if not os.path.exists('{0}22222/cert' - .format(EEVariables.ee_webroot)): - Log.debug(self, "Creating directory " - "{0}22222/cert" - .format(EEVariables.ee_webroot)) - os.makedirs('{0}22222/cert' - .format(EEVariables.ee_webroot)) - - EEFileUtils.create_symlink(self, ['/var/log/nginx/' - '22222.access.log', - '{0}22222/' - 'logs/access.log' - .format(EEVariables.ee_webroot)] - ) - - EEFileUtils.create_symlink(self, ['/var/log/nginx/' - '22222.error.log', - '{0}22222/' - 'logs/error.log' - .format(EEVariables.ee_webroot)] - ) - - try: - EEShellExec.cmd_exec(self, "openssl genrsa -out " - "{0}22222/cert/22222.key 2048" - .format(EEVariables.ee_webroot)) - EEShellExec.cmd_exec(self, "openssl req -new -batch " - "-subj /commonName=127.0.0.1/ " - "-key {0}22222/cert/22222.key " - "-out {0}22222/cert/" - "22222.csr" - .format(EEVariables.ee_webroot)) - - EEFileUtils.mvfile(self, "{0}22222/cert/22222.key" - .format(EEVariables.ee_webroot), - "{0}22222/cert/" - "22222.key.org" - .format(EEVariables.ee_webroot)) - - EEShellExec.cmd_exec(self, "openssl rsa -in " - "{0}22222/cert/" - "22222.key.org -out " - "{0}22222/cert/22222.key" - .format(EEVariables.ee_webroot)) - - EEShellExec.cmd_exec(self, "openssl x509 -req -days " - "3652 -in {0}22222/cert/" - "22222.csr -signkey {0}" - "22222/cert/22222.key -out " - "{0}22222/cert/22222.crt" - .format(EEVariables.ee_webroot)) - - except CommandExecutionError as e: - Log.error(self, "Failed to generate SSL for 22222") - - # Nginx Configation into GIT - EEGit.add(self, - ["/etc/nginx"], msg="Adding Nginx into Git") - EEService.reload_service(self, 'nginx') - if set(["nginx-plus"]).issubset(set(apt_packages)): - EEShellExec.cmd_exec(self, "sed -i -e 's/^user/#user/'" - " -e '/^#user/a user" - "\ www-data\;'" - " /etc/nginx/nginx.conf") - if not EEShellExec.cmd_exec(self, "cat /etc/nginx/" - "nginx.conf | grep -q " - "'/etc/nginx/sites-enabled'"): - EEShellExec.cmd_exec(self, "sed -i '/\/etc\/" - "nginx\/conf\.d\/\*" - "\.conf/a \ include" - "\ \/etc\/nginx\/sites-enabled" - "\/*;' /etc/nginx/nginx.conf") - - # EasyEngine config for NGINX plus - data['version'] = EEVariables.ee_version - Log.debug(self, 'Writting for nginx plus configuration' - ' to file /etc/nginx/conf.d/ee-plus.conf') - ee_nginx = open('/etc/nginx/conf.d/ee-plus.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'ee-plus.mustache', - out=ee_nginx) - ee_nginx.close() - - print("HTTP Auth User Name: easyengine" - + "\nHTTP Auth Password : {0}".format(passwd)) - EEService.reload_service(self, 'nginx') - else: - self.msg = (self.msg + ["HTTP Auth User Name: easyengine"] - + ["HTTP Auth Password : {0}".format(passwd)]) - - if EEAptGet.is_installed(self,'redis-server'): - if os.path.isfile("/etc/nginx/nginx.conf") and (not - os.path.isfile("/etc/nginx/common/redis.conf")): - - data = dict() - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/redis.conf') - ee_nginx = open('/etc/nginx/common/redis.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'redis.mustache', - out=ee_nginx) - ee_nginx.close() - - if os.path.isfile("/etc/nginx/nginx.conf") and (not - os.path.isfile("/etc/nginx/common/redis-hhvm.conf")): - - data = dict() - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/redis-hhvm.conf') - ee_nginx = open('/etc/nginx/common/redis-hhvm.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'redis-hhvm.mustache', - out=ee_nginx) - ee_nginx.close() - - if os.path.isfile("/etc/nginx/conf.d/upstream.conf"): - if not EEFileUtils.grep(self, "/etc/nginx/conf.d/" - "upstream.conf", - "redis"): - with open("/etc/nginx/conf.d/upstream.conf", - "a") as redis_file: - redis_file.write("upstream redis {\n" - " server 127.0.0.1:6379;\n" - " keepalive 10;\n}\n") - - if os.path.isfile("/etc/nginx/nginx.conf") and (not - os.path.isfile("/etc/nginx/conf.d/redis.conf")): - with open("/etc/nginx/conf.d/redis.conf", "a") as redis_file: - redis_file.write("# Log format Settings\n" - "log_format rt_cache_redis '$remote_addr $upstream_response_time $srcache_fetch_status [$time_local] '\n" - "'$http_host \"$request\" $status $body_bytes_sent '\n" - "'\"$http_referer\" \"$http_user_agent\"';\n") - - # Set up pagespeed config - if self.app.pargs.pagespeed: - if (os.path.isfile('/etc/nginx/nginx.conf') and - (not os.path.isfile('/etc/nginx/conf.d/pagespeed.conf'))): - # Pagespeed configuration - data = dict() - Log.debug(self, 'Writting the Pagespeed Global ' - 'configuration to file /etc/nginx/conf.d/' - 'pagespeed.conf') - ee_nginx = open('/etc/nginx/conf.d/pagespeed.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'pagespeed-global.mustache', - out=ee_nginx) - ee_nginx.close() - - if set(EEVariables.ee_hhvm).issubset(set(apt_packages)): - - EEShellExec.cmd_exec(self, "update-rc.d hhvm defaults") - - EEFileUtils.searchreplace(self, "/etc/hhvm/server.ini", - "9000", "8000") - EEFileUtils.searchreplace(self, "/etc/nginx/hhvm.conf", - "9000", "8000") - - with open("/etc/hhvm/php.ini", "a") as hhvm_file: - hhvm_file.write("hhvm.log.header = true\n" - "hhvm.log.natives_stack_trace = true\n" - "hhvm.mysql.socket = " - "/var/run/mysqld/mysqld.sock\n" - "hhvm.pdo_mysql.socket = " - "/var/run/mysqld/mysqld.sock\n" - "hhvm.mysqli.socket = " - "/var/run/mysqld/mysqld.sock\n") - - with open("/etc/hhvm/server.ini", "a") as hhvm_file: - hhvm_file.write("hhvm.server.ip = 127.0.0.1\n") - - if os.path.isfile("/etc/nginx/conf.d/fastcgi.conf"): - if not EEFileUtils.grep(self, "/etc/nginx/conf.d/" - "fastcgi.conf", - "fastcgi_keep_conn"): - with open("/etc/nginx/conf.d/fastcgi.conf", - "a") as hhvm_file: - hhvm_file.write("fastcgi_keep_conn on;\n") - - if os.path.isfile("/etc/nginx/conf.d/upstream.conf"): - if not EEFileUtils.grep(self, "/etc/nginx/conf.d/" - "upstream.conf", - "hhvm"): - with open("/etc/nginx/conf.d/upstream.conf", - "a") as hhvm_file: - hhvm_file.write("upstream hhvm {\nserver " - "127.0.0.1:8000;\n" - "server 127.0.0.1:9000 backup;\n}" - "\n") - - EEGit.add(self, ["/etc/hhvm"], msg="Adding HHVM into Git") - EEService.restart_service(self, 'hhvm') - - if os.path.isfile("/etc/nginx/nginx.conf") and (not - os.path.isfile("/etc/nginx/common/php-hhvm.conf")): - - data = dict() - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/php-hhvm.conf') - ee_nginx = open('/etc/nginx/common/php-hhvm.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'php-hhvm.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/w3tc-hhvm.conf') - ee_nginx = open('/etc/nginx/common/w3tc-hhvm.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'w3tc-hhvm.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpfc-hhvm.conf') - ee_nginx = open('/etc/nginx/common/wpfc-hhvm.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpfc-hhvm.mustache', - out=ee_nginx) - ee_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpsc-hhvm.conf') - ee_nginx = open('/etc/nginx/common/wpsc-hhvm.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpsc-hhvm.mustache', - out=ee_nginx) - ee_nginx.close() - - if not EEService.reload_service(self, 'nginx'): - Log.error(self, "Failed to reload Nginx, please check " - "output of `nginx -t`") - - if set(EEVariables.ee_redis).issubset(set(apt_packages)): - if os.path.isfile("/etc/nginx/nginx.conf") and (not - os.path.isfile("/etc/nginx/common/redis.conf")): - - data = dict() - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/redis.conf') - ee_nginx = open('/etc/nginx/common/redis.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'redis.mustache', - out=ee_nginx) - ee_nginx.close() - - if os.path.isfile("/etc/nginx/nginx.conf") and (not - os.path.isfile("/etc/nginx/common/redis-hhvm.conf")): - - data = dict() - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/redis-hhvm.conf') - ee_nginx = open('/etc/nginx/common/redis-hhvm.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'redis-hhvm.mustache', - out=ee_nginx) - ee_nginx.close() - - if os.path.isfile("/etc/nginx/conf.d/upstream.conf"): - if not EEFileUtils.grep(self, "/etc/nginx/conf.d/" - "upstream.conf", - "redis"): - with open("/etc/nginx/conf.d/upstream.conf", - "a") as redis_file: - redis_file.write("upstream redis {\n" - " server 127.0.0.1:6379;\n" - " keepalive 10;\n}\n") - - if os.path.isfile("/etc/nginx/nginx.conf") and (not - os.path.isfile("/etc/nginx/conf.d/redis.conf")): - with open("/etc/nginx/conf.d/redis.conf", "a") as redis_file: - redis_file.write("# Log format Settings\n" - "log_format rt_cache_redis '$remote_addr $upstream_response_time $srcache_fetch_status [$time_local] '\n" - "'$http_host \"$request\" $status $body_bytes_sent '\n" - "'\"$http_referer\" \"$http_user_agent\"';\n") - - if set(EEVariables.ee_php).issubset(set(apt_packages)): - # Create log directories - if not os.path.exists('/var/log/php5/'): - Log.debug(self, 'Creating directory /var/log/php5/') - os.makedirs('/var/log/php5/') - - # For debian install xdebug - - if (EEVariables.ee_platform_distro == "debian" and - EEVariables.ee_platform_codename == 'wheezy'): - EEShellExec.cmd_exec(self, "pecl install xdebug") - - with open("/etc/php5/mods-available/xdebug.ini", - encoding='utf-8', mode='a') as myfile: - myfile.write("zend_extension=/usr/lib/php5/20131226/" - "xdebug.so\n") - - EEFileUtils.create_symlink(self, ["/etc/php5/" - "mods-available/xdebug.ini", - "/etc/php5/fpm/conf.d" - "/20-xedbug.ini"]) - - # Parse etc/php5/fpm/php.ini - config = configparser.ConfigParser() - Log.debug(self, "configuring php file /etc/php5/fpm/php.ini") - config.read('/etc/php5/fpm/php.ini') - config['PHP']['expose_php'] = 'Off' - config['PHP']['post_max_size'] = '100M' - config['PHP']['upload_max_filesize'] = '100M' - config['PHP']['max_execution_time'] = '300' - config['PHP']['date.timezone'] = EEVariables.ee_timezone - with open('/etc/php5/fpm/php.ini', - encoding='utf-8', mode='w') as configfile: - Log.debug(self, "Writting php configuration into " - "/etc/php5/fpm/php.ini") - config.write(configfile) - - # Prase /etc/php5/fpm/php-fpm.conf - config = configparser.ConfigParser() - Log.debug(self, "configuring php file" - "/etc/php5/fpm/php-fpm.conf") - config.read_file(codecs.open("/etc/php5/fpm/php-fpm.conf", - "r", "utf8")) - config['global']['error_log'] = '/var/log/php5/fpm.log' - config.remove_option('global', 'include') - config['global']['log_level'] = 'notice' - config['global']['include'] = '/etc/php5/fpm/pool.d/*.conf' - with codecs.open('/etc/php5/fpm/php-fpm.conf', - encoding='utf-8', mode='w') as configfile: - Log.debug(self, "writting php5 configuration into " - "/etc/php5/fpm/php-fpm.conf") - config.write(configfile) - - # Parse /etc/php5/fpm/pool.d/www.conf - config = configparser.ConfigParser() - config.read_file(codecs.open('/etc/php5/fpm/pool.d/www.conf', - "r", "utf8")) - config['www']['ping.path'] = '/ping' - config['www']['pm.status_path'] = '/status' - config['www']['pm.max_requests'] = '500' - config['www']['pm.max_children'] = '100' - config['www']['pm.start_servers'] = '20' - config['www']['pm.min_spare_servers'] = '10' - config['www']['pm.max_spare_servers'] = '30' - config['www']['request_terminate_timeout'] = '300' - config['www']['pm'] = 'ondemand' - config['www']['listen'] = '127.0.0.1:9000' - with codecs.open('/etc/php5/fpm/pool.d/www.conf', - encoding='utf-8', mode='w') as configfile: - Log.debug(self, "writting PHP5 configuration into " - "/etc/php5/fpm/pool.d/www.conf") - config.write(configfile) - - # Generate /etc/php5/fpm/pool.d/debug.conf - EEFileUtils.copyfile(self, "/etc/php5/fpm/pool.d/www.conf", - "/etc/php5/fpm/pool.d/debug.conf") - EEFileUtils.searchreplace(self, "/etc/php5/fpm/pool.d/" - "debug.conf", "[www]", "[debug]") - config = configparser.ConfigParser() - config.read('/etc/php5/fpm/pool.d/debug.conf') - config['debug']['listen'] = '127.0.0.1:9001' - config['debug']['rlimit_core'] = 'unlimited' - config['debug']['slowlog'] = '/var/log/php5/slow.log' - config['debug']['request_slowlog_timeout'] = '10s' - with open('/etc/php5/fpm/pool.d/debug.conf', - encoding='utf-8', mode='w') as confifile: - Log.debug(self, "writting PHP5 configuration into " - "/etc/php5/fpm/pool.d/debug.conf") - config.write(confifile) - - with open("/etc/php5/fpm/pool.d/debug.conf", - encoding='utf-8', mode='a') as myfile: - myfile.write("php_admin_value[xdebug.profiler_output_dir] " - "= /tmp/ \nphp_admin_value[xdebug.profiler_" - "output_name] = cachegrind.out.%p-%H-%R " - "\nphp_admin_flag[xdebug.profiler_enable" - "_trigger] = on \nphp_admin_flag[xdebug." - "profiler_enable] = off\n") - - # Disable xdebug - EEFileUtils.searchreplace(self, "/etc/php5/mods-available/" - "xdebug.ini", - "zend_extension", - ";zend_extension") - - # PHP and Debug pull configuration - if not os.path.exists('{0}22222/htdocs/fpm/status/' - .format(EEVariables.ee_webroot)): - Log.debug(self, 'Creating directory ' - '{0}22222/htdocs/fpm/status/ ' - .format(EEVariables.ee_webroot)) - os.makedirs('{0}22222/htdocs/fpm/status/' - .format(EEVariables.ee_webroot)) - open('{0}22222/htdocs/fpm/status/debug' - .format(EEVariables.ee_webroot), - encoding='utf-8', mode='a').close() - open('{0}22222/htdocs/fpm/status/php' - .format(EEVariables.ee_webroot), - encoding='utf-8', mode='a').close() - - # Write info.php - if not os.path.exists('{0}22222/htdocs/php/' - .format(EEVariables.ee_webroot)): - Log.debug(self, 'Creating directory ' - '{0}22222/htdocs/php/ ' - .format(EEVariables.ee_webroot)) - os.makedirs('{0}22222/htdocs/php' - .format(EEVariables.ee_webroot)) - - with open("{0}22222/htdocs/php/info.php" - .format(EEVariables.ee_webroot), - encoding='utf-8', mode='w') as myfile: - myfile.write("") - - EEFileUtils.chown(self, "{0}22222" - .format(EEVariables.ee_webroot), - EEVariables.ee_php_user, - EEVariables.ee_php_user, recursive=True) - - EEGit.add(self, ["/etc/php5"], msg="Adding PHP into Git") - EEService.restart_service(self, 'php5-fpm') - - if set(EEVariables.ee_mysql).issubset(set(apt_packages)): - # TODO: Currently we are using, we need to remove it in future - # config = configparser.ConfigParser() - # config.read('/etc/mysql/my.cnf') - # config['mysqld']['wait_timeout'] = 30 - # config['mysqld']['interactive_timeout'] = 60 - # config['mysqld']['performance_schema'] = 0 - # with open('/etc/mysql/my.cnf', 'w') as configfile: - # config.write(configfile) - if not os.path.isfile("/etc/mysql/my.cnf"): - config = ("[mysqld]\nwait_timeout = 30\n" - "interactive_timeout=60\nperformance_schema = 0" - "\nquery_cache_type = 1") - config_file = open("/etc/mysql/my.cnf", - encoding='utf-8', mode='w') - config_file.write(config) - config_file.close() - else: - try: - EEShellExec.cmd_exec(self, "sed -i \"/#max_conn" - "ections/a wait_timeout = 30 \\n" - "interactive_timeout = 60 \\n" - "performance_schema = 0\\n" - "query_cache_type = 1 \" " - "/etc/mysql/my.cnf") - except CommandExecutionError as e: - Log.error(self, "Unable to update MySQL file") - - # Set MySQLTuner permission - EEFileUtils.chmod(self, "/usr/bin/mysqltuner", 0o775) - - EEGit.add(self, ["/etc/mysql"], msg="Adding MySQL into Git") - EEService.reload_service(self, 'mysql') - - if set(EEVariables.ee_mail).issubset(set(apt_packages)): - Log.debug(self, "Adding user") - try: - EEShellExec.cmd_exec(self, "adduser --uid 5000 --home /var" - "/vmail --disabled-password --gecos " - "'' vmail") - except CommandExecutionError as e: - Log.error(self, "Unable to add vmail user for mail server") - try: - EEShellExec.cmd_exec(self, "openssl req -new -x509 -days" - " 3650 " - "-nodes -subj /commonName={hostname}" - "/emailAddress={email} -out /etc/ssl" - "/certs/dovecot." - "pem -keyout " - "/etc/ssl/private/dovecot.pem" - .format(hostname=EEVariables.ee_fqdn, - email=EEVariables.ee_email)) - except CommandExecutionError as e: - Log.error(self, "Unable to generate PEM key for dovecot") - Log.debug(self, "Setting Privileges to " - "/etc/ssl/private/dovecot.pem file ") - EEFileUtils.chmod(self, "/etc/ssl/private/dovecot.pem", 0o600) - - # Custom Dovecot configuration by EasyEngine - data = dict() - Log.debug(self, "Writting configuration into file" - "/etc/dovecot/conf.d/auth-sql.conf.ext ") - ee_dovecot = open('/etc/dovecot/conf.d/auth-sql.conf.ext', - encoding='utf-8', mode='w') - self.app.render((data), 'auth-sql-conf.mustache', - out=ee_dovecot) - ee_dovecot.close() - - data = dict(email=EEVariables.ee_email) - Log.debug(self, "Writting configuration into file" - "/etc/dovecot/conf.d/99-ee.conf ") - ee_dovecot = open('/etc/dovecot/conf.d/99-ee.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'dovecot.mustache', out=ee_dovecot) - ee_dovecot.close() - try: - EEShellExec.cmd_exec(self, "sed -i \"s/\\!include " - "auth-system.conf.ext/#\\!include " - "auth-system.conf.ext/\" " - "/etc/dovecot/conf.d/10-auth.conf") - - EEShellExec.cmd_exec(self, "sed -i \"s\'/etc/dovecot/" - "dovecot.pem\'/etc/ssl/certs/" - "dovecot.pem" - "\'\" /etc/dovecot/conf.d/" - "10-ssl.conf") - EEShellExec.cmd_exec(self, "sed -i \"s\'/etc/dovecot/" - "private/dovecot.pem\'/etc/ssl/" - "private" - "/dovecot.pem\'\" /etc/dovecot/" - "conf.d/" - "10-ssl.conf") - - # Custom Postfix configuration needed with Dovecot - # Changes in master.cf - # TODO: Find alternative for sed in Python - EEShellExec.cmd_exec(self, "sed -i \'s/#submission/" - "submission/\'" - " /etc/postfix/master.cf") - EEShellExec.cmd_exec(self, "sed -i \'s/#smtps/smtps/\'" - " /etc/postfix/master.cf") - - EEShellExec.cmd_exec(self, "postconf -e \"smtpd_sasl_type " - "= dovecot\"") - EEShellExec.cmd_exec(self, "postconf -e \"smtpd_sasl_path " - "= private/auth\"") - EEShellExec.cmd_exec(self, "postconf -e \"" - "smtpd_sasl_auth_enable = " - "yes\"") - EEShellExec.cmd_exec(self, "postconf -e \"" - " smtpd_relay_restrictions =" - " permit_sasl_authenticated, " - " permit_mynetworks, " - " reject_unauth_destination\"") - - EEShellExec.cmd_exec(self, "postconf -e \"" - "smtpd_tls_mandatory_" - "protocols = !SSLv2,!SSLv3\"") - EEShellExec.cmd_exec(self, "postconf -e \"smtp_tls_" - "mandatory_protocols = !SSLv2," - "!SSLv3\"") - EEShellExec.cmd_exec(self, "postconf -e \"smtpd_tls" - "_protocols = !SSLv2,!SSLv3\"") - EEShellExec.cmd_exec(self, "postconf -e \"smtp_tls" - "_protocols = !SSLv2,!SSLv3\"") - EEShellExec.cmd_exec(self, "postconf -e \"mydestination " - "= localhost\"") - EEShellExec.cmd_exec(self, "postconf -e \"virtual" - "_transport " - "= lmtp:unix:private/dovecot-lmtp\"") - EEShellExec.cmd_exec(self, "postconf -e \"virtual_uid_" - "maps = static:5000\"") - EEShellExec.cmd_exec(self, "postconf -e \"virtual_gid_" - "maps = static:5000\"") - EEShellExec.cmd_exec(self, "postconf -e \"" - " virtual_mailbox_domains = " - "mysql:/etc/postfix/mysql/virtual_" - "domains_maps.cf\"") - EEShellExec.cmd_exec(self, "postconf -e \"virtual_mailbox" - "_maps" - " = mysql:/etc/postfix/mysql/virtual_" - "mailbox_maps.cf\"") - EEShellExec.cmd_exec(self, "postconf -e \"virtual_alias" - "_maps " - "= mysql:/etc/postfix/mysql/virtual_" - "alias_maps.cf\"") - EEShellExec.cmd_exec(self, "openssl req -new -x509 -days " - " 3650 -nodes -subj /commonName=" - "{hostname}/emailAddress={email}" - " -out /etc/ssl/certs/postfix.pem" - " -keyout /etc/ssl/private/" - "postfix.pem" - .format(hostname=EEVariables.ee_fqdn, - email=EEVariables.ee_email)) - EEShellExec.cmd_exec(self, "chmod 0600 /etc/ssl/private" - "/postfix.pem") - EEShellExec.cmd_exec(self, "postconf -e \"smtpd_tls_cert_" - "file = /etc/ssl/certs/postfix.pem\"") - EEShellExec.cmd_exec(self, "postconf -e \"smtpd_tls_key_" - "file = /etc/ssl/private/" - "postfix.pem\"") - - except CommandExecutionError as e: - Log.Error(self, "Failed to update Dovecot configuration") - - # Sieve configuration - if not os.path.exists('/var/lib/dovecot/sieve/'): - Log.debug(self, 'Creating directory ' - '/var/lib/dovecot/sieve/ ') - os.makedirs('/var/lib/dovecot/sieve/') - - # Custom sieve configuration by EasyEngine - data = dict() - Log.debug(self, "Writting configuration of EasyEngine into " - "file /var/lib/dovecot/sieve/default.sieve") - ee_sieve = open('/var/lib/dovecot/sieve/default.sieve', - encoding='utf-8', mode='w') - self.app.render((data), 'default-sieve.mustache', - out=ee_sieve) - ee_sieve.close() - - # Compile sieve rules - Log.debug(self, "Setting Privileges to dovecot ") - # EEShellExec.cmd_exec(self, "chown -R vmail:vmail /var/lib" - # "/dovecot") - EEFileUtils.chown(self, "/var/lib/dovecot", 'vmail', 'vmail', - recursive=True) - try: - EEShellExec.cmd_exec(self, "sievec /var/lib/dovecot/" - "/sieve/default.sieve") - except CommandExecutionError as e: - raise SiteError("Failed to compile default.sieve") - - EEGit.add(self, ["/etc/postfix", "/etc/dovecot"], - msg="Installed mail server") - EEService.restart_service(self, 'dovecot') - EEService.reload_service(self, 'postfix') - - if set(EEVariables.ee_mailscanner).issubset(set(apt_packages)): - # Set up Custom amavis configuration - data = dict() - Log.debug(self, "Configuring file /etc/amavis/conf.d" - "/15-content_filter_mode") - ee_amavis = open('/etc/amavis/conf.d/15-content_filter_mode', - encoding='utf-8', mode='w') - self.app.render((data), '15-content_filter_mode.mustache', - out=ee_amavis) - ee_amavis.close() - - # Amavis ViMbadmin configuration - if os.path.isfile("/etc/postfix/mysql/virtual_alias_maps.cf"): - vm_host = os.popen("grep hosts /etc/postfix/mysql/virtual_" - "alias_maps.cf | awk \'{ print $3 }\' |" - " tr -d '\\n'").read() - vm_pass = os.popen("grep password /etc/postfix/mysql/" - "virtual_alias_maps.cf | awk \'{ print " - "$3 }\' | tr -d '\\n'").read() - - data = dict(host=vm_host, password=vm_pass) - vm_config = open('/etc/amavis/conf.d/50-user', - encoding='utf-8', mode='w') - self.app.render((data), '50-user.mustache', out=vm_config) - vm_config.close() - - # Amavis postfix configuration - try: - EEShellExec.cmd_exec(self, "postconf -e \"content_filter =" - " smtp-amavis:[127.0.0.1]:10024\"") - EEShellExec.cmd_exec(self, "sed -i \"s/1 pickup/1 " - " pickup" - "\\n -o content_filter=\\n " - " -o receive_override_options=" - "no_header_body" - "_checks/\" /etc/postfix/master.cf") - except CommandExecutionError as e: - raise SiteError("Failed to update Amavis-Postfix config") - - amavis_master = ("""smtp-amavis unix - - n - 2 smtp - -o smtp_data_done_timeout=1200 - -o smtp_send_xforward_command=yes - -o disable_dns_lookups=yes - -o max_use=20 -127.0.0.1:10025 inet n - n - - smtpd - -o content_filter= - -o smtpd_delay_reject=no - -o smtpd_client_restrictions=permit_mynetworks,reject - -o smtpd_helo_restrictions= - -o smtpd_sender_restrictions= - -o smtpd_recipient_restrictions=permit_mynetworks,reject - -o smtpd_data_restrictions=reject_unauth_pipelining - -o smtpd_end_of_data_restrictions= - -o smtpd_restriction_classes= - -o mynetworks=127.0.0.0/8 - -o smtpd_error_sleep_time=0 - -o smtpd_soft_error_limit=1001 - -o smtpd_hard_error_limit=1000 - -o smtpd_client_connection_count_limit=0 - -o smtpd_client_connection_rate_limit=0 - -o local_header_rewrite_clients=""") - - with open("/etc/postfix/master.cf", - encoding='utf-8', mode='a') as am_config: - am_config.write(amavis_master) - - try: - # Amavis ClamAV configuration - Log.debug(self, "Adding new user clamav amavis") - EEShellExec.cmd_exec(self, "adduser clamav amavis") - Log.debug(self, "Adding new user amavis clamav") - EEShellExec.cmd_exec(self, "adduser amavis clamav") - Log.debug(self, "Setting Privileges to /var/lib/amavis" - "/tmp") - EEFileUtils.chmod(self, "/var/lib/amavis/tmp", 0o755) - - # Update ClamAV database - Log.debug(self, "Updating database") - EEShellExec.cmd_exec(self, "freshclam") - except CommandExecutionError as e: - raise SiteError(" Unable to update ClamAV-Amavis config") - - EEGit.add(self, ["/etc/amavis"], msg="Adding Amavis into Git") - EEService.restart_service(self, 'dovecot') - EEService.reload_service(self, 'postfix') - EEService.restart_service(self, 'amavis') - - if len(packages): - if any('/usr/bin/wp' == x[1] for x in packages): - Log.debug(self, "Setting Privileges to /usr/bin/wp file ") - EEFileUtils.chmod(self, "/usr/bin/wp", 0o775) - - if any('/tmp/pma.tar.gz' == x[1] - for x in packages): - EEExtract.extract(self, '/tmp/pma.tar.gz', '/tmp/') - Log.debug(self, 'Extracting file /tmp/pma.tar.gz to ' - 'location /tmp/') - if not os.path.exists('{0}22222/htdocs/db' - .format(EEVariables.ee_webroot)): - Log.debug(self, "Creating new directory " - "{0}22222/htdocs/db" - .format(EEVariables.ee_webroot)) - os.makedirs('{0}22222/htdocs/db' - .format(EEVariables.ee_webroot)) - shutil.move('/tmp/phpmyadmin-STABLE/', - '{0}22222/htdocs/db/pma/' - .format(EEVariables.ee_webroot)) - shutil.copyfile('{0}22222/htdocs/db/pma/config.sample.inc.php' - .format(EEVariables.ee_webroot), - '{0}22222/htdocs/db/pma/config.inc.php' - .format(EEVariables.ee_webroot)) - Log.debug(self, 'Setting Blowfish Secret Key FOR COOKIE AUTH to ' - '{0}22222/htdocs/db/pma/config.inc.php file ' - .format(EEVariables.ee_webroot)) - blowfish_key = ''.join([random.choice - (string.ascii_letters + string.digits) - for n in range(10)]) - EEFileUtils.searchreplace(self, - '{0}22222/htdocs/db/pma/config.inc.php' - .format(EEVariables.ee_webroot), - "$cfg[\'blowfish_secret\'] = \'\';","$cfg[\'blowfish_secret\'] = \'{0}\';" - .format(blowfish_key)) - Log.debug(self, 'Setting HOST Server For Mysql to ' - '{0}22222/htdocs/db/pma/config.inc.php file ' - .format(EEVariables.ee_webroot)) - EEFileUtils.searchreplace(self, - '{0}22222/htdocs/db/pma/config.inc.php' - .format(EEVariables.ee_webroot), - "$cfg[\'Servers\'][$i][\'host\'] = \'localhost\';","$cfg[\'Servers\'][$i][\'host\'] = \'{0}\';" - .format(EEVariables.ee_mysql_host)) - Log.debug(self, 'Setting Privileges of webroot permission to ' - '{0}22222/htdocs/db/pma file ' - .format(EEVariables.ee_webroot)) - EEFileUtils.chown(self, '{0}22222' - .format(EEVariables.ee_webroot), - EEVariables.ee_php_user, - EEVariables.ee_php_user, - recursive=True) - if any('/tmp/memcache.tar.gz' == x[1] - for x in packages): - Log.debug(self, "Extracting memcache.tar.gz to location" - " {0}22222/htdocs/cache/memcache " - .format(EEVariables.ee_webroot)) - EEExtract.extract(self, '/tmp/memcache.tar.gz', - '{0}22222/htdocs/cache/memcache' - .format(EEVariables.ee_webroot)) - Log.debug(self, "Setting Privileges to " - "{0}22222/htdocs/cache/memcache file" - .format(EEVariables.ee_webroot)) - EEFileUtils.chown(self, '{0}22222' - .format(EEVariables.ee_webroot), - EEVariables.ee_php_user, - EEVariables.ee_php_user, - recursive=True) - - if any('/tmp/webgrind.tar.gz' == x[1] - for x in packages): - Log.debug(self, "Extracting file webgrind.tar.gz to " - "location /tmp/ ") - EEExtract.extract(self, '/tmp/webgrind.tar.gz', '/tmp/') - if not os.path.exists('{0}22222/htdocs/php' - .format(EEVariables.ee_webroot)): - Log.debug(self, "Creating directroy " - "{0}22222/htdocs/php" - .format(EEVariables.ee_webroot)) - os.makedirs('{0}22222/htdocs/php' - .format(EEVariables.ee_webroot)) - shutil.move('/tmp/webgrind-master/', - '{0}22222/htdocs/php/webgrind' - .format(EEVariables.ee_webroot)) - - EEFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/" - "config.php" - .format(EEVariables.ee_webroot), - "/usr/local/bin/dot", "/usr/bin/dot") - EEFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/" - "config.php" - .format(EEVariables.ee_webroot), - "Europe/Copenhagen", - EEVariables.ee_timezone) - - EEFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/" - "config.php" - .format(EEVariables.ee_webroot), - "90", "100") - - Log.debug(self, "Setting Privileges of webroot permission to " - "{0}22222/htdocs/php/webgrind/ file " - .format(EEVariables.ee_webroot)) - EEFileUtils.chown(self, '{0}22222' - .format(EEVariables.ee_webroot), - EEVariables.ee_php_user, - EEVariables.ee_php_user, - recursive=True) - - if any('/tmp/anemometer.tar.gz' == x[1] - for x in packages): - Log.debug(self, "Extracting file anemometer.tar.gz to " - "location /tmp/ ") - EEExtract.extract(self, '/tmp/anemometer.tar.gz', '/tmp/') - if not os.path.exists('{0}22222/htdocs/db/' - .format(EEVariables.ee_webroot)): - Log.debug(self, "Creating directory") - os.makedirs('{0}22222/htdocs/db/' - .format(EEVariables.ee_webroot)) - shutil.move('/tmp/Anemometer-master', - '{0}22222/htdocs/db/anemometer' - .format(EEVariables.ee_webroot)) - chars = ''.join(random.sample(string.ascii_letters, 8)) - try: - EEShellExec.cmd_exec(self, 'mysql < {0}22222/htdocs/db' - '/anemometer/install.sql' - .format(EEVariables.ee_webroot)) - except CommandExecutionError as e: - raise SiteError("Unable to import Anemometer database") - - EEMysql.execute(self, 'grant select on *.* to \'anemometer\'' - '@\'{0}\''.format(self.app.config.get('mysql', - 'grant-host'))) - Log.debug(self, "grant all on slow-query-log.*" - " to anemometer@root_user IDENTIFIED BY password ") - EEMysql.execute(self, 'grant all on slow_query_log.* to' - '\'anemometer\'@\'{0}\' IDENTIFIED' - ' BY \'{1}\''.format(self.app.config.get( - 'mysql', 'grant-host'), - chars), - errormsg="cannot grant privillages", log=False) - - # Custom Anemometer configuration - Log.debug(self, "configration Anemometer") - data = dict(host=EEVariables.ee_mysql_host, port='3306', - user='anemometer', password=chars) - ee_anemometer = open('{0}22222/htdocs/db/anemometer' - '/conf/config.inc.php' - .format(EEVariables.ee_webroot), - encoding='utf-8', mode='w') - self.app.render((data), 'anemometer.mustache', - out=ee_anemometer) - ee_anemometer.close() - - if any('/usr/bin/pt-query-advisor' == x[1] - for x in packages): - EEFileUtils.chmod(self, "/usr/bin/pt-query-advisor", 0o775) - - if any('/tmp/vimbadmin.tar.gz' == x[1] for x in packages): - # Extract ViMbAdmin - Log.debug(self, "Extracting ViMbAdmin.tar.gz to " - "location /tmp/") - EEExtract.extract(self, '/tmp/vimbadmin.tar.gz', '/tmp/') - if not os.path.exists('{0}22222/htdocs/' - .format(EEVariables.ee_webroot)): - Log.debug(self, "Creating directory " - "{0}22222/htdocs/" - .format(EEVariables.ee_webroot)) - os.makedirs('{0}22222/htdocs/' - .format(EEVariables.ee_webroot)) - shutil.move('/tmp/ViMbAdmin-{0}/' - .format(EEVariables.ee_vimbadmin), - '{0}22222/htdocs/vimbadmin/' - .format(EEVariables.ee_webroot)) - - # Donwload composer and install ViMbAdmin - Log.debug(self, "Downloading composer " - "https://getcomposer.org/installer | php ") - try: - EEShellExec.cmd_exec(self, "cd {0}22222/htdocs" - "/vimbadmin; curl" - " -sS https://getcomposer.org/" - "installer |" - " php".format(EEVariables.ee_webroot)) - Log.debug(self, "Installating of composer") - EEShellExec.cmd_exec(self, "cd {0}22222/htdocs" - "/vimbadmin && " - "php composer.phar install " - "--prefer-dist" - " --no-dev && rm -f {1}22222/htdocs" - "/vimbadmin/composer.phar" - .format(EEVariables.ee_webroot, - EEVariables.ee_webroot)) - except CommandExecutionError as e: - raise SiteError("Failed to setup ViMbAdmin") - - # Configure vimbadmin database - vm_passwd = ''.join(random.sample(string.ascii_letters, 8)) - Log.debug(self, "Creating vimbadmin database if not exist") - EEMysql.execute(self, "create database if not exists" - " vimbadmin") - Log.debug(self, " grant all privileges on `vimbadmin`.* to" - " `vimbadmin`@`{0}` IDENTIFIED BY" - " ' '".format(self.app.config.get('mysql', - 'grant-host'))) - EEMysql.execute(self, "grant all privileges on `vimbadmin`.* " - " to `vimbadmin`@`{0}` IDENTIFIED BY" - " '{1}'".format(self.app.config.get('mysql', - 'grant-host'), vm_passwd), - errormsg="Cannot grant " - "user privileges", log=False) - vm_salt = (''.join(random.sample(string.ascii_letters + - string.ascii_letters, 64))) - - # Custom Vimbadmin configuration by EasyEngine - data = dict(salt=vm_salt, host=EEVariables.ee_mysql_host, - password=vm_passwd, - php_user=EEVariables.ee_php_user) - Log.debug(self, 'Writting the ViMbAdmin configuration to ' - 'file {0}22222/htdocs/vimbadmin/application/' - 'configs/application.ini' - .format(EEVariables.ee_webroot)) - ee_vmb = open('{0}22222/htdocs/vimbadmin/application/' - 'configs/application.ini' - .format(EEVariables.ee_webroot), - encoding='utf-8', mode='w') - self.app.render((data), 'vimbadmin.mustache', - out=ee_vmb) - ee_vmb.close() - - shutil.copyfile("{0}22222/htdocs/vimbadmin/public/" - ".htaccess.dist" - .format(EEVariables.ee_webroot), - "{0}22222/htdocs/vimbadmin/public/" - ".htaccess".format(EEVariables.ee_webroot)) - Log.debug(self, "Executing command " - "{0}22222/htdocs/vimbadmin/bin" - "/doctrine2-cli.php orm:schema-tool:" - "create".format(EEVariables.ee_webroot)) - try: - EEShellExec.cmd_exec(self, "{0}22222/htdocs/vimbadmin" - "/bin/doctrine2-cli.php " - "orm:schema-tool:create" - .format(EEVariables.ee_webroot)) - except CommandExecutionError as e: - raise SiteError("Unable to create ViMbAdmin schema") - - EEFileUtils.chown(self, '{0}22222' - .format(EEVariables.ee_webroot), - EEVariables.ee_php_user, - EEVariables.ee_php_user, - recursive=True) - - # Copy Dovecot and Postfix templates which are depednet on - # Vimbadmin - - if not os.path.exists('/etc/postfix/mysql/'): - Log.debug(self, "Creating directory " - "/etc/postfix/mysql/") - os.makedirs('/etc/postfix/mysql/') - - if EEVariables.ee_mysql_host is "localhost": - data = dict(password=vm_passwd, host="127.0.0.1") - else: - data = dict(password=vm_passwd, - host=EEVariables.ee_mysql_host) - - vm_config = open('/etc/postfix/mysql/virtual_alias_maps.cf', - encoding='utf-8', mode='w') - self.app.render((data), 'virtual_alias_maps.mustache', - out=vm_config) - vm_config.close() - - Log.debug(self, "Writting configuration to " - "/etc/postfix/mysql" - "/virtual_domains_maps.cf file") - vm_config = open('/etc/postfix/mysql/virtual_domains_maps.cf', - encoding='utf-8', mode='w') - self.app.render((data), 'virtual_domains_maps.mustache', - out=vm_config) - vm_config.close() - - Log.debug(self, "Writting configuration to " - "/etc/postfix/mysql" - "/virtual_mailbox_maps.cf file") - vm_config = open('/etc/postfix/mysql/virtual_mailbox_maps.cf', - encoding='utf-8', mode='w') - self.app.render((data), 'virtual_mailbox_maps.mustache', - out=vm_config) - vm_config.close() - - Log.debug(self, "Writting configration" - " to /etc/dovecot/dovecot-sql.conf.ext file ") - vm_config = open('/etc/dovecot/dovecot-sql.conf.ext', - encoding='utf-8', mode='w') - self.app.render((data), 'dovecot-sql-conf.mustache', - out=vm_config) - vm_config.close() - - # If Amavis is going to be installed then configure Vimabadmin - # Amvis settings - if set(EEVariables.ee_mailscanner).issubset(set(apt_packages)): - vm_config = open('/etc/amavis/conf.d/50-user', - encoding='utf-8', mode='w') - self.app.render((data), '50-user.mustache', - out=vm_config) - vm_config.close() - EEService.restart_service(self, 'dovecot') - EEService.reload_service(self, 'nginx') - EEService.reload_service(self, 'php5-fpm') - self.msg = (self.msg + ["Configure ViMbAdmin:\thttps://{0}:" - "22222/vimbadmin".format(EEVariables.ee_fqdn)] - + ["Security Salt: {0}".format(vm_salt)]) - - if any('/tmp/roundcube.tar.gz' == x[1] for x in packages): - # Extract RoundCubemail - Log.debug(self, "Extracting file /tmp/roundcube.tar.gz " - "to location /tmp/ ") - EEExtract.extract(self, '/tmp/roundcube.tar.gz', '/tmp/') - if not os.path.exists('{0}roundcubemail' - .format(EEVariables.ee_webroot)): - Log.debug(self, "Creating new directory " - " {0}roundcubemail/" - .format(EEVariables.ee_webroot)) - os.makedirs('{0}roundcubemail/' - .format(EEVariables.ee_webroot)) - shutil.move('/tmp/roundcubemail-{0}/' - .format(EEVariables.ee_roundcube), - '{0}roundcubemail/htdocs' - .format(EEVariables.ee_webroot)) - - # Install Roundcube depednet pear packages - EEShellExec.cmd_exec(self, "pear install Mail_Mime Net_SMTP" - " Mail_mimeDecode Net_IDNA2-beta " - "Auth_SASL Net_Sieve Crypt_GPG") - - # Configure roundcube database - rc_passwd = ''.join(random.sample(string.ascii_letters, 8)) - Log.debug(self, "Creating Database roundcubemail") - EEMysql.execute(self, "create database if not exists " - " roundcubemail") - Log.debug(self, "grant all privileges" - " on `roundcubemail`.* to " - " `roundcube`@`{0}` IDENTIFIED BY " - "' '".format(self.app.config.get( - 'mysql', 'grant-host'))) - EEMysql.execute(self, "grant all privileges" - " on `roundcubemail`.* to " - " `roundcube`@`{0}` IDENTIFIED BY " - "'{1}'".format(self.app.config.get( - 'mysql', 'grant-host'), - rc_passwd)) - EEShellExec.cmd_exec(self, "mysql roundcubemail < {0}" - "roundcubemail/htdocs/SQL/mysql" - ".initial.sql" - .format(EEVariables.ee_webroot)) - - shutil.copyfile("{0}roundcubemail/htdocs/config/" - "config.inc.php.sample" - .format(EEVariables.ee_webroot), - "{0}roundcubemail/htdocs/config/" - "config.inc.php" - .format(EEVariables.ee_webroot)) - EEShellExec.cmd_exec(self, "sed -i \"s\'mysql://roundcube:" - "pass@localhost/roundcubemail\'mysql://" - "roundcube:{0}@{1}/" - "roundcubemail\'\" {2}roundcubemail" - "/htdocs/config/config." - "inc.php" - .format(rc_passwd, - EEVariables.ee_mysql_host, - EEVariables.ee_webroot)) - - # Sieve plugin configuration in roundcube - EEShellExec.cmd_exec(self, "bash -c \"sed -i \\\"s:\$config\[" - "\'plugins\'\] " - "= array(:\$config\['plugins'\] = " - "array(\\n \'sieverules\',:\\\" " - "{0}roundcubemail/htdocs/config" - .format(EEVariables.ee_webroot) - + "/config.inc.php\"") - EEShellExec.cmd_exec(self, "echo \"\$config['sieverules_port']" - "=4190;\" >> {0}roundcubemail" - .format(EEVariables.ee_webroot) - + "/htdocs/config/config.inc.php") - - data = dict(site_name='webmail', www_domain='webmail', - static=False, - basic=True, wp=False, w3tc=False, wpfc=False, - wpsc=False, multisite=False, wpsubdir=False, - webroot=EEVariables.ee_webroot, ee_db_name='', - ee_db_user='', ee_db_pass='', ee_db_host='', - rc=True) - - Log.debug(self, 'Writting the nginx configuration for ' - 'RoundCubemail') - ee_rc = open('/etc/nginx/sites-available/webmail', - encoding='utf-8', mode='w') - self.app.render((data), 'virtualconf.mustache', - out=ee_rc) - ee_rc.close() - - # Create Symbolic link for webmail - EEFileUtils.create_symlink(self, ['/etc/nginx/sites-available' - '/webmail', - '/etc/nginx/sites-enabled/' - 'webmail']) - # Create log folder and softlinks - if not os.path.exists('{0}roundcubemail/logs' - .format(EEVariables.ee_webroot)): - os.makedirs('{0}roundcubemail/logs' - .format(EEVariables.ee_webroot)) - - EEFileUtils.create_symlink(self, ['/var/log/nginx/' - 'webmail.access.log', - '{0}roundcubemail/' - 'logs/access.log' - .format(EEVariables.ee_webroot)]) - - EEFileUtils.create_symlink(self, ['/var/log/nginx/' - 'webmail.error.log', - '{0}roundcubemail/' - 'logs/error.log' - .format(EEVariables.ee_webroot)]) - # Remove roundcube installer - EEService.reload_service(self, 'nginx') - EEFileUtils.remove(self, ["{0}roundcubemail/htdocs/installer" - .format(EEVariables.ee_webroot)]) - EEFileUtils.chown(self, '{0}roundcubemail' - .format(EEVariables.ee_webroot), - EEVariables.ee_php_user, - EEVariables.ee_php_user, - recursive=True) - - if any('/tmp/pra.tar.gz' == x[1] - for x in packages): - Log.debug(self, 'Extracting file /tmp/pra.tar.gz to ' - 'loaction /tmp/') - EEExtract.extract(self, '/tmp/pra.tar.gz', '/tmp/') - if not os.path.exists('{0}22222/htdocs/cache/redis' - .format(EEVariables.ee_webroot)): - Log.debug(self, "Creating new directory " - "{0}22222/htdocs/cache/redis" - .format(EEVariables.ee_webroot)) - os.makedirs('{0}22222/htdocs/cache/redis' - .format(EEVariables.ee_webroot)) - shutil.move('/tmp/phpRedisAdmin-master/', - '{0}22222/htdocs/cache/redis/phpRedisAdmin' - .format(EEVariables.ee_webroot)) - - Log.debug(self, 'Extracting file /tmp/predis.tar.gz to ' - 'loaction /tmp/') - EEExtract.extract(self, '/tmp/predis.tar.gz', '/tmp/') - shutil.move('/tmp/predis-1.0.1/', - '{0}22222/htdocs/cache/redis/phpRedisAdmin/vendor' - .format(EEVariables.ee_webroot)) - - Log.debug(self, 'Setting Privileges of webroot permission to ' - '{0}22222/htdocs/cache/ file ' - .format(EEVariables.ee_webroot)) - EEFileUtils.chown(self, '{0}22222' - .format(EEVariables.ee_webroot), - EEVariables.ee_php_user, - EEVariables.ee_php_user, - recursive=True) - - @expose(help="Install packages") - def install(self, packages=[], apt_packages=[], disp_msg=True): - """Start installation of packages""" - self.msg = [] - try: - # Default action for stack installation - if ((not self.app.pargs.web) and (not self.app.pargs.admin) and - (not self.app.pargs.mail) and (not self.app.pargs.nginx) and - (not self.app.pargs.php) and (not self.app.pargs.mysql) and - (not self.app.pargs.postfix) and (not self.app.pargs.wpcli) and - (not self.app.pargs.phpmyadmin) and (not self.app.pargs.hhvm) - and (not self.app.pargs.pagespeed) and - (not self.app.pargs.adminer) and (not self.app.pargs.utils) and - (not self.app.pargs.mailscanner) and (not self.app.pargs.all) - and (not self.app.pargs.redis) and - (not self.app.pargs.phpredisadmin)): - self.app.pargs.web = True - self.app.pargs.admin = True - - if self.app.pargs.all: - self.app.pargs.web = True - self.app.pargs.admin = True - self.app.pargs.mail = True - - if self.app.pargs.web: - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.wpcli = True - self.app.pargs.postfix = True - - if self.app.pargs.admin: - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.adminer = True - self.app.pargs.phpmyadmin = True - self.app.pargs.utils = True - - if self.app.pargs.mail: - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.postfix = True - - if not EEAptGet.is_installed(self, 'dovecot-core'): - check_fqdn(self, - os.popen("hostname -f | tr -d '\n'").read()) - Log.debug(self, "Setting apt_packages variable for mail") - apt_packages = apt_packages + EEVariables.ee_mail - packages = packages + [["https://github.com/opensolutions/" - "ViMbAdmin/archive/{0}.tar.gz" - .format(EEVariables.ee_vimbadmin), - "/tmp/vimbadmin.tar.gz", - "ViMbAdmin"], - ["https://github.com/roundcube/" - "roundcubemail/releases/download/" - "{0}/roundcubemail-{0}.tar.gz" - .format(EEVariables.ee_roundcube), - "/tmp/roundcube.tar.gz", - "Roundcube"]] - - if EEVariables.ee_ram > 1024: - self.app.pargs.mailscanner = True - else: - Log.info(self, "System RAM is less than 1GB\nMail " - "scanner packages are not going to install" - " automatically") - else: - Log.info(self, "Mail server is already installed") - - if self.app.pargs.pagespeed: - if not EEAptGet.is_installed(self, 'nginx-custom'): - self.app.pargs.nginx = True - else: - Log.info(self, "Nginx already installed") - - if self.app.pargs.redis: - if not EEAptGet.is_installed(self, 'redis-server'): - apt_packages = apt_packages + EEVariables.ee_redis - else: - Log.info(self, "Redis already installed") - - if self.app.pargs.nginx: - Log.debug(self, "Setting apt_packages variable for Nginx") - - if not EEAptGet.is_installed(self, 'nginx-custom'): - if not EEAptGet.is_installed(self, 'nginx-plus'): - apt_packages = apt_packages + EEVariables.ee_nginx - else: - Log.info(self, "NGINX PLUS Detected ...") - apt = ["nginx-plus"] + EEVariables.ee_nginx - #apt_packages = apt_packages + EEVariables.ee_nginx - self.post_pref(apt, packages) - else: - Log.debug(self, "Nginx already installed") - Log.info(self, "Nginx already installed") - if self.app.pargs.php: - Log.debug(self, "Setting apt_packages variable for PHP") - if not EEAptGet.is_installed(self, 'php5-fpm'): - apt_packages = apt_packages + EEVariables.ee_php - else: - Log.debug(self, "PHP already installed") - Log.info(self, "PHP already installed") - - if self.app.pargs.hhvm: - Log.debug(self, "Setting apt packages variable for HHVM") - if platform.architecture()[0] is '32bit': - Log.error(self, "HHVM is not supported by 32bit system") - if not EEAptGet.is_installed(self, 'hhvm'): - apt_packages = apt_packages + EEVariables.ee_hhvm - else: - Log.debug(self, "HHVM already installed") - Log.info(self, "HHVM already installed") - - if self.app.pargs.mysql: - Log.debug(self, "Setting apt_packages variable for MySQL") - if not EEShellExec.cmd_exec(self, "mysqladmin ping"): - apt_packages = apt_packages + EEVariables.ee_mysql - packages = packages + [["https://raw." - "githubusercontent.com/" - "major/MySQLTuner-perl" - "/master/mysqltuner.pl", - "/usr/bin/mysqltuner", - "MySQLTuner"]] - - else: - Log.debug(self, "MySQL connection is already alive") - Log.info(self, "MySQL connection is already alive") - if self.app.pargs.postfix: - Log.debug(self, "Setting apt_packages variable for Postfix") - if not EEAptGet.is_installed(self, 'postfix'): - apt_packages = apt_packages + EEVariables.ee_postfix - else: - Log.debug(self, "Postfix is already installed") - Log.info(self, "Postfix is already installed") - if self.app.pargs.wpcli: - Log.debug(self, "Setting packages variable for WP-CLI") - if not EEShellExec.cmd_exec(self, "which wp"): - packages = packages + [["https://github.com/wp-cli/wp-cli/" - "releases/download/v{0}/" - "wp-cli-{0}.phar" - "".format(EEVariables.ee_wp_cli), - "/usr/bin/wp", - "WP-CLI"]] - else: - Log.debug(self, "WP-CLI is already installed") - Log.info(self, "WP-CLI is already installed") - if self.app.pargs.phpmyadmin: - Log.debug(self, "Setting packages varible for phpMyAdmin ") - packages = packages + [["https://github.com/phpmyadmin/" - "phpmyadmin/archive/STABLE.tar.gz", - "/tmp/pma.tar.gz", "phpMyAdmin"]] - - if self.app.pargs.phpredisadmin: - Log.debug(self, "Setting packages varible for phpRedisAdmin") - packages = packages + [["https://github.com/ErikDubbelboer/" - "phpRedisAdmin/archive/master.tar.gz", - "/tmp/pra.tar.gz","phpRedisAdmin"], - ["https://github.com/nrk/predis/" - "archive/v1.0.1.tar.gz", - "/tmp/predis.tar.gz", "Predis"]] - - if self.app.pargs.adminer: - Log.debug(self, "Setting packages variable for Adminer ") - packages = packages + [["http://downloads.sourceforge.net/" - "adminer/adminer-{0}.php" - "".format(EEVariables.ee_adminer), - "{0}22222/" - "htdocs/db/adminer/index.php" - .format(EEVariables.ee_webroot), - "Adminer"]] - - if self.app.pargs.mailscanner: - if not EEAptGet.is_installed(self, 'amavisd-new'): - if (EEAptGet.is_installed(self, 'dovecot-core') or - self.app.pargs.mail): - apt_packages = (apt_packages + - EEVariables.ee_mailscanner) - else: - Log.error(self, "Failed to find installed Dovecot") - else: - Log.error(self, "Mail scanner already installed") - - if self.app.pargs.utils: - Log.debug(self, "Setting packages variable for utils") - packages = packages + [["http://phpmemcacheadmin.googlecode" - ".com/files/phpMemcachedAdmin-1.2.2" - "-r262.tar.gz", '/tmp/memcache.tar.gz', - 'phpMemcachedAdmin'], - ["https://raw.githubusercontent.com" - "/rtCamp/eeadmin/master/cache/nginx/" - "clean.php", - "{0}22222/htdocs/cache/" - "nginx/clean.php" - .format(EEVariables.ee_webroot), - "clean.php"], - ["https://raw.github.com/rlerdorf/" - "opcache-status/master/opcache.php", - "{0}22222/htdocs/cache/" - "opcache/opcache.php" - .format(EEVariables.ee_webroot), - "opcache.php"], - ["https://raw.github.com/amnuts/" - "opcache-gui/master/index.php", - "{0}22222/htdocs/" - "cache/opcache/opgui.php" - .format(EEVariables.ee_webroot), - "Opgui"], - ["https://gist.github.com/ck-on/4959032" - "/raw/0b871b345fd6cfcd6d2be030c1f33d1" - "ad6a475cb/ocp.php", - "{0}22222/htdocs/cache/" - "opcache/ocp.php" - .format(EEVariables.ee_webroot), - "OCP.php"], - ["https://github.com/jokkedk/webgrind/" - "archive/master.tar.gz", - '/tmp/webgrind.tar.gz', 'Webgrind'], - ["http://bazaar.launchpad.net/~" - "percona-toolkit-dev/percona-toolkit/" - "2.1/download/head:/ptquerydigest-" - "20110624220137-or26tn4" - "expb9ul2a-16/pt-query-digest", - "/usr/bin/pt-query-advisor", - "pt-query-advisor"], - ["https://github.com/box/Anemometer/" - "archive/master.tar.gz", - '/tmp/anemometer.tar.gz', 'Anemometer'] - ] - except Exception as e: - pass - - if len(apt_packages) or len(packages): - Log.debug(self, "Calling pre_pref") - self.pre_pref(apt_packages) - if len(apt_packages): - EESwap.add(self) - Log.info(self, "Updating apt-cache, please wait...") - EEAptGet.update(self) - Log.info(self, "Installing packages, please wait...") - EEAptGet.install(self, apt_packages) - if len(packages): - Log.debug(self, "Downloading following: {0}".format(packages)) - EEDownload.download(self, packages) - Log.debug(self, "Calling post_pref") - self.post_pref(apt_packages, packages) - if disp_msg: - if len(self.msg): - for msg in self.msg: - Log.info(self, Log.ENDC + msg) - Log.info(self, "Successfully installed packages") - else: - return self.msg - - @expose(help="Remove packages") - def remove(self): - """Start removal of packages""" - apt_packages = [] - packages = [] - - # Default action for stack remove - if ((not self.app.pargs.web) and (not self.app.pargs.admin) and - (not self.app.pargs.mail) and (not self.app.pargs.nginx) and - (not self.app.pargs.php) and (not self.app.pargs.mysql) and - (not self.app.pargs.postfix) and (not self.app.pargs.wpcli) and - (not self.app.pargs.phpmyadmin) and (not self.app.pargs.hhvm) and - (not self.app.pargs.adminer) and (not self.app.pargs.utils) and - (not self.app.pargs.mailscanner) and (not self.app.pargs.all) and - (not self.app.pargs.pagespeed) and (not self.app.pargs.redis) and - (not self.app.pargs.phpredisadmin)): - self.app.pargs.web = True - self.app.pargs.admin = True - - if self.app.pargs.all: - self.app.pargs.web = True - self.app.pargs.admin = True - self.app.pargs.mail = True - - if self.app.pargs.web: - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.wpcli = True - self.app.pargs.postfix = True - - if self.app.pargs.admin: - self.app.pargs.adminer = True - self.app.pargs.phpmyadmin = True - self.app.pargs.utils = True - - if self.app.pargs.mail: - Log.debug(self, "Removing mail server packages") - apt_packages = apt_packages + EEVariables.ee_mail - apt_packages = apt_packages + EEVariables.ee_mailscanner - packages = packages + ["{0}22222/htdocs/vimbadmin" - .format(EEVariables.ee_webroot), - "{0}roundcubemail" - .format(EEVariables.ee_webroot)] - if EEShellExec.cmd_exec(self, "mysqladmin ping"): - EEMysql.execute(self, "drop database IF EXISTS vimbadmin") - EEMysql.execute(self, "drop database IF EXISTS roundcubemail") - - if self.app.pargs.mailscanner: - apt_packages = (apt_packages + EEVariables.ee_mailscanner) - - if self.app.pargs.pagespeed: - Log.debug(self, "Removing packages varible of Pagespeed") - packages = packages + ['/etc/nginx/conf.d/pagespeed.conf'] - - if self.app.pargs.nginx: - Log.debug(self, "Removing apt_packages variable of Nginx") - apt_packages = apt_packages + EEVariables.ee_nginx - if self.app.pargs.php: - Log.debug(self, "Removing apt_packages variable of PHP") - apt_packages = apt_packages + EEVariables.ee_php - - if self.app.pargs.hhvm: - if EEAptGet.is_installed(self, 'hhvm'): - Log.debug(self, "Removing apt_packages varible of HHVM") - apt_packages = apt_packages + EEVariables.ee_hhvm - if self.app.pargs.redis: - Log.debug(self, "Remove apt_packages variable of Redis") - apt_packages = apt_packages + EEVariables.ee_redis - if self.app.pargs.mysql: - Log.debug(self, "Removing apt_packages variable of MySQL") - apt_packages = apt_packages + EEVariables.ee_mysql - packages = packages + ['/usr/bin/mysqltuner'] - if self.app.pargs.postfix: - Log.debug(self, "Removing apt_packages variable of Postfix") - apt_packages = apt_packages + EEVariables.ee_postfix - if self.app.pargs.wpcli: - Log.debug(self, "Removing package variable of WPCLI ") - if os.path.isfile('/usr/bin/wp'): - packages = packages + ['/usr/bin/wp'] - else: - Log.warn(self, "WP-CLI is not installed with EasyEngine") - if self.app.pargs.phpmyadmin: - Log.debug(self, "Removing package variable of phpMyAdmin ") - packages = packages + ['{0}22222/htdocs/db/pma' - .format(EEVariables.ee_webroot)] - if self.app.pargs.phpredisadmin: - Log.debug(self, "Removing package variable of phpRedisAdmin ") - packages = packages + ['{0}22222/htdocs/cache/redis/phpRedisAdmin' - .format(EEVariables.ee_webroot)] - if self.app.pargs.adminer: - Log.debug(self, "Removing package variable of Adminer ") - packages = packages + ['{0}22222/htdocs/db/adminer' - .format(EEVariables.ee_webroot)] - if self.app.pargs.utils: - Log.debug(self, "Removing package variable of utils ") - packages = packages + ['{0}22222/htdocs/php/webgrind/' - .format(EEVariables.ee_webroot), - '{0}22222/htdocs/cache/opcache' - .format(EEVariables.ee_webroot), - '{0}22222/htdocs/cache/nginx/' - 'clean.php'.format(EEVariables.ee_webroot), - '{0}22222/htdocs/cache/memcache' - .format(EEVariables.ee_webroot), - '/usr/bin/pt-query-advisor', - '{0}22222/htdocs/db/anemometer' - .format(EEVariables.ee_webroot)] - - if len(packages) or len(apt_packages): - ee_prompt = input('Are you sure you to want to' - ' remove from server.' - '\nPackage configuration will remain' - ' on server after this operation.\n' - 'Any answer other than ' - '"yes" will be stop this' - ' operation : ') - - if ee_prompt == 'YES' or ee_prompt == 'yes': - if len(packages): - EEFileUtils.remove(self, packages) - EEAptGet.auto_remove(self) - - if len(apt_packages): - Log.debug(self, "Removing apt_packages") - Log.info(self, "Removing packages, please wait...") - EEAptGet.remove(self, apt_packages) - EEAptGet.auto_remove(self) - - Log.info(self, "Successfully removed packages") - - @expose(help="Purge packages") - def purge(self): - """Start purging of packages""" - apt_packages = [] - packages = [] - - # Default action for stack purge - if ((not self.app.pargs.web) and (not self.app.pargs.admin) and - (not self.app.pargs.mail) and (not self.app.pargs.nginx) and - (not self.app.pargs.php) and (not self.app.pargs.mysql) and - (not self.app.pargs.postfix) and (not self.app.pargs.wpcli) and - (not self.app.pargs.phpmyadmin) and (not self.app.pargs.hhvm) and - (not self.app.pargs.adminer) and (not self.app.pargs.utils) and - (not self.app.pargs.mailscanner) and (not self.app.pargs.all) and - (not self.app.pargs.pagespeed) and (not self.app.pargs.redis) and - (not self.app.pargs.phpredisadmin)): - self.app.pargs.web = True - self.app.pargs.admin = True - - if self.app.pargs.all: - self.app.pargs.web = True - self.app.pargs.admin = True - self.app.pargs.mail = True - - if self.app.pargs.web: - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.wpcli = True - self.app.pargs.postfix = True - - if self.app.pargs.admin: - self.app.pargs.adminer = True - self.app.pargs.phpmyadmin = True - self.app.pargs.utils = True - - if self.app.pargs.mail: - Log.debug(self, "Removing mail server packages") - apt_packages = apt_packages + EEVariables.ee_mail - apt_packages = apt_packages + EEVariables.ee_mailscanner - packages = packages + ["{0}22222/htdocs/vimbadmin" - .format(EEVariables.ee_webroot), - "{0}roundcubemail" - .format(EEVariables.ee_webroot)] - if EEShellExec.cmd_exec(self, "mysqladmin ping"): - EEMysql.execute(self, "drop database IF EXISTS vimbadmin") - EEMysql.execute(self, "drop database IF EXISTS roundcubemail") - - if self.app.pargs.mailscanner: - apt_packages = (apt_packages + EEVariables.ee_mailscanner) - - if self.app.pargs.pagespeed: - Log.debug(self, "Purge packages varible of Pagespeed") - packages = packages + ['/etc/nginx/conf.d/pagespeed.conf'] - - if self.app.pargs.nginx: - Log.debug(self, "Purge apt_packages variable of Nginx") - apt_packages = apt_packages + EEVariables.ee_nginx - if self.app.pargs.php: - Log.debug(self, "Purge apt_packages variable PHP") - apt_packages = apt_packages + EEVariables.ee_php - if self.app.pargs.hhvm: - if EEAptGet.is_installed(self, 'hhvm'): - Log.debug(self, "Purge apt_packages varible of HHVM") - apt_packages = apt_packages + EEVariables.ee_hhvm - if self.app.pargs.redis: - Log.debug(self, "Purge apt_packages variable of Redis") - apt_packages = apt_packages + EEVariables.ee_redis - if self.app.pargs.mysql: - Log.debug(self, "Purge apt_packages variable MySQL") - apt_packages = apt_packages + EEVariables.ee_mysql - packages = packages + ['/usr/bin/mysqltuner'] - if self.app.pargs.postfix: - Log.debug(self, "Purge apt_packages variable PostFix") - apt_packages = apt_packages + EEVariables.ee_postfix - if self.app.pargs.wpcli: - Log.debug(self, "Purge package variable WPCLI") - if os.path.isfile('/usr/bin/wp'): - packages = packages + ['/usr/bin/wp'] - else: - Log.warn(self, "WP-CLI is not installed with EasyEngine") - if self.app.pargs.phpmyadmin: - packages = packages + ['{0}22222/htdocs/db/pma'. - format(EEVariables.ee_webroot)] - Log.debug(self, "Purge package variable phpMyAdmin") - if self.app.pargs.phpredisadmin: - Log.debug(self, "Removing package variable of phpRedisAdmin ") - packages = packages + ['{0}22222/htdocs/cache/redis/phpRedisAdmin' - .format(EEVariables.ee_webroot)] - if self.app.pargs.adminer: - Log.debug(self, "Purge package variable Adminer") - packages = packages + ['{0}22222/htdocs/db/adminer' - .format(EEVariables.ee_webroot)] - if self.app.pargs.utils: - Log.debug(self, "Purge package variable utils") - packages = packages + ['{0}22222/htdocs/php/webgrind/' - .format(EEVariables.ee_webroot), - '{0}22222/htdocs/cache/opcache' - .format(EEVariables.ee_webroot), - '{0}22222/htdocs/cache/nginx/' - 'clean.php'.format(EEVariables.ee_webroot), - '{0}22222/htdocs/cache/memcache' - .format(EEVariables.ee_webroot), - '/usr/bin/pt-query-advisor', - '{0}22222/htdocs/db/anemometer' - .format(EEVariables.ee_webroot) - ] - - if len(packages) or len(apt_packages): - ee_prompt = input('Are you sure you to want to purge ' - 'from server ' - 'along with their configuration' - ' packages,\nAny answer other than ' - '"yes" will be stop this ' - 'operation :') - - if ee_prompt == 'YES' or ee_prompt == 'yes': - if len(apt_packages): - Log.info(self, "Purging packages, please wait...") - EEAptGet.remove(self, apt_packages, purge=True) - EEAptGet.auto_remove(self) - - if len(packages): - EEFileUtils.remove(self, packages) - EEAptGet.auto_remove(self) - - Log.info(self, "Successfully purged packages") - -def load(app): - # register the plugin class.. this only happens if the plugin is enabled - handler.register(EEStackController) - handler.register(EEStackStatusController) - handler.register(EEStackMigrateController) - handler.register(EEStackUpgradeController) - - # register a hook (function) to run after arguments are parsed. - hook.register('post_argument_parsing', ee_stack_hook) diff --git a/ee/cli/plugins/stack_migrate.py b/ee/cli/plugins/stack_migrate.py deleted file mode 100644 index 17a15123..00000000 --- a/ee/cli/plugins/stack_migrate.py +++ /dev/null @@ -1,128 +0,0 @@ -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from ee.core.mysql import EEMysql -from ee.core.logging import Log -from ee.core.variables import EEVariables -from ee.core.aptget import EEAptGet -from ee.core.shellexec import EEShellExec -from ee.core.apt_repo import EERepo -from ee.core.services import EEService -import configparser -import os - - -class EEStackMigrateController(CementBaseController): - class Meta: - label = 'migrate' - stacked_on = 'stack' - stacked_type = 'nested' - description = ('Migrate stack safely') - arguments = [ - (['--mariadb'], - dict(help="Migrate database to MariaDB", - action='store_true')), - # (['--PHP'], - # dict(help="update to html site", action='store_true')), - ] - - @expose(hide=True) - def migrate_mariadb(self): - # Backup all database - EEMysql.backupAll(self) - - # Add MariaDB repo - Log.info(self, "Adding repository for MariaDB, please wait...") - - mysql_pref = ("Package: *\nPin: origin mirror.aarnet.edu.au" - "\nPin-Priority: 1000\n") - with open('/etc/apt/preferences.d/' - 'MariaDB.pref', 'w') as mysql_pref_file: - mysql_pref_file.write(mysql_pref) - - EERepo.add(self, repo_url=EEVariables.ee_mysql_repo) - Log.debug(self, 'Adding key for {0}' - .format(EEVariables.ee_mysql_repo)) - EERepo.add_key(self, '0xcbcb082a1bb943db', - keyserver="keyserver.ubuntu.com") - - config = configparser.ConfigParser() - if os.path.exists('/etc/mysql/conf.d/my.cnf'): - config.read('/etc/mysql/conf.d/my.cnf') - else: - config.read(os.path.expanduser("~")+'/.my.cnf') - - try: - chars = config['client']['password'] - except Exception as e: - Log.error(self, "Error: process exited with error %s" - % e) - - Log.debug(self, "Pre-seeding MariaDB") - Log.debug(self, "echo \"mariadb-server-10.0 " - "mysql-server/root_password " - "password \" | " - "debconf-set-selections") - EEShellExec.cmd_exec(self, "echo \"mariadb-server-10.0 " - "mysql-server/root_password " - "password {chars}\" | " - "debconf-set-selections" - .format(chars=chars), - log=False) - Log.debug(self, "echo \"mariadb-server-10.0 " - "mysql-server/root_password_again " - "password \" | " - "debconf-set-selections") - EEShellExec.cmd_exec(self, "echo \"mariadb-server-10.0 " - "mysql-server/root_password_again " - "password {chars}\" | " - "debconf-set-selections" - .format(chars=chars), - log=False) - - # Install MariaDB - apt_packages = EEVariables.ee_mysql - - # If PHP is installed then install php5-mysql - if EEAptGet.is_installed(self, "php5-fpm"): - apt_packages = apt_packages + ["php5-mysql"] - - # If mail server is installed then install dovecot-sql and postfix-sql - if EEAptGet.is_installed(self, "dovecot-core"): - apt_packages = apt_packages + ["dovecot-mysql", "postfix-mysql", - "libclass-dbi-mysql-perl"] - - Log.info(self, "Updating apt-cache, please wait...") - EEAptGet.update(self) - Log.info(self, "Installing MariaDB, please wait...") - EEAptGet.remove(self, ["mysql-common", "libmysqlclient18"]) - EEAptGet.auto_remove(self) - EEAptGet.install(self, apt_packages) - - # Restart dovecot and postfix if installed - if EEAptGet.is_installed(self, "dovecot-core"): - EEService.restart_service(self, 'dovecot') - EEService.restart_service(self, 'postfix') - - @expose(hide=True) - def default(self): - if ((not self.app.pargs.mariadb)): - self.app.args.print_help() - if self.app.pargs.mariadb: - if EEVariables.ee_mysql_host is not "localhost": - Log.error(self, "Remote MySQL found, EasyEngine will not " - "install MariaDB") - - if EEShellExec.cmd_exec(self, "mysqladmin ping") and (not - EEAptGet.is_installed(self, 'mariadb-server')): - - Log.info(self, "If your database size is big, " - "migration may take some time.") - Log.info(self, "During migration non nginx-cached parts of " - "your site may remain down") - start_migrate = input("Type \"mariadb\" to continue:") - if start_migrate != "mariadb": - Log.error(self, "Not starting migration") - self.migrate_mariadb() - else: - Log.error(self, "Your current MySQL is not alive or " - "you allready installed MariaDB") diff --git a/ee/cli/plugins/stack_services.py b/ee/cli/plugins/stack_services.py deleted file mode 100644 index 75b53646..00000000 --- a/ee/cli/plugins/stack_services.py +++ /dev/null @@ -1,374 +0,0 @@ -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from ee.core.services import EEService -from ee.core.logging import Log -from ee.core.variables import EEVariables -from ee.core.aptget import EEAptGet - - -class EEStackStatusController(CementBaseController): - class Meta: - label = 'stack_services' - stacked_on = 'stack' - stacked_type = 'embedded' - description = 'Get status of stack' - arguments = [ - (['--memcache'], - dict(help='start/stop/restart memcache', action='store_true')), - (['--dovecot'], - dict(help='start/stop/restart dovecot', action='store_true')), - ] - - @expose(help="Start stack services") - def start(self): - """Start services""" - services = [] - if not (self.app.pargs.nginx or self.app.pargs.php - or self.app.pargs.mysql or self.app.pargs.postfix - or self.app.pargs.hhvm or self.app.pargs.memcache - or self.app.pargs.dovecot or self.app.pargs.redis): - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.postfix = True - - if self.app.pargs.nginx: - if EEAptGet.is_installed(self, 'nginx-custom'): - services = services + ['nginx'] - else: - Log.info(self, "Nginx is not installed") - - if self.app.pargs.php: - if EEAptGet.is_installed(self, 'php5-fpm'): - services = services + ['php5-fpm'] - else: - Log.info(self, "PHP5-FPM is not installed") - - if self.app.pargs.mysql: - if ((EEVariables.ee_mysql_host is "localhost") or - (EEVariables.ee_mysql_host is "127.0.0.1")): - if (EEAptGet.is_installed(self, 'mysql-server') or - EEAptGet.is_installed(self, 'percona-server-server-5.6') or - EEAptGet.is_installed(self, 'mariadb-server')): - services = services + ['mysql'] - else: - Log.info(self, "MySQL is not installed") - else: - Log.warn(self, "Remote MySQL found, " - "Unable to check MySQL service status") - - if self.app.pargs.postfix: - if EEAptGet.is_installed(self, 'postfix'): - services = services + ['postfix'] - else: - Log.info(self, "Postfix is not installed") - - if self.app.pargs.hhvm: - if EEAptGet.is_installed(self, 'hhvm'): - services = services + ['hhvm'] - else: - Log.info(self, "HHVM is not installed") - if self.app.pargs.memcache: - if EEAptGet.is_installed(self, 'memcached'): - services = services + ['memcached'] - else: - Log.info(self, "Memcache is not installed") - - if self.app.pargs.dovecot: - if EEAptGet.is_installed(self, 'dovecot-core'): - services = services + ['dovecot'] - else: - Log.info(self, "Mail server is not installed") - - if self.app.pargs.redis: - if EEAptGet.is_installed(self, 'redis-server'): - services = services + ['redis-server'] - else: - Log.info(self, "Redis server is not installed") - - for service in services: - Log.debug(self, "Starting service: {0}".format(service)) - EEService.start_service(self, service) - - @expose(help="Stop stack services") - def stop(self): - """Stop services""" - services = [] - if not (self.app.pargs.nginx or self.app.pargs.php - or self.app.pargs.mysql or self.app.pargs.postfix - or self.app.pargs.hhvm or self.app.pargs.memcache - or self.app.pargs.dovecot or self.app.pargs.redis): - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.postfix = True - - if self.app.pargs.nginx: - if EEAptGet.is_installed(self, 'nginx-custom'): - services = services + ['nginx'] - else: - Log.info(self, "Nginx is not installed") - - if self.app.pargs.php: - if EEAptGet.is_installed(self, 'php5-fpm'): - services = services + ['php5-fpm'] - else: - Log.info(self, "PHP5-FPM is not installed") - - if self.app.pargs.mysql: - if ((EEVariables.ee_mysql_host is "localhost") or - (EEVariables.ee_mysql_host is "127.0.0.1")): - if (EEAptGet.is_installed(self, 'mysql-server') or - EEAptGet.is_installed(self, 'percona-server-server-5.6') or - EEAptGet.is_installed(self, 'mariadb-server')): - services = services + ['mysql'] - else: - Log.info(self, "MySQL is not installed") - else: - Log.warn(self, "Remote MySQL found, " - "Unable to check MySQL service status") - - if self.app.pargs.postfix: - if EEAptGet.is_installed(self, 'postfix'): - services = services + ['postfix'] - else: - Log.info(self, "Postfix is not installed") - - if self.app.pargs.hhvm: - if EEAptGet.is_installed(self, 'hhvm'): - services = services + ['hhvm'] - else: - Log.info(self, "HHVM is not installed") - if self.app.pargs.memcache: - if EEAptGet.is_installed(self, 'memcached'): - services = services + ['memcached'] - else: - Log.info(self, "Memcache is not installed") - - if self.app.pargs.dovecot: - if EEAptGet.is_installed(self, 'dovecot-core'): - services = services + ['dovecot'] - else: - Log.info(self, "Mail server is not installed") - - if self.app.pargs.redis: - if EEAptGet.is_installed(self, 'redis-server'): - services = services + ['redis-server'] - else: - Log.info(self, "Redis server is not installed") - - for service in services: - Log.debug(self, "Stopping service: {0}".format(service)) - EEService.stop_service(self, service) - - @expose(help="Restart stack services") - def restart(self): - """Restart services""" - services = [] - if not (self.app.pargs.nginx or self.app.pargs.php - or self.app.pargs.mysql or self.app.pargs.postfix - or self.app.pargs.hhvm or self.app.pargs.memcache - or self.app.pargs.dovecot or self.app.pargs.redis): - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.postfix = True - - if self.app.pargs.nginx: - if EEAptGet.is_installed(self, 'nginx-custom'): - services = services + ['nginx'] - else: - Log.info(self, "Nginx is not installed") - - if self.app.pargs.php: - if EEAptGet.is_installed(self, 'php5-fpm'): - services = services + ['php5-fpm'] - else: - Log.info(self, "PHP5-FPM is not installed") - - if self.app.pargs.mysql: - if ((EEVariables.ee_mysql_host is "localhost") or - (EEVariables.ee_mysql_host is "127.0.0.1")): - if (EEAptGet.is_installed(self, 'mysql-server') or - EEAptGet.is_installed(self, 'percona-server-server-5.6') or - EEAptGet.is_installed(self, 'mariadb-server')): - services = services + ['mysql'] - else: - Log.info(self, "MySQL is not installed") - else: - Log.warn(self, "Remote MySQL found, " - "Unable to check MySQL service status") - - if self.app.pargs.postfix: - if EEAptGet.is_installed(self, 'postfix'): - services = services + ['postfix'] - else: - Log.info(self, "Postfix is not installed") - - if self.app.pargs.hhvm: - if EEAptGet.is_installed(self, 'hhvm'): - services = services + ['hhvm'] - else: - Log.info(self, "HHVM is not installed") - if self.app.pargs.memcache: - if EEAptGet.is_installed(self, 'memcached'): - services = services + ['memcached'] - else: - Log.info(self, "Memcache is not installed") - - if self.app.pargs.dovecot: - if EEAptGet.is_installed(self, 'dovecot-core'): - services = services + ['dovecot'] - else: - Log.info(self, "Mail server is not installed") - - if self.app.pargs.redis: - if EEAptGet.is_installed(self, 'redis-server'): - services = services + ['redis-server'] - else: - Log.info(self, "Redis server is not installed") - - for service in services: - Log.debug(self, "Restarting service: {0}".format(service)) - EEService.restart_service(self, service) - - @expose(help="Get stack status") - def status(self): - """Status of services""" - services = [] - if not (self.app.pargs.nginx or self.app.pargs.php - or self.app.pargs.mysql or self.app.pargs.postfix - or self.app.pargs.hhvm or self.app.pargs.memcache - or self.app.pargs.dovecot or self.app.pargs.redis): - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.postfix = True - self.app.pargs.hhvm = True - - if self.app.pargs.nginx: - if EEAptGet.is_installed(self, 'nginx-custom'): - services = services + ['nginx'] - else: - Log.info(self, "Nginx is not installed") - - if self.app.pargs.php: - if EEAptGet.is_installed(self, 'php5-fpm'): - services = services + ['php5-fpm'] - else: - Log.info(self, "PHP5-FPM is not installed") - - if self.app.pargs.mysql: - if ((EEVariables.ee_mysql_host is "localhost") or - (EEVariables.ee_mysql_host is "127.0.0.1")): - if (EEAptGet.is_installed(self, 'mysql-server') or - EEAptGet.is_installed(self, 'percona-server-server-5.6') or - EEAptGet.is_installed(self, 'mariadb-server')): - services = services + ['mysql'] - else: - Log.info(self, "MySQL is not installed") - else: - Log.warn(self, "Remote MySQL found, " - "Unable to check MySQL service status") - - if self.app.pargs.postfix: - if EEAptGet.is_installed(self, 'postfix'): - services = services + ['postfix'] - else: - Log.info(self, "Postfix is not installed") - - if self.app.pargs.hhvm: - if EEAptGet.is_installed(self, 'hhvm'): - services = services + ['hhvm'] - else: - Log.info(self, "HHVM is not installed") - if self.app.pargs.memcache: - if EEAptGet.is_installed(self, 'memcached'): - services = services + ['memcached'] - else: - Log.info(self, "Memcache is not installed") - - if self.app.pargs.dovecot: - if EEAptGet.is_installed(self, 'dovecot-core'): - services = services + ['dovecot'] - else: - Log.info(self, "Mail server is not installed") - - if self.app.pargs.redis: - if EEAptGet.is_installed(self, 'redis-server'): - services = services + ['redis-server'] - else: - Log.info(self, "Redis server is not installed") - - for service in services: - if EEService.get_service_status(self, service): - Log.info(self, "{0:10}: {1}".format(service, "Running")) - - @expose(help="Reload stack services") - def reload(self): - """Reload service""" - services = [] - if not (self.app.pargs.nginx or self.app.pargs.php - or self.app.pargs.mysql or self.app.pargs.postfix - or self.app.pargs.hhvm or self.app.pargs.memcache - or self.app.pargs.dovecot or self.app.pargs.redis): - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.postfix = True - - if self.app.pargs.nginx: - if EEAptGet.is_installed(self, 'nginx-custom'): - services = services + ['nginx'] - else: - Log.info(self, "Nginx is not installed") - - if self.app.pargs.php: - if EEAptGet.is_installed(self, 'php5-fpm'): - services = services + ['php5-fpm'] - else: - Log.info(self, "PHP5-FPM is not installed") - - if self.app.pargs.mysql: - if ((EEVariables.ee_mysql_host is "localhost") or - (EEVariables.ee_mysql_host is "127.0.0.1")): - if (EEAptGet.is_installed(self, 'mysql-server') or - EEAptGet.is_installed(self, 'percona-server-server-5.6') or - EEAptGet.is_installed(self, 'mariadb-server')): - services = services + ['mysql'] - else: - Log.info(self, "MySQL is not installed") - else: - Log.warn(self, "Remote MySQL found, " - "Unable to check MySQL service status") - - if self.app.pargs.postfix: - if EEAptGet.is_installed(self, 'postfix'): - services = services + ['postfix'] - else: - Log.info(self, "Postfix is not installed") - - if self.app.pargs.hhvm: - Log.info(self, "HHVM does not support to reload") - - if self.app.pargs.memcache: - if EEAptGet.is_installed(self, 'memcached'): - services = services + ['memcached'] - else: - Log.info(self, "Memcache is not installed") - - if self.app.pargs.dovecot: - if EEAptGet.is_installed(self, 'dovecot-core'): - services = services + ['dovecot'] - else: - Log.info(self, "Mail server is not installed") - - if self.app.pargs.redis: - if EEAptGet.is_installed(self, 'redis-server'): - services = services + ['redis-server'] - else: - Log.info(self, "Redis server is not installed") - - for service in services: - Log.debug(self, "Reloading service: {0}".format(service)) - EEService.reload_service(self, service) diff --git a/ee/cli/plugins/stack_upgrade.py b/ee/cli/plugins/stack_upgrade.py deleted file mode 100644 index 7f2488c0..00000000 --- a/ee/cli/plugins/stack_upgrade.py +++ /dev/null @@ -1,244 +0,0 @@ -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from ee.core.logging import Log -from ee.core.variables import EEVariables -from ee.core.aptget import EEAptGet -from ee.core.apt_repo import EERepo -from ee.core.services import EEService -from ee.core.fileutils import EEFileUtils -from ee.core.shellexec import EEShellExec -from ee.core.git import EEGit -from ee.core.download import EEDownload -import configparser -import os - - -class EEStackUpgradeController(CementBaseController): - class Meta: - label = 'upgrade' - stacked_on = 'stack' - stacked_type = 'nested' - description = ('Upgrade stack safely') - arguments = [ - (['--all'], - dict(help='Upgrade all stack', action='store_true')), - (['--web'], - dict(help='Upgrade web stack', action='store_true')), - (['--admin'], - dict(help='Upgrade admin tools stack', action='store_true')), - (['--mail'], - dict(help='Upgrade mail server stack', action='store_true')), - (['--mailscanner'], - dict(help='Upgrade mail scanner stack', action='store_true')), - (['--nginx'], - dict(help='Upgrade Nginx stack', action='store_true')), - (['--php'], - dict(help='Upgrade PHP stack', action='store_true')), - (['--mysql'], - dict(help='Upgrade MySQL stack', action='store_true')), - (['--hhvm'], - dict(help='Upgrade HHVM stack', action='store_true')), - (['--postfix'], - dict(help='Upgrade Postfix stack', action='store_true')), - (['--wpcli'], - dict(help='Upgrade WPCLI', action='store_true')), - (['--redis'], - dict(help='Upgrade Redis', action='store_true')), - (['--php56'], - dict(help="Upgrade to PHP5.6 from PHP5.5", - action='store_true')), - (['--no-prompt'], - dict(help="Upgrade Packages without any prompt", - action='store_true')), - ] - - @expose(hide=True) - def upgrade_php56(self): - if EEVariables.ee_platform_distro == "ubuntu": - if os.path.isfile("/etc/apt/sources.list.d/ondrej-php5-5_6-{0}." - "list".format(EEVariables.ee_platform_codename)): - Log.error(self, "Unable to find PHP 5.5") - else: - if not(os.path.isfile(EEVariables.ee_repo_file_path) and - EEFileUtils.grep(self, EEVariables.ee_repo_file_path, - "php55")): - Log.error(self, "Unable to find PHP 5.5") - - Log.info(self, "During PHP update process non nginx-cached" - " parts of your site may remain down") - - # Check prompt - if (not self.app.pargs.no_prompt): - start_upgrade = input("Do you want to continue:[y/N]") - if start_upgrade != "Y" and start_upgrade != "y": - Log.error(self, "Not starting PHP package update") - - if EEVariables.ee_platform_distro == "ubuntu": - EERepo.remove(self, ppa="ppa:ondrej/php5") - EERepo.add(self, ppa=EEVariables.ee_php_repo) - else: - EEAptGet.remove(self, ["php5-xdebug"]) - EEFileUtils.searchreplace(self, EEVariables.ee_repo_file_path, - "php55", "php56") - - Log.info(self, "Updating apt-cache, please wait...") - EEAptGet.update(self) - Log.info(self, "Installing packages, please wait ...") - EEAptGet.install(self, EEVariables.ee_php) - - if EEVariables.ee_platform_distro == "debian": - EEShellExec.cmd_exec(self, "pecl install xdebug") - - with open("/etc/php5/mods-available/xdebug.ini", - encoding='utf-8', mode='a') as myfile: - myfile.write(";zend_extension=/usr/lib/php5/20131226/" - "xdebug.so\n") - - EEFileUtils.create_symlink(self, ["/etc/php5/mods-available/" - "xdebug.ini", "/etc/php5/fpm/conf.d" - "/20-xedbug.ini"]) - - Log.info(self, "Successfully upgraded from PHP 5.5 to PHP 5.6") - - @expose(hide=True) - def default(self): - # All package update - if ((not self.app.pargs.php56)): - - apt_packages = [] - packages = [] - - if ((not self.app.pargs.web) and (not self.app.pargs.nginx) and - (not self.app.pargs.php) and (not self.app.pargs.mysql) and - (not self.app.pargs.postfix) and (not self.app.pargs.hhvm) and - (not self.app.pargs.mailscanner) and (not self.app.pargs.all) - and (not self.app.pargs.wpcli) and (not self.app.pargs.redis)): - self.app.pargs.web = True - - if self.app.pargs.all: - self.app.pargs.web = True - self.app.pargs.mail = True - - if self.app.pargs.web: - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.postfix = True - self.app.pargs.wpcli = True - - if self.app.pargs.mail: - self.app.pargs.nginx = True - self.app.pargs.php = True - self.app.pargs.mysql = True - self.app.pargs.wpcli = True - self.app.pargs.postfix = True - - if EEAptGet.is_installed(self, 'dovecot-core'): - apt_packages = apt_packages + EEVariables.ee_mail - self.app.pargs.mailscanner = True - else: - Log.info(self, "Mail server is not installed") - - if self.app.pargs.nginx: - if EEAptGet.is_installed(self, 'nginx-custom'): - apt_packages = apt_packages + EEVariables.ee_nginx - else: - Log.info(self, "Nginx is not already installed") - - if self.app.pargs.php: - if EEAptGet.is_installed(self, 'php5-fpm'): - apt_packages = apt_packages + EEVariables.ee_php - else: - Log.info(self, "PHP is not installed") - - if self.app.pargs.hhvm: - if EEAptGet.is_installed(self, 'hhvm'): - apt_packages = apt_packages + EEVariables.ee_hhvm - else: - Log.info(self, "HHVM is not installed") - - if self.app.pargs.mysql: - if EEAptGet.is_installed(self, 'mariadb-server'): - apt_packages = apt_packages + EEVariables.ee_mysql - else: - Log.info(self, "MariaDB is not installed") - - if self.app.pargs.postfix: - if EEAptGet.is_installed(self, 'postfix'): - apt_packages = apt_packages + EEVariables.ee_postfix - else: - Log.info(self, "Postfix is not installed") - - if self.app.pargs.redis: - if EEAptGet.is_installed(self, 'redis-server'): - apt_packages = apt_packages + EEVariables.ee_redis - else: - Log.info(self, "Redis is not installed") - - if self.app.pargs.wpcli: - if os.path.isfile('/usr/bin/wp'): - packages = packages + [["https://github.com/wp-cli/wp-cli/" - "releases/download/v{0}/" - "wp-cli-{0}.phar" - "".format(EEVariables.ee_wp_cli), - "/usr/bin/wp", - "WP-CLI"]] - else: - Log.info(self, "WPCLI is not installed with EasyEngine") - - if self.app.pargs.mailscanner: - if EEAptGet.is_installed(self, 'amavisd-new'): - apt_packages = (apt_packages + EEVariables.ee_mailscanner) - else: - Log.info(self, "MailScanner is not installed") - - if len(packages) or len(apt_packages): - - Log.info(self, "During package update process non nginx-cached" - " parts of your site may remain down") - # Check prompt - if (not self.app.pargs.no_prompt): - start_upgrade = input("Do you want to continue:[y/N]") - if start_upgrade != "Y" and start_upgrade != "y": - Log.error(self, "Not starting package update") - - Log.info(self, "Updating packages, please wait...") - if len(apt_packages): - # apt-get update - EEAptGet.update(self) - # Update packages - EEAptGet.install(self, apt_packages) - - # Post Actions after package updates - if set(EEVariables.ee_nginx).issubset(set(apt_packages)): - EEService.restart_service(self, 'nginx') - if set(EEVariables.ee_php).issubset(set(apt_packages)): - EEService.restart_service(self, 'php5-fpm') - if set(EEVariables.ee_hhvm).issubset(set(apt_packages)): - EEService.restart_service(self, 'hhvm') - if set(EEVariables.ee_postfix).issubset(set(apt_packages)): - EEService.restart_service(self, 'postfix') - if set(EEVariables.ee_mysql).issubset(set(apt_packages)): - EEService.restart_service(self, 'hhvm') - if set(EEVariables.ee_mail).issubset(set(apt_packages)): - EEService.restart_service(self, 'dovecot') - if set(EEVariables.ee_redis).issubset(set(apt_packages)): - EEService.restart_service(self, 'redis-server') - - if len(packages): - if self.app.pargs.wpcli: - EEFileUtils.remove(self,['/usr/bin/wp']) - - Log.debug(self, "Downloading following: {0}".format(packages)) - EEDownload.download(self, packages) - - if self.app.pargs.wpcli: - EEFileUtils.chmod(self, "/usr/bin/wp", 0o775) - - Log.info(self, "Successfully updated packages") - - # PHP 5.6 to 5.6 - elif (self.app.pargs.php56): - self.upgrade_php56() - else: - self.app.args.print_help() diff --git a/ee/cli/plugins/sync.py b/ee/cli/plugins/sync.py deleted file mode 100644 index dd89dfed..00000000 --- a/ee/cli/plugins/sync.py +++ /dev/null @@ -1,95 +0,0 @@ -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from ee.core.fileutils import EEFileUtils -from ee.cli.plugins.sitedb import * -from ee.core.mysql import * -from ee.core.logging import Log - - -def ee_sync_hook(app): - # do something with the ``app`` object here. - pass - - -class EESyncController(CementBaseController): - class Meta: - label = 'sync' - stacked_on = 'base' - stacked_type = 'nested' - description = 'synchronize EasyEngine database' - - @expose(hide=True) - def default(self): - self.sync() - - @expose(hide=True) - def sync(self): - """ - 1. reads database information from wp/ee-config.php - 2. updates records into ee database accordingly. - """ - Log.info(self, "Synchronizing ee database, please wait...") - sites = getAllsites(self) - if not sites: - pass - for site in sites: - if site.site_type in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']: - ee_site_webroot = site.site_path - # Read config files - configfiles = glob.glob(ee_site_webroot + '/*-config.php') - - #search for wp-config.php inside htdocs/ - if not configfiles: - Log.debug(self, "Config files not found in {0}/ " - .format(ee_site_webroot)) - if site.site_type != 'mysql': - Log.debug(self, "Searching wp-config.php in {0}/htdocs/ " - .format(ee_site_webroot)) - configfiles = glob.glob(ee_site_webroot + '/htdocs/wp-config.php') - - if configfiles: - if EEFileUtils.isexist(self, configfiles[0]): - ee_db_name = (EEFileUtils.grep(self, configfiles[0], - 'DB_NAME').split(',')[1] - .split(')')[0].strip().replace('\'', '')) - ee_db_user = (EEFileUtils.grep(self, configfiles[0], - 'DB_USER').split(',')[1] - .split(')')[0].strip().replace('\'', '')) - ee_db_pass = (EEFileUtils.grep(self, configfiles[0], - 'DB_PASSWORD').split(',')[1] - .split(')')[0].strip().replace('\'', '')) - ee_db_host = (EEFileUtils.grep(self, configfiles[0], - 'DB_HOST').split(',')[1] - .split(')')[0].strip().replace('\'', '')) - - # Check if database really exist - try: - if not EEMysql.check_db_exists(self, ee_db_name): - # Mark it as deleted if not exist - ee_db_name = 'deleted' - ee_db_user = 'deleted' - ee_db_pass = 'deleted' - except StatementExcecutionError as e: - Log.debug(self, str(e)) - except Exception as e: - Log.debug(self, str(e)) - - if site.db_name != ee_db_name: - # update records if any mismatch found - Log.debug(self, "Updating ee db record for {0}" - .format(site.sitename)) - updateSiteInfo(self, site.sitename, - db_name=ee_db_name, - db_user=ee_db_user, - db_password=ee_db_pass, - db_host=ee_db_host) - else: - Log.debug(self, "Config files not found for {0} " - .format(site.sitename)) - - -def load(app): - # register the plugin class.. this only happens if the plugin is enabled - handler.register(EESyncController) - # register a hook (function) to run after arguments are parsed. - hook.register('post_argument_parsing', ee_sync_hook) diff --git a/ee/cli/plugins/update.py b/ee/cli/plugins/update.py deleted file mode 100644 index 8680d68e..00000000 --- a/ee/cli/plugins/update.py +++ /dev/null @@ -1,45 +0,0 @@ -from cement.core.controller import CementBaseController, expose -from cement.core import handler, hook -from ee.core.download import EEDownload -from ee.core.logging import Log -import time -import os - - -def ee_update_hook(app): - # do something with the ``app`` object here. - pass - - -class EEUpdateController(CementBaseController): - class Meta: - label = 'ee_update' - stacked_on = 'base' - aliases = ['update'] - aliases_only = True - stacked_type = 'nested' - description = ('update EasyEngine to latest version') - usage = "ee update" - - @expose(hide=True) - def default(self): - filename = "eeupdate" + time.strftime("%Y%m%d-%H%M%S") - EEDownload.download(self, [["http://rt.cx/eeup", - "/tmp/{0}".format(filename), - "update script"]]) - try: - Log.info(self, "updating EasyEngine, please wait...") - os.system("bash /tmp/{0}".format(filename)) - except OSError as e: - Log.debug(self, str(e)) - Log.error(self, "EasyEngine update failed !") - except Exception as e: - Log.debug(self, str(e)) - Log.error(self, "EasyEngine update failed !") - - -def load(app): - # register the plugin class.. this only happens if the plugin is enabled - handler.register(EEUpdateController) - # register a hook (function) to run after arguments are parsed. - hook.register('post_argument_parsing', ee_update_hook) diff --git a/ee/cli/templates/15-content_filter_mode.mustache b/ee/cli/templates/15-content_filter_mode.mustache deleted file mode 100644 index 6fd8f218..00000000 --- a/ee/cli/templates/15-content_filter_mode.mustache +++ /dev/null @@ -1,27 +0,0 @@ -use strict; - -# You can modify this file to re-enable SPAM checking through spamassassin -# and to re-enable antivirus checking. - -# -# Default antivirus checking mode -# Please note, that anti-virus checking is DISABLED by -# default. -# If You wish to enable it, please uncomment the following lines: - - -@bypass_virus_checks_maps = ( - \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); - - -# -# Default SPAM checking mode -# Please note, that anti-spam checking is DISABLED by -# default. -# If You wish to enable it, please uncomment the following lines: - - -@bypass_spam_checks_maps = ( - \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); - -1; # ensure a defined return diff --git a/ee/cli/templates/22222.mustache b/ee/cli/templates/22222.mustache deleted file mode 100644 index 3893b90e..00000000 --- a/ee/cli/templates/22222.mustache +++ /dev/null @@ -1,64 +0,0 @@ -# EasyEngine admin NGINX CONFIGURATION - -server { - - listen 22222 default_server ssl spdy; - - access_log /var/log/nginx/22222.access.log rt_cache; - error_log /var/log/nginx/22222.error.log; - - ssl_certificate {{webroot}}22222/cert/22222.crt; - ssl_certificate_key {{webroot}}22222/cert/22222.key; - - # Force HTTP to HTTPS - error_page 497 =200 https://$host:22222$request_uri; - - root {{webroot}}22222/htdocs; - index index.php index.htm index.html; - - # Turn on directory listing - autoindex on; - - # HTTP Authentication on port 22222 - include common/acl.conf; - - location / { - try_files $uri $uri/ /index.php?$args; - } - - # Display menu at location /fpm/status/ - location = /fpm/status/ {} - - location ~ /fpm/status/(.*) { - try_files $uri =404; - include fastcgi_params; - fastcgi_param SCRIPT_NAME /status; - fastcgi_pass $1; - } - - location ~ \.php$ { - try_files $uri =404; - include fastcgi_params; - fastcgi_pass php; - } - - # ViMbAdmin Rules - location = /vimbadmin/ { - return 301 $scheme://$host:22222/vimbadmin/public/; - } - - location ~* \.(js|css|jpg|gif|png)$ { - root {{webroot}}22222/htdocs/; - } - - location ~* /vimbadmin/public/(.*)/(.*) { - root {{webroot}}22222/htdocs/vimbadmin/public; - try_files $uri $uri/ /vimbadmin/public/index.php?$args; - } - - location ~* /vimbadmin/public/(.*) { - root {{webroot}}22222/htdocs/vimbadmin/public; - try_files $uri $uri/ /vimbadmin/public/index.php?$args; - } - -} diff --git a/ee/cli/templates/50-user.mustache b/ee/cli/templates/50-user.mustache deleted file mode 100644 index 0cee70fb..00000000 --- a/ee/cli/templates/50-user.mustache +++ /dev/null @@ -1,17 +0,0 @@ -use strict; -$sa_spam_subject_tag = undef; -$spam_quarantine_to = undef; -$sa_tag_level_deflt = undef; - -# Prevent spams from automatically rejected by mail-server -$final_spam_destiny = D_PASS; - -# We need to provide list of domains for which filtering need to be done -@lookup_sql_dsn = ( -['DBI:mysql:database=vimbadmin;host={{host}};port=3306', -'vimbadmin', -'{{password}}']); - -$sql_select_policy = 'SELECT domain FROM domain WHERE CONCAT("@",domain) IN (%k)'; - -1; # ensure a defined return diff --git a/ee/cli/templates/__init__.py b/ee/cli/templates/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ee/cli/templates/acl.mustache b/ee/cli/templates/acl.mustache deleted file mode 100644 index 122675f9..00000000 --- a/ee/cli/templates/acl.mustache +++ /dev/null @@ -1,8 +0,0 @@ -# EasyEngine (ee) protect locations using -# HTTP authentication || IP address -satisfy any; -auth_basic "Restricted Area"; -auth_basic_user_file htpasswd-ee; -# Allowed IP Address List -allow 127.0.0.1; -deny all; diff --git a/ee/cli/templates/anemometer.mustache b/ee/cli/templates/anemometer.mustache deleted file mode 100644 index 7b85a6a7..00000000 --- a/ee/cli/templates/anemometer.mustache +++ /dev/null @@ -1,255 +0,0 @@ - '{{host}}', - 'port' => '{{port}}', - 'db' => 'slow_query_log', - 'user' => '{{user}}', - 'password' => '{{password}}', - 'tables' => array( - 'global_query_review' => 'fact', - 'global_query_review_history' => 'dimension' - ), - 'source_type' => 'slow_query_log' -); - -$conf['default_report_action'] = 'report'; - -$conf['reviewers'] = array( 'dba1','dba2'); -$conf['review_types'] = array( 'good', 'bad', 'ticket-created', 'needs-fix', 'fixed', 'needs-analysis', 'review-again'); - -$conf['history_defaults'] = array( - 'output' => 'table', - 'fact-group' => 'date', - 'fact-order' => 'date DESC', - 'fact-limit' => '90', - 'dimension-ts_min_start' => date("Y-m-d H:i:s", strtotime( '-90 day')), - 'dimension-ts_min_end' => date("Y-m-d H:i:s"), - 'table_fields' => array('date', 'index_ratio','query_time_avg','rows_sent_avg','ts_cnt','Query_time_sum','Lock_time_sum','Rows_sent_sum','Rows_examined_sum','Tmp_table_sum','Filesort_sum','Full_scan_sum') -); - -$conf['report_defaults'] = array( - 'fact-group' => 'checksum', - 'fact-order' => 'Query_time_sum DESC', - 'fact-limit' => '20', - 'dimension-ts_min_start' => date("Y-m-d H:i:s", strtotime( '-1 day')), - 'dimension-ts_min_end' => date("Y-m-d H:i:s"), - 'table_fields' => array('checksum','snippet', 'index_ratio','query_time_avg','rows_sent_avg','ts_cnt','Query_time_sum','Lock_time_sum','Rows_sent_sum','Rows_examined_sum','Tmp_table_sum','Filesort_sum','Full_scan_sum'), - 'dimension-pivot-hostname_max' => null -); - -$conf['graph_defaults'] = array( - 'fact-group' => 'minute_ts', - 'fact-order' => 'minute_ts', - 'fact-limit' => '', - 'dimension-ts_min_start' => date("Y-m-d H:i:s", strtotime( '-7 day')), - 'dimension-ts_min_end' => date("Y-m-d H:i:s"), - 'table_fields' => array('minute_ts'), - 'plot_field' => 'Query_time_sum', -); - -$conf['report_defaults']['performance_schema'] = array( - 'fact-order' => 'SUM_TIMER_WAIT DESC', - 'fact-limit' => '20', - 'fact-group' => 'DIGEST', - 'table_fields' => array( 'DIGEST', 'snippet', 'index_ratio', 'COUNT_STAR', 'SUM_TIMER_WAIT', 'SUM_LOCK_TIME','SUM_ROWS_AFFECTED','SUM_ROWS_SENT','SUM_ROWS_EXAMINED','SUM_CREATED_TMP_TABLES','SUM_SORT_SCAN','SUM_NO_INDEX_USED' ) -); - -$conf['history_defaults']['performance_schema'] = array( - 'fact-order' => 'SUM_TIMER_WAIT DESC', - 'fact-limit' => '20', - 'fact-group' => 'DIGEST', - 'table_fields' => array( 'DIGEST', 'index_ratio', 'COUNT_STAR', 'SUM_LOCK_TIME','SUM_ROWS_AFFECTED','SUM_ROWS_SENT','SUM_ROWS_EXAMINED','SUM_CREATED_TMP_TABLES','SUM_SORT_SCAN','SUM_NO_INDEX_USED' ) -); - -$conf['report_defaults']['performance_schema_history'] = array( - 'fact-group' => 'DIGEST', - 'fact-order' => 'SUM_TIMER_WAIT DESC', - 'fact-limit' => '20', - 'dimension-FIRST_SEEN_start' => date("Y-m-d H:i:s", strtotime( '-1 day')), - 'dimension-FIRST_SEEN_end' => date("Y-m-d H:i:s"), - 'table_fields' => array( 'DIGEST', 'snippet', 'index_ratio', 'COUNT_STAR', 'SUM_LOCK_TIME','SUM_ROWS_AFFECTED','SUM_ROWS_SENT','SUM_ROWS_EXAMINED','SUM_CREATED_TMP_TABLES','SUM_SORT_SCAN','SUM_NO_INDEX_USED' ) -); - -$conf['graph_defaults']['performance_schema_history'] = array( - 'fact-group' => 'minute_ts', - 'fact-order' => 'minute_ts', - 'fact-limit' => '', - 'dimension-FIRST_SEEN_start' => date("Y-m-d H:i:s", strtotime( '-7 day')), - 'dimension-FIRST_SEEN_end' => date("Y-m-d H:i:s"), - 'table_fields' => array('minute_ts'), - 'plot_field' => 'SUM_TIMER_WAIT', - 'dimension-pivot-hostname_max' => null -); - -$conf['history_defaults']['performance_schema_history'] = array( - 'output' => 'table', - 'fact-group' => 'date', - 'fact-order' => 'date DESC', - 'fact-limit' => '90', - 'dimension-FIRST_SEEN_start' => date("Y-m-d H:i:s", strtotime( '-90 day')), - 'dimension-FIRST_SEEN_end' => date("Y-m-d H:i:s"), - 'table_fields' => array( 'date', 'snippet', 'index_ratio', 'COUNT_STAR', 'SUM_LOCK_TIME','SUM_ROWS_AFFECTED','SUM_ROWS_SENT','SUM_ROWS_EXAMINED','SUM_CREATED_TMP_TABLES','SUM_SORT_SCAN','SUM_NO_INDEX_USED' ) -); -$conf['plugins'] = array( - - 'visual_explain' => '/usr/bin/pt-visual-explain', - 'query_advisor' => '/usr/bin/pt-query-advisor', - - 'show_create' => true, - 'show_status' => true, - - 'explain' => function ($sample) { - $conn = array(); - - if (!array_key_exists('hostname_max',$sample) or strlen($sample['hostname_max']) < 5) - { - return; - } - - $pos = strpos($sample['hostname_max'], ':'); - if ($pos === false) - { - $conn['port'] = 3306; - $conn['host'] = $sample['hostname_max']; - } - else - { - $parts = preg_split("/:/", $sample['hostname_max']); - $conn['host'] = $parts[0]; - $conn['port'] = $parts[1]; - } - - $conn['db'] = 'mysql'; - if ($sample['db_max'] != '') - { - $conn['db'] = $sample['db_max']; - } - - $conn['user'] = '{{user}}'; - $conn['password'] = '{{password}}'; - - return $conn; - }, -); - -$conf['reports']['slow_query_log'] = array( - 'join' => array ( - 'dimension' => 'USING (`checksum`)' - ), - 'fields' => array( - 'fact' => array( - 'group' => 'group', - 'order' => 'order', - 'having' => 'having', - 'limit' => 'limit', - 'first_seen'=> 'clear|reldate|ge|where', - 'where' => 'raw_where', - 'sample' => 'clear|like|where', - 'checksum' => 'clear|where', - 'reviewed_status' => 'clear|where', - - ), - - 'dimension' => array( - 'extra_fields' => 'where', - 'hostname_max' => 'clear|where', - 'ts_min' => 'date_range|reldate|clear|where', - 'pivot-hostname_max' => 'clear|pivot|select', - 'pivot-checksum' => 'clear|pivot|select', - ), - ), - 'custom_fields' => array( - 'checksum' => 'checksum', - 'date' => 'DATE(ts_min)', - 'hour' => 'substring(ts_min,1,13)', - 'hour_ts' => 'round(unix_timestamp(substring(ts_min,1,13)))', - 'minute_ts' => 'round(unix_timestamp(substring(ts_min,1,16)))', - 'minute' => 'substring(ts_min,1,16)', - 'snippet' => 'LEFT(dimension.sample,20)', - 'index_ratio' =>'ROUND(SUM(Rows_examined_sum)/SUM(rows_sent_sum),2)', - 'query_time_avg' => 'SUM(Query_time_sum) / SUM(ts_cnt)', - 'rows_sent_avg' => 'ROUND(SUM(Rows_sent_sum)/SUM(ts_cnt),0)', - ), - - 'callbacks' => array( - 'table' => array( - 'date' => function ($x) { $type=''; if ( date('N',strtotime($x)) >= 6) { $type = 'weekend'; } return array($x,$type); }, - 'checksum' => function ($x) { return array(dec2hex($x), ''); } - ) - ) - -); - -$conf['reports']['performance_schema'] = array( - 'fields' => array( - 'fact' => array( - 'order' => 'order', - 'having' => 'having', - 'limit' => 'limit', - 'first_seen' => 'date_range|reldate|clear|where', - 'where' => 'raw_where', - 'DIGEST' => 'clear|where', - 'DIGEST_TEXT' => 'clear|like|where', - 'group' => 'group', - ), - ), - 'custom_fields' => array( - 'snippet' => 'LEFT(fact.DIGEST_TEXT,20)', - 'index_ratio' =>'ROUND(SUM_ROWS_EXAMINED/SUM_ROWS_SENT,2)', - 'rows_sent_avg' => 'ROUND(SUM_ROWS_SENT/COUNT_STAR,0)', - - ), - - 'special_field_names' => array( - 'time' => 'FIRST_SEEN', - 'checksum' => 'DIGEST', - 'sample' => 'DIGEST_TEXT', - 'fingerprint' => 'DIGEST_TEXT', - ), -); - -$conf['reports']['performance_schema_history'] = array( - 'join' => array ( - 'dimension' => 'USING (`DIGEST`)' - ), - 'fields' => array( - 'fact' => array( - 'group' => 'group', - 'order' => 'order', - 'having' => 'having', - 'limit' => 'limit', - 'first_seen'=> 'clear|reldate|ge|where', - 'where' => 'raw_where', - 'DIGEST_TEXT' => 'clear|like|where', - 'DIGEST' => 'clear|where', - 'reviewed_status' => 'clear|where', - - ), - - 'dimension' => array( - 'extra_fields' => 'where', - 'hostname' => 'clear|where', - 'FIRST_SEEN' => 'date_range|reldate|clear|where', - 'pivot-hostname' => 'clear|pivot|select', - ), - ), - 'custom_fields' => array( - 'date' => 'DATE(fact.FIRST_SEEN)', - 'snippet' => 'LEFT(fact.DIGEST_TEXT,20)', - 'index_ratio' =>'ROUND(SUM_ROWS_EXAMINED/SUM_ROWS_SENT,2)', - 'rows_sent_avg' => 'ROUND(SUM_ROWS_SENT/COUNT_STAR,0)', - 'hour' => 'substring(dimension.FIRST_SEEN,1,13)', - 'hour_ts' => 'round(unix_timestamp(substring(dimension.FIRST_SEEN,1,13)))', - 'minute_ts' => 'round(unix_timestamp(substring(dimension.FIRST_SEEN,1,16)))', - 'minute' => 'substring(dimension.FIRST_SEEN,1,16)', - ), - - 'special_field_names' => array( - 'time' => 'FIRST_SEEN', - 'checksum' => 'DIGEST', - 'hostname' => 'hostname', - 'sample' => 'DIGEST_TEXT' - ), -); - -?> diff --git a/ee/cli/templates/auth-sql-conf.mustache b/ee/cli/templates/auth-sql-conf.mustache deleted file mode 100644 index 8854747b..00000000 --- a/ee/cli/templates/auth-sql-conf.mustache +++ /dev/null @@ -1,11 +0,0 @@ -passdb { - driver = sql - args = /etc/dovecot/dovecot-sql.conf.ext -} -userdb { - driver = prefetch -} -userdb { - driver = sql - args = /etc/dovecot/dovecot-sql.conf.ext -} diff --git a/ee/cli/templates/blockips.mustache b/ee/cli/templates/blockips.mustache deleted file mode 100644 index 8228bedb..00000000 --- a/ee/cli/templates/blockips.mustache +++ /dev/null @@ -1,2 +0,0 @@ -# Block IP Address -# deny 1.1.1.1; diff --git a/ee/cli/templates/default-sieve.mustache b/ee/cli/templates/default-sieve.mustache deleted file mode 100644 index 62532322..00000000 --- a/ee/cli/templates/default-sieve.mustache +++ /dev/null @@ -1,4 +0,0 @@ -require "fileinto"; -if header :contains "X-Spam-Flag" "YES" { - fileinto "Junk"; -} diff --git a/ee/cli/templates/dovecot-sql-conf.mustache b/ee/cli/templates/dovecot-sql-conf.mustache deleted file mode 100644 index 0ec50c11..00000000 --- a/ee/cli/templates/dovecot-sql-conf.mustache +++ /dev/null @@ -1,12 +0,0 @@ -driver = mysql -connect = host={{host}} user=vimbadmin password={{password}} dbname=vimbadmin -default_pass_scheme = MD5 -password_query = SELECT username as user, password as password, \ -homedir AS home, maildir AS mail, \ -concat('*:bytes=', quota) as quota_rule, uid, gid \ -FROM mailbox \ -WHERE username = '%Lu' AND active = '1' \ -AND ( access_restriction = 'ALL' OR LOCATE( access_restriction, '%Us' ) > 0 ) -user_query = SELECT homedir AS home, maildir AS mail, \ -concat('*:bytes=', quota) as quota_rule, uid, gid \ -FROM mailbox WHERE username = '%u' diff --git a/ee/cli/templates/dovecot.mustache b/ee/cli/templates/dovecot.mustache deleted file mode 100644 index f7370da8..00000000 --- a/ee/cli/templates/dovecot.mustache +++ /dev/null @@ -1,60 +0,0 @@ -protocols = imap pop3 lmtp sieve - -mail_location = maildir:/var/vmail/%d/%n - -disable_plaintext_auth = no -auth_mechanisms = plain login -#!include auth-system.conf.ext -!include auth-sql.conf.ext - -ssl_protocols = !SSLv2 !SSLv3 - -service lmtp { - unix_listener /var/spool/postfix/private/dovecot-lmtp { - mode = 0600 - user = postfix - group = postfix - } -} -service auth { - unix_listener /var/spool/postfix/private/auth { - mode = 0666 - user = postfix - group = postfix - } - unix_listener auth-userdb { - mode = 0600 - user = vmail - } - user = dovecot -} -service auth-worker { - user = vmail -} - -log_path = /var/log/dovecot.log - -mail_plugins = $mail_plugins autocreate - -plugin { - autocreate = Trash - autocreate2 = Junk - autocreate3 = Drafts - autocreate4 = Sent - autosubscribe = Trash - autosubscribe2 = Junk - autosubscribe3 = Drafts - autosubscribe4 = Sent -} - -protocol lmtp { - postmaster_address = {{email}} - mail_plugins = $mail_plugins sieve -} - -plugin { - sieve = ~/.dovecot.sieve - sieve_global_path = /var/lib/dovecot/sieve/default.sieve - sieve_global_dir = /var/lib/dovecot/sieve/ - sieve_dir = ~/sieve -} diff --git a/ee/cli/templates/ee-plus.mustache b/ee/cli/templates/ee-plus.mustache deleted file mode 100644 index fc90602b..00000000 --- a/ee/cli/templates/ee-plus.mustache +++ /dev/null @@ -1,84 +0,0 @@ -## -# EasyEngine Settings -## - - -tcp_nopush on; -tcp_nodelay on; -types_hash_max_size 2048; - -server_tokens off; -reset_timedout_connection on; -add_header X-Powered-By "EasyEngine {{ version }}"; -add_header rt-Fastcgi-Cache $upstream_cache_status; - -# Limit Request -limit_req_status 403; -limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; - -# Proxy Settings -# set_real_ip_from proxy-server-ip; -# real_ip_header X-Forwarded-For; - -fastcgi_read_timeout 300; -client_max_body_size 100m; - -## -# SSL Settings -## - -ssl_session_cache shared:SSL:20m; -ssl_session_timeout 10m; -ssl_prefer_server_ciphers on; -ssl_ciphers HIGH:!aNULL:!MD5:!kEDH; -ssl_protocols TLSv1 TLSv1.1 TLSv1.2; - -## -# Basic Settings -## -server_names_hash_bucket_size 16384; -# server_name_in_redirect off; - - -## -# Logging Settings -## - -access_log /var/log/nginx/access.log; -error_log /var/log/nginx/error.log; - -# Log format Settings -log_format rt_cache '$remote_addr $upstream_response_time $upstream_cache_status [$time_local] ' -'$http_host "$request" $status $body_bytes_sent ' -'"$http_referer" "$http_user_agent" "$request_body"'; - -## -# Gzip Settings -## - -gzip on; -gzip_disable "msie6"; - -gzip_vary on; -gzip_proxied any; -gzip_comp_level 6; -gzip_buffers 16 8k; -gzip_http_version 1.1; -gzip_types - application/atom+xml - application/javascript - application/json - application/rss+xml - application/vnd.ms-fontobject - application/x-font-ttf - application/x-web-app-manifest+json - application/xhtml+xml - application/xml - font/opentype - image/svg+xml - image/x-icon - text/css - text/plain - text/x-component - text/xml - text/javascript; diff --git a/ee/cli/templates/fastcgi.mustache b/ee/cli/templates/fastcgi.mustache deleted file mode 100644 index 6d4bc4ba..00000000 --- a/ee/cli/templates/fastcgi.mustache +++ /dev/null @@ -1,10 +0,0 @@ -# FastCGI cache settings -fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:50m inactive=60m; -fastcgi_cache_key "$scheme$request_method$host$request_uri"; -fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503; -fastcgi_cache_valid 200 301 302 404 1h; -fastcgi_buffers 16 16k; -fastcgi_buffer_size 32k; -fastcgi_param SERVER_NAME $http_host; -fastcgi_ignore_headers Cache-Control Expires Set-Cookie; -fastcgi_keep_conn on; diff --git a/ee/cli/templates/info_mysql.mustache b/ee/cli/templates/info_mysql.mustache deleted file mode 100644 index 29a5d81e..00000000 --- a/ee/cli/templates/info_mysql.mustache +++ /dev/null @@ -1,9 +0,0 @@ - -MySQL ({{version}}) on {{host}}: - -port {{port}} -wait_timeout {{wait_timeout}} -interactive_timeout {{interactive_timeout}} -max_used_connections {{max_used_connections}} -datadir {{datadir}} -socket {{socket}} diff --git a/ee/cli/templates/info_nginx.mustache b/ee/cli/templates/info_nginx.mustache deleted file mode 100644 index 6420405b..00000000 --- a/ee/cli/templates/info_nginx.mustache +++ /dev/null @@ -1,10 +0,0 @@ - -NGINX ({{version}}): - -user {{user}} -worker_processes {{worker_processes}} -worker_connections {{worker_connections}} -keepalive_timeout {{keepalive_timeout}} -fastcgi_read_timeout {{fastcgi_read_timeout}} -client_max_body_size {{client_max_body_size}} -allow {{allow}} diff --git a/ee/cli/templates/info_php.mustache b/ee/cli/templates/info_php.mustache deleted file mode 100644 index 1638cf8a..00000000 --- a/ee/cli/templates/info_php.mustache +++ /dev/null @@ -1,35 +0,0 @@ - -PHP ({{version}}): - -user {{user}} -expose_php {{expose_php}} -memory_limit {{memory_limit}} -post_max_size {{post_max_size}} -upload_max_filesize {{upload_max_filesize}} -max_execution_time {{max_execution_time}} - -Information about www.conf -ping.path {{www_ping_path}} -pm.status_path {{www_pm_status_path}} -process_manager {{www_pm}} -pm.max_requests {{www_pm_max_requests}} -pm.max_children {{www_pm_max_children}} -pm.start_servers {{www_pm_start_servers}} -pm.min_spare_servers {{www_pm_min_spare_servers}} -pm.max_spare_servers {{www_pm_max_spare_servers}} -request_terminate_timeout {{www_request_terminate_timeout}} -xdebug.profiler_enable_trigger {{www_xdebug_profiler_enable_trigger}} -listen {{www_listen}} - -Information about debug.conf -ping.path {{debug_ping_path}} -pm.status_path {{debug_pm_status_path}} -process_manager {{debug_pm}} -pm.max_requests {{debug_pm_max_requests}} -pm.max_children {{debug_pm_max_children}} -pm.start_servers {{debug_pm_start_servers}} -pm.min_spare_servers {{debug_pm_min_spare_servers}} -pm.max_spare_servers {{debug_pm_max_spare_servers}} -request_terminate_timeout {{debug_request_terminate_timeout}} -xdebug.profiler_enable_trigger {{debug_xdebug_profiler_enable_trigger}} -listen {{debug_listen}} diff --git a/ee/cli/templates/locations.mustache b/ee/cli/templates/locations.mustache deleted file mode 100644 index 21e18f82..00000000 --- a/ee/cli/templates/locations.mustache +++ /dev/null @@ -1,65 +0,0 @@ -# NGINX CONFIGURATION FOR COMMON LOCATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -# Basic locations files -location = /favicon.ico { - access_log off; - log_not_found off; - expires max; -} -location = /robots.txt { - # Some WordPress plugin gererate robots.txt file - # Refer #340 issue - try_files $uri $uri/ /index.php?$args; - access_log off; - log_not_found off; -} -# Cache static files -location ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|swf)$ { - add_header "Access-Control-Allow-Origin" "*"; - access_log off; - log_not_found off; - expires max; -} -# Security settings for better privacy -# Deny hidden files -location ~ /\. { - deny all; - access_log off; - log_not_found off; -} -# Deny backup extensions & log files -location ~* ^.+\.(bak|log|old|orig|original|php#|php~|php_bak|save|swo|swp|sql)$ { - deny all; - access_log off; - log_not_found off; -} -# Return 403 forbidden for readme.(txt|html) or license.(txt|html) or example.(txt|html) -if ($request_uri ~* "^.+(readme|license|example)\.(txt|html)$") { - return 403; -} -# Status pages -location /nginx_status { - stub_status on; - access_log off; - include common/acl.conf; -} -location ~ ^/(status|ping) { - include fastcgi_params; - fastcgi_pass php; - include common/acl.conf; -} -# EasyEngine (ee) utilities -# phpMyAdmin settings -location /pma { - return 301 https://$host:22222/db/pma; -} -location /phpMyAdmin { - return 301 https://$host:22222/db/pma; -} -location /phpmyadmin { - return 301 https://$host:22222/db/pma; -} -# Adminer settings -location /adminer { - return 301 https://$host:22222/db/adminer; -} diff --git a/ee/cli/templates/nginx-core.mustache b/ee/cli/templates/nginx-core.mustache deleted file mode 100644 index bdce6d2d..00000000 --- a/ee/cli/templates/nginx-core.mustache +++ /dev/null @@ -1,60 +0,0 @@ -## -# EasyEngine Settings -## - -server_tokens off; -reset_timedout_connection on; -add_header X-Powered-By "EasyEngine {{version}}"; -add_header rt-Fastcgi-Cache $upstream_cache_status; - -# Limit Request -limit_req_status 403; -limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; - -# Proxy Settings -# set_real_ip_from proxy-server-ip; -# real_ip_header X-Forwarded-For; - -fastcgi_read_timeout 300; -client_max_body_size 100m; - -# SSL Settings -ssl_session_cache shared:SSL:20m; -ssl_session_timeout 10m; -{{#Ubuntu}} -ssl_prefer_server_ciphers on; -{{/Ubuntu}} -ssl_ciphers HIGH:!aNULL:!MD5:!kEDH; - -# Log format Settings -log_format rt_cache '$remote_addr $upstream_response_time $upstream_cache_status [$time_local] ' -'$http_host "$request" $status $body_bytes_sent ' -'"$http_referer" "$http_user_agent"'; - - -# GZip settings -gzip_vary on; -gzip_proxied any; -gzip_comp_level 6; -gzip_buffers 16 8k; -gzip_http_version 1.1; -# Compress all output labeled with one of the following MIME-types. -gzip_types - application/atom+xml - application/javascript - application/json - application/rss+xml - application/vnd.ms-fontobject - application/x-font-ttf - application/x-web-app-manifest+json - application/xhtml+xml - application/xml - font/opentype - image/svg+xml - image/x-icon - text/css - text/plain - text/x-component - text/xml - text/javascript; - # text/html is always compressed by HttpGzipModule diff --git a/ee/cli/templates/pagespeed-common.mustache b/ee/cli/templates/pagespeed-common.mustache deleted file mode 100644 index 5b789c8d..00000000 --- a/ee/cli/templates/pagespeed-common.mustache +++ /dev/null @@ -1,44 +0,0 @@ -# HTTPS Support -# pagespeed FetchHttps enable; - -# PageSpeed Filters -# CSS Minification -# pagespeed EnableFilters combine_css,rewrite_css; - -# JS Minification -# pagespeed EnableFilters combine_javascript,rewrite_javascript; - -# Images Optimization -#pagespeed EnableFilters lazyload_images; -#pagespeed EnableFilters rewrite_images; -#pagespeed EnableFilters convert_jpeg_to_progressive,convert_png_to_jpeg,convert_jpeg_to_webp,convert_to_webp_lossless; - -# Remove comments from HTML -#pagespeed EnableFilters remove_comments; -# Remove WHITESPACE from HTML -#pagespeed EnableFilters collapse_whitespace; - - -# CDN Support -#pagespeed MapRewriteDomain cdn.example.com www.example.com; - - -########################################################################################################################### -# DO NOT EDIT AFTER THIS LINE # -########################################################################################################################### - -# PageSpeed Admin -location /ngx_pagespeed_statistics { include common/acl.conf; } -location /ngx_pagespeed_global_statistics { include common/acl.conf; } -location /ngx_pagespeed_message { include common/acl.conf; } -location /pagespeed_console { include common/acl.conf; } -location ~ ^/pagespeed_admin { include common/acl.conf; } -location ~ ^/pagespeed_global_admin { include common/acl.conf; } - -# Ensure requests for pagespeed optimized resources go to the pagespeed handler -# and no extraneous headers get set. -location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { - add_header "" ""; -} -location ~ "^/pagespeed_static/" { } -location ~ "^/ngx_pagespeed_beacon$" { } diff --git a/ee/cli/templates/pagespeed-global.mustache b/ee/cli/templates/pagespeed-global.mustache deleted file mode 100644 index bb5ab51e..00000000 --- a/ee/cli/templates/pagespeed-global.mustache +++ /dev/null @@ -1,21 +0,0 @@ -# Turning the module on and off -pagespeed on; - -# Configuring PageSpeed Filters -pagespeed RewriteLevel PassThrough; - -# Needs to exist and be writable by nginx. Use tmpfs for best performance. -pagespeed MemcachedServers "127.0.0.1:11211"; -pagespeed FileCachePath /var/ngx_pagespeed_cache; - -# PageSpeed Admin -pagespeed StatisticsPath /ngx_pagespeed_statistics; -pagespeed GlobalStatisticsPath /ngx_pagespeed_global_statistics; -pagespeed MessagesPath /ngx_pagespeed_message; -pagespeed ConsolePath /pagespeed_console; -pagespeed AdminPath /pagespeed_admin; -pagespeed GlobalAdminPath /pagespeed_global_admin; - -# PageSpeed Cache Purge -pagespeed EnableCachePurge on; -pagespeed PurgeMethod PURGE; diff --git a/ee/cli/templates/php-hhvm.mustache b/ee/cli/templates/php-hhvm.mustache deleted file mode 100644 index 198d81de..00000000 --- a/ee/cli/templates/php-hhvm.mustache +++ /dev/null @@ -1,10 +0,0 @@ -# PHP NGINX CONFIGURATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -location / { - try_files $uri $uri/ /index.php?$args; -} -location ~ \.php$ { - try_files $uri =404; - include fastcgi_params; - fastcgi_pass hhvm; -} diff --git a/ee/cli/templates/php.mustache b/ee/cli/templates/php.mustache deleted file mode 100644 index b12b250a..00000000 --- a/ee/cli/templates/php.mustache +++ /dev/null @@ -1,10 +0,0 @@ -# PHP NGINX CONFIGURATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -location / { - try_files $uri $uri/ /index.php?$args; -} -location ~ \.php$ { - try_files $uri =404; - include fastcgi_params; - fastcgi_pass php; -} diff --git a/ee/cli/templates/redis-hhvm.mustache b/ee/cli/templates/redis-hhvm.mustache deleted file mode 100644 index 9efa2236..00000000 --- a/ee/cli/templates/redis-hhvm.mustache +++ /dev/null @@ -1,58 +0,0 @@ -# Redis NGINX CONFIGURATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -set $skip_cache 0; -# POST requests and URL with a query string should always go to php -if ($request_method = POST) { - set $skip_cache 0; -} -if ($query_string != "") { - set $skip_cache 1; -} -# Don't cache URL containing the following segments -if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|wp-.*.php|index.php|/feed/|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $skip_cache 1; -} -# Don't use the cache for logged in users or recent commenter -if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { - set $skip_cache 1; -} -# Use cached or actual file if they exists, Otherwise pass request to WordPress -location / { - try_files $uri $uri/ /index.php?$args; -} - -location /redis-fetch { - internal ; - set $redis_key $args; - redis_pass redis; -} -location /redis-store { - internal ; - set_unescape_uri $key $arg_key ; - redis2_query set $key $echo_request_body; - redis2_query expire $key 14400; - redis2_pass redis; - -} - -location ~ \.php$ { - set $key "nginx-cache:$scheme$request_method$host$request_uri"; - try_files $uri =404; - - srcache_fetch_skip $skip_cache; - srcache_store_skip $skip_cache; - - srcache_response_cache_control off; - - set_escape_uri $escaped_key $key; - - srcache_fetch GET /redis-fetch $key; - srcache_store PUT /redis-store key=$escaped_key; - - more_set_headers 'X-SRCache-Fetch-Status $srcache_fetch_status'; - more_set_headers 'X-SRCache-Store-Status $srcache_store_status'; - - include fastcgi_params; - fastcgi_param HTTP_ACCEPT_ENCODING ""; - fastcgi_pass hhvm; -} diff --git a/ee/cli/templates/redis.mustache b/ee/cli/templates/redis.mustache deleted file mode 100644 index 69cfa695..00000000 --- a/ee/cli/templates/redis.mustache +++ /dev/null @@ -1,57 +0,0 @@ -# Redis NGINX CONFIGURATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -set $skip_cache 0; -# POST requests and URL with a query string should always go to php -if ($request_method = POST) { - set $skip_cache 0; -} -if ($query_string != "") { - set $skip_cache 1; -} -# Don't cache URL containing the following segments -if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|wp-.*.php|index.php|/feed/|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $skip_cache 1; -} -# Don't use the cache for logged in users or recent commenter -if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { - set $skip_cache 1; -} -# Use cached or actual file if they exists, Otherwise pass request to WordPress -location / { - try_files $uri $uri/ /index.php?$args; -} - -location /redis-fetch { - internal ; - set $redis_key $args; - redis_pass redis; -} -location /redis-store { - internal ; - set_unescape_uri $key $arg_key ; - redis2_query set $key $echo_request_body; - redis2_query expire $key 14400; - redis2_pass redis; - -} - -location ~ \.php$ { - set $key "nginx-cache:$scheme$request_method$host$request_uri"; - try_files $uri =404; - - srcache_fetch_skip $skip_cache; - srcache_store_skip $skip_cache; - - srcache_response_cache_control off; - - set_escape_uri $escaped_key $key; - - srcache_fetch GET /redis-fetch $key; - srcache_store PUT /redis-store key=$escaped_key; - - more_set_headers 'X-SRCache-Fetch-Status $srcache_fetch_status'; - more_set_headers 'X-SRCache-Store-Status $srcache_store_status'; - - include fastcgi_params; - fastcgi_pass php; -} diff --git a/ee/cli/templates/siteinfo.mustache b/ee/cli/templates/siteinfo.mustache deleted file mode 100644 index 7875709d..00000000 --- a/ee/cli/templates/siteinfo.mustache +++ /dev/null @@ -1,12 +0,0 @@ -Information about {{domain}}: - -Nginx configuration {{type}} {{enable}} -{{#pagespeed}}Pagespeed {{pagespeed}}{{/pagespeed}} -{{#hhvm}}HHVM {{hhvm}}{{/hhvm}} -access_log {{accesslog}} -error_log {{errorlog}} -{{#webroot}}Webroot {{webroot}}{{/webroot}} -{{#dbname}}DB_NAME {{dbname}}{{/dbname}} -{{#dbname}}DB_USER {{dbuser}}{{/dbname}} -{{#dbname}}DB_PASS {{dbpass}}{{/dbname}} -{{#tablepref}}table_prefix {{tableprefix}}{{/tablepref}} diff --git a/ee/cli/templates/upstream.mustache b/ee/cli/templates/upstream.mustache deleted file mode 100644 index 62794c58..00000000 --- a/ee/cli/templates/upstream.mustache +++ /dev/null @@ -1,16 +0,0 @@ -# Common upstream settings -upstream php { -# server unix:/run/php5-fpm.sock; -server 127.0.0.1:{{php}}; -} -upstream debug { -# Debug Pool -server 127.0.0.1:{{debug}}; -} -{{#hhvmconf}} -upstream hhvm { -# HHVM Pool -server 127.0.0.1:{{hhvm}}; -server 127.0.0.1:{{php}} backup; -} -{{/hhvmconf}} diff --git a/ee/cli/templates/vimbadmin.mustache b/ee/cli/templates/vimbadmin.mustache deleted file mode 100644 index 808d57ce..00000000 --- a/ee/cli/templates/vimbadmin.mustache +++ /dev/null @@ -1,662 +0,0 @@ -;; This file is licenesed Under GNU GENERAL PUBLIC LICENSE Version 3 -;; © Copyright 2011 - 2014 Open Source Solutions Limited, Dublin, Ireland. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; ViMbAdmin :: Virtual Mailbox Admin -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; IMPORTANT: Review and change all options in [user] -;; -;; ** This is for ViMbAdmin V3 and later ** -;; -;; See: https://github.com/opensolutions/ViMbAdmin/wiki/Configuration - -[user] - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Installation Keys and Salts -; -; During installation, you will be prompted to enter strings here. This -; is to verify that you are in fact the person authorised to complete the -; installation as well as provide security for cookies and passwords. - -securitysalt = "{{salt}}" -resources.auth.oss.rememberme.salt = "{{salt}}" -defaults.mailbox.password_salt = "{{salt}}" - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; When installing for the first time, it may be useful to set the following -; to 1 BUT ensure you set it to zero again in a production system - -phpSettings.display_startup_errors = 0 -phpSettings.display_errors = 0 -resources.frontController.params.displayExceptions = 0 - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; You database and caching connection. -;; - -resources.doctrine2.connection.options.driver = 'mysqli' -resources.doctrine2.connection.options.dbname = 'vimbadmin' -resources.doctrine2.connection.options.user = 'vimbadmin' -resources.doctrine2.connection.options.password = '{{password}}' -resources.doctrine2.connection.options.host = '{{host}}' -resources.doctrine2.connection.options.charset = 'utf8' - -;; Doctrine2 requires Memcache for maximum efficency. Without Memcache -;; it can be highly inefficient and will slow page requests down. -;; -;; You are strongly advised to install memcache and comment ArrayCache -;; here and uncomment MemcacheCache. -;; - -resources.doctrine2cache.type = 'ArrayCache' -;resources.doctrine2cache.type = 'MemcacheCache' -;resources.doctrine2cache.memcache.servers.0.host = '127.0.0.1' -resources.doctrine2cache.namespace = 'ViMbAdmin3' - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Default values used when creating domains -; -; See: https://github.com/opensolutions/ViMbAdmin/wiki/Configuration -; See: https://github.com/opensolutions/ViMbAdmin/wiki/Quotas - -defaults.domain.quota = 0 -defaults.domain.maxquota = 0 -defaults.domain.transport = "virtual" -defaults.domain.aliases = 0 -defaults.domain.mailboxes = 0 - -defaults.quota.multiplier = 'MB' - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Use server side filtering to reduce pagination time on client side -;; Defaults to off / false -defaults.server_side.pagination.enable = false -defaults.server_side.pagination.min_search_str = 3 -defaults.server_side.pagination.max_result_cnt = 500 - -;; Separate configuration for domain list -defaults.server_side.pagination.domain.enable = false -defaults.server_side.pagination.domain.min_search_str = 3 -defaults.server_side.pagination.domain.max_result_cnt = 500 - -; The number of rows displayed in the tables -; must be one of these: 10, 25, 50, 100 -defaults.table.entries = 50 - - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Options for the display of domain and mailbox sizes -;; -;; See: https://github.com/opensolutions/ViMbAdmin/wiki/Mailbox-Sizes -;; -;; Enable or disable display of sizes. Default: disabled - -defaults.list_size.disabled = true - -;; Maildir size units. By default: KB. One of B, KB, MB or GB. -defaults.list_size.multiplier = 'GB' - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Default values for creating mailboxes - -; This sets the uid and gid columns in the mailbox table to the below values -defaults.mailbox.uid = 5000 -defaults.mailbox.gid = 5000 - - -; Set the homedir and maildir values in the mailbox table where the -; following substitutions apply: -; -; %d -> domain part of email address -; %u -> user part of email address -; $m -> full email address -; -; -; http://wiki2.dovecot.org/VirtualUsers/Home - -defaults.mailbox.maildir = "maildir:/var/vmail/%d/%u" -defaults.mailbox.homedir = "/var/vmail/" - -;minimum mailbox password length -defaults.mailbox.min_password_length = 8 - -; The password hashing function to use. Set to one of: -; -; "plain" - password stored as clear text -; "md5" - password hashed using MD5 without salt (PHP md5()) -; "md5.salted" - password hashed using MD5 with salt (see below) -; "sha1" - password hashed using sha1 without salt -; "sha1.salted" - password hashed using sha1 with salt defined below -; "crypt:XXX" - call the PHP crypt function (with random salt) where XXX is one of: md5, blowfish, sha256, sha512 -; "dovecot:XXX" - call the Dovecot password generator (see next option below) and use the -; scheme specified by XXX. To see available schemes, use 'dovecotpw -l' -; or 'doveadm pw -l' - -defaults.mailbox.password_scheme = "md5" - -; The path to (and initial option(s) if necessary) the Dovecot password generator. Typical -; values may be something like: -; -; "/usr/bin/doveadm pw" -; "/usr/bin/dovecotpw" - -defaults.mailbox.dovecot_pw_binary = "/usr/bin/doveadm pw" - - - -;; A "mailbox alias" will, for example add the following entry to -;; the alias table for a mailbox: name@example.com -;; -;; name@example.com -> name@example.com -;; -;; This is required for aliasing an entire domain. If in doubt, leave it enabled. -mailboxAliases = 1 - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; See: https://github.com/opensolutions/ViMbAdmin/wiki/Archiving-Mailboxes - -server_id = 1 - -;;Archive options -binary.path.chown_R = "/bin/chown -R" -binary.path.tar_cf = "/bin/tar -cf" -binary.path.tar_xf = "/bin/tar -xf" -binary.path.bzip2_q = "/bin/bzip2 -q" -binary.path.bunzip2_q = "/bin/bunzip2 -q" -binary.path.rm_rf = "/bin/rm -rf" - -archive.path = "/srv/archives" - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Enable mailbox deletion on the file system -; -; See: https://github.com/opensolutions/ViMbAdmin/wiki/Deleting-Mailboxes -; - -mailbox_deletion_fs_enabled = false - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Export Mailbox Settings -; -; See: https://github.com/opensolutions/ViMbAdmin/wiki/Export-Settings -; -defaults.export_settings.disabled = true - - -;; Export settings alowed subnets -defaults.export_settings.allowed_subnet[] = "10." -defaults.export_settings.allowed_subnet[] = "192.168." - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Settings email default values. -;; -;; Substituions are as follows: -;; -;; %d -> domain part of email address -;; %u -> user part of email address -;; $m -> full email address -;; -;; See (and skin) the following file to see how the below are used: -;; -;; views/mailbox/email/settings.phtml -;; - -server.smtp.enabled = 1 -server.smtp.host = "mail.%d" -server.smtp.user = "%m" -server.smtp.port = "465" -server.smtp.crypt = "SSL" - -server.pop3.enabled = 1 -server.pop3.host = "gpo.%d" -server.pop3.user = "%m" -server.pop3.port = "995" -server.pop3.crypt = "SSL" - -server.imap.enabled = 1 -server.imap.host = "gpo.%d" -server.imap.user = "%m" -server.imap.port = "993" -server.imap.crypt = "SSL" - -server.webmail.enabled = 1 -server.webmail.host = "https://webmail.%d" -server.webmail.user = "%m" - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Identity - -identity.orgname = "Example Limited" -identity.name = "Example Support Team" -identity.email = "support@example.com" -identity.autobot.name = "ViMbAdmin Autobot" -identity.autobot.email = "autobot@example.com" -identity.mailer.name = "ViMbAdmin Autobot" -identity.mailer.email = "do-not-reply@example.com" - -identity.sitename = "ViMbAdmin" -identity.siteurl = "https://www.example.com/vimbadmin/" - - -;; -;; All mail and correspondence will come from the following;; - -server.email.name = "ViMbAdmin Administrator" -server.email.address = "support@example.com" - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Skinning -;; -;; You can skin ViMbAdmin pages if you wish. -;; -;; See: https://github.com/opensolutions/ViMbAdmin/wiki/Skinning - -; resources.smarty.skin = "myskin" - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; See: http://framework.zend.com/manual/en/zend.mail.smtp-authentication.html -;; -;; Ensure you have a working mail server configuration so the system can -;; send emails: -;; -resources.mailer.smtphost = "localhost" -;resources.mailer.username = "" -;resources.mailer.password = "" -;resources.mailer.auth = "" -;resources.mailer.ssl = "" -;resources.mailer.port = "25" - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Local filesystem logging. -;; -;; We log various things to var/log/YYYY/MM/ if you enable the logger here. -;; -;; It is useful to use the email logger to be alerted of serious errors. -;; - -ondemand_resources.logger.enabled = 1 - -;ondemand_resources.logger.writers.email.from = "admin@example.com" -;ondemand_resources.logger.writers.email.to = "admin@example.com" -;ondemand_resources.logger.writers.email.prefix = "ViMbAdmin_Error" -;ondemand_resources.logger.writers.email.level = 3 - -ondemand_resources.logger.writers.stream.level = 7 - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; ViMbAdmin performs a version check on administrator login and alerts the -;; user if there is a newer version available. -;; -;; This can be disabled by setting the below to 1 -;; - -skipVersionCheck = 0 - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; ViMbAdmin 'pings' the developers as part of the set up process to let -;; them know there is a new installation. -;; -;; All we are interested in is knowing whether people are using the software -;; or not and whether continued support and development is worth the time -;; and effort. -;; -;; Unless you're very shy, PLEASE LET US KNOW YOU'RE USING IT! -;; -;; This can be disabled by setting the below to 1 -;; - -skipInstallPingback = 0 - - - - - - - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Allow admins to dictate whether a user can use BOTH, IMAP ONLY, -; POP3 ONLY when creating mailboxes. -; -; Must be supported by your POP3/IMAP server. -; -; See https://github.com/opensolutions/ViMbAdmin/wiki/POP3-IMAP-Access-Permissions -; for documentation. -; -; This is handled via a plugin -; - -vimbadmin_plugins.AccessPermissions.disabled = false - -; specify the options which should be allowed for access restrictions -vimbadmin_plugins.AccessPermissions.type.SMTP = "SMTP" -vimbadmin_plugins.AccessPermissions.type.IMAP = "IMAP" -vimbadmin_plugins.AccessPermissions.type.POP3 = "POP3" -vimbadmin_plugins.AccessPermissions.type.SIEVE = "SIEVE" - - - - - - - - - - - - - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Proceed onwards with caution. -;; -;; The above [user] params are the may ones of consequence. -;; - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Allows to add additional information. -; -; This is handled via a plugin -; - -vimbadmin_plugins.AccessPermissions.disabled = false -vimbadmin_plugins.Jabber.disabled = true -vimbadmin_plugins.DirectoryEntry.disabled = true -vimbadmin_plugins.SharedMailbox.disabled = true -vimbadmin_plugins.SOGo.disabled = true - - -vimbadmin_plugins.AdditionalInfo.disabled = true -vimbadmin_plugins.Addressbook.disabled = true -vimbadmin_plugins.Calendar.disabled = true -vimbadmin_plugins.RoundCube.disabled = true - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;; Disabling directory entry subform element -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -vimbadmin_plugins.DirectoryEntry.disabled_elements.JpegPhoto = true -vimbadmin_plugins.DirectoryEntry.disabled_elements.Mail = true -vimbadmin_plugins.DirectoryEntry.disabled_elements.PreferredLanguage = true -vimbadmin_plugins.DirectoryEntry.disabled_elements.Secretary = true - -vimbadmin_plugins.DirectoryEntry.disabled_elements.PersonalTitle = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.GivenName = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.Sn = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.DisplayName = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.Initials = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.BusinesCategory = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.EmployeeType = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.Title = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.DepartmentNumber = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.Ou = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.RoomNumber = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.O = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.CarLicense = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.EmployeeNumber = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.HomePhone = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.TelephoneNumber = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.Mobile = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.Pager = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.FacsimileTelephoneNumber = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.HomePostalAddress = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.LabeledUri = false -vimbadmin_plugins.DirectoryEntry.disabled_elements.Manager = false - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Mailbox AdditionalInfo plugin elements -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - - -;;Additional text messages for plugin. -AdditionalInfo.mailbox.formPreBlurb = "

NB: Do not edit the following. It is sync'd on a nightly basis ..." - -; First Name -vimbadmin_plugins.AdditionalInfo.elements.id.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.elements.id.options.required = false -vimbadmin_plugins.AdditionalInfo.elements.id.options.label = "LDAP Id" - -; First Name -vimbadmin_plugins.AdditionalInfo.elements.first_name.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.elements.first_name.options.required = false -vimbadmin_plugins.AdditionalInfo.elements.first_name.options.label = "First Name" - -; Last Name -vimbadmin_plugins.AdditionalInfo.elements.second_name.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.elements.second_name.options.required = false -vimbadmin_plugins.AdditionalInfo.elements.second_name.options.label = "Last Name" - -; Grade -vimbadmin_plugins.AdditionalInfo.elements.grade.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.elements.grade.options.required = false -vimbadmin_plugins.AdditionalInfo.elements.grade.options.label = "Grade" - -; Grade Id -vimbadmin_plugins.AdditionalInfo.elements.grade_id.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.elements.grade_id.options.required = false -vimbadmin_plugins.AdditionalInfo.elements.grade_id.options.label = "Grade Id" -vimbadmin_plugins.AdditionalInfo.elements.grade_id.options.validators.digits[] = 'Digits' -vimbadmin_plugins.AdditionalInfo.elements.grade_id.options.validators.digits[] = true - -; Department -vimbadmin_plugins.AdditionalInfo.elements.department.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.elements.department.options.required = false -vimbadmin_plugins.AdditionalInfo.elements.department.options.label = "Department" - -; Department Id -vimbadmin_plugins.AdditionalInfo.elements.department_id.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.elements.department_id.options.required = false -vimbadmin_plugins.AdditionalInfo.elements.department_id.options.label = "Department Id" -vimbadmin_plugins.AdditionalInfo.elements.department_id.options.validators.digits[] = 'Digits' -vimbadmin_plugins.AdditionalInfo.elements.department_id.options.validators.digits[] = true - -; Section -vimbadmin_plugins.AdditionalInfo.elements.section.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.elements.section.options.required = false -vimbadmin_plugins.AdditionalInfo.elements.section.options.label = "Section" - -; Extension Number -vimbadmin_plugins.AdditionalInfo.elements.ext_no.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.elements.ext_no.options.required = false -vimbadmin_plugins.AdditionalInfo.elements.ext_no.options.label = "Extension Number" -vimbadmin_plugins.AdditionalInfo.elements.ext_no.options.validators.digits[] = 'Digits' -vimbadmin_plugins.AdditionalInfo.elements.ext_no.options.validators.digits[] = true -vimbadmin_plugins.AdditionalInfo.elements.ext_no.options.validators.length[] = 'StringLength' -vimbadmin_plugins.AdditionalInfo.elements.ext_no.options.validators.length[] = false -vimbadmin_plugins.AdditionalInfo.elements.ext_no.options.validators.length.range[] = 4 -vimbadmin_plugins.AdditionalInfo.elements.ext_no.options.validators.length.range[] = 4 -;;to disable autocomplete functionality -vimbadmin_plugins.AdditionalInfo.elements.ext_no.options.autocomplete = 'off' - -; Direct Dial -vimbadmin_plugins.AdditionalInfo.elements.d_dial.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.elements.d_dial.options.required = false -vimbadmin_plugins.AdditionalInfo.elements.d_dial.options.label = "Direct Dial" -vimbadmin_plugins.AdditionalInfo.elements.d_dial.options.autocomplete = 'off' - -; Mobile -vimbadmin_plugins.AdditionalInfo.elements.mobile.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.elements.mobile.options.required = false -vimbadmin_plugins.AdditionalInfo.elements.mobile.options.label = "Mobile" -vimbadmin_plugins.AdditionalInfo.elements.mobile.options.autocomplete = 'off' - -;;;;;;; -;; Aliases additional information -;; -; First Name -vimbadmin_plugins.AdditionalInfo.alias.elements.name.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.alias.elements.name.options.required = false -vimbadmin_plugins.AdditionalInfo.alias.elements.name.options.label = "Name" - -; Extension Number -vimbadmin_plugins.AdditionalInfo.alias.elements.ext_no.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.alias.elements.ext_no.options.required = false -vimbadmin_plugins.AdditionalInfo.alias.elements.ext_no.options.label = "Extension Number" -vimbadmin_plugins.AdditionalInfo.alias.elements.ext_no.options.validators.digits[] = 'Digits' -vimbadmin_plugins.AdditionalInfo.alias.elements.ext_no.options.validators.digits[] = true -vimbadmin_plugins.AdditionalInfo.alias.elements.ext_no.options.validators.length[] = 'StringLength' -vimbadmin_plugins.AdditionalInfo.alias.elements.ext_no.options.validators.length[] = false -vimbadmin_plugins.AdditionalInfo.alias.elements.ext_no.options.validators.length.range[] = 4 -vimbadmin_plugins.AdditionalInfo.alias.elements.ext_no.options.validators.length.range[] = 4 -vimbadmin_plugins.AdditionalInfo.alias.elements.ext_no.options.autocomplete = 'off' - -; Direct Dial -vimbadmin_plugins.AdditionalInfo.alias.elements.d_dial.type = "Zend_Form_Element_Text" -vimbadmin_plugins.AdditionalInfo.alias.elements.d_dial.options.required = false -vimbadmin_plugins.AdditionalInfo.alias.elements.d_dial.options.label = "Direct Dial" -vimbadmin_plugins.AdditionalInfo.alias.elements.d_dial.options.autocomplete = 'off' - - -[production : user] - -includePaths.library = APPLICATION_PATH "/../library" -includePaths.osslibrary = APPLICATION_PATH "/../vendor/opensolutions/oss-framework/src/" - -bootstrap.path = APPLICATION_PATH "/Bootstrap.php" -bootstrap.class = "Bootstrap" -appnamespace = "ViMbAdmin" - -temporary_directory = APPLICATION_PATH "/../var/tmp" - -pluginPaths.OSS_Resource = APPLICATION_PATH "/../vendor/opensolutions/oss-framework/src/OSS/Resource" -pluginPaths.ViMbAdmin_Resource = APPLICATION_PATH "/../library/ViMbAdmin/Resource" - -mini_js = 1 -mini_css = 1 - -alias_autocomplete_min_length = 2 - - - -resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" -resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" -resources.modules[] = - - -; doctrine2 -resources.doctrine2.models_path = APPLICATION_PATH -resources.doctrine2.proxies_path = APPLICATION_PATH "/Proxies" -resources.doctrine2.repositories_path = APPLICATION_PATH -resources.doctrine2.xml_schema_path = APPLICATION_PATH "/../doctrine2/xml" -resources.doctrine2.autogen_proxies = 0 -resources.doctrine2.logger = 1 -resources.doctrine2.models_namespace = "Entities" -resources.doctrine2.proxies_namespace = "Proxies" -resources.doctrine2.repositories_namespace = "Repositories" - - -resources.doctrine2cache.autoload_method = "composer" -;resources.doctrine2cache.type = 'ArrayCache' -;resources.doctrine2cache.type = 'MemcacheCache' -;resources.doctrine2cache.memcache.servers.0.host = '127.0.0.1' -;resources.doctrine2cache.memcache.servers.0.port = '11211' -;resources.doctrine2cache.memcache.servers.0.persistent = false -;resources.doctrine2cache.memcache.servers.0.weight = 1 -;resources.doctrine2cache.memcache.servers.0.timeout = 1 -;resources.doctrine2cache.memcache.servers.0.retry_int = 15 - -; resources.doctrine2cache.memcache.servers.1.host = 'xxx' -; resources.doctrine2cache.memcache.servers.2.host = 'yyy' - -resources.namespace.checkip = 0 - -resources.auth.enabled = 1 -resources.auth.oss.adapter = "OSS_Auth_Doctrine2Adapter" -resources.auth.oss.pwhash = "bcrypt" -resources.auth.oss.hash_cost = 9 -resources.auth.oss.entity = "\\Entities\\Admin" -resources.auth.oss.disabled.lost-username = 1 -resources.auth.oss.disabled.lost-password = 0 - -resources.auth.oss.rememberme.enabled = 1 -resources.auth.oss.rememberme.timeout = 2592000 -resources.auth.oss.rememberme.secure = true - -resources.auth.oss.lost_password.use_captcha = true - -resources.session.save_path = APPLICATION_PATH "/../var/session" -resources.session.use_only_cookies = true -resources.session.remember_me_seconds = 3600 -resources.session.name = 'VIMBADMIN3' - -ondemand_resources.logger.writers.stream.path = APPLICATION_PATH "/../var/log" -ondemand_resources.logger.writers.stream.owner = {{php_user}} -ondemand_resources.logger.writers.stream.group = {{php_user}} -ondemand_resources.logger.writers.stream.mode = single -ondemand_resources.logger.writers.stream.logname = vimbadmin.log - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Smarty View -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -resources.smarty.enabled = 1 -resources.smarty.templates = APPLICATION_PATH "/views" -; resources.smarty.skin = "myskin" -resources.smarty.compiled = APPLICATION_PATH "/../var/templates_c" -resources.smarty.cache = APPLICATION_PATH "/../var/cache" -resources.smarty.config = APPLICATION_PATH "/configs/smarty" -resources.smarty.plugins[] = APPLICATION_PATH "/../library/ViMbAdmin/Smarty/functions" -resources.smarty.plugins[] = APPLICATION_PATH "/../vendor/opensolutions/oss-framework/src/OSS/Smarty/functions" -resources.smarty.plugins[] = APPLICATION_PATH "/../vendor/smarty/smarty/libs/plugins" -resources.smarty.plugins[] = APPLICATION_PATH "/../vendor/smarty/smarty/libs/sysplugins" -resources.smarty.debugging = 0 - - - - -[development : production] - -mini_js = 0 -mini_css = 0 - -phpSettings.display_startup_errors = 1 -phpSettings.display_errors = 1 -resources.frontController.params.displayExceptions = 1 diff --git a/ee/cli/templates/virtual_alias_maps.mustache b/ee/cli/templates/virtual_alias_maps.mustache deleted file mode 100644 index b7919c74..00000000 --- a/ee/cli/templates/virtual_alias_maps.mustache +++ /dev/null @@ -1,5 +0,0 @@ -user = vimbadmin -password = {{password}} -hosts = {{host}} -dbname = vimbadmin -query = SELECT goto FROM alias WHERE address = '%s' AND active = '1' diff --git a/ee/cli/templates/virtual_domains_maps.mustache b/ee/cli/templates/virtual_domains_maps.mustache deleted file mode 100644 index 2dce79a0..00000000 --- a/ee/cli/templates/virtual_domains_maps.mustache +++ /dev/null @@ -1,5 +0,0 @@ -user = vimbadmin -password = {{password}} -hosts = {{host}} -dbname = vimbadmin -query = SELECT domain FROM domain WHERE domain = '%s' AND backupmx = '0' AND active = '1' diff --git a/ee/cli/templates/virtual_mailbox_maps.mustache b/ee/cli/templates/virtual_mailbox_maps.mustache deleted file mode 100644 index f8aafdaf..00000000 --- a/ee/cli/templates/virtual_mailbox_maps.mustache +++ /dev/null @@ -1,7 +0,0 @@ -user = vimbadmin -password = {{password}} -hosts = {{host}} -dbname = vimbadmin -table = mailbox -select_field = maildir -where_field = username diff --git a/ee/cli/templates/virtualconf.mustache b/ee/cli/templates/virtualconf.mustache deleted file mode 100644 index 8f9b4746..00000000 --- a/ee/cli/templates/virtualconf.mustache +++ /dev/null @@ -1,49 +0,0 @@ - -server { - - {{#multisite}} - # Uncomment the following line for domain mapping - # listen 80 default_server; - {{/multisite}} - - server_name {{^vma}}{{^rc}}{{site_name}}{{/rc}}{{/vma}} {{#vma}}vma.*{{/vma}} {{#rc}}webmail.*{{/rc}} {{^vma}}{{^rc}}{{#multisite}}*{{/multisite}}{{^multisite}}www{{/multisite}}.{{site_name}}{{/rc}}{{/vma}}; - - {{#multisite}} - # Uncomment the following line for domain mapping - #server_name_in_redirect off; - {{/multisite}} - - access_log /var/log/nginx/{{site_name}}.access.log {{^wpredis}}{{^static}}rt_cache{{/static}}{{/wpredis}}{{#wpredis}}rt_cache_redis{{/wpredis}}; - error_log /var/log/nginx/{{site_name}}.error.log; - - {{#proxy}} - add_header X-Proxy-Cache $upstream_cache_status; - location / { - proxy_pass http://{{host}}:{{port}}; - proxy_redirect off; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - {{/proxy}} - - {{^proxy}} - {{^vma}}{{^rc}}root {{webroot}}/htdocs;{{/rc}}{{/vma}} - {{#vma}}root /var/www/22222/htdocs/vimbadmin/public;{{/vma}} - {{#rc}}root /var/www/roundcubemail/htdocs/;{{/rc}} - - {{^proxy}}index {{^static}}index.php{{/static}} index.html index.htm;{{/proxy}} - - {{#static}} - location / { - try_files $uri $uri/ =404; - } - {{/static}} - - {{^static}}include {{^hhvm}}{{#basic}}common/php.conf;{{/basic}}{{#w3tc}}common/w3tc.conf;{{/w3tc}}{{#wpfc}}common/wpfc.conf;{{/wpfc}} {{#wpsc}}common/wpsc.conf;{{/wpsc}}{{#wpredis}}common/redis.conf;{{/wpredis}} {{/hhvm}}{{#hhvm}}{{#basic}}common/php-hhvm.conf;{{/basic}}{{#w3tc}}common/w3tc-hhvm.conf;{{/w3tc}}{{#wpfc}}common/wpfc-hhvm.conf;{{/wpfc}} {{#wpsc}}common/wpsc-hhvm.conf;{{/wpsc}}{{#wpredis}}common/redis-hhvm.conf;{{/wpredis}} {{/hhvm}} - {{#wpsubdir}}include common/wpsubdir.conf;{{/wpsubdir}}{{/static}} - {{#wp}}include common/wpcommon.conf;{{/wp}} - {{^proxy}}include common/locations.conf;{{/proxy}} - {{^vma}}{{^rc}}include {{webroot}}/conf/nginx/*.conf;{{/rc}}{{/vma}} - {{/proxy}} -} diff --git a/ee/cli/templates/w3tc-hhvm.mustache b/ee/cli/templates/w3tc-hhvm.mustache deleted file mode 100644 index b5c70ed1..00000000 --- a/ee/cli/templates/w3tc-hhvm.mustache +++ /dev/null @@ -1,31 +0,0 @@ - -# W3TC NGINX CONFIGURATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -set $cache_uri $request_uri; -# POST requests and URL with a query string should always go to php -if ($request_method = POST) { - set $cache_uri 'null cache'; -} -if ($query_string != "") { - set $cache_uri 'null cache'; -} -# Don't cache URL containing the following segments -if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|wp-.*.php|index.php|/feed/|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; -} -# Don't use the cache for logged in users or recent commenter -if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") { - set $cache_uri 'null cache'; -} -# Use cached or actual file if they exists, Otherwise pass request to WordPress -location / { - try_files /wp-content/cache/page_enhanced/${host}${cache_uri}_index.html $uri $uri/ /index.php?$args; -} -location ~ ^/wp-content/cache/minify/(.+\.(css|js))$ { - try_files $uri /wp-content/plugins/w3-total-cache/pub/minify.php?file=$1; -} -location ~ \.php$ { - try_files $uri =404; - include fastcgi_params; - fastcgi_pass hhvm; -} diff --git a/ee/cli/templates/w3tc.mustache b/ee/cli/templates/w3tc.mustache deleted file mode 100644 index ea13c255..00000000 --- a/ee/cli/templates/w3tc.mustache +++ /dev/null @@ -1,31 +0,0 @@ - -# W3TC NGINX CONFIGURATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -set $cache_uri $request_uri; -# POST requests and URL with a query string should always go to php -if ($request_method = POST) { - set $cache_uri 'null cache'; -} -if ($query_string != "") { - set $cache_uri 'null cache'; -} -# Don't cache URL containing the following segments -if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|wp-.*.php|index.php|/feed/|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; -} -# Don't use the cache for logged in users or recent commenter -if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") { - set $cache_uri 'null cache'; -} -# Use cached or actual file if they exists, Otherwise pass request to WordPress -location / { - try_files /wp-content/cache/page_enhanced/${host}${cache_uri}_index.html $uri $uri/ /index.php?$args; -} -location ~ ^/wp-content/cache/minify/(.+\.(css|js))$ { - try_files $uri /wp-content/plugins/w3-total-cache/pub/minify.php?file=$1; -} -location ~ \.php$ { - try_files $uri =404; - include fastcgi_params; - fastcgi_pass php; -} diff --git a/ee/cli/templates/wpcommon.mustache b/ee/cli/templates/wpcommon.mustache deleted file mode 100644 index cbafa601..00000000 --- a/ee/cli/templates/wpcommon.mustache +++ /dev/null @@ -1,35 +0,0 @@ -# WordPress COMMON SETTINGS -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -# Limit access to avoid brute force attack -location = /wp-login.php { - limit_req zone=one burst=1 nodelay; - include fastcgi_params; - fastcgi_pass php; -} -# Disable wp-config.txt -location = /wp-config.txt { - deny all; - access_log off; - log_not_found off; -} -# Disallow php in upload folder -location /wp-content/uploads/ { - location ~ \.php$ { - #Prevent Direct Access Of PHP Files From Web Browsers - deny all; - } -} -# Yoast sitemap -location ~ ([^/]*)sitemap(.*)\.x(m|s)l$ { - rewrite ^/sitemap\.xml$ /sitemap_index.xml permanent; - rewrite ^/([a-z]+)?-?sitemap\.xsl$ /index.php?xsl=$1 last; - # Rules for yoast sitemap with wp|wpsubdir|wpsubdomain - rewrite ^.*/sitemap_index\.xml$ /index.php?sitemap=1 last; - rewrite ^.*/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last; - # Following lines are options. Needed for WordPress seo addons - rewrite ^/news_sitemap\.xml$ /index.php?sitemap=wpseo_news last; - rewrite ^/locations\.kml$ /index.php?sitemap=wpseo_local_kml last; - rewrite ^/geo_sitemap\.xml$ /index.php?sitemap=wpseo_local last; - rewrite ^/video-sitemap\.xsl$ /index.php?xsl=video last; - access_log off; -} diff --git a/ee/cli/templates/wpfc-hhvm.mustache b/ee/cli/templates/wpfc-hhvm.mustache deleted file mode 100644 index 6cce1e0d..00000000 --- a/ee/cli/templates/wpfc-hhvm.mustache +++ /dev/null @@ -1,37 +0,0 @@ -# WPFC NGINX CONFIGURATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -set $skip_cache 0; -# POST requests and URL with a query string should always go to php -if ($request_method = POST) { - set $skip_cache 1; -} -if ($query_string != "") { - set $skip_cache 1; -} -# Don't cache URL containing the following segments -if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|wp-.*.php|index.php|/feed/|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $skip_cache 1; -} -# Don't use the cache for logged in users or recent commenter -if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { - set $skip_cache 1; -} -# Use cached or actual file if they exists, Otherwise pass request to WordPress -location / { - try_files $uri $uri/ /index.php?$args; -} -location ~ ^/wp-content/cache/minify/(.+\.(css|js))$ { - try_files $uri /wp-content/plugins/w3-total-cache/pub/minify.php?file=$1; -} -location ~ \.php$ { - try_files $uri =404; - include fastcgi_params; - fastcgi_pass hhvm; - fastcgi_cache_bypass $skip_cache; - fastcgi_no_cache $skip_cache; - fastcgi_cache WORDPRESS; -} -location ~ /purge(/.*) { - fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1"; - access_log off; -} diff --git a/ee/cli/templates/wpfc.mustache b/ee/cli/templates/wpfc.mustache deleted file mode 100644 index 81794ec7..00000000 --- a/ee/cli/templates/wpfc.mustache +++ /dev/null @@ -1,37 +0,0 @@ -# WPFC NGINX CONFIGURATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -set $skip_cache 0; -# POST requests and URL with a query string should always go to php -if ($request_method = POST) { - set $skip_cache 1; -} -if ($query_string != "") { - set $skip_cache 1; -} -# Don't cache URL containing the following segments -if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|wp-.*.php|index.php|/feed/|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $skip_cache 1; -} -# Don't use the cache for logged in users or recent commenter -if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { - set $skip_cache 1; -} -# Use cached or actual file if they exists, Otherwise pass request to WordPress -location / { - try_files $uri $uri/ /index.php?$args; -} -location ~ ^/wp-content/cache/minify/(.+\.(css|js))$ { - try_files $uri /wp-content/plugins/w3-total-cache/pub/minify.php?file=$1; -} -location ~ \.php$ { - try_files $uri =404; - include fastcgi_params; - fastcgi_pass php; - fastcgi_cache_bypass $skip_cache; - fastcgi_no_cache $skip_cache; - fastcgi_cache WORDPRESS; -} -location ~ /purge(/.*) { - fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1"; - access_log off; -} diff --git a/ee/cli/templates/wpsc-hhvm.mustache b/ee/cli/templates/wpsc-hhvm.mustache deleted file mode 100644 index 834b87fc..00000000 --- a/ee/cli/templates/wpsc-hhvm.mustache +++ /dev/null @@ -1,31 +0,0 @@ -# WPSC NGINX CONFIGURATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -set $cache_uri $request_uri; -# POST requests and URL with a query string should always go to php -if ($request_method = POST) { - set $cache_uri 'null cache'; -} -if ($query_string != "") { - set $cache_uri 'null cache'; -} -# Don't cache URL containing the following segments -if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|wp-.*.php|index.php|/feed/|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; -} -# Don't use the cache for logged in users or recent commenter -if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") { - set $cache_uri 'null cache'; -} -# Use cached or actual file if they exists, Otherwise pass request to WordPress -location / { - # If we add index.php?$args its break WooCommerce like plugins - # Ref: #330 - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php; -} -location ~ \.php$ { - try_files $uri =404; - include fastcgi_params; - fastcgi_pass hhvm; - # Following line is needed by WP Super Cache plugin - fastcgi_param SERVER_NAME $http_host; -} diff --git a/ee/cli/templates/wpsc.mustache b/ee/cli/templates/wpsc.mustache deleted file mode 100644 index 48f8736d..00000000 --- a/ee/cli/templates/wpsc.mustache +++ /dev/null @@ -1,31 +0,0 @@ -# WPSC NGINX CONFIGURATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -set $cache_uri $request_uri; -# POST requests and URL with a query string should always go to php -if ($request_method = POST) { - set $cache_uri 'null cache'; -} -if ($query_string != "") { - set $cache_uri 'null cache'; -} -# Don't cache URL containing the following segments -if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|wp-.*.php|index.php|/feed/|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; -} -# Don't use the cache for logged in users or recent commenter -if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") { - set $cache_uri 'null cache'; -} -# Use cached or actual file if they exists, Otherwise pass request to WordPress -location / { - # If we add index.php?$args its break WooCommerce like plugins - # Ref: #330 - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php; -} -location ~ \.php$ { - try_files $uri =404; - include fastcgi_params; - fastcgi_pass php; - # Following line is needed by WP Super Cache plugin - fastcgi_param SERVER_NAME $http_host; -} diff --git a/ee/cli/templates/wpsubdir.mustache b/ee/cli/templates/wpsubdir.mustache deleted file mode 100644 index 2ef06489..00000000 --- a/ee/cli/templates/wpsubdir.mustache +++ /dev/null @@ -1,10 +0,0 @@ -# WPSUBDIRECTORY NGINX CONFIGURATION -# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE EasyEngine (ee) -if (!-e $request_filename) { - # Redirect wp-admin to wp-admin/ - rewrite /wp-admin$ $scheme://$host$uri/ permanent; - # Redirect wp-* files/folders - rewrite ^(/[^/]+)?(/wp-.*) $2 last; - # Redirect other php files - rewrite ^(/[^/]+)?(/.*\.php) $2 last; -} diff --git a/ee/core/__init__.py b/ee/core/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ee/core/addswap.py b/ee/core/addswap.py deleted file mode 100644 index de2e4eb0..00000000 --- a/ee/core/addswap.py +++ /dev/null @@ -1,48 +0,0 @@ -"""EasyEngine SWAP creation""" -from ee.core.variables import EEVariables -from ee.core.shellexec import EEShellExec -from ee.core.fileutils import EEFileUtils -from ee.core.aptget import EEAptGet -from ee.core.logging import Log -import os - - -class EESwap(): - """Manage Swap""" - - def __init__(): - """Initialize """ - pass - - def add(self): - """Swap addition with EasyEngine""" - if EEVariables.ee_ram < 512: - if EEVariables.ee_swap < 1000: - Log.info(self, "Adding SWAP file, please wait...") - - # Install dphys-swapfile - EEAptGet.update(self) - EEAptGet.install(self, ["dphys-swapfile"]) - # Stop service - EEShellExec.cmd_exec(self, "service dphys-swapfile stop") - # Remove Default swap created - EEShellExec.cmd_exec(self, "/sbin/dphys-swapfile uninstall") - - # Modify Swap configuration - if os.path.isfile("/etc/dphys-swapfile"): - EEFileUtils.searchreplace(self, "/etc/dphys-swapfile", - "#CONF_SWAPFILE=/var/swap", - "CONF_SWAPFILE=/ee-swapfile") - EEFileUtils.searchreplace(self, "/etc/dphys-swapfile", - "#CONF_MAXSWAP=2048", - "CONF_MAXSWAP=1024") - EEFileUtils.searchreplace(self, "/etc/dphys-swapfile", - "#CONF_SWAPSIZE=", - "CONF_SWAPSIZE=1024") - else: - with open("/etc/dphys-swapfile", 'w') as conffile: - conffile.write("CONF_SWAPFILE=/ee-swapfile\n" - "CONF_SWAPSIZE=1024\n" - "CONF_MAXSWAP=1024\n") - # Create swap file - EEShellExec.cmd_exec(self, "service dphys-swapfile start") diff --git a/ee/core/apt_repo.py b/ee/core/apt_repo.py deleted file mode 100644 index c743cfdf..00000000 --- a/ee/core/apt_repo.py +++ /dev/null @@ -1,91 +0,0 @@ -"""EasyEngine packages repository operations""" -from ee.core.shellexec import EEShellExec -from ee.core.variables import EEVariables -from ee.core.logging import Log -import os - - -class EERepo(): - """Manage Repositories""" - - def __init__(self): - """Initialize """ - pass - - def add(self, repo_url=None, ppa=None): - """ - This function used to add apt repositories and or ppa's - If repo_url is provided adds repo file to - /etc/apt/sources.list.d/ - If ppa is provided add apt-repository using - add-apt-repository - command. - """ - - if repo_url is not None: - repo_file_path = ("/etc/apt/sources.list.d/" - + EEVariables().ee_repo_file) - try: - if not os.path.isfile(repo_file_path): - with open(repo_file_path, - encoding='utf-8', mode='a') as repofile: - repofile.write(repo_url) - repofile.write('\n') - repofile.close() - elif repo_url not in open(repo_file_path, - encoding='utf-8').read(): - with open(repo_file_path, - encoding='utf-8', mode='a') as repofile: - repofile.write(repo_url) - repofile.write('\n') - repofile.close() - return True - except IOError as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "File I/O error.") - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to add repo") - if ppa is not None: - EEShellExec.cmd_exec(self, "add-apt-repository -y '{ppa_name}'" - .format(ppa_name=ppa)) - - def remove(self, ppa=None, repo_url=None): - """ - This function used to remove ppa's - If ppa is provided adds repo file to - /etc/apt/sources.list.d/ - command. - """ - if ppa: - EEShellExec.cmd_exec(self, "add-apt-repository -y " - "--remove '{ppa_name}'" - .format(ppa_name=ppa)) - elif repo_url: - repo_file_path = ("/etc/apt/sources.list.d/" - + EEVariables().ee_repo_file) - - try: - repofile = open(repo_file_path, "w+") - repofile.write(repofile.read().replace(repo_url, "")) - repofile.close() - except IOError as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "File I/O error.") - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to remove repo") - - def add_key(self, keyids, keyserver=None): - """ - This function adds imports repository keys from keyserver. - default keyserver is hkp://keys.gnupg.net - user can provide other keyserver with keyserver="hkp://xyz" - """ - EEShellExec.cmd_exec(self, "gpg --keyserver {serv}" - .format(serv=(keyserver or - "hkp://keys.gnupg.net")) - + " --recv-keys {key}".format(key=keyids)) - EEShellExec.cmd_exec(self, "gpg -a --export --armor {0}" - .format(keyids) - + " | apt-key add - ") diff --git a/ee/core/aptget.py b/ee/core/aptget.py deleted file mode 100644 index b8181c6a..00000000 --- a/ee/core/aptget.py +++ /dev/null @@ -1,197 +0,0 @@ -"""EasyEngine package installation using apt-get module.""" -import apt -import apt_pkg -import sys -import subprocess -from ee.core.logging import Log -from ee.core.apt_repo import EERepo -from sh import apt_get -from sh import ErrorReturnCode - - -class EEAptGet(): - """Generic apt-get intialisation""" - - def update(self): - """ - Similar to `apt-get update` - """ - try: - with open('/var/log/ee/ee.log', 'a') as f: - proc = subprocess.Popen('apt-get update', - shell=True, - stdin=None, stdout=f, - stderr=subprocess.PIPE, - executable="/bin/bash") - proc.wait() - output, error_output = proc.communicate() - - # Check what is error in error_output - if "NO_PUBKEY" in str(error_output): - # Split the output - Log.info(self, "Fixing missing GPG keys, please wait...") - error_list = str(error_output).split("\\n") - - # Use a loop to add misising keys - for single_error in error_list: - if "NO_PUBKEY" in single_error: - key = single_error.rsplit(None, 1)[-1] - EERepo.add_key(self, key, keyserver="hkp://pgp.mit.edu") - - proc = subprocess.Popen('apt-get update', - shell=True, - stdin=None, stdout=f, stderr=f, - executable="/bin/bash") - proc.wait() - - if proc.returncode == 0: - return True - else: - Log.info(self, Log.FAIL + "Oops Something went wrong!!") - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - - except Exception as e: - Log.error(self, "apt-get update exited with error") - - def check_upgrade(self): - """ - Similar to `apt-get upgrade` - """ - try: - check_update = subprocess.Popen(['apt-get upgrade -s | grep ' - '\"^Inst\" | wc -l'], - stdout=subprocess.PIPE, - shell=True).communicate()[0] - if check_update == b'0\n': - Log.error(self, "No package updates available") - Log.info(self, "Following package updates are available:") - subprocess.Popen("apt-get -s dist-upgrade | grep \"^Inst\"", - shell=True, executable="/bin/bash", - stdout=sys.stdout).communicate() - - except Exception as e: - Log.error(self, "Unable to check for packages upgrades") - - def dist_upgrade(self): - """ - Similar to `apt-get upgrade` - """ - try: - with open('/var/log/ee/ee.log', 'a') as f: - proc = subprocess.Popen("DEBIAN_FRONTEND=noninteractive " - "apt-get dist-upgrade -o " - "Dpkg::Options::=\"--force-confdef\"" - " -o " - "Dpkg::Options::=\"--force-confold\"" - " -y ", - shell=True, stdin=None, - stdout=f, stderr=f, - executable="/bin/bash") - proc.wait() - - if proc.returncode == 0: - return True - else: - Log.info(self, Log.FAIL + "Oops Something went " - "wrong!!") - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - except Exception as e: - Log.error(self, "Error while installing packages, " - "apt-get exited with error") - - def install(self, packages): - all_packages = ' '.join(packages) - try: - with open('/var/log/ee/ee.log', 'a') as f: - proc = subprocess.Popen("DEBIAN_FRONTEND=noninteractive " - "apt-get install -o " - "Dpkg::Options::=\"--force-confdef\"" - " -o " - "Dpkg::Options::=\"--force-confold\"" - " -y {0}" - .format(all_packages), shell=True, - stdin=None, stdout=f, stderr=f, - executable="/bin/bash") - proc.wait() - - if proc.returncode == 0: - return True - else: - Log.info(self, Log.FAIL + "Oops Something went " - "wrong!!") - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - - except Exception as e: - Log.info(self, Log.FAIL + "Oops Something went " - "wrong!!") - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - - def remove(self, packages, auto=False, purge=False): - all_packages = ' '.join(packages) - try: - with open('/var/log/ee/ee.log', 'a') as f: - if purge: - proc = subprocess.Popen('apt-get purge -y {0}' - .format(all_packages), shell=True, - stdin=None, stdout=f, stderr=f, - executable="/bin/bash") - else: - proc = subprocess.Popen('apt-get remove -y {0}' - .format(all_packages), shell=True, - stdin=None, stdout=f, stderr=f, - executable="/bin/bash") - proc.wait() - if proc.returncode == 0: - return True - else: - Log.info(self, Log.FAIL + "Oops Something went " - "wrong!!") - Log.error(self, "Check logs for reason " - "`tail /var/log/ee/ee.log` & Try Again!!!") - - except Exception as e: - Log.error(self, "Error while installing packages, " - "apt-get exited with error") - - def auto_clean(self): - """ - Similar to `apt-get autoclean` - """ - try: - orig_out = sys.stdout - sys.stdout = open(self.app.config.get('log.logging', 'file'), - encoding='utf-8', mode='a') - apt_get.autoclean("-y") - sys.stdout = orig_out - except ErrorReturnCode as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to apt-get autoclean") - - def auto_remove(self): - """ - Similar to `apt-get autoremove` - """ - try: - Log.debug(self, "Running apt-get autoremove") - apt_get.autoremove("-y") - except ErrorReturnCode as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to apt-get autoremove") - - def is_installed(self, package_name): - """ - Checks if package is available in cache and is installed or not - returns True if installed otherwise returns False - """ - apt_cache = apt.cache.Cache() - apt_cache.open() - if (package_name.strip() in apt_cache and - apt_cache[package_name.strip()].is_installed): - # apt_cache.close() - return True - # apt_cache.close() - return False diff --git a/ee/core/checkfqdn.py b/ee/core/checkfqdn.py deleted file mode 100644 index 4caf9380..00000000 --- a/ee/core/checkfqdn.py +++ /dev/null @@ -1,23 +0,0 @@ -from ee.core.shellexec import EEShellExec -from ee.core.variables import EEVariables -import os - - -def check_fqdn(self, ee_host): - """FQDN check with EasyEngine, for mail server hostname must be FQDN""" - # ee_host=os.popen("hostname -f | tr -d '\n'").read() - if '.' in ee_host: - EEVariables.ee_fqdn = ee_host - with open('/etc/hostname', encoding='utf-8', mode='w') as hostfile: - hostfile.write(ee_host) - - EEShellExec.cmd_exec(self, "sed -i \"1i\\127.0.0.1 {0}\" /etc/hosts" - .format(ee_host)) - if EEVariables.ee_platform_distro == 'debian': - EEShellExec.cmd_exec(self, "/etc/init.d/hostname.sh start") - else: - EEShellExec.cmd_exec(self, "service hostname restart") - - else: - ee_host = input("Enter hostname [fqdn]:") - check_fqdn(self, ee_host) diff --git a/ee/core/database.py b/ee/core/database.py deleted file mode 100644 index 0b44eac1..00000000 --- a/ee/core/database.py +++ /dev/null @@ -1,28 +0,0 @@ -"""EasyEngine generic database creation module""" -from sqlalchemy import create_engine -from sqlalchemy.orm import scoped_session, sessionmaker -from sqlalchemy.ext.declarative import declarative_base -from ee.core.variables import EEVariables - -# db_path = self.app.config.get('site', 'db_path') -engine = create_engine(EEVariables.ee_db_uri, convert_unicode=True) -db_session = scoped_session(sessionmaker(autocommit=False, - autoflush=False, - bind=engine)) -Base = declarative_base() -Base.query = db_session.query_property() - - -def init_db(app): - """ - Initializes and creates all tables from models into the database - """ - # import all modules here that might define models so that - # they will be registered properly on the metadata. Otherwise - # # you will have to import them first before calling init_db() - # import ee.core.models - try: - app.log.info("Initializing EasyEngine Database") - Base.metadata.create_all(bind=engine) - except Exception as e: - app.log.debug("{0}".format(e)) diff --git a/ee/core/domainvalidate.py b/ee/core/domainvalidate.py deleted file mode 100644 index 2b1fe4a5..00000000 --- a/ee/core/domainvalidate.py +++ /dev/null @@ -1,24 +0,0 @@ -"""EasyEngine domain validation module.""" -from urllib.parse import urlparse - - -def ValidateDomain(url): - """ - This function returns domain name removing http:// and https:// - returns domain name only with or without www as user provided. - """ - - # Check if http:// or https:// present remove it if present - domain_name = url.split('/') - if 'http:' in domain_name or 'https:' in domain_name: - domain_name = domain_name[2] - else: - domain_name = domain_name[0] - www_domain_name = domain_name.split('.') - final_domain = '' - if www_domain_name[0] == 'www': - final_domain = '.'.join(www_domain_name[1:]) - else: - final_domain = domain_name - - return (final_domain, domain_name) diff --git a/ee/core/download.py b/ee/core/download.py deleted file mode 100644 index c47854d0..00000000 --- a/ee/core/download.py +++ /dev/null @@ -1,43 +0,0 @@ -"""EasyEngine download core classes.""" -import urllib.request -import urllib.error -import os -from ee.core.logging import Log - - -class EEDownload(): - """Method to download using urllib""" - def __init__(): - pass - - def download(self, packages): - """Download packages, packges must be list in format of - [url, path, package name]""" - for package in packages: - url = package[0] - filename = package[1] - pkg_name = package[2] - try: - directory = os.path.dirname(filename) - if not os.path.exists(directory): - os.makedirs(directory) - Log.info(self, "Downloading {0:20}".format(pkg_name), end=' ') - urllib.request.urlretrieve(url, filename) - Log.info(self, "{0}".format("[" + Log.ENDC + "Done" - + Log.OKBLUE + "]")) - except urllib.error.URLError as e: - Log.debug(self, "[{err}]".format(err=str(e.reason))) - Log.error(self, "Unable to download file, {0}" - .format(filename)) - return False - except urllib.error.HTTPError as e: - Log.error(self, "Package download failed. {0}" - .format(pkg_name)) - Log.debug(self, "[{err}]".format(err=str(e.reason))) - return False - except urllib.error.ContentTooShortError as e: - Log.debug(self, "{0}{1}".format(e.errno, e.strerror)) - Log.error(self, "Package download failed. The amount of the" - " downloaded data is less than " - "the expected amount \{0} ".format(pkg_name)) - return False diff --git a/ee/core/exc.py b/ee/core/exc.py deleted file mode 100644 index 06579f41..00000000 --- a/ee/core/exc.py +++ /dev/null @@ -1,26 +0,0 @@ -"""EasyEngine exception classes.""" - - -class EEError(Exception): - """Generic errors.""" - def __init__(self, msg): - Exception.__init__(self) - self.msg = msg - - def __str__(self): - return self.msg - - -class EEConfigError(EEError): - """Config related errors.""" - pass - - -class EERuntimeError(EEError): - """Generic runtime errors.""" - pass - - -class EEArgumentError(EEError): - """Argument related errors.""" - pass diff --git a/ee/core/extract.py b/ee/core/extract.py deleted file mode 100644 index 59c2c23a..00000000 --- a/ee/core/extract.py +++ /dev/null @@ -1,21 +0,0 @@ -"""EasyEngine extarct core classes.""" -import tarfile -import os -from ee.core.logging import Log - - -class EEExtract(): - """Method to extract from tar.gz file""" - - def extract(self, file, path): - """Function to extract tar.gz file""" - try: - tar = tarfile.open(file) - tar.extractall(path=path) - tar.close() - os.remove(file) - return True - except tarfile.TarError as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, 'Unable to extract file \{0}'.format(file)) - return False diff --git a/ee/core/fileutils.py b/ee/core/fileutils.py deleted file mode 100644 index 496e1672..00000000 --- a/ee/core/fileutils.py +++ /dev/null @@ -1,245 +0,0 @@ -"""EasyEngine file utils core classes.""" -import shutil -import os -import sys -import glob -import shutil -import pwd -import fileinput -from ee.core.logging import Log - - -class EEFileUtils(): - """Utilities to operate on files""" - def __init__(): - pass - - def remove(self, filelist): - """remove files from given path""" - for file in filelist: - if os.path.isfile(file): - Log.info(self, "Removing {0:65}".format(file), end=' ') - os.remove(file) - Log.info(self, "{0}".format("[" + Log.ENDC + "Done" + - Log.OKBLUE + "]")) - Log.debug(self, 'file Removed') - if os.path.isdir(file): - try: - Log.info(self, "Removing {0:65}".format(file), end=' ') - shutil.rmtree(file) - Log.info(self, "{0}".format("[" + Log.ENDC + "Done" + - Log.OKBLUE + "]")) - except shutil.Error as e: - Log.debug(self, "{err}".format(err=str(e.reason))) - Log.error(self, 'Unable to Remove file ') - - def create_symlink(self, paths, errormsg=''): - """ - Create symbolic links provided in list with first as source - and second as destination - """ - src = paths[0] - dst = paths[1] - if not os.path.islink(dst): - try: - Log.debug(self, "Creating Symbolic link, Source:{0}, Dest:{1}" - .format(src, dst)) - os.symlink(src, dst) - except Exception as e: - Log.debug(self, "{0}{1}".format(e.errno, e.strerror)) - Log.error(self, "Unable to create symbolic link ...\n ") - else: - Log.debug(self, "Destination: {0} exists".format(dst)) - - def remove_symlink(self, filepath): - """ - Removes symbolic link for the path provided with filepath - """ - try: - Log.debug(self, "Removing symbolic link: {0}".format(filepath)) - os.unlink(filepath) - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to reomove symbolic link ...\n") - - def copyfile(self, src, dest): - """ - Copies files: - src : source path - dest : destination path - """ - try: - Log.debug(self, "Copying file, Source:{0}, Dest:{1}" - .format(src, dest)) - shutil.copy2(src, dest) - except shutil.Error as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, 'Unable to copy file from {0} to {1}' - .format(src, dest)) - except IOError as e: - Log.debug(self, "{e}".format(e.strerror)) - Log.error(self, "Unable to copy file from {0} to {1}" - .format(src, dest)) - - def searchreplace(self, fnm, sstr, rstr): - """ - Search replace strings in file - fnm : filename - sstr: search string - rstr: replace string - """ - try: - Log.debug(self, "Doning search and replace, File:{0}," - "Source string:{1}, Dest String:{2}" - .format(fnm, sstr, rstr)) - for line in fileinput.input(fnm, inplace=True): - print(line.replace(sstr, rstr), end='') - fileinput.close() - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to search {0} and replace {1} {2}" - .format(fnm, sstr, rstr)) - - def mvfile(self, src, dst): - """ - Moves file from source path to destination path - src : source path - dst : Destination path - """ - try: - Log.debug(self, "Moving file from {0} to {1}".format(src, dst)) - shutil.move(src, dst) - except Exception as e: - Log.debug(self, "{err}".format(err=e)) - Log.error(self, 'Unable to move file from {0} to {1}' - .format(src, dst)) - - def chdir(self, path): - """ - Change Directory to path specified - Path : path for destination directory - """ - try: - Log.debug(self, "Changing directory to {0}" - .format(path)) - os.chdir(path) - except OSError as e: - Log.debug(self, "{err}".format(err=e.strerror)) - Log.error(self, 'Unable to Change Directory {0}'.format(path)) - - def chown(self, path, user, group, recursive=False): - """ - Change Owner for files - change owner for file with path specified - user: username of owner - group: group of owner - recursive: if recursive is True change owner for all - files in directory - """ - userid = pwd.getpwnam(user)[2] - groupid = pwd.getpwnam(user)[3] - try: - Log.debug(self, "Changing ownership of {0}, Userid:{1},Groupid:{2}" - .format(path, userid, groupid)) - # Change inside files/directory permissions only if recursive flag - # is set - if recursive: - for root, dirs, files in os.walk(path): - for d in dirs: - os.chown(os.path.join(root, d), userid, - groupid) - for f in files: - os.chown(os.path.join(root, f), userid, - groupid) - os.chown(path, userid, groupid) - except shutil.Error as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to change owner : {0}".format(path)) - except Exception as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to change owner : {0} ".format(path)) - - def chmod(self, path, perm, recursive=False): - """ - Changes Permission for files - path : file path permission to be changed - perm : permissions to be given - recursive: change permission recursively for all files - """ - try: - Log.debug(self, "Changing permission of {0}, Perm:{1}" - .format(path, perm)) - if recursive: - for root, dirs, files in os.walk(path): - for d in dirs: - os.chmod(os.path.join(root, d), perm) - for f in files: - os.chmod(os.path.join(root, f), perm) - else: - os.chmod(path, perm) - except OSError as e: - Log.debug(self, "{0}".format(e.strerror)) - Log.error(self, "Unable to change owner : {0}".format(path)) - - def mkdir(self, path): - """ - create directories. - path : path for directory to be created - Similar to `mkdir -p` - """ - try: - Log.debug(self, "Creating directories: {0}" - .format(path)) - os.makedirs(path) - except OSError as e: - Log.debug(self, "{0}".format(e.strerror)) - Log.error(self, "Unable to create directory {0} ".format(path)) - - def isexist(self, path): - """ - Check if file exist on given path - """ - try: - if os.path.exists(path): - return (True) - else: - return (False) - except OSError as e: - Log.debug(self, "{0}".format(e.strerror)) - Log.error(self, "Unable to check path {0}".format(path)) - - def grep(self, fnm, sstr): - """ - Searches for string in file and returns the matched line. - """ - try: - Log.debug(self, "Finding string {0} to file {1}" - .format(sstr, fnm)) - for line in open(fnm, encoding='utf-8'): - if sstr in line: - return line - return False - except OSError as e: - Log.debug(self, "{0}".format(e.strerror)) - Log.error(self, "Unable to Search string {0} in {1}" - .format(sstr, fnm)) - - def rm(self, path): - """ - Remove files - """ - Log.debug(self, "Removing {0}".format(path)) - if EEFileUtils.isexist(self, path): - try: - if os.path.isdir(path): - shutil.rmtree(path) - else: - os.remove(path) - except shutil.Error as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to remove directory : {0} " - .format(path)) - except OSError as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to remove file : {0} " - .format(path)) diff --git a/ee/core/git.py b/ee/core/git.py deleted file mode 100644 index 5d587c81..00000000 --- a/ee/core/git.py +++ /dev/null @@ -1,57 +0,0 @@ -"""EasyEngine GIT module""" -from sh import git, ErrorReturnCode -from ee.core.logging import Log -import os - - -class EEGit: - """Intialization of core variables""" - def ___init__(): - # TODO method for core variables - pass - - def add(self, paths, msg="Intializating"): - """ - Initializes Directory as repository if not already git repo. - and adds uncommited changes automatically - """ - for path in paths: - global git - git = git.bake("--git-dir={0}/.git".format(path), - "--work-tree={0}".format(path)) - if os.path.isdir(path): - if not os.path.isdir(path+"/.git"): - try: - Log.debug(self, "EEGit: git init at {0}" - .format(path)) - git.init(path) - except ErrorReturnCode as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to git init at {0}" - .format(path)) - status = git.status("-s") - if len(status.splitlines()) > 0: - try: - Log.debug(self, "EEGit: git commit at {0}" - .format(path)) - git.add("--all") - git.commit("-am {0}".format(msg)) - except ErrorReturnCode as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "Unable to git commit at {0} " - .format(path)) - else: - Log.debug(self, "EEGit: Path {0} not present".format(path)) - - def checkfilestatus(self, repo, filepath): - """ - Checks status of file, If its tracked or untracked. - """ - global git - git = git.bake("--git-dir={0}/.git".format(repo), - "--work-tree={0}".format(repo)) - status = git.status("-s", "{0}".format(filepath)) - if len(status.splitlines()) > 0: - return True - else: - return False diff --git a/ee/core/logging.py b/ee/core/logging.py deleted file mode 100644 index 1fcb8da7..00000000 --- a/ee/core/logging.py +++ /dev/null @@ -1,47 +0,0 @@ -"""EasyEngine log module""" - - -class Log: - """ - Logs messages with colors for different messages - according to functions - """ - HEADER = '\033[95m' - OKBLUE = '\033[94m' - OKGREEN = '\033[92m' - WARNING = '\033[93m' - FAIL = '\033[91m' - ENDC = '\033[0m' - BOLD = '\033[1m' - UNDERLINE = '\033[4m' - - def error(self, msg, exit=True): - """ - Logs error into log file - """ - print(Log.FAIL + msg + Log.ENDC) - self.app.log.error(Log.FAIL + msg + Log.ENDC) - if exit: - self.app.close(1) - - def info(self, msg, end='\n', log=True): - """ - Logs info messages into log file - """ - - print(Log.OKBLUE + msg + Log.ENDC, end=end) - if log: - self.app.log.info(Log.OKBLUE + msg + Log.ENDC) - - def warn(self, msg): - """ - Logs warning into log file - """ - print(Log.WARNING + msg + Log.ENDC) - self.app.log.warn(Log.BOLD + msg + Log.ENDC) - - def debug(self, msg): - """ - Logs debug messages into log file - """ - self.app.log.debug(Log.HEADER + msg + Log.ENDC) diff --git a/ee/core/logwatch.py b/ee/core/logwatch.py deleted file mode 100644 index ec2e210f..00000000 --- a/ee/core/logwatch.py +++ /dev/null @@ -1,195 +0,0 @@ - -""" -Real time log files watcher supporting log rotation. -""" - -import os -import time -import errno -import stat -from ee.core.logging import Log - - -class LogWatcher(object): - """Looks for changes in all files of a directory. - This is useful for watching log file changes in real-time. - It also supports files rotation. - - Example: - - >>> def callback(filename, lines): - ... print filename, lines - ... - >>> l = LogWatcher("/var/www/example.com/logs", callback) - >>> l.loop() - """ - - def __init__(self, filelist, callback, extensions=["log"], tail_lines=0): - """Arguments: - - (str) @folder: - the folder to watch - - (callable) @callback: - a function which is called every time a new line in a - file being watched is found; - this is called with "filename" and "lines" arguments. - - (list) @extensions: - only watch files with these extensions - - (int) @tail_lines: - read last N lines from files being watched before starting - """ - self.files_map = {} - self.filelist = filelist - self.callback = callback - # self.folder = os.path.realpath(folder) - self.extensions = extensions - # assert (os.path.isdir(self.folder), "%s does not exists" - # % self.folder) - for file in self.filelist: - assert (os.path.isfile(file)) - assert callable(callback) - self.update_files() - # The first time we run the script we move all file markers at EOF. - # In case of files created afterwards we don't do this. - for id, file in list(iter(self.files_map.items())): - file.seek(os.path.getsize(file.name)) # EOF - if tail_lines: - lines = self.tail(file.name, tail_lines) - if lines: - self.callback(file.name, lines) - - def __del__(self): - self.close() - - def loop(self, interval=0.1, async=False): - """Start the loop. - If async is True make one loop then return. - """ - while 1: - self.update_files() - for fid, file in list(iter(self.files_map.items())): - self.readfile(file) - if async: - return - time.sleep(interval) - - def log(self, line): - """Log when a file is un/watched""" - print(line) - - # def listdir(self): - # """List directory and filter files by extension. - # You may want to override this to add extra logic or - # globbling support. - # """ - # ls = os.listdir(self.folder) - # if self.extensions: - # return ([x for x in ls if os.path.splitext(x)[1][1:] - # in self.extensions]) - # else: - # return ls - - @staticmethod - def tail(fname, window): - """Read last N lines from file fname.""" - try: - f = open(fname, encoding='utf-8', mode='r') - except IOError as err: - if err.errno == errno.ENOENT: - return [] - else: - raise - else: - BUFSIZ = 1024 - f.seek(0, os.SEEK_END) - fsize = f.tell() - block = -1 - data = "" - exit = False - while not exit: - step = (block * BUFSIZ) - if abs(step) >= fsize: - f.seek(0) - exit = True - else: - f.seek(step, os.SEEK_END) - data = f.read().strip() - if data.count('\n') >= window: - break - else: - block -= 1 - return data.splitlines()[-window:] - - def update_files(self): - ls = [] - for name in self.filelist: - absname = os.path.realpath(os.path.join(name)) - try: - st = os.stat(absname) - except EnvironmentError as err: - if err.errno != errno.ENOENT: - raise - else: - if not stat.S_ISREG(st.st_mode): - continue - fid = self.get_file_id(st) - ls.append((fid, absname)) - - # check existent files - for fid, file in list(iter(self.files_map.items())): - # next(iter(graph.items())) - try: - st = os.stat(file.name) - except EnvironmentError as err: - if err.errno == errno.ENOENT: - self.unwatch(file, fid) - else: - raise - else: - if fid != self.get_file_id(st): - # same name but different file (rotation); reload it. - self.unwatch(file, fid) - self.watch(file.name) - - # add new ones - for fid, fname in ls: - if fid not in self.files_map: - self.watch(fname) - - def readfile(self, file): - lines = file.readlines() - if lines: - self.callback(file.name, lines) - - def watch(self, fname): - try: - file = open(fname, encoding='utf-8', mode='r') - fid = self.get_file_id(os.stat(fname)) - except EnvironmentError as err: - if err.errno != errno.ENOENT: - raise - else: - self.log("watching logfile %s" % fname) - self.files_map[fid] = file - - def unwatch(self, file, fid): - # file no longer exists; if it has been renamed - # try to read it for the last time in case the - # log rotator has written something in it. - lines = self.readfile(file) - self.log("un-watching logfile %s" % file.name) - del self.files_map[fid] - if lines: - self.callback(file.name, lines) - - @staticmethod - def get_file_id(st): - return "%xg%x" % (st.st_dev, st.st_ino) - - def close(self): - for id, file in list(iter(self.files_map.items())): - file.close() - self.files_map.clear() diff --git a/ee/core/mysql.py b/ee/core/mysql.py deleted file mode 100644 index ac87b7bb..00000000 --- a/ee/core/mysql.py +++ /dev/null @@ -1,137 +0,0 @@ -"""EasyEngine MySQL core classes.""" -import pymysql -from pymysql import connections, DatabaseError, Error -import configparser -from os.path import expanduser -import sys -import os -from ee.core.logging import Log -from ee.core.variables import EEVariables - - -class MySQLConnectionError(Exception): - """Custom Exception when MySQL server Not Connected""" - pass - - -class StatementExcecutionError(Exception): - """Custom Exception when any Query Fails to execute""" - pass - - -class DatabaseNotExistsError(Exception): - """Custom Exception when Database not Exist""" - pass - - -class EEMysql(): - """Method for MySQL connection""" - - def connect(self): - """Makes connection with MySQL server""" - try: - if os.path.exists('/etc/mysql/conf.d/my.cnf'): - connection = pymysql.connect(read_default_file='/etc/mysql/conf.d/my.cnf') - else: - connection = pymysql.connect(read_default_file='~/.my.cnf') - return connection - except ValueError as e: - Log.debug(self, str(e)) - raise MySQLConnectionError - except pymysql.err.InternalError as e: - Log.debug(self, str(e)) - raise MySQLConnectionError - - def dbConnection(self, db_name): - try: - if os.path.exists('/etc/mysql/conf.d/my.cnf'): - connection = pymysql.connect(db=db_name,read_default_file='/etc/mysql/conf.d/my.cnf') - else: - connection = pymysql.connect(db=db_name,read_default_file='~/.my.cnf') - - return connection - except DatabaseError as e: - if e.args[1] == '#42000Unknown database \'{0}\''.format(db_name): - raise DatabaseNotExistsError - else: - raise MySQLConnectionError - except pymysql.err.InternalError as e: - Log.debug(self, str(e)) - raise MySQLConnectionError - except Exception as e : - Log.debug(self, "[Error]Setting up database: \'" + str(e) + "\'") - raise MySQLConnectionError - - def execute(self, statement, errormsg='', log=True): - """Get login details from /etc/mysql/conf.d/my.cnf & Execute MySQL query""" - connection = EEMysql.connect(self) - log and Log.debug(self, "Exceuting MySQL Statement : {0}" - .format(statement)) - try: - cursor = connection.cursor() - sql = statement - cursor.execute(sql) - - # connection is not autocommit by default. - # So you must commit to save your changes. - connection.commit() - except AttributeError as e: - Log.debug(self, str(e)) - raise StatementExcecutionError - except Error as e: - Log.debug(self, str(e)) - raise StatementExcecutionError - finally: - connection.close() - - def backupAll(self): - import subprocess - try: - Log.info(self, "Backing up database at location: " - "/var/ee-mysqlbackup") - # Setup Nginx common directory - if not os.path.exists('/var/ee-mysqlbackup'): - Log.debug(self, 'Creating directory' - '/var/ee-mysqlbackup') - os.makedirs('/var/ee-mysqlbackup') - - db = subprocess.check_output(["mysql -Bse \'show databases\'"], - universal_newlines=True, - shell=True).split('\n') - for dbs in db: - if dbs == "": - continue - Log.info(self, "Backing up {0} database".format(dbs)) - p1 = subprocess.Popen("mysqldump {0}" - " --max_allowed_packet=1024M" - " --single-transaction".format(dbs), - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, shell=True) - p2 = subprocess.Popen("gzip -c > /var/ee-mysqlbackup/{0}{1}.s" - "ql.gz".format(dbs, EEVariables.ee_date), - stdin=p1.stdout, - shell=True) - - # Allow p1 to receive a SIGPIPE if p2 exits - p1.stdout.close() - output = p1.stderr.read() - p1.wait() - if p1.returncode == 0: - Log.debug(self, "done") - else: - Log.error(self, output.decode("utf-8")) - except Exception as e: - Log.error(self, "Error: process exited with status %s" - % e) - - def check_db_exists(self, db_name): - try: - if EEMysql.dbConnection(self, db_name): - return True - except DatabaseNotExistsError as e: - Log.debug(self, str(e)) - return False - except MySQLConnectionError as e: - Log.debug(self, str(e)) - raise MySQLConnectionError - #return False diff --git a/ee/core/nginxhashbucket.py b/ee/core/nginxhashbucket.py deleted file mode 100644 index 862165c2..00000000 --- a/ee/core/nginxhashbucket.py +++ /dev/null @@ -1,44 +0,0 @@ -"""EasyEngine Hash bucket calculate function for Nginx""" -from ee.core.fileutils import EEFileUtils -import math -import os -import fileinput -import re -import subprocess - - -def hashbucket(self): - # Check Nginx Hashbucket error - sub = subprocess.Popen('nginx -t', stdout=subprocess.PIPE, - stderr=subprocess.PIPE, shell=True) - output, error_output = sub.communicate() - if 'server_names_hash_bucket_size' not in str(error_output): - return True - - count = 0 - # Get the list of sites-availble - sites_list = os.listdir("/etc/nginx/sites-enabled/") - - # Count the number of characters in site names - for site in sites_list: - count = sum([count, len(site)]) - - # Calculate Nginx hash bucket size - ngx_calc = math.trunc(sum([math.log(count, 2), 2])) - ngx_hash = math.trunc(math.pow(2, ngx_calc)) - - # Replace hashbucket in Nginx.conf file - if EEFileUtils.grep(self, "/etc/nginx/nginx.conf", - "server_names_hash_bucket_size"): - for line in fileinput.FileInput("/etc/nginx/nginx.conf", inplace=1): - if "server_names_hash_bucket_size" in line: - print("\tserver_names_hash_bucket_size {0};".format(ngx_hash)) - else: - print(line, end='') - - else: - EEFileUtils.searchreplace(self, '/etc/nginx/nginx.conf', - "gzip_disable \"msie6\";", - "gzip_disable \"msie6\";\n" - "\tserver_names_hash_bucket_size {0};\n" - .format(ngx_hash)) diff --git a/ee/core/sendmail.py b/ee/core/sendmail.py deleted file mode 100644 index 21d6cadf..00000000 --- a/ee/core/sendmail.py +++ /dev/null @@ -1,33 +0,0 @@ -import smtplib -import os -from email.mime.multipart import MIMEMultipart -from email.mime.base import MIMEBase -from email.mime.text import MIMEText -from email.utils import COMMASPACE, formatdate -from email import encoders - - -def EESendMail(send_from, send_to, subject, text, files, server="localhost", - port=587, username='', password='', isTls=True): - msg = MIMEMultipart() - msg['From'] = send_from - msg['To'] = send_to - msg['Date'] = formatdate(localtime=True) - msg['Subject'] = subject - - msg.attach(MIMEText(text)) - - for f in files: - part = MIMEBase('application', "octet-stream") - part.set_payload(open(f, "rb").read()) - encoders.encode_base64(part) - part.add_header('Content-Disposition', 'attachment; filename="{0}"' - .format(os.path.basename(f))) - msg.attach(part) - - smtp = smtplib.SMTP(server, port) - if isTls: - smtp.starttls() - - smtp.sendmail(send_from, send_to, msg.as_string()) - smtp.quit() diff --git a/ee/core/services.py b/ee/core/services.py deleted file mode 100644 index 0e4e8758..00000000 --- a/ee/core/services.py +++ /dev/null @@ -1,132 +0,0 @@ -"""EasyEngine service start/stop/restart module.""" -import os -import sys -import subprocess -from subprocess import Popen -from ee.core.logging import Log -import pystache - - -class EEService(): - """Intialization for service""" - def ___init__(): - pass - - def start_service(self, service_name): - """ - start service - Similar to `service xyz start` - """ - try: - if service_name in ['nginx', 'php5-fpm']: - service_cmd = ('{0} -t && service {0} start' - .format(service_name)) - else: - service_cmd = ('service {0} start'.format(service_name)) - - Log.info(self, "Start : {0:10}" .format(service_name), end='') - retcode = subprocess.getstatusoutput(service_cmd) - if retcode[0] == 0: - Log.info(self, "[" + Log.ENDC + "OK" + Log.OKBLUE + "]") - return True - else: - Log.debug(self, "{0}".format(retcode[1])) - Log.info(self, "[" + Log.FAIL + "Failed" + Log.OKBLUE+"]") - return False - except OSError as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "\nFailed to start service {0}" - .format(service_name)) - - def stop_service(self, service_name): - """ - Stop service - Similar to `service xyz stop` - """ - try: - Log.info(self, "Stop : {0:10}" .format(service_name), end='') - retcode = subprocess.getstatusoutput('service {0} stop' - .format(service_name)) - if retcode[0] == 0: - Log.info(self, "[" + Log.ENDC + "OK" + Log.OKBLUE + "]") - return True - else: - Log.debug(self, "{0}".format(retcode[1])) - Log.info(self, "[" + Log.FAIL + "Failed" + Log.OKBLUE+"]") - return False - except OSError as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "\nFailed to stop service : {0}" - .format(service_name)) - - def restart_service(self, service_name): - """ - Restart service - Similar to `service xyz restart` - """ - try: - if service_name in ['nginx', 'php5-fpm']: - service_cmd = ('{0} -t && service {0} restart' - .format(service_name)) - else: - service_cmd = ('service {0} restart'.format(service_name)) - - Log.info(self, "Restart : {0:10}".format(service_name), end='') - retcode = subprocess.getstatusoutput(service_cmd) - if retcode[0] == 0: - Log.info(self, "[" + Log.ENDC + "OK" + Log.OKBLUE + "]") - return True - else: - Log.debug(self, "{0}".format(retcode[1])) - Log.info(self, "[" + Log.FAIL + "Failed" + Log.OKBLUE+"]") - return False - except OSError as e: - Log.debug(self, "{0} {1}".format(e.errno, e.strerror)) - Log.error(self, "\nFailed to restart service : {0}" - .format(service_name)) - - def reload_service(self, service_name): - """ - Stop service - Similar to `service xyz stop` - """ - try: - if service_name in ['nginx', 'php5-fpm']: - service_cmd = ('{0} -t && service {0} reload' - .format(service_name)) - else: - service_cmd = ('service {0} reload'.format(service_name)) - - Log.info(self, "Reload : {0:10}".format(service_name), end='') - retcode = subprocess.getstatusoutput(service_cmd) - if retcode[0] == 0: - Log.info(self, "[" + Log.ENDC + "OK" + Log.OKBLUE + "]") - return True - else: - Log.debug(self, "{0}".format(retcode[1])) - Log.info(self, "[" + Log.FAIL + "Failed" + Log.OKBLUE+"]") - return False - except OSError as e: - Log.debug(self, "{0}".format(e)) - Log.error(self, "\nFailed to reload service {0}" - .format(service_name)) - - def get_service_status(self, service_name): - try: - is_exist = subprocess.getstatusoutput('which {0}' - .format(service_name)) - if is_exist[0] == 0: - retcode = subprocess.getstatusoutput('service {0} status' - .format(service_name)) - if retcode[0] == 0: - return True - else: - Log.debug(self, "{0}".format(retcode[1])) - return False - else: - return False - except OSError as e: - Log.debug(self, "{0}{1}".format(e.errno, e.strerror)) - Log.error(self, "Unable to get services status of {0}" - .format(service_name)) - return False diff --git a/ee/core/shellexec.py b/ee/core/shellexec.py deleted file mode 100644 index f82352fd..00000000 --- a/ee/core/shellexec.py +++ /dev/null @@ -1,52 +0,0 @@ -"""EasyEngine shell executaion functions.""" -from ee.core.logging import Log -import os -import sys -import subprocess - - -class CommandExecutionError(Exception): - """custom Exception for command execution""" - pass - - -class EEShellExec(): - """Method to run shell commands""" - def __init__(): - pass - - def cmd_exec(self, command, errormsg='', log=True): - """Run shell command from Python""" - try: - log and Log.debug(self, "Running command: {0}".format(command)) - - with subprocess.Popen([command], stdout=subprocess.PIPE, - stderr=subprocess.PIPE, shell=True) as proc: - (cmd_stdout_bytes, cmd_stderr_bytes) = proc.communicate() - (cmd_stdout, cmd_stderr) = (cmd_stdout_bytes.decode('utf-8', - "replace"), - cmd_stderr_bytes.decode('utf-8', - "replace")) - - if proc.returncode == 0: - return True - else: - Log.debug(self, "Command Output: {0}, \nCommand Error: {1}" - .format(cmd_stdout, cmd_stderr)) - return False - except OSError as e: - Log.debug(self, str(e)) - raise CommandExecutionError - except Exception as e: - Log.debug(self, str(e)) - raise CommandExecutionError - - def invoke_editor(self, filepath, errormsg=''): - """ - Open files using sensible editor - """ - try: - subprocess.call(['sensible-editor', filepath]) - except OSError as e: - Log.debug(self, "{0}{1}".format(e.errno, e.strerror)) - raise CommandExecutionError diff --git a/ee/core/variables.py b/ee/core/variables.py deleted file mode 100644 index 264cdcdb..00000000 --- a/ee/core/variables.py +++ /dev/null @@ -1,185 +0,0 @@ -"""EasyEngine core variable module""" -import platform -import socket -import configparser -import os -import sys -import psutil -import datetime - - -class EEVariables(): - """Intialization of core variables""" - - # EasyEngine version - ee_version = "3.3.9" - - - # EasyEngine packages versions - ee_wp_cli = "0.20.1" - ee_adminer = "4.2.1" - ee_roundcube = "1.1.3" - ee_vimbadmin = "3.0.12" - - # Get WPCLI path - ee_wpcli_path = os.popen('which wp | tr "\n" " "').read() - if ee_wpcli_path == '': - ee_wpcli_path = '/usr/bin/wp ' - - # Current date and time of System - ee_date = datetime.datetime.now().strftime('%d%b%Y%H%M%S') - - # EasyEngine core variables - ee_platform_distro = platform.linux_distribution()[0].lower() - ee_platform_version = platform.linux_distribution()[1] - ee_platform_codename = os.popen("lsb_release -sc | tr -d \'\\n\'").read() - - # Get timezone of system - if os.path.isfile('/etc/timezone'): - with open("/etc/timezone", "r") as tzfile: - ee_timezone = tzfile.read().replace('\n', '') - if ee_timezone == "Etc/UTC": - ee_timezone = "UTC" - else: - ee_timezone = "UTC" - - # Get FQDN of system - ee_fqdn = socket.getfqdn() - - # EasyEngien default webroot path - ee_webroot = '/var/www/' - - # PHP5 user - ee_php_user = 'www-data' - - # Get git user name and EMail - config = configparser.ConfigParser() - config.read(os.path.expanduser("~")+'/.gitconfig') - try: - ee_user = config['user']['name'] - ee_email = config['user']['email'] - except Exception as e: - ee_user = input("Enter your name: ") - ee_email = input("Enter your email: ") - os.system("git config --global user.name {0}".format(ee_user)) - os.system("git config --global user.email {0}".format(ee_email)) - - # Get System RAM and SWAP details - ee_ram = psutil.virtual_memory().total / (1024 * 1024) - ee_swap = psutil.swap_memory().total / (1024 * 1024) - - # MySQL hostname - ee_mysql_host = "" - config = configparser.RawConfigParser() - if os.path.exists('/etc/mysql/conf.d/my.cnf'): - cnfpath = "/etc/mysql/conf.d/my.cnf" - else: - cnfpath = os.path.expanduser("~")+"/.my.cnf" - if [cnfpath] == config.read(cnfpath): - try: - ee_mysql_host = config.get('client', 'host') - except configparser.NoOptionError as e: - ee_mysql_host = "localhost" - else: - ee_mysql_host = "localhost" - - # EasyEngine stack installation varibales - # Nginx repo and packages - if ee_platform_codename == 'precise': - ee_nginx_repo = ("deb http://download.opensuse.org/repositories/home:" - "/rtCamp:/EasyEngine/xUbuntu_12.04/ /") - elif ee_platform_codename == 'trusty': - ee_nginx_repo = ("deb http://download.opensuse.org/repositories/home:" - "/rtCamp:/EasyEngine/xUbuntu_14.04/ /") - elif ee_platform_codename == 'wheezy': - ee_nginx_repo = ("deb http://download.opensuse.org/repositories/home:" - "/rtCamp:/EasyEngine/Debian_7.0/ /") - elif ee_platform_codename == 'jessie': - ee_nginx_repo = ("deb http://download.opensuse.org/repositories/home:" - "/rtCamp:/EasyEngine/Debian_8.0/ /") - - ee_nginx = ["nginx-custom", "nginx-common"] - ee_nginx_key = '3050AC3CD2AE6F03' - - # PHP repo and packages - if ee_platform_distro == 'ubuntu': - ee_php_repo = "ppa:ondrej/php5-5.6" - elif ee_platform_codename == 'wheezy': - ee_php_repo = ("deb http://packages.dotdeb.org {codename}-php56 all" - .format(codename=ee_platform_codename)) - ee_php = ["php5-fpm", "php5-curl", "php5-gd", "php5-imap", - "php5-mcrypt", "php5-common", "php5-readline", - "php5-mysql", "php5-cli", "php5-memcache", "php5-imagick", - "memcached", "graphviz", "php-pear"] - - if ee_platform_codename == 'wheezy': - ee_php = ee_php + ["php5-dev"] - - if ee_platform_distro == 'ubuntu' or ee_platform_codename == 'jessie': - ee_php = ee_php + ["php5-xdebug"] - - # MySQL repo and packages - if ee_platform_distro == 'ubuntu': - ee_mysql_repo = ("deb http://mirror.aarnet.edu.au/pub/MariaDB/repo/" - "10.0/ubuntu {codename} main" - .format(codename=ee_platform_codename)) - elif ee_platform_distro == 'debian': - ee_mysql_repo = ("deb http://mirror.aarnet.edu.au/pub/MariaDB/repo/" - "10.0/debian {codename} main" - .format(codename=ee_platform_codename)) - - ee_mysql = ["mariadb-server", "percona-toolkit"] - - # Postfix repo and packages - ee_postfix_repo = "" - ee_postfix = ["postfix"] - - # Mail repo and packages - ee_mail_repo = ("deb http://http.debian.net/debian-backports {codename}" - "-backports main".format(codename=ee_platform_codename)) - - ee_mail = ["dovecot-core", "dovecot-imapd", "dovecot-pop3d", - "dovecot-lmtpd", "dovecot-mysql", "dovecot-sieve", - "dovecot-managesieved", "postfix-mysql", "php5-cgi", - "php-gettext", "php-pear"] - - # Mailscanner repo and packages - ee_mailscanner_repo = () - ee_mailscanner = ["amavisd-new", "spamassassin", "clamav", "clamav-daemon", - "arj", "zoo", "nomarch", "lzop", "cabextract", "p7zip", - "rpm", "unrar-free"] - - # HHVM repo details - # 12.04 requires boot repository - if ee_platform_distro == 'ubuntu': - if ee_platform_codename == "precise": - ee_boost_repo = ("ppa:mapnik/boost") - - ee_hhvm_repo = ("deb http://dl.hhvm.com/ubuntu {codename} main" - .format(codename=ee_platform_codename)) - else: - ee_hhvm_repo = ("deb http://dl.hhvm.com/debian {codename} main" - .format(codename=ee_platform_codename)) - - ee_hhvm = ["hhvm"] - - # Redis repo details - if ee_platform_distro == 'ubuntu': - ee_redis_repo = ("ppa:chris-lea/redis-server") - - else: - ee_redis_repo = ("deb http://packages.dotdeb.org {codename} all" - .format(codename=ee_platform_codename)) - - ee_redis = ['redis-server', 'php5-redis'] - - # Repo path - ee_repo_file = "ee-repo.list" - ee_repo_file_path = ("/etc/apt/sources.list.d/" + ee_repo_file) - - # Application dabase file path - basedir = os.path.abspath(os.path.dirname('/var/lib/ee/')) - ee_db_uri = 'sqlite:///' + os.path.join(basedir, 'ee.db') - - def __init__(self): - pass diff --git a/ee/utils/__init__.py b/ee/utils/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ee/utils/test.py b/ee/utils/test.py deleted file mode 100644 index 1d3371ed..00000000 --- a/ee/utils/test.py +++ /dev/null @@ -1,15 +0,0 @@ -"""Testing utilities for EasyEngine.""" -from ee.cli.main import EETestApp -from cement.utils.test import * - - -class EETestCase(CementTestCase): - app_class = EETestApp - - def setUp(self): - """Override setup actions (for every test).""" - super(EETestCase, self).setUp() - - def tearDown(self): - """Override teardown actions (for every test).""" - super(EETestCase, self).tearDown() diff --git a/install b/install deleted file mode 100644 index c55764e5..00000000 --- a/install +++ /dev/null @@ -1,563 +0,0 @@ -#!/bin/bash - -# EasyEngine update script. -# This script is designed to install latest EasyEngine or -# to update current EasyEngine from 2.x to 3.x - -# Checking permissions -if [[ $EUID -ne 0 ]]; then - ee_lib_echo_fail "Sudo privilege required..." - ee_lib_echo_fail "Uses: wget -qO ee rt.cx/ee && sudo bash ee" - exit 100 -fi - -# Define echo function -# Blue color -function ee_lib_echo() -{ - echo $(tput setaf 4)$@$(tput sgr0) -} -# White color -function ee_lib_echo_info() -{ - echo $(tput setaf 7)$@$(tput sgr0) -} -# Red color -function ee_lib_echo_fail() -{ - echo $(tput setaf 1)$@$(tput sgr0) -} - -# Capture errors -function ee_lib_error() -{ - echo "[ `date` ] $(tput setaf 1)$@$(tput sgr0)" - exit $2 -} - -# Execute: apt-get update -ee_lib_echo "Executing apt-get update, please wait..." -apt-get update &>> /dev/null - -# Checking lsb_release package -if [ ! -x /usr/bin/lsb_release ]; then - ee_lib_echo "Installing lsb-release, please wait..." - apt-get -y install lsb-release &>> /dev/null -fi - -# Define variables for later use -ee_branch=$1 -readonly ee_version_old="2.2.3" -readonly ee_version_new="3.3.9" -readonly ee_log_dir=/var/log/ee/ -readonly ee_install_log=/var/log/ee/install.log -readonly ee_linux_distro=$(lsb_release -i | awk '{print $3}') -readonly ee_distro_version=$(lsb_release -sc) - -# Checking linux distro -if [ "$ee_linux_distro" != "Ubuntu" ] && [ "$ee_linux_distro" != "Debian" ]; then - ee_lib_echo_fail "EasyEngine (ee) is made for Ubuntu and Debian only as of now" - ee_lib_echo_fail "You are free to fork EasyEngine (ee): https://github.com/rtCamp/easyengine/fork" - ee_lib_echo_fail "EasyEngine (ee) only support Ubuntu 12.04/14.04 and Debian 7.x/8.x" - exit 100 -fi - -# EasyEngine (ee) only support all Ubuntu/Debian distro except the distro reached EOL -lsb_release -d | egrep -e "12.04|14.04|wheezy|jessie" &>> /dev/null -if [ "$?" -ne "0" ]; then - ee_lib_echo_fail "EasyEngine (ee) only support Ubuntu 12.04/14.04 and Debian 7.x/8.x" - exit 100 -fi - -# Pre checks to avoid later screw ups -# Checking EasyEngine (ee) log directory -if [ ! -d $ee_log_dir ]; then - - ee_lib_echo "Creating EasyEngine log directory, please wait..." - mkdir -p $ee_log_dir || ee_lib_error "Unable to create log directory $ee_log_dir, exit status " $? - - # Create EasyEngine log files - touch /var/log/ee/{ee.log,install.log} - - # Keep EasyEngine log folder accessible to root only - chmod -R 700 /var/log/ee || ee_lib_error "Unable to change permissions for EasyEngine log folder, exit status " $? -fi - -# Install Python3, Git, Tar and python-software-properties required packages -# Generate Locale -function ee_install_dep() -{ - ee_lib_echo "Installing required packages, please wait..." - if [ "$ee_linux_distro" == "Ubuntu" ]; then - apt-get -y install gcc curl gzip python3 python3-apt python3-setuptools python3-dev sqlite3 git tar python-software-properties software-properties-common || ee_lib_error "Unable to install pre depedencies, exit status " 1 - elif [ "$ee_linux_distro" == "Debian" ]; then - apt-get -y install gcc curl gzip python3 python3-apt python3-setuptools python3-dev sqlite3 git tar python-software-properties || ee_lib_error "Unable to pre depedencies, exit status " 1 - fi - - # Generating Locale - locale-gen en &>> /dev/null -} - -# Sqlite query to create table `sites` into ee.db -# which will be used by EasyEngine 3.x -function ee_sync_db() -{ - if [ ! -f /var/lib/ee/ee.db ]; then - mkdir -p /var/lib/ee - - echo "CREATE TABLE sites ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - sitename UNIQUE, - site_type CHAR, - cache_type CHAR, - site_path CHAR, - created_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - is_enabled INT, - is_ssl INT, - storage_fs CHAR, - storage_db CHAR, - db_name VARCHAR, - db_user VARCHAR, - db_password VARCHAR, - db_host VARCHAR, - is_hhvm INT INT DEFAULT '0', - is_pagespeed INT INT DEFAULT '0' - );" | sqlite3 /var/lib/ee/ee.db - - # Check site is enable/live or disable - for site in $(ls /etc/nginx/sites-available/ | grep -v default); - do - if [ -f /etc/nginx/sites-enabled/$site ]; then - ee_site_status='1' - else - ee_site_status='0' - fi - - # Find out information about current NGINX configuration - ee_site_current_type=$(head -n1 /etc/nginx/sites-available/$site | grep "NGINX CONFIGURATION" | rev | cut -d' ' -f3,4,5,6,7 | rev | cut -d ' ' -f2,3,4,5) - - # Detect current website type and cache - if [ "$ee_site_current_type" = "HTML" ]; then - ee_site_current="html" - ee_site_current_cache="basic" - elif [ "$ee_site_current_type" = "PHP" ]; then - ee_site_current="php" - ee_site_current_cache="basic" - elif [ "$ee_site_current_type" = "MYSQL" ]; then - ee_site_current="mysql" - ee_site_current_cache="basic" - # Single WordPress - elif [ "$ee_site_current_type" = "WPSINGLE BASIC" ]; then - ee_site_current="wp" - ee_site_current_cache="basic" - - elif [ "$ee_site_current_type" = "WPSINGLE WP SUPER CACHE" ]; then - ee_site_current="wp" - ee_site_current_cache="wpsc" - - elif [ "$ee_site_current_type" = "WPSINGLE W3 TOTAL CACHE" ]; then - ee_site_current="wp" - ee_site_current_cache="w3tc" - - elif [ "$ee_site_current_type" = "WPSINGLE FAST CGI" ] || [ "$ee_site_current_type" = "WPSINGLE FASTCGI" ]; then - ee_site_current="wp" - ee_site_current_cache="wpfc" - - # WordPress subdirectory - elif [ "$ee_site_current_type" = "WPSUBDIR BASIC" ]; then - ee_site_current="wpsubdir" - ee_site_current_cache="basic" - - elif [ "$ee_site_current_type" = "WPSUBDIR WP SUPER CACHE" ]; then - ee_site_current="wpsubdir" - ee_site_current_cache="wpsc" - - elif [ "$ee_site_current_type" = "WPSUBDIR W3 TOTAL CACHE" ]; then - ee_site_current="wpsubdir" - ee_site_current_cache="w3tc" - - elif [ "$ee_site_current_type" = "WPSUBDIR FAST CGI" ] || [ "$ee_site_current_type" = "WPSUBDIR FASTCGI" ]; then - ee_site_current="wpsubdir" - ee_site_current_cache="wpfc" - - # WordPress subdomain - elif [ "$ee_site_current_type" = "WPSUBDOMAIN BASIC" ]; then - ee_site_current="wpsubdomain" - ee_site_current_cache="basic" - - elif [ "$ee_site_current_type" = "WPSUBDOMAIN WP SUPER CACHE" ]; then - ee_site_current="wpsubdomain" - ee_site_current_cache="wpsc" - - elif [ "$ee_site_current_type" = "WPSUBDOMAIN W3 TOTAL CACHE" ]; then - ee_site_current="wpsubdomain" - ee_site_current_cache="w3tc" - - elif [ "$ee_site_current_type" = "WPSUBDOMAIN FAST CGI" ] || [ "$ee_site_current_type" = "WPSUBDOMAIN FASTCGI" ]; then - ee_site_current="wpsubdomain" - ee_site_current_cache="wpfc" - fi - - ee_webroot="/var/www/$site" - - # Insert query to insert old site information into ee.db - echo "INSERT INTO sites (sitename, site_type, cache_type, site_path, is_enabled, is_ssl, storage_fs, storage_db) - VALUES (\"$site\", \"$ee_site_current\", \"$ee_site_current_cache\", \"$ee_webroot\", \"$ee_site_status\", 0, 'ext4', 'mysql');" | sqlite3 /var/lib/ee/ee.db - - done - else - ee_lib_echo "Updating EasyEngine Database" - echo "ALTER TABLE sites ADD COLUMN db_name varchar;" | sqlite3 /var/lib/ee/ee.db - echo "ALTER TABLE sites ADD COLUMN db_user varchar; " | sqlite3 /var/lib/ee/ee.db - echo "ALTER TABLE sites ADD COLUMN db_password varchar;" | sqlite3 /var/lib/ee/ee.db - echo "ALTER TABLE sites ADD COLUMN db_host varchar;" | sqlite3 /var/lib/ee/ee.db - echo "ALTER TABLE sites ADD COLUMN is_hhvm INT DEFAULT '0';" | sqlite3 /var/lib/ee/ee.db - echo "ALTER TABLE sites ADD COLUMN is_pagespeed INT DEFAULT '0';" | sqlite3 /var/lib/ee/ee.db - fi -} - -function secure_ee_db() -{ - chown -R root:root /var/lib/ee/ - chmod -R 600 /var/lib/ee/ -} - -# Install EasyEngine 3.x -function ee_install() -{ - # Remove old clone of EasyEngine (ee) if any - rm -rf /tmp/easyengine &>> /dev/null - - # Clone EE 3.0 Python ee_branch - ee_lib_echo "Cloning EasyEngine, please wait..." - if [ "$ee_branch" = "" ]; then - ee_branch=master - fi - - git clone -b $ee_branch https://github.com/rtCamp/easyengine.git /tmp/easyengine --quiet > /dev/null \ - || ee_lib_error "Unable to clone EasyEngine, exit status" $? - - cd /tmp/easyengine - ee_lib_echo "Installing EasyEngine, please wait..." - python3 setup.py install || ee_lib_error "Unable to install EasyEngine, exit status " $? -} - -# Update EasyEngine configuration -# Remove EasyEngine 2.x -function ee_update() -{ - # Preserve old configuration - ee_lib_echo "Updating EasyEngine configuration, please wait..." - - ee_grant_host=$(grep grant-host /etc/easyengine/ee.conf | awk '{ print $3 }' | head -1 ) - ee_db_name=$(grep db-name /etc/easyengine/ee.conf | awk '{ print $3 }') - ee_db_user=$(grep db-name /etc/easyengine/ee.conf | awk '{ print $3 }') - ee_wp_prefix=$(grep prefix /etc/easyengine/ee.conf | awk '{ print $3 }') - ee_wp_user=$(grep 'user ' /etc/easyengine/ee.conf | grep -v db-user |awk '{ print $3 }') - ee_wp_pass=$(grep password /etc/easyengine/ee.conf | awk '{ print $3 }') - ee_wp_email=$(grep email /etc/easyengine/ee.conf | awk '{ print $3 }') - ee_ip_addr=$(grep ip-address /etc/easyengine/ee.conf |awk -F'=' '{ print $2 }') - - sed -i "s/ip-address.*/ip-address = ${ee_ip_addr}/" /etc/ee/ee.conf && \ - sed -i "s/grant-host.*/grant-host = ${ee_grant_host}/" /etc/ee/ee.conf && \ - sed -i "s/db-name.*/db-name = ${db-name}/" /etc/ee/ee.conf && \ - sed -i "s/db-user.*/db-user = ${ee_db_user}/" /etc/ee/ee.conf && \ - sed -i "s/prefix.*/prefix = ${ee_wp_prefix}/" /etc/ee/ee.conf && \ - sed -i "s/^user.*/user = ${ee_wp_user}/" /etc/ee/ee.conf && \ - sed -i "s/password.*/password = ${ee_wp_password}/" /etc/ee/ee.conf && \ - sed -i "s/email.*/email = ${ee_wp_email}/" /etc/ee/ee.conf || ee_lib_error "Unable to update configuration, exit status " $? - - # Remove old EasyEngine - ee_lib_echo "Removing EasyEngine 2.x" - rm -rf /etc/bash_completion.d/ee /etc/easyengine/ /usr/share/easyengine/ /usr/local/lib/easyengine /usr/local/sbin/easyengine /usr/local/sbin/ee /var/log/easyengine - - # Softlink to fix command not found error - ln -s /usr/local/bin/ee /usr/local/sbin/ee || ee_lib_error "Unable to create softlink to old EasyEngine, exit status " $? -} - -function ee_update_latest() -{ - #Move ~/.my.cnf to /etc/mysql/conf.d/my.cnf - if [ ! -f /etc/mysql/conf.d/my.cnf ] - then - #create conf.d folder if not exist - if [ ! -d /etc/mysql/conf.d ]; then - mkdir -p /etc/mysql/conf.d - chmod 755 /etc/mysql/conf.d - fi - if [ -d /etc/mysql/conf.d ] - then - if [ -f ~/.my.cnf ] - then - cp ~/.my.cnf /etc/mysql/conf.d/my.cnf &>> /dev/null - chmod 600 /etc/mysql/conf.d/my.cnf - else - if [ -f /root/.my.cnf ] - then - cp /root/.my.cnf /etc/mysql/conf.d/my.cnf &>> /dev/null - chmod 600 /etc/mysql/conf.d/my.cnf - else - ee_lib_echo_fail ".my.cnf cannot be located in your current user or root." - fi - fi - fi - fi - - if [ -f /etc/nginx/nginx.conf ]; then - ee_lib_echo "Updating Nginx configuration, please wait..." - # From version 3.1.10 we are using Suse builder for repository - if [ "$ee_distro_version" == "precise" ]; then - grep -Hr 'http://download.opensuse.org/repositories/home:/rtCamp:/EasyEngine/xUbuntu_12.04/ /' /etc/apt/sources.list.d/ &>> /dev/null - if [[ $? -ne 0 ]]; then - if [ -f /etc/apt/sources.list.d/rtcamp-nginx-precise.list ]; then - rm -rf /etc/apt/sources.list.d/rtcamp-nginx-precise.list - fi - echo -e "\ndeb http://download.opensuse.org/repositories/home:/rtCamp:/EasyEngine/xUbuntu_12.04/ /" >> /etc/apt/sources.list.d/ee-repo.list - gpg --keyserver "hkp://pgp.mit.edu" --recv-keys '3050AC3CD2AE6F03' - gpg -a --export --armor '3050AC3CD2AE6F03' | apt-key add - - if [ -f /etc/nginx/conf.d/ee-nginx.conf ]; then - mv /etc/nginx/conf.d/ee-nginx.conf /etc/nginx/conf.d/ee-nginx.conf.old &>> /dev/null - fi - mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.old &>> /dev/null - apt-get update - apt-get -o Dpkg::Options::="--force-confmiss" -o Dpkg::Options::="--force-confold" -y install nginx-custom - - fi - elif [ "$ee_distro_version" == "trusty" ]; then - grep -Hr 'http://download.opensuse.org/repositories/home:/rtCamp:/EasyEngine/xUbuntu_14.04/ /' /etc/apt/sources.list.d/ &>> /dev/null - if [[ $? -ne 0 ]]; then - if [ -f /etc/apt/sources.list.d/rtcamp-nginx-trusty.list ]; then - rm -rf /etc/apt/sources.list.d/rtcamp-nginx-trusty.list - fi - echo -e "\ndeb http://download.opensuse.org/repositories/home:/rtCamp:/EasyEngine/xUbuntu_14.04/ /" >> /etc/apt/sources.list.d/ee-repo.list - gpg --keyserver "hkp://pgp.mit.edu" --recv-keys '3050AC3CD2AE6F03' - gpg -a --export --armor '3050AC3CD2AE6F03' | apt-key add - - if [ -f /etc/nginx/conf.d/ee-nginx.conf ]; then - mv /etc/nginx/conf.d/ee-nginx.conf /etc/nginx/conf.d/ee-nginx.conf.old &>> /dev/null - fi - mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.old &>> /dev/null - apt-get update - apt-get -o Dpkg::Options::="--force-confmiss" -o Dpkg::Options::="--force-confold" -y install nginx-custom - fi - elif [ "$ee_distro_version" == "wheezy" ]; then - grep -Hr 'http://download.opensuse.org/repositories/home:/rtCamp:/EasyEngine/Debian_7.0/ /' /etc/apt/sources.list.d/ &>> /dev/null - #grep -Hr "deb http://packages.dotdeb.org wheezy all" /etc/apt/sources.list.d/ee-repo.list &>> /dev/null - if [[ $? -ne 0 ]]; then - # if [ -f /etc/apt/sources.list.d/dotdeb-wheezy.list ]; then - # rm -rf /etc/apt/sources.list.d/dotdeb-wheezy.list - # else - # sed -i "/deb http:\/\/packages.dotdeb.org wheezy all/d" /etc/apt/sources.list.d/ee-repo.list &>> /dev/null - # fi - echo -e "deb http://download.opensuse.org/repositories/home:/rtCamp:/EasyEngine/Debian_7.0/ /" >> /etc/apt/sources.list.d/ee-repo.list - gpg --keyserver "hkp://pgp.mit.edu" --recv-keys '3050AC3CD2AE6F03' - gpg -a --export --armor '3050AC3CD2AE6F03' | apt-key add - - if [ -f /etc/nginx/conf.d/ee-nginx.conf ]; then - mv /etc/nginx/conf.d/ee-nginx.conf /etc/nginx/conf.d/ee-nginx.conf.old &>> /dev/null - fi - mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.old &>> /dev/null - mv /etc/nginx/fastcgi_params /etc/nginx/fastcgi_params.old &>> /dev/null - apt-get update - apt-get -o Dpkg::Options::="--force-confmiss" -o Dpkg::Options::="--force-confold" -y install nginx-custom - fi - elif [ "$ee_distro_version" == "jessie" ]; then - - grep -Hr 'http://download.opensuse.org/repositories/home:/rtCamp:/EasyEngine/Debian_8.0/ /' /etc/apt/sources.list.d/ &>> /dev/null - #grep -Hr "deb http://packages.dotdeb.org jessie all" /etc/apt/sources.list.d/ee-repo.list &>> /dev/null - if [[ $? -ne 0 ]]; then - #sed -i "/deb http:\/\/packages.dotdeb.org jessie all/d" /etc/apt/sources.list.d/ee-repo.list &>> /dev/null - echo -e "deb http://download.opensuse.org/repositories/home:/rtCamp:/EasyEngine/Debian_8.0/ /" >> /etc/apt/sources.list.d/ee-repo.list - gpg --keyserver "hkp://pgp.mit.edu" --recv-keys '3050AC3CD2AE6F03' - gpg -a --export --armor '3050AC3CD2AE6F03' | apt-key add - - if [ -f /etc/nginx/conf.d/ee-nginx.conf ]; then - mv /etc/nginx/conf.d/ee-nginx.conf /etc/nginx/conf.d/ee-nginx.conf.old &>> /dev/null - fi - mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.old &>> /dev/null - mv /etc/nginx/fastcgi_params /etc/nginx/fastcgi_params.old &>> /dev/null - apt-get update - apt-get -o Dpkg::Options::="--force-confmiss" -o Dpkg::Options::="--force-confold" -y install nginx-custom - fi - fi - fi - - if [ -f /etc/nginx/nginx.conf ]; then - sed -i "s/.*X-Powered-By.*/\tadd_header X-Powered-By \"EasyEngine $ee_version_new\";/" /etc/nginx/nginx.conf &>> /dev/null - fi - - if [ -f /etc/nginx/conf.d/ee-plus.conf ]; then - sed -i "s/.*X-Powered-By.*/\tadd_header X-Powered-By \"EasyEngine $ee_version_new\";/" /etc/nginx/conf.d/ee-plus.conf &>> /dev/null - fi - - # Disable Xdebug on old systems if and only if ee debug is off - if [ -f /etc/php5/mods-available/xdebug.ini ]; then - ee_debug_value=$(grep -Hr 9001 /etc/nginx/conf.d/upstream.conf | wc -l ) - if [ $ee_debug_value -eq 1 ]; then - grep -Hr ";zend_extension" /etc/php5/mods-available/xdebug.ini &>> /dev/null - if [ $? -ne 0 ]; then - sed -i "s/zend_extension/;zend_extension/" /etc/php5/mods-available/xdebug.ini - fi - fi - fi - - # Fix HHVM autostart on reboot - dpkg --get-selections | grep -v deinstall | grep hhvm &>> /dev/null - if [ $? -eq 0 ]; then - update-rc.d hhvm defaults &>> /dev/null - fi - - # Fix WordPress example.html issue - # Ref: http://wptavern.com/xss-vulnerability-in-jetpack-and-the-twenty-fifteen-default-theme-affects-millions-of-wordpress-users - dpkg --get-selections | grep -v deinstall | grep nginx &>> /dev/null - if [ $? -eq 0 ]; then - cp /usr/lib/ee/templates/locations.mustache /etc/nginx/common/locations.conf &>> /dev/null - fi - - # Fix HHVM upstream issue that was preventing from using EasyEngine for site operations - if [ -f /etc/nginx/conf.d/upstream.conf ]; then - grep -Hr hhvm /etc/nginx/conf.d/upstream.conf &>> /dev/null - if [ $? -ne 0 ]; then - echo -e "upstream hhvm {\n# HHVM Pool\nserver 127.0.0.1:8000;\nserver 127.0.0.1:9000 backup;\n}\n" >> /etc/nginx/conf.d/upstream.conf - fi - fi - - # Fix HHVM server IP - if [ -f /etc/hhvm/server.ini ]; then - grep -Hr "hhvm.server.ip" /etc/hhvm/server.ini &>> /dev/null - if [ $? -ne 0 ]; then - echo -e "hhvm.server.ip = 127.0.0.1\n" >> /etc/hhvm/server.ini - fi - fi - - - # Rename Redis Header - if [ -f /etc/nginx/common/redis-hhvm.conf ]; then - sed -i "s/X-Cache /X-SRCache-Fetch-Status /g" /etc/nginx/common/redis-hhvm.conf &>> /dev/null - sed -i "s/X-Cache-2 /X-SRCache-Store-Status /g" /etc/nginx/common/redis-hhvm.conf &>> /dev/null - fi - - if [ -f /etc/nginx/common/redis.conf ]; then - sed -i "s/X-Cache /X-SRCache-Fetch-Status /g" /etc/nginx/common/redis.conf &>> /dev/null - sed -i "s/X-Cache-2 /X-SRCache-Store-Status /g" /etc/nginx/common/redis.conf &>> /dev/null - fi - - - if [ -f /etc/nginx/common/redis-hhvm.conf ]; then - # Update Timeout redis-hhvm.conf - grep -0 'redis2_query expire $key 6h' /etc/nginx/common/redis-hhvm.conf &>> /dev/null - if [ $? -eq 0 ]; then - sed -i 's/redis2_query expire $key 6h/redis2_query expire $key 14400/g' /etc/nginx/common/redis-hhvm.conf &>> /dev/null - fi - - #Fix for 3.3.4 redis-hhvm issue - grep -0 'HTTP_ACCEPT_ENCODING' /etc/nginx/common/redis-hhvm.conf &>> /dev/null - if [ $? -ne 0 ]; then - sed -i 's/fastcgi_params;/fastcgi_params;\n fastcgi_param HTTP_ACCEPT_ENCODING "";/g' /etc/nginx/common/redis-hhvm.conf &>> /dev/null - fi - fi - - # Fix for 3.3.2 renamed nginx.conf - nginx -V 2>&1 &>>/dev/null - if [[ $? -eq 0 ]]; then - nginx -t 2>&1 | grep 'open() "/etc/nginx/nginx.conf" failed' &>>/dev/null - if [[ $? -eq 0 ]]; then - if [ -f /etc/nginx/nginx.conf.old ]; then - if [ ! -f /etc/nginx/nginx.conf ]; then - cp /etc/nginx/nginx.conf.old /etc/nginx/nginx.conf - fi - fi - fi - # Fix for 3.3.2 renamed fastcgi_param - nginx -t 2>&1 | grep 'open() "/etc/nginx/fastcgi_params" failed' &>>/dev/null - if [[ $? -eq 0 ]]; then - if [ -f /etc/nginx/fastcgi_params.old ]; then - if [ ! -f /etc/nginx/fastcgi_params ]; then - cp /etc/nginx/fastcgi_params.old /etc/nginx/fastcgi_params - fi - fi - fi - fi - - -} - -# Do git intialisation -function ee_git_init() -{ - # Nginx under git version control - if [ -d /etc/nginx ];then - cd /etc/nginx - if [ ! -d /etc/nginx/.git ]; then - git init &>> /dev/null - fi - git add -A . - git commit -am "Updated Nginx" > /dev/null - fi - # EasyEngine under git version control - cd /etc/ee - if [ ! -d /etc/ee/.git ]; then - git init > /dev/null - fi - git add -A . - git commit -am "Installed/Updated to EasyEngine 3.x" &>> /dev/null - -} - -# Update EasyEngine -if [ -f /usr/local/sbin/easyengine ]; then - # Check old EasyEngine version - ee version | grep ${ee_version_old} &>> /dev/null - if [[ $? -ne 0 ]]; then - ee_lib_echo "EasyEngine $ee_version_old not found on your system" | tee -ai $ee_install_log - ee_lib_echo "Updating your EasyEngine to $ee_version_old for compability" | tee -ai $ee_install_log - wget -q https://raw.githubusercontent.com/rtCamp/easyengine/old-stable/bin/update && bash update - if [[ $? -ne 0 ]]; then - ee_lib_echo_fail "Unable to update EasyEngine to $ee_version_old, exit status = " $? - exit 100 - fi - fi - read -p "Update EasyEngine to $ee_version_new (y/n): " ee_ans - if [ "$ee_ans" = "y" ] || [ "$ee_ans" = "Y" ]; then - ee_install_dep | tee -ai $ee_install_log - ee_sync_db 2&>>1 $EE_INSTALL_LOG - secure_ee_db | tee -ai $EE_INSTALL_LOG - ee_install | tee -ai $ee_install_log - ee_update | tee -ai $ee_install_log - ee_update_latest | tee -ai $ee_install_log - ee_git_init | tee -ai $ee_install_log - else - ee_lib_error "Not updating EasyEngine to $ee_version_new, exit status = " 1 - fi -elif [ ! -f /usr/local/bin/ee ]; then - ee_install_dep | tee -ai $ee_install_log - ee_install | tee -ai $ee_install_log - secure_ee_db | tee -ai $EE_INSTALL_LOG - ee_git_init | tee -ai $ee_install_log - -else - ee -v 2>&1 | grep $ee_version_new &>> /dev/null - if [[ $? -ne 0 ]];then - read -p "Update EasyEngine to $ee_version_new (y/n): " ee_ans - if [ "$ee_ans" = "y" ] || [ "$ee_ans" = "Y" ]; then - ee_install_dep | tee -ai $ee_install_log - ee_sync_db 2&>>1 $EE_INSTALL_LOG - secure_ee_db | tee -ai $EE_INSTALL_LOG - ee_install | tee -ai $ee_install_log - ee_update_latest | tee -ai $ee_install_log - ee_git_init | tee -ai $ee_install_log - service nginx reload &>> /dev/null - service php5-fpm restart &>> /dev/null - else - ee_lib_error "Not updating EasyEngine to $ee_version_new, exit status = " 1 - fi - else - ee_lib_error "You already have EasyEngine $ee_version_new, exit status = " 1 - fi -fi -ee sync | tee -ai $EE_INSTALL_LOG - -echo -ee_lib_echo "For EasyEngine (ee) auto completion, run the following command" -echo -ee_lib_echo_info "source /etc/bash_completion.d/ee_auto.rc" -echo -ee_lib_echo "EasyEngine (ee) installed/updated successfully" -ee_lib_echo "EasyEngine (ee) help: http://docs.rtcamp.com/easyengine/" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 24fb2218..00000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -cement>=2.4.0 diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index a273d468..00000000 --- a/setup.cfg +++ /dev/null @@ -1,9 +0,0 @@ -[nosetests] -verbosity=3 -debug=0 -detailed-errors=1 -with-coverage=1 -cover-package=ee -cover-erase=1 -cover-html=1 -cover-html-dir=coverage_report/ diff --git a/setup.py b/setup.py deleted file mode 100644 index 71e6bf82..00000000 --- a/setup.py +++ /dev/null @@ -1,99 +0,0 @@ - -from setuptools import setup, find_packages -import sys -import os -import glob -import configparser -import re - -conf = [] -templates = [] - -long_description = '''EasyEngine is the commandline tool to manage your - Websites based on WordPress and Nginx with easy to use - commands''' - -for name in glob.glob('config/plugins.d/*.conf'): - conf.insert(1, name) - -for name in glob.glob('ee/cli/templates/*.mustache'): - templates.insert(1, name) - -if not os.path.exists('/var/log/ee/'): - os.makedirs('/var/log/ee/') - -if not os.path.exists('/var/lib/ee/'): - os.makedirs('/var/lib/ee/') - -# EasyEngine git function -config = configparser.ConfigParser() -config.read(os.path.expanduser("~")+'/.gitconfig') -try: - ee_user = config['user']['name'] - ee_email = config['user']['email'] -except Exception as e: - print("EasyEngine (ee) required your name & email address to track" - " changes you made under the Git version control") - print("EasyEngine (ee) will be able to send you daily reports & alerts in " - "upcoming version") - print("EasyEngine (ee) will NEVER send your information across") - - ee_user = input("Enter your name: ") - while ee_user is "": - print("Name not Valid, Please enter again") - ee_user = input("Enter your name: ") - - ee_email = input("Enter your email: ") - - while not re.match(r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$", - ee_email): - print("Invalid email address, please try again") - ee_email = input("Enter your email: ") - - os.system("git config --global user.name {0}".format(ee_user)) - os.system("git config --global user.email {0}".format(ee_email)) - -setup(name='ee', - version='3.3.9', - description=long_description, - long_description=long_description, - classifiers=[], - keywords='', - author='rtCamp Soultions Pvt. LTD', - author_email='ee@rtcamp.com', - url='http://rtcamp.com/easyengine', - license='MIT', - packages=find_packages(exclude=['ez_setup', 'examples', 'tests', - 'templates']), - include_package_data=True, - zip_safe=False, - test_suite='nose.collector', - install_requires=[ - # Required to build documentation - # "Sphinx >= 1.0", - # Required for testing - # "nose", - # "coverage", - # Required to function - 'cement == 2.4', - 'pystache', - 'python-apt', - 'pynginxconfig', - 'pymysql3 == 0.4', - 'psutil == 3.1.1', - 'sh', - 'sqlalchemy', - ], - data_files=[('/etc/ee', ['config/ee.conf']), - ('/etc/ee/plugins.d', conf), - ('/usr/lib/ee/templates', templates), - ('/etc/bash_completion.d/', - ['config/bash_completion.d/ee_auto.rc']), - ('/usr/share/man/man8/', ['docs/ee.8'])], - setup_requires=[], - entry_points=""" - [console_scripts] - ee = ee.cli.main:main - """, - namespace_packages=[], - ) diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/cli/13_test_stack.py b/tests/cli/13_test_stack.py deleted file mode 100644 index a108e594..00000000 --- a/tests/cli/13_test_stack.py +++ /dev/null @@ -1,76 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseStack(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_web(self): - self.app = get_test_app(argv=['stack', 'install', '--web']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_admin(self): - self.app = get_test_app(argv=['stack', 'install', '--admin']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_mail(self): - self.app = get_test_app(argv=['stack', 'install', '--mail']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_nginx(self): - self.app = get_test_app(argv=['stack', 'install', '--nginx']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_php(self): - self.app = get_test_app(argv=['stack', 'install', '--php']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_mysql(self): - self.app = get_test_app(argv=['stack', 'install', '--mysql']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_postfix(self): - self.app = get_test_app(argv=['stack', 'install', '--postfix']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_wpcli(self): - self.app = get_test_app(argv=['stack', 'install', '--wpcli']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_phpmyadmin(self): - self.app = get_test_app(argv=['stack', 'install', '--phpmyadmin']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_adminer(self): - self.app = get_test_app(argv=['stack', 'install', '--adminer']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_utils(self): - self.app = get_test_app(argv=['stack', 'install', '--utils']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/2_test_stack_services_start.py b/tests/cli/2_test_stack_services_start.py deleted file mode 100644 index de874afe..00000000 --- a/tests/cli/2_test_stack_services_start.py +++ /dev/null @@ -1,52 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseStack(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_start_nginx(self): - self.app = get_test_app(argv=['stack', 'start', '--nginx']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_start_php5_fpm(self): - self.app = get_test_app(argv=['stack', 'start', '--php']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_start_mysql(self): - self.app = get_test_app(argv=['stack', 'start', '--mysql']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_start_postfix(self): - self.app = get_test_app(argv=['stack', 'start', '--postfix']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_start_memcached(self): - self.app = get_test_app(argv=['stack', 'start', '--memcache']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_start_dovecot(self): - self.app = get_test_app(argv=['stack', 'start', '--dovecot']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_start_all(self): - self.app = get_test_app(argv=['stack', 'start']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/3_test_stack_services_status.py b/tests/cli/3_test_stack_services_status.py deleted file mode 100644 index 42bd65a8..00000000 --- a/tests/cli/3_test_stack_services_status.py +++ /dev/null @@ -1,52 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseStack(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_status_nginx(self): - self.app = get_test_app(argv=['stack', 'status', '--nginx']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_status_php5_fpm(self): - self.app = get_test_app(argv=['stack', 'status', '--php']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_status_mysql(self): - self.app = get_test_app(argv=['stack', 'status', '--mysql']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_status_postfix(self): - self.app = get_test_app(argv=['stack', 'status', '--postfix']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_status_memcached(self): - self.app = get_test_app(argv=['stack', 'status', '--memcache']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_status_dovecot(self): - self.app = get_test_app(argv=['stack', 'status', '--dovecot']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_status_all(self): - self.app = get_test_app(argv=['stack', 'status']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/4_test_stack_services_stop.py b/tests/cli/4_test_stack_services_stop.py deleted file mode 100644 index 9b6ece4b..00000000 --- a/tests/cli/4_test_stack_services_stop.py +++ /dev/null @@ -1,52 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseStack(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_stop_nginx(self): - self.app = get_test_app(argv=['stack', 'stop', '--nginx']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_stop_php5_fpm(self): - self.app = get_test_app(argv=['stack', 'stop', '--php']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_stop_mysql(self): - self.app = get_test_app(argv=['stack', 'stop', '--mysql']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_stop_postfix(self): - self.app = get_test_app(argv=['stack', 'stop', '--postfix']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_stop_memcached(self): - self.app = get_test_app(argv=['stack', 'stop', '--memcache']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_stop_dovecot(self): - self.app = get_test_app(argv=['stack', 'stop', '--dovecot']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_stop_all(self): - self.app = get_test_app(argv=['stack', 'stop']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/5_test_stack_services_restart.py b/tests/cli/5_test_stack_services_restart.py deleted file mode 100644 index 39d8825c..00000000 --- a/tests/cli/5_test_stack_services_restart.py +++ /dev/null @@ -1,52 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseStack(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_restart_nginx(self): - self.app = get_test_app(argv=['stack', 'restart', '--nginx']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_restart_php5_fpm(self): - self.app = get_test_app(argv=['stack', 'restart', '--php']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_restart_mysql(self): - self.app = get_test_app(argv=['stack', 'restart', '--mysql']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_restart_postfix(self): - self.app = get_test_app(argv=['stack', 'restart', '--postfix']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_restart_memcached(self): - self.app = get_test_app(argv=['stack', 'restart', '--memcache']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_restart_dovecot(self): - self.app = get_test_app(argv=['stack', 'restart', '--dovecot']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_services_restart_all(self): - self.app = get_test_app(argv=['stack', 'restart']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/8_test_site_create.py b/tests/cli/8_test_site_create.py deleted file mode 100644 index 3b3a2554..00000000 --- a/tests/cli/8_test_site_create.py +++ /dev/null @@ -1,73 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseSite(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_create_html(self): - self.app = get_test_app(argv=['site', 'create', 'example1.com', - '--html']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_create_php(self): - self.app = get_test_app(argv=['site', 'create', 'example2.com', - '--php']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_create_mysql(self): - self.app = get_test_app(argv=['site', 'create', 'example3.com', - '--mysql']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_create_wp(self): - self.app = get_test_app(argv=['site', 'create', 'example4.com', - '--wp']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_create_wpsubdir(self): - self.app = get_test_app(argv=['site', 'create', 'example5.com', - '--wpsubdir']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_create_wpsubdomain(self): - self.app = get_test_app(argv=['site', 'create', 'example6.com', - '--wpsubdomain']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_create_w3tc(self): - self.app = get_test_app(argv=['site', 'create', 'example7.com', - '--w3tc']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_create_wpfc(self): - self.app = get_test_app(argv=['site', 'create', 'example8.com', - '--wpfc']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_create_wpsc(self): - self.app = get_test_app(argv=['site', 'create', 'example9.com', - '--wpsc']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/91_test_site_info.py b/tests/cli/91_test_site_info.py deleted file mode 100644 index 1ecc2062..00000000 --- a/tests/cli/91_test_site_info.py +++ /dev/null @@ -1,16 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseSite(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_info(self): - self.app = get_test_app(argv=['site', 'info', 'example1.com']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/93_test_site_list.py b/tests/cli/93_test_site_list.py deleted file mode 100644 index 477e6915..00000000 --- a/tests/cli/93_test_site_list.py +++ /dev/null @@ -1,22 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseSite(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_list_enable(self): - self.app = get_test_app(argv=['site', 'list', '--enabled']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_list_disable(self): - self.app = get_test_app(argv=['site', 'list', '--disabled']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/95_test_site_show.py b/tests/cli/95_test_site_show.py deleted file mode 100644 index 606578a6..00000000 --- a/tests/cli/95_test_site_show.py +++ /dev/null @@ -1,16 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseSite(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_show_edit(self): - self.app = get_test_app(argv=['site', 'show', 'example1.com']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/97_test_site_update.py b/tests/cli/97_test_site_update.py deleted file mode 100644 index 38b0c0ab..00000000 --- a/tests/cli/97_test_site_update.py +++ /dev/null @@ -1,73 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseSite(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_update_html(self): - self.app = get_test_app(argv=['site', 'update', 'example2.com', - '--html']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_update_php(self): - self.app = get_test_app(argv=['site', 'update', 'example1.com', - '--php']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_update_mysql(self): - self.app = get_test_app(argv=['site', 'update', 'example1.com', - '--html']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_update_wp(self): - self.app = get_test_app(argv=['site', 'update', 'example5.com', - '--wp']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_update_wpsubdir(self): - self.app = get_test_app(argv=['site', 'update', 'example4.com', - '--wpsubdir']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_update_wpsubdomain(self): - self.app = get_test_app(argv=['site', 'update', 'example7.com', - '--wpsubdomain']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_update_w3tc(self): - self.app = get_test_app(argv=['site', 'update', 'example8.com', - '--w3tc']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_update_wpfc(self): - self.app = get_test_app(argv=['site', 'update', 'example9.com', - '--wpfc']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_update_wpsc(self): - self.app = get_test_app(argv=['site', 'update', 'example6.com', - '--wpsc']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/9_test_site_enable.py b/tests/cli/9_test_site_enable.py deleted file mode 100644 index 87cc4f85..00000000 --- a/tests/cli/9_test_site_enable.py +++ /dev/null @@ -1,16 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseSite(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_enable(self): - self.app = get_test_app(argv=['site', 'enable', 'example2.com']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/__init__.py b/tests/cli/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/cli/a_test_site_disable.py b/tests/cli/a_test_site_disable.py deleted file mode 100644 index 3d948f77..00000000 --- a/tests/cli/a_test_site_disable.py +++ /dev/null @@ -1,16 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseSite(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_disable(self): - self.app = get_test_app(argv=['site', 'disable', 'example2.com']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/ext/__init__.py b/tests/cli/ext/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/cli/plugins/__init__.py b/tests/cli/plugins/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/cli/plugins/test_example.py b/tests/cli/plugins/test_example.py deleted file mode 100644 index 860a5485..00000000 --- a/tests/cli/plugins/test_example.py +++ /dev/null @@ -1,8 +0,0 @@ -"""Tests for Example Plugin.""" - -from ee.utils import test - -class ExamplePluginTestCase(test.EETestCase): - def test_load_example_plugin(self): - self.app.setup() - self.app.plugin.load_plugin('example') diff --git a/tests/cli/test_clean.py b/tests/cli/test_clean.py deleted file mode 100644 index 39254bff..00000000 --- a/tests/cli/test_clean.py +++ /dev/null @@ -1,40 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseClean(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_clean(self): - self.app = get_test_app(argv=['clean']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_clean_fastcgi(self): - self.app = get_test_app(argv=['clean', '--fastcgi']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_clean_all(self): - self.app = get_test_app(argv=['clean', '--all']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_clean_memcache(self): - self.app = get_test_app(argv=['clean', '--memcache']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_clean_opcache(self): - self.app = get_test_app(argv=['clean', '--opcache']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/test_debug.py b/tests/cli/test_debug.py deleted file mode 100644 index ba071001..00000000 --- a/tests/cli/test_debug.py +++ /dev/null @@ -1,95 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseDebug(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_stop(self): - self.app = get_test_app(argv=['debug', '--stop']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_start(self): - self.app = get_test_app(argv=['debug', '--start']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_php(self): - self.app = get_test_app(argv=['debug', '--php']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_nginx(self): - self.app = get_test_app(argv=['debug', '--nginx']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_rewrite(self): - self.app = get_test_app(argv=['debug', '--rewrite']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_fpm(self): - self.app = get_test_app(argv=['debug', '--fpm']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_mysql(self): - self.app = get_test_app(argv=['debug', '--mysql']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_import_slow_log_interval(self): - self.app = get_test_app(argv=['debug', '--mysql', - '--import-slow-log-interval']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_site_name_mysql(self): - self.app = get_test_app(argv=['debug', 'example3.com', '--mysql']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_site_name_wp(self): - self.app = get_test_app(argv=['debug', 'example4.com', '--wp']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_site_name_nginx(self): - self.app = get_test_app(argv=['debug', 'example4.com', '--nginx']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_site_name_start(self): - self.app = get_test_app(argv=['debug', 'example1.com', '--start']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_site_name_stop(self): - self.app = get_test_app(argv=['debug', 'example1.com', '--stop']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_debug_site_name_rewrite(self): - self.app = get_test_app(argv=['debug', 'example1.com', '--rewrite']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/test_info.py b/tests/cli/test_info.py deleted file mode 100644 index 0c36edb4..00000000 --- a/tests/cli/test_info.py +++ /dev/null @@ -1,28 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseInfo(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_info_mysql(self): - self.app = get_test_app(argv=['info', '--mysql']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_info_php(self): - self.app = get_test_app(argv=['info', '--php']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_info_nginx(self): - self.app = get_test_app(argv=['info', '--nginx']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/test_secure.py b/tests/cli/test_secure.py deleted file mode 100644 index d867a2e8..00000000 --- a/tests/cli/test_secure.py +++ /dev/null @@ -1,28 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseSecure(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_secure_auth(self): - self.app = get_test_app(argv=['secure', '--auth']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_secure_port(self): - self.app = get_test_app(argv=['secure', '--port']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_secure_ip(self): - self.app = get_test_app(argv=['secure', '--ip']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/test_site_delete.py b/tests/cli/test_site_delete.py deleted file mode 100644 index b9f204ea..00000000 --- a/tests/cli/test_site_delete.py +++ /dev/null @@ -1,38 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseSite(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_detele(self): - self.app = get_test_app(argv=['site', 'delete', 'example1.com', - '--no-prompt']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_detele_all(self): - self.app = get_test_app(argv=['site', 'delete', 'example2.com', - '--all', '--no-prompt']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_detele_db(self): - self.app = get_test_app(argv=['site', 'delete', 'example3.com', - '--db', '--no-prompt']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_site_detele_files(self): - self.app = get_test_app(argv=['site', 'delete', 'example4.com', - '--files', '--no-prompt']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/test_stack_purge.py b/tests/cli/test_stack_purge.py deleted file mode 100644 index 433b23d4..00000000 --- a/tests/cli/test_stack_purge.py +++ /dev/null @@ -1,76 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseStack(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_purge_web(self): - self.app = get_test_app(argv=['stack', 'purge', '--web']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_purge_admin(self): - self.app = get_test_app(argv=['stack', 'purge', '--admin']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_purge_mail(self): - self.app = get_test_app(argv=['stack', 'purge', '--mail']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_purge_nginx(self): - self.app = get_test_app(argv=['stack', 'purge', '--nginx']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_purge_php(self): - self.app = get_test_app(argv=['stack', 'purge', '--php']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_purge_mysql(self): - self.app = get_test_app(argv=['stack', 'purge', '--mysql']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_purge_postfix(self): - self.app = get_test_app(argv=['stack', 'purge', '--postfix']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_purge_wpcli(self): - self.app = get_test_app(argv=['stack', 'purge', '--wpcli']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_purge_phpmyadmin(self): - self.app = get_test_app(argv=['stack', 'purge', '--phpmyadmin']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_purge_adminer(self): - self.app = get_test_app(argv=['stack', 'purge', '--adminer']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_purge_utils(self): - self.app = get_test_app(argv=['stack', 'purge', '--utils']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/cli/test_stack_remove.py b/tests/cli/test_stack_remove.py deleted file mode 100644 index 54338373..00000000 --- a/tests/cli/test_stack_remove.py +++ /dev/null @@ -1,76 +0,0 @@ -from ee.utils import test -from ee.cli.main import get_test_app - - -class CliTestCaseStack(test.EETestCase): - - def test_ee_cli(self): - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_remove_web(self): - self.app = get_test_app(argv=['stack', 'remove', '--web']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_admin(self): - self.app = get_test_app(argv=['stack', 'remove', '--admin']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_mail(self): - self.app = get_test_app(argv=['stack', 'remove', '--mail']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_nginx(self): - self.app = get_test_app(argv=['stack', 'remove', '--nginx']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_php(self): - self.app = get_test_app(argv=['stack', 'remove', '--php']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_mysql(self): - self.app = get_test_app(argv=['stack', 'remove', '--mysql']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_postfix(self): - self.app = get_test_app(argv=['stack', 'remove', '--postfix']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_wpcli(self): - self.app = get_test_app(argv=['stack', 'remove', '--wpcli']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_phpmyadmin(self): - self.app = get_test_app(argv=['stack', 'remove', '--phpmyadmin']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_adminer(self): - self.app = get_test_app(argv=['stack', 'remove', '--adminer']) - self.app.setup() - self.app.run() - self.app.close() - - def test_ee_cli_stack_install_utils(self): - self.app = get_test_app(argv=['stack', 'remove', '--utils']) - self.app.setup() - self.app.run() - self.app.close() diff --git a/tests/core/__init__.py b/tests/core/__init__.py deleted file mode 100644 index e69de29b..00000000