-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup_database.php
More file actions
63 lines (46 loc) · 2.73 KB
/
Copy pathsetup_database.php
File metadata and controls
63 lines (46 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
// Using the php mysql client saves resources from installing a command line mysql client
$envVariables = [];
$envVariables['DATABASE_HOST'] = getenv('DATABASE_HOST');
$envVariables['DATABASE_NAME'] = getenv('DATABASE_NAME');
$envVariables['MYSQL_ROOT_PASSWORD'] = getenv('MYSQL_ROOT_PASSWORD');
$envVariables['WIKI_DB_APP_USER'] = getenv('WIKI_DB_APP_USER');
$envVariables['WIKI_DB_APP_PASSWORD'] = getenv('WIKI_DB_APP_PASSWORD');
$envVariables['WIKI_DB_SCHEMA_USER'] = getenv('WIKI_DB_SCHEMA_USER');
$envVariables['WIKI_DB_SCHEMA_PASSWORD'] = getenv('WIKI_DB_SCHEMA_PASSWORD');
$missingEnvVariables = implode(', ', array_keys($envVariables, false, true));
if ( ! defined( 'STDERR' ) ) {
define( 'STDERR', fopen( 'php://stderr', 'wb' ) );
}
if (strlen($missingEnvVariables)) {
fwrite(STDERR, "FAIL: One or more required environment variables are missing.\n");
fwrite(STDERR, " Missing variables are: {$missingEnvVariables}\n");
exit(1);
}
$mysqlClient = new mysqli($envVariables['DATABASE_HOST'], 'root', $envVariables['MYSQL_ROOT_PASSWORD']);
$mysqlClient->query("CREATE DATABASE IF NOT EXISTS {$envVariables['DATABASE_NAME']};");
if ($mysqlClient->error) {
fwrite(STDERR, "FAIL: failed to create wiki database\n");
fwrite(STDERR, " " . $mysqlClient->error . "\n");
}
$mysqlClient = new mysqli($envVariables['DATABASE_HOST'], 'root', $envVariables['MYSQL_ROOT_PASSWORD']);
$mysqlClient->query("CREATE USER IF NOT EXISTS '{$envVariables['WIKI_DB_SCHEMA_USER']}'@'%' IDENTIFIED BY '{$envVariables['WIKI_DB_SCHEMA_PASSWORD']}';");
if ($mysqlClient->error) {
fwrite(STDERR, "FAIL: failed to create user with schema modification privileges\n");
fwrite(STDERR, " " . $mysqlClient->error . "\n");
}
$mysqlClient->query("GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX ON {$envVariables['DATABASE_NAME']}.* TO '{$envVariables['WIKI_DB_SCHEMA_USER']}'@'%';");
$mysqlClient->query("CREATE USER IF NOT EXISTS '{$envVariables['WIKI_DB_APP_USER']}'@'%' IDENTIFIED BY '{$envVariables['WIKI_DB_APP_PASSWORD']}';");
if ($mysqlClient->error) {
fwrite(STDERR, "FAIL: failed to create user for reading/writing rows\n");
fwrite(STDERR, " " . $mysqlClient->error . "\n");
}
$mysqlClient->query("GRANT SELECT, INSERT, UPDATE, DELETE ON {$envVariables['DATABASE_NAME']}.* TO '{$envVariables['WIKI_DB_APP_USER']}'@'%';");
$mysqlClient->query('FLUSH PRIVILEGES');
$mysqlClient->select_db($envVariables['DATABASE_NAME']);
$schemaInitTest = $mysqlClient->query("SHOW TABLES LIKE 'user'");
if ($schemaInitTest->num_rows > 0) {
fwrite(STDOUT, "INFO: A user table was found in the database and the schema is assumed to be set up.\n");
} else {
fwrite(STDOUT, "INFO: A user table was not found in the database and the schema is assumed to be not set up.\n");
}