File: //var/packages/WordPress/scripts/script_customized
#!/bin/bash
# Copyright (c) 2000-2017 Synology Inc. All rights reserved.
CustomChangeDBUserInfo()
{
local path="$1"
local db_user="$2"
local db_pass="$(echo "$3" | EscapeStandardSedStringOnPHP )"
if [ -f "$path/$CONF_FILE" ]; then
sed -i "s/define('DB_USER'.*/define('DB_USER','$db_user');/g" "$path/$CONF_FILE"
sed -i "s/define('DB_PASSWORD'.*/define('DB_PASSWORD','$db_pass');/g" "$path/$CONF_FILE"
fi
}
CustomRemove()
{
rm -rf "/var/packages/.has_run_wp.conf"
}
BackupWPConf()
{
local backup_prefix=$(CustomGetBackupPrefix)
[ -d "$backup_prefix" ] || mkdir -p "$backup_prefix"
if [ -s "$WEBSITE_ROOT/$CONF_FILE" ]; then
cp -a "$WEBSITE_ROOT/$CONF_FILE" "$backup_prefix/"
fi
}
WriteBackupInfo() {
echo "path=$(CustomGetBackupPrefix)" > "$INFO_FILE"
echo "version=$SYNOPKG_OLD_PKGVER" >> "$INFO_FILE"
}
EscapeOldBackup()
{
# Remove nginx config
rm -f "$NGINX_CONF_PATH/$PKG_NGINX_CONFIG"
# Escape old backup steps
echo "#!/bin/bash" > "/var/packages/WordPress/scripts/preuninst"
echo "exit 0" >> "/var/packages/WordPress/scripts/preuninst"
}
RemoveObsoletePlugins()
{
local obsoletePlugins=("insert-from-photostation" "syno_ps_tinymce" "photostation")
for plugin in ${obsoletePlugins[*]}; do
local plugin_folder_path="$BACKUP_PATH/wp-content/plugins/$plugin"
if [ ! -e "${plugin_folder_path}" ]; then
continue
fi
# Remove obsolete plugin
rm -r "${plugin_folder_path}"
if [ $? -ne "0" ]; then
echo "[WordPress] Fail to delete plugin ($plugin)"
else
echo "[WordPress] plugin ($plugin) deleted successfully"
fi
done
}
CustomPreupgrade()
{
local old_build_number=$(echo "$SYNOPKG_OLD_PKGVER" | cut -d- -f2)
if [ "$old_build_number" -le "0140" ]; then
CustomBackupData
EscapeOldBackup
WriteBackupInfo
fi
}
CustomBackupData()
{
local backup_prefix=$(CustomGetBackupPrefix)
[ -d "$backup_prefix" ] || mkdir -p "$backup_prefix"
local need_backup="$CONF_FILE wp-content wp-images .htaccess.syno robots.txt index.php wp-includes/languages"
for item in $need_backup; do
if [ -e "$WEBSITE_ROOT/$item" ]; then
mkdir -p "$backup_prefix/$(dirname "$item")"
cp -a "$WEBSITE_ROOT/$item" "$backup_prefix/$(dirname "$item")"
fi
done
rm -rf "$backup_prefix/wp-content/cache" "$backup_prefix/wp-content/plugins/widgets"
cp -a "$WEBSITE_ROOT" "$backup_prefix"
pushd "$backup_prefix/$PKG_DIR" > /dev/null
rm -rf "wp-"* "readme.html" "wp.php" "xmlrpc.php" "license.txt"
popd > /dev/null
}
CustomSetWebsiteRoot()
{
mv "$SYNOPKG_PKGDEST/src" "$WEBSITE_ROOT"
}
HideCoreUpgrade()
{
if [ ! -s "$WEBSITE_ROOT/$CONF_FILE" ]; then
exit 1
fi
if ! grep -q "AUTOMATIC_UPDATER_DISABLED" "$WEBSITE_ROOT/$CONF_FILE"; then
echo "define( 'AUTOMATIC_UPDATER_DISABLED', true );" >> "$WEBSITE_ROOT/$CONF_FILE"
fi
if ! grep -q "pre_site_transient_update_core" "$WEBSITE_ROOT/$CONF_FILE"; then
echo "add_filter('pre_site_transient_update_core','__return_null');" >> "$WEBSITE_ROOT/$CONF_FILE"
fi
}
SetSecurityKeys()
{
local security_key="AUTH_KEY SECURE_AUTH_KEY LOGGED_IN_KEY NONCE_KEY AUTH_SALT SECURE_AUTH_SALT LOGGED_IN_SALT NONCE_SALT"
local rand_key
for key_name in $security_key; do
rand_key=$(env RANDFILE=/tmp/.rnd openssl rand -base64 48)
sed -i "/'$key_name'/c\\define('$key_name','$rand_key');" "$WEBSITE_ROOT/$CONF_FILE"
done
}
CustomRestoreUpgrade()
{
if [ -d "$BACKUP_PATH/$PKG_DIR" ]; then
cp -a "$BACKUP_PATH/$PKG_DIR" "$(dirname "$WEBSITE_ROOT")"
rm -rf "$BACKUP_PATH/$PKG_DIR"
fi
# Clear default plugin files extracted to WEBSITE_ROOT, to keep the akismet installation identical after the restore/upgrade
rm -rf "$WEBSITE_ROOT/wp-content/plugins/akismet"
RemoveObsoletePlugins
cp -a "$BACKUP_PATH"/* "$WEBSITE_ROOT"
cp -a "$BACKUP_PATH/.htaccess.syno" "$WEBSITE_ROOT"
# Remove html files which cause DOM XSS if existed
rm -f "$WEBSITE_ROOT/wp-content/themes/twenty*/genericons/example.html"
rm -f "$WEBSITE_ROOT/wp-config-sample.php"
HideCoreUpgrade
# Bug 148 after upgrading, able to install from https
sed -i "s#if (\$_SERVER\[\"SERVER_PORT\"\] != \"80\")#if (\$_SERVER\[\"SERVER_PORT\"\] != \"80\" and \$_SERVER\[\"SERVER_PORT\"\] != \"443\")#g" "$WEBSITE_ROOT/$CONF_FILE"
# remove synology custom setting in wp-config.php
sed -i '/pageURL/,/Synology Inc/d' "$WEBSITE_ROOT/$CONF_FILE"
sed -i '/syno-misc\.php/d' "$WEBSITE_ROOT/$CONF_FILE"
RemoveHandler
}
CustomUseUnixSocket()
{
sed -i "s|'DB_HOST',.*|'DB_HOST','localhost:$UNIX_SOCKET');|g" "$WEBSITE_ROOT/$CONF_FILE"
}
CustomSetInit()
{
if ! CustomHasRunWebsiteSetup "$WEBSITE_ROOT"; then
mv "$WEBSITE_ROOT/wp-config-sample.php" "$WEBSITE_ROOT/$CONF_FILE"
local pass_modify=$(echo "$DB_USER_PASS" | EscapeStandardSedStringOnPHP )
sed -i "s|'DB_NAME',.*|'DB_NAME','$DB_NAME');|g" "$WEBSITE_ROOT/$CONF_FILE"
sed -i "s|'DB_USER',.*|'DB_USER','$DB_USER');|g" "$WEBSITE_ROOT/$CONF_FILE"
sed -i "s/'DB_PASSWORD',.*/'DB_PASSWORD','$pass_modify');/g" "$WEBSITE_ROOT/$CONF_FILE"
SetSecurityKeys
fi
}
CustomStart()
{
local ini_source="/var/packages/WordPress/target/synology_added/etc/SYNO.SDS.WordPress.ini"
local ini_dest="/usr/local/etc/php74/cli/conf.d/"
cp $ini_source $ini_dest
restart pkg-WebStation-php74
}
CustomStop()
{
local ini_dest="/usr/local/etc/php74/cli/conf.d/"
rm "$ini_dest/SYNO.SDS.WordPress.ini"
restart pkg-WebStation-php74
}