File: //bigscoots/wpo/extras/wpadmin_user.sh
#!/bin/bash
# Add WordPress Admin User Or Update w/ New Password
# TODO:
# Multisite Support Needed
WPUSERNAME='bigscoots'
WPEMAIL='[email protected]'
WPEMAIL_BACKUP='[email protected]'
WPPASSWORD=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 20)
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
# Set proper flags
set_wp_cli_flags() {
if wp option get siteurl --allow-root --skip-plugins --skip-themes >/dev/null 2>&1; then
WPCLIFLAGS="--allow-root --skip-plugins --skip-themes"
elif wp option get siteurl --allow-root --skip-plugins >/dev/null 2>&1; then
WPCLIFLAGS="--allow-root --skip-plugins"
elif wp option get siteurl --allow-root --skip-themes >/dev/null 2>&1; then
WPCLIFLAGS="--allow-root --skip-themes"
else
WPCLIFLAGS="--allow-root"
fi
}
# Obtain admin URL, first check for plugins that change name
set_wp_cli_flags
if wp ${WPCLIFLAGS} plugin is-active rename-wp-login
then
ADMINPAGE=$(wp ${WPCLIFLAGS} option get rwl_page)
SITEURL=$(wp ${WPCLIFLAGS} option get siteurl)/${ADMINPAGE}/
elif wp ${WPCLIFLAGS} plugin is-active wps-hide-login
then
ADMINPAGE=$(wp ${WPCLIFLAGS} option get whl_page)
SITEURL=$(wp ${WPCLIFLAGS} option get siteurl)/${ADMINPAGE}/
elif wp ${WPCLIFLAGS} plugin is-active wp-defender
then
ADMINPAGE=$(wp ${WPCLIFLAGS} option get wd_masking_login_settings --format=json | jq -r 'fromjson | .mask_url')
SITEURL=$(wp ${WPCLIFLAGS} option get siteurl)/${ADMINPAGE}/
elif wp ${WPCLIFLAGS} plugin is-active hide-login-page
then
ADMINPAGE=$(wp ${WPCLIFLAGS} option get wbcr_hlp_login_path)
SITEURL=$(wp ${WPCLIFLAGS} option get siteurl)/${ADMINPAGE}/
elif wp ${WPCLIFLAGS} plugin is-active better-wp-security
then
ADMINPAGE=$(wp ${WPCLIFLAGS} option get itsec-storage --format=json | jq -r '.["hide-backend"].slug')
SITEURL=$(wp ${WPCLIFLAGS} option get siteurl)/${ADMINPAGE}/
else
SITEURL=$(wp ${WPCLIFLAGS} option get siteurl)/wp-admin/
fi 2>/dev/null
# Ensure Path is WP
if [[ ! $? -eq 0 ]]; then
echo -e "${RED}FAILURE:${NC} Unable to locate WordPress site."
exit 1
fi
# Create User
function WP_USER_CREATE () {
WPUSERCREATE=$(wp ${WPCLIFLAGS} user create "${WPUSERNAME}" "${WPEMAIL}" --role=administrator --user_pass="${WPPASSWORD}" >/dev/null 2>&1)
# If User Creation Exit Status == 0 (Creation Successful); Output PW; Else; Check if Email In-Use
if [[ $? -eq 0 ]]; then
echo -e "${GREEN}Success:${NC} The '${WPUSERNAME}' user was created on ${SITEURL}"
echo "Password: ${WPPASSWORD}"
else
WPEMAILCHECK=$(wp ${WPCLIFLAGS} user list --field=user_email | grep "${WPEMAIL}" >/dev/null 2>&1)
# If Email Check Exit Status == 0 (Email Exists); Switch to Secondary Email & Re-Run Function; Else; Output Failure
if [[ $? -eq 0 ]]; then
WPEMAIL=${WPEMAIL_BACKUP}
WP_USER_CREATE
else
echo -e "${RED}FAILURE:${NC} The '${WPUSERNAME}' user could not be created on ${SITEURL}"
exit 1
fi
fi
}
# Update User
function WP_USER_UPDATE () {
WPUSERUPDATE=$(wp ${WPCLIFLAGS} user update "${WPUSERNAME}" --user_pass="${WPPASSWORD}" --role=administrator >/dev/null 2>&1)
# If User Update Exit Status == 0 (Update Successful); Output PW; Else; Output Failure
if [[ $? -eq 0 ]]; then
echo -e "${GREEN}Success:${NC} The '${WPUSERNAME}' user was updated on ${SITEURL}"
echo "New Password: ${WPPASSWORD}"
else
echo -e "${RED}FAILURE:${NC} The '${WPUSERNAME}' user could not be updated on ${SITEURL}"
exit 1
fi
}
# Remove User
function WP_USER_REMOVE () {
screen -dmS "REMBSUSER" bash -c "sleep 21600 ; wp ${WPCLIFLAGS} user delete ${WPUSERNAME} --yes --path=${PWD} >/dev/null 2>&1"
}
# Check if WP User Exists
WPUSERCHECK=$(wp ${WPCLIFLAGS} user get ${WPUSERNAME} >/dev/null 2>&1)
# If User Check Exit Status == 0 (User Exists); Update User; Else; Create User
if [[ $? -eq 0 ]]; then
WP_USER_UPDATE
WP_USER_REMOVE
else
WP_USER_CREATE
WP_USER_REMOVE
fi