Skip to content

Commit 11cbe5e

Browse files
committed
Update script which creates sample databases
1 parent 7a9b5c6 commit 11cbe5e

File tree

1 file changed

+60
-33
lines changed

1 file changed

+60
-33
lines changed

bin/create-sample-database.sh

Lines changed: 60 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22

3-
printf "This script uses the MySQL root user and will create/drop temporary databases.\n" 1>&2
3+
printf "This script will transmit sensitive material to and from this machine, and will create and drop temporary databases.\n" 1>&2
44
read -p "Is this ok [y/N]: " PROMPT
55
if [ "${PROMPT}" != "Y" ] && [ "${PROMPT}" != "y" ]; then
66
printf "Operation aborted.\n" 1>&2
@@ -18,66 +18,93 @@ if [ -z "${MYSQLHOST}" ]; then
1818
MYSQLHOST="localhost"
1919
fi
2020

21-
MYSQLPASS="$2"
21+
MYSQLUSER="$2"
22+
if [ -z "${MYSQLUSER}" ]; then
23+
read -p "Enter the MySQL user: " MYSQLUSER
24+
fi
25+
if [ -z "${MYSQLUSER}" ]; then
26+
printf "MySQL user not provided, assuming root...\n" 1>&2
27+
MYSQLUSER="root"
28+
fi
29+
30+
MYSQLPASS="$3"
2231
if [ -z "${MYSQLPASS}" ]; then
23-
read -s -p "Enter the MySQL root user password: " MYSQLPASS
32+
read -s -p "Enter the MySQL password for ${MYSQLUSER}: " MYSQLPASS
2433
echo
2534
fi
2635
if [ -z "${MYSQLPASS}" ]; then
27-
printf "MySQL root user password not provided, assuming it's not set...\n" 1>&2
36+
printf "MySQL password not provided, assuming it's not set...\n" 1>&2
37+
MYSQLPASS=''
38+
fi
39+
40+
MYSQLSCHEMA="$4"
41+
if [ -z "${MYSQLSCHEMA}" ]; then
42+
read -p "Enter the MySQL database schema: " MYSQLSCHEMA
43+
echo
44+
fi
45+
if [ -z "${MYSQLSCHEMA}" ]; then
46+
printf "MySQL database schema not provided, assuming bnetdocs_phoenix_dev...\n" 1>&2
47+
MYSQLSCHEMA='bnetdocs_phoenix_dev'
2848
fi
2949

3050
set -e
3151

32-
printf "[1/8] Dumping the database...\n"
33-
mysqldump --host="${MYSQLHOST}" --user="root" --password="${MYSQLPASS}" \
52+
printf "[1/7] Dumping the database...\n"
53+
mysqldump --host="${MYSQLHOST}" --user="${MYSQLUSER}" --password="${MYSQLPASS}" \
3454
--opt --order-by-primary \
3555
--complete-insert --single-transaction --triggers --routines \
3656
--hex-blob --add-drop-database --result-file /tmp/.database.sample.sql \
37-
--databases bnetdocs_phoenix
57+
--databases "${MYSQLSCHEMA}"
3858

39-
printf "[2/8] Renaming the database locally...\n"
40-
sed -i 's/bnetdocs_phoenix/bnetdocs_phoenix_backup/g' /tmp/.database.sample.sql
59+
printf "[2/7] Performing local pattern replacements...\n"
60+
sed -i 's#Current Database: `'"${MYSQLSCHEMA}"'`#Current Database: `'"${MYSQLSCHEMA}_backup"'`#' /tmp/.database.sample.sql
61+
sed -i 's#DROP DATABASE IF EXISTS `'"${MYSQLSCHEMA}"'`#DROP DATABASE IF EXISTS `'"${MYSQLSCHEMA}_backup"'`#' /tmp/.database.sample.sql
62+
sed -i 's#CREATE DATABASE /\*!32312 IF NOT EXISTS\*/ `'"${MYSQLSCHEMA}"'`#CREATE DATABASE /*!32312 IF NOT EXISTS*/ `'"${MYSQLSCHEMA}_backup"'`#' /tmp/.database.sample.sql
63+
sed -i 's#USE `'"${MYSQLSCHEMA}"'`#USE `'"${MYSQLSCHEMA}_backup"'`#' /tmp/.database.sample.sql
4164

