From dfee06404e31470197f18ff29e2c0d2d56944b43 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Mon, 8 May 2017 19:05:49 +0200 Subject: [PATCH] Nouveaux helpers ynh_mysql_generate_db et ynh_mysql_remove_db (#236) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 --- data/helpers.d/mysql | 69 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/data/helpers.d/mysql b/data/helpers.d/mysql index dda441dc3..f5105a4e4 100644 --- a/data/helpers.d/mysql +++ b/data/helpers.d/mysql @@ -56,6 +56,9 @@ ynh_mysql_create_db() { # 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 # | arg: db - the database name to drop ynh_mysql_drop_db() { @@ -83,6 +86,21 @@ ynh_mysql_create_user() { "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 # # usage: ynh_mysql_drop_user user @@ -90,3 +108,54 @@ ynh_mysql_create_user() { ynh_mysql_drop_user() { 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 +}