diff options
author | root <root@vps-18a7a2b7.vps.ovh.ca> | 2024-02-15 14:22:29 -0500 |
---|---|---|
committer | root <root@vps-18a7a2b7.vps.ovh.ca> | 2024-02-15 14:22:29 -0500 |
commit | d21659f025afef4c55f74b87869fc33564342c78 (patch) | |
tree | fe82cccc3c0a703dedae5fb0b55ed7c6ae0b69d2 | |
parent | ee1e699060a1cdaefffe7c69995a35183b37b086 (diff) |
wordpress-config-info integrations and improvements related to its new interface
-rw-r--r-- | database-test.bash | 33 | ||||
-rwxr-xr-x | wordpress/wordpress-config-info | 155 | ||||
-rwxr-xr-x | wordpress/wordpress-list-users | 36 | ||||
-rwxr-xr-x | wordpress/wordpress-mysql | 21 |
4 files changed, 129 insertions, 116 deletions
diff --git a/database-test.bash b/database-test.bash index 4a20e68..1488b88 100644 --- a/database-test.bash +++ b/database-test.bash | |||
@@ -10,8 +10,23 @@ json_to_shell() | |||
10 | .[] | | 10 | .[] | |
11 | @sh "declare \(.key)=\(.value);" ' | 11 | @sh "declare \(.key)=\(.value);" ' |
12 | } | 12 | } |
13 | [ "$1" ] | 13 | case $# in |
14 | eval "$(wordpress-config-info "$1" | json_to_shell)" | 14 | 0 ) |
15 | wordpress-config-info | | ||
16 | while read cfg | ||
17 | do | ||
18 | "$SHELL" "$0" "$cfg" || break | ||
19 | done | ||
20 | exit | ||
21 | ;; | ||
22 | 1 ) | ||
23 | [ "$1" ] | ||
24 | eval "$(wordpress-config-info "$1" | json_to_shell)" | ||
25 | ;; | ||
26 | * ) | ||
27 | exit 3 | ||
28 | ;; | ||
29 | esac | ||
15 | 30 | ||
16 | [ "$db_user" ] | 31 | [ "$db_user" ] |
17 | [ "$db_password" ] | 32 | [ "$db_password" ] |
@@ -25,11 +40,19 @@ else | |||
25 | mariadb_tls_args=() | 40 | mariadb_tls_args=() |
26 | fi | 41 | fi |
27 | 42 | ||
28 | mariadb "${mariadb_tls_args[@]}" \ | 43 | mariadb \ |
44 | "${mariadb_tls_args[@]}" \ | ||
29 | --user="$db_user" \ | 45 | --user="$db_user" \ |
30 | --password="$db_password" \ | 46 | --password="$db_password" \ |
31 | --host="$db_host" \ | 47 | --host="$db_host" \ |
32 | -- "$db_name" <<. | 48 | -- "$db_name" <<. |
33 | select @@have_ssl, user()\G | 49 | select |
34 | show grants; | 50 | @@hostname |
51 | , user() | ||
52 | as | ||
53 | login | ||
54 | \G | ||
55 | show | ||
56 | grants | ||
57 | ; | ||
35 | . | 58 | . |
diff --git a/wordpress/wordpress-config-info b/wordpress/wordpress-config-info index 74f0c98..d27c1e6 100755 --- a/wordpress/wordpress-config-info +++ b/wordpress/wordpress-config-info | |||
@@ -29,17 +29,6 @@ wp_config_export_defines() | |||
29 | { | 29 | { |
30 | set -- "$wp_config" | 30 | set -- "$wp_config" |
31 | wp_config_get_defines | | 31 | wp_config_get_defines | |
32 | while read kv | ||
33 | do | ||
34 | set -- "${kv%%=*}" "${kv#*=}" | ||
35 | jq -cn '{ ($k): $v }' --arg k "$1" --arg v "$2" | ||
36 | done | jq -s '{filename: $fn, defines: .}' --arg fn "$1" | ||
37 | } | ||
38 | |||
39 | wp_config_export_defines() | ||
40 | { | ||
41 | set -- "$wp_config" | ||
42 | wp_config_get_defines | | ||
43 | env_to_json | | 32 | env_to_json | |
44 | jq -s '{filename: $fn, defines: .}' --arg fn "$1" | 33 | jq -s '{filename: $fn, defines: .}' --arg fn "$1" |
45 | } | 34 | } |
@@ -53,26 +42,26 @@ wp_config_export_all() | |||
53 | ) | jq -s add | 42 | ) | jq -s add |
54 | } | 43 | } |
55 | 44 | ||
56 | wp_config_get_defines() | 45 | wp_config_get_string_defines() |
57 | { | 46 | { |
58 | sed -n -e 's/\r//g' \ | 47 | sed -n -e 's/\r//g' \ |
59 | -e "s/^define *( *'\([^']*\)' *, *'\([^']*\)' *) *;.*$/\1=\2/p" \ | 48 | -e "s/^define *( *'\([^']*\)' *, *'\([^']*\)' *) *;.*$/\1=\2/p" \ |
60 | -e "s/^define *( *'\([^']*\)' *, *\([A-Z][A-Z_ |]*\) *) *;.*$/~raw~\1=\2/p" \ | 49 | < "$wp_config" |
61 | < "$wp_config" | ||
62 | } | 50 | } |
63 | 51 | ||
64 | wp_config_get_define() | 52 | wp_config_get_raw_defines() |
65 | { | 53 | { |
66 | sed -e 's/\r//g' -ne \ | 54 | sed -n -e 's/\r//g' \ |
67 | "s/^define *( *'$1' *, *'\([^']*\)' *) *; *$/\1/p" \ | 55 | -e "s/^define *( *'\([^']*\)' *, *\([A-Z][A-Z_ |]*\) *) *;.*$/\1=\2/p" \ |
68 | < "$wp_config" | 56 | < "$wp_config" |
69 | } | 57 | } |
70 | 58 | ||
71 | wp_config_get_assign() | 59 | wp_config_get_defines() |
72 | { | 60 | { |
73 | sed -e 's/\r//g' -ne \ | 61 | sed -n -e 's/\r//g' \ |
74 | "s/^\$${1} *= *'\\([^']*\\)' *; *$/\\1/p" \ | 62 | -e "s/^define *( *'\([^']*\)' *, *'\([^']*\)' *) *;.*$/\1=\2/p" \ |
75 | < "$wp_config" | 63 | -e "s/^define *( *'\([^']*\)' *, *\([A-Z][A-Z_ |]*\) *) *;.*$/~raw~\1=\2/p" \ |
64 | < "$wp_config" | ||
76 | } | 65 | } |
77 | 66 | ||
78 | wp_config_get_assigns() | 67 | wp_config_get_assigns() |
@@ -93,8 +82,6 @@ find_wp_config() | |||
93 | 82 | ||
94 | for wp_config in \ | 83 | for wp_config in \ |
95 | "$1" \ | 84 | "$1" \ |
96 | "$1"/wp-config.php \ | ||
97 | "$1"/wordpress/wp-config.php \ | ||
98 | "$1"/public_html/wp-config.php \ | 85 | "$1"/public_html/wp-config.php \ |
99 | "$1"/public_html/wordpress/wp-config.php | 86 | "$1"/public_html/wordpress/wp-config.php |
100 | do | 87 | do |
@@ -106,36 +93,9 @@ find_wp_config() | |||
106 | false | 93 | false |
107 | } | 94 | } |
108 | 95 | ||
109 | if [ $# = 0 ] | ||
110 | then | ||
111 | prefix=/srv/ | ||
112 | suffix=/public_html | ||
113 | json='[ { site: $SITE, wordpress_config: . } ]' | ||
114 | declare -a sites=( $prefix*$suffix ) | ||
115 | for SITE in "${sites[@]}" | ||
116 | do | ||
117 | SITE=${SITE%$suffix} | ||
118 | SITE=${SITE#$prefix} | ||
119 | "$0" "$SITE" | jq --arg SITE "$SITE" "$json" || exit 7 | ||
120 | #"$0" "$SITE" || exit 7 | ||
121 | done | | ||
122 | jq -s add | ||
123 | exit | ||
124 | elif [ $# != 1 ] | ||
125 | then | ||
126 | exit -1 | ||
127 | fi | ||
128 | |||
129 | find_wp_config "$1" || exit 0 | ||
130 | |||
131 | new_interface_to_old_interface() | ||
132 | { | ||
133 | jq '.[] | .wordpress_config | {defines, assigns} | .' | ||
134 | } | ||
135 | |||
136 | new_interface_to_old_interface() | 96 | new_interface_to_old_interface() |
137 | { | 97 | { |
138 | jq '.[] | .wordpress_config | | 98 | jq ' |
139 | { defines: .defines | add | 99 | { defines: .defines | add |
140 | , assigns: .assigns | add | 100 | , assigns: .assigns | add |
141 | } | | 101 | } | |
@@ -145,50 +105,59 @@ new_interface_to_old_interface() | |||
145 | , db_name: .defines.DB_NAME | 105 | , db_name: .defines.DB_NAME |
146 | , table_prefix: .assigns.table_prefix | 106 | , table_prefix: .assigns.table_prefix |
147 | }' | 107 | }' |
148 | } | 108 | } |
149 | 109 | ||
150 | OLD_INTERFACE=y | 110 | find_wp_conf() |
151 | if [ "$NEW_INTERFACE" ] | 111 | { |
152 | then | 112 | local htdir="$1" conf |
153 | OLD_INTERFACE= | 113 | for conf in \ |
154 | fi | 114 | "$htdir"/wp-config.php \ |
155 | if [ "$OLD_INTERFACE" ] | 115 | "$htdir"/wordpress/wp-config.php |
116 | do | ||
117 | if [ -f "$conf" ] | ||
118 | then | ||
119 | printf '%s\n' "$conf" | ||
120 | return | ||
121 | fi | ||
122 | done | ||
123 | false | ||
124 | } | ||
125 | |||
126 | find_all_wordpress_sites() | ||
127 | { | ||
128 | local htdir | ||
129 | for htdir in /srv/*/public_html | ||
130 | do | ||
131 | find_wp_conf "$htdir" || continue | ||
132 | done | ||
133 | } | ||
134 | |||
135 | if [ $# = 0 ] | ||
156 | then | 136 | then |
157 | OLD_INTERFACE= NEW_INTERFACE=y "$0" "$@" | new_interface_to_old_interface | 137 | find_all_wordpress_sites |
158 | exit | 138 | exit |
139 | elif [ "$*" = '--all' ] | ||
140 | then | ||
141 | "$0" | | ||
142 | while read wp_file | ||
143 | do | ||
144 | "$0" "$wp_file" || exit 7 | ||
145 | done | ||
146 | elif [ $# != 1 ] | ||
147 | then | ||
148 | exit -1 | ||
159 | fi | 149 | fi |
160 | 150 | ||
161 | wp_config_export_all | | 151 | if ! find_wp_config "$1" |
162 | jq --arg SITE "$1" '[ { site: $SITE, wordpress_config: . } ]' | 152 | then |
163 | exit | 153 | echo "Error: no wp config found. Argument: ${1@Q}" >&2 |
164 | 154 | exit 4 | |
165 | 155 | fi | |
166 | |||
167 | |||
168 | |||
169 | |||
170 | |||
171 | 156 | ||
157 | if [ "$NEW_INTERFACE" ] | ||
158 | then | ||
159 | wp_config_export_all | ||
160 | else | ||
161 | wp_config_export_all | new_interface_to_old_interface | ||
162 | fi | ||
172 | 163 | ||
173 | exit | ||
174 | db_name=$(wp_config_get_define DB_NAME) | ||
175 | [ "$db_name" ] | ||
176 | db_host=$(wp_config_get_define DB_HOST) | ||
177 | [ "$db_host" ] | ||
178 | db_user=$(wp_config_get_define DB_USER) | ||
179 | [ "$db_user" ] | ||
180 | db_password=$(wp_config_get_define DB_PASSWORD) | ||
181 | [ "$db_password" ] | ||
182 | table_prefix=$(wp_config_get_assign table_prefix) | ||
183 | jq -n \ | ||
184 | --arg h "$db_host" \ | ||
185 | --arg u "$db_user" \ | ||
186 | --arg p "$db_password" \ | ||
187 | --arg n "$db_name" \ | ||
188 | --arg t "$table_prefix" \ | ||
189 | '{ db_host: $h | ||
190 | , db_user: $u | ||
191 | , db_password: $p | ||
192 | , db_name: $n | ||
193 | , table_prefix: $t | ||
194 | }' | ||
diff --git a/wordpress/wordpress-list-users b/wordpress/wordpress-list-users index 76432b6..006d2c9 100755 --- a/wordpress/wordpress-list-users +++ b/wordpress/wordpress-list-users | |||
@@ -3,27 +3,35 @@ set -e | |||
3 | set -o pipefail | 3 | set -o pipefail |
4 | PATH=$(dirname "$0"):$PATH | 4 | PATH=$(dirname "$0"):$PATH |
5 | 5 | ||
6 | for_each_wordpress_site() | 6 | if [ $# = 0 ] |
7 | { | 7 | then |
8 | wordpress-config-info | | 8 | wordpress-config-info | |
9 | jq -r '.[] | .site' | | 9 | while read -r |
10 | while read d | ||
11 | do | 10 | do |
12 | ("$@" "$d") || continue | 11 | "$0" "$REPLY" || continue |
13 | done | 12 | done |
14 | } | ||
15 | if [ $# = 0 ] | ||
16 | then | ||
17 | for_each_wordpress_site "$0" | ||
18 | exit | 13 | exit |
19 | fi | 14 | fi |
20 | 15 | ||
21 | usertable=$(wordpress-config-info "$1" | jq -r .table_prefix)users | 16 | table_prefix=$(\ |
17 | NEW_INTERFACE=y \ | ||
18 | wordpress-config-info "$1" | | ||
19 | jq -r '.assigns | add | .table_prefix' | ||
20 | ) | ||
21 | usertable=${table_prefix}users | ||
22 | shortname=${1#/srv/} | ||
23 | shortname=${shortname%%/*} | ||
22 | wordpress-mysql -- "$1" -t <<END | 24 | wordpress-mysql -- "$1" -t <<END |
23 | select | 25 | select |
24 | id, | 26 | id |
25 | user_login as '${1//\'/\'\'} login', | 27 | , user_login |
26 | user_pass as 'pass' | 28 | as |
27 | from ${usertable}; | 29 | '${shortname} login' |
30 | , user_pass | ||
31 | as | ||
32 | 'pass' | ||
33 | from | ||
34 | ${usertable} | ||
35 | ; | ||
28 | END | 36 | END |
29 | 37 | ||
diff --git a/wordpress/wordpress-mysql b/wordpress/wordpress-mysql index 9faf3c3..96f6141 100755 --- a/wordpress/wordpress-mysql +++ b/wordpress/wordpress-mysql | |||
@@ -1,9 +1,13 @@ | |||
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | set -e | 2 | set -e |
3 | set -o pipefail | ||
3 | 4 | ||
4 | read_config() | 5 | json_to_shell() |
5 | { | 6 | { |
6 | eval "$(jq -r '. | to_entries | .[] | .key + "=" + (.value | @sh) + "\n"')" | 7 | jq -r '{ db_user, db_password, db_host, db_name } | |
8 | to_entries | | ||
9 | .[] | | ||
10 | @sh "declare \(.key)=\(.value);" ' | ||
7 | } | 11 | } |
8 | 12 | ||
9 | our_mysqladmin() | 13 | our_mysqladmin() |
@@ -28,7 +32,16 @@ create_new_mysql_database() | |||
28 | [ "$db_host" ] | 32 | [ "$db_host" ] |
29 | our_mysqladmin create "$db_name" | 33 | our_mysqladmin create "$db_name" |
30 | our_mysql "$db_name" <<END | 34 | our_mysql "$db_name" <<END |
31 | grant all privileges on \`$db_name\`.* to "$db_user" identified by "$db_password"; | 35 | grant |
36 | all privileges | ||
37 | on | ||
38 | \`$db_name\`.* | ||
39 | to | ||
40 | "$db_user" | ||
41 | identified | ||
42 | by | ||
43 | "$db_password" | ||
44 | ; | ||
32 | END | 45 | END |
33 | } | 46 | } |
34 | 47 | ||
@@ -50,7 +63,7 @@ do | |||
50 | esac | 63 | esac |
51 | done | 64 | done |
52 | 65 | ||
53 | read_config < <(wordpress-config-info "$1") | 66 | eval "$(wordpress-config-info "$1" | json_to_shell)" |
54 | shift | 67 | shift |
55 | 68 | ||
56 | [ "$db_name" ] | 69 | [ "$db_name" ] |