42-
printf "[3/8] Uploading the renamed database so we can redact info from it...\n"
43-
mysql --host="${MYSQLHOST}" --user="root" --password="${MYSQLPASS}" < /tmp/.database.sample.sql
65+
printf "[3/7] Uploading modified database so queries can be performed...\n"
66+
mysql --host="${MYSQLHOST}" --user="${MYSQLUSER}" --password="${MYSQLPASS}" --database='' < /tmp/.database.sample.sql
4467

45-
printf "[4/8] Redacting private user information...\n"
46-
mysql --host="${MYSQLHOST}" --user="root" --password="${MYSQLPASS}" << EOF
68+
printf "[4/7] Redacting private user information...\n"
69+
mysql --host="${MYSQLHOST}" --user="${MYSQLUSER}" --password="${MYSQLPASS}" --database="${MYSQLSCHEMA}_backup" << EOF
4770
START TRANSACTION;
48-
USE bnetdocs_phoenix_backup;
71+
USE ${MYSQLSCHEMA}_backup;
72+
TRUNCATE TABLE comments;
73+
TRUNCATE TABLE documents;
4974
TRUNCATE TABLE event_log;
5075
INSERT INTO event_log (id, event_type_id, event_datetime, user_id, ip_address, meta_data)
51-
VALUES (0,0,NOW(),NULL,NULL,'Redacted event log');
76+
VALUES (0,0,NOW(),NULL,NULL,'Initial event log');
77+
TRUNCATE TABLE news_posts;
78+
TRUNCATE TABLE packet_used_by;
79+
TRUNCATE TABLE packets;
80+
TRUNCATE TABLE servers;
5281
TRUNCATE TABLE user_profiles;
53-
UPDATE users SET
54-
username = CONCAT('redacted.username.', id),
55-
email = CONCAT('redacted.email.', id, '@example.com'),
56-
display_name = NULL,
57-
password_hash = NULL,
58-
password_salt = NULL,
59-
options_bitmask = 0;
82+
TRUNCATE TABLE user_sessions;
83+
TRUNCATE TABLE users;
84+
INSERT INTO users
85+
(id, email, username, display_name, created_datetime, verified_datetime,
86+
verifier_token, password_hash, password_salt, options_bitmask, timezone)
87+
VALUES (NULL, '[email protected]', 'nobody', NULL, NOW(), NULL, NULL, NULL, NULL, 0, NULL);
6088
COMMIT;
6189
EOF
6290

63-
printf "[5/8] Dumping the redacted database...\n"
64-
mysqldump --host="${MYSQLHOST}" --user="root" --password="${MYSQLPASS}" \
91+
printf "[5/7] Dumping the redacted database...\n"
92+
mysqldump --host="${MYSQLHOST}" --user="${MYSQLUSER}" --password="${MYSQLPASS}" \
6593
--opt --order-by-primary \
6694
--complete-insert --single-transaction --triggers --routines \
6795
--skip-extended-insert --hex-blob --add-drop-database \
6896
--result-file /tmp/.database.sample.sql \
69-
--databases bnetdocs_phoenix_backup
97+
--databases "${MYSQLSCHEMA}_backup"
7098

71-
printf "[6/8] Deleting the redacted database from the server...\n"
72-
mysql --host="${MYSQLHOST}" --user="root" --password="${MYSQLPASS}" << EOF
73-
DROP DATABASE bnetdocs_phoenix_backup;
99+
printf "[6/7] Deleting the redacted database from the server...\n"
100+
mysql --host="${MYSQLHOST}" --user="${MYSQLUSER}" --password="${MYSQLPASS}" --database="${MYSQLSCHEMA}_backup" << EOF
101+
DROP DATABASE IF EXISTS ${MYSQLSCHEMA}_backup;
74102
EOF
75103

76-
printf "[7/8] Renaming the redacted database locally...\n"
77-
sed -i 's/bnetdocs_phoenix_backup/bnetdocs_phoenix/g' /tmp/.database.sample.sql
78-
79-
printf "[8/8] Moving database into current working directory...\n"
104+
printf "[7/7] Copying database into current working directory...\n"
80105
pushd "$(git rev-parse --git-dir)"
81-
mv /tmp/.database.sample.sql ${SRCDIR}/etc/database.sample.sql
106+
cp /tmp/.database.sample.sql ${SRCDIR}/etc/database.sample.sql
107+
popd
108+
rm /tmp/.database.sample.sql
82109

83110
printf "Operation complete!\n"

0 commit comments

Comments
 (0)