Nouveaux helpers ynh_mysql_generate_db et ynh_mysql_remove_db (#236)

* Nouveaux helpers ynh_mysql_generate_db et ynh_mysql_remove_db
Helpers pour créer une base de donnée, son utilisateur et un mot de passe.
Et son pendant pour la supprimer.
* Separate corrections of names
* Grammar nazism
* Update according to comments
* Renaming ynh_make_valid_dbid to ynh_sanitize_dbid
* Fixing remaining make_valid_dbid
* Implement remaining comments
* Add a check that the user exist before deleting it
This commit is contained in:
Maniack Crudelis 2017-05-08 19:05:49 +02:00 committed by Alexandre Aubin
parent c8647fc21f
commit dfee06404e

View file

@ -56,6 +56,9 @@ ynh_mysql_create_db() {
# Drop a database # Drop a database
# #
# If you intend to drop the database *and* the associated user,
# consider using ynh_mysql_remove_db instead.
#
# usage: ynh_mysql_drop_db db # usage: ynh_mysql_drop_db db
# | arg: db - the database name to drop # | arg: db - the database name to drop
ynh_mysql_drop_db() { ynh_mysql_drop_db() {
@ -83,6 +86,21 @@ ynh_mysql_create_user() {
"CREATE USER '${1}'@'localhost' IDENTIFIED BY '${2}';" "CREATE USER '${1}'@'localhost' IDENTIFIED BY '${2}';"
} }
# Check if a mysql user exists
#
# usage: ynh_mysql_user_exists user
# | arg: user - the user for which to check existence
function ynh_mysql_user_exists()
{
local user=$1
if [[ -z $(ynh_mysql_execute_as_root "SELECT User from mysql.user WHERE User = '$user';") ]]
then
return 1
else
return 0
fi
}
# Drop a user # Drop a user
# #
# usage: ynh_mysql_drop_user user # usage: ynh_mysql_drop_user user
@ -90,3 +108,54 @@ ynh_mysql_create_user() {
ynh_mysql_drop_user() { ynh_mysql_drop_user() {
ynh_mysql_execute_as_root "DROP USER '${1}'@'localhost';" ynh_mysql_execute_as_root "DROP USER '${1}'@'localhost';"
} }
# Create a database, an user and its password. Then store the password in the app's config
#
# After executing this helper, the password of the created database will be available in $db_pwd
# It will also be stored as "mysqlpwd" into the app settings.
#
# usage: ynh_mysql_setup_db user name
# | arg: user - Owner of the database
# | arg: name - Name of the database
ynh_mysql_setup_db () {
local db_user="$1"
local db_name="$2"
db_pwd=$(ynh_string_random) # Generate a random password
ynh_mysql_create_db "$db_name" "$db_user" "$db_pwd" # Create the database
ynh_app_setting_set $app mysqlpwd $db_pwd # Store the password in the app's config
}
# Remove a database if it exists, and the associated user
#
# usage: ynh_mysql_remove_db user name
# | arg: user - Owner of the database
# | arg: name - Name of the database
ynh_mysql_remove_db () {
local db_user="$1"
local db_name="$2"
local mysql_root_password=$(sudo cat $MYSQL_ROOT_PWD_FILE)
if mysqlshow -u root -p$mysql_root_password | grep -q "^| $db_name"; then # Check if the database exists
echo "Removing database $db_name" >&2
ynh_mysql_drop_db $db_name # Remove the database
else
echo "Database $db_name not found" >&2
fi
# Remove mysql user if it exists
if $(ynh_mysql_user_exists $db_user); then
ynh_mysql_drop_user $db_user
fi
}
# Sanitize a string intended to be the name of a database
# (More specifically : replace - and . by _)
#
# Exemple: dbname=$(ynh_sanitize_dbid $app)
#
# usage: ynh_sanitize_dbid name
# | arg: name - name to correct/sanitize
# | ret: the corrected name
ynh_sanitize_dbid () {
dbid=${1//[-.]/_} # We should avoid having - and . in the name of databases. They are replaced by _
echo $dbid
}