aboutsummaryrefslogtreecommitdiff
path: root/scripts/.fonctions
blob: 4557512d1983c8eeccbeec3d6dd39737ed930e38 (plain)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#!/bin/bash

ynh_version="2.4"

YNH_VERSION () {	# Returns the version number of the Yunohost moulinette
	ynh_version=$(sudo yunohost -v | grep "moulinette:" | cut -d' ' -f2 | cut -d'.' -f1,2)
}

CHECK_VAR () {	# Verifies that the variable is not empty.
	# $1 = Variable to be checked
	# $2 = Display text on error
	test -n "$1" || (echo "$2" >&2 && false)
}

EXIT_PROPERLY () {	# Causes the script to stop in the event of an error. And clean the residue.
	trap '' ERR
	echo -e "\e[91m \e[1m"	# Shell in light red bold
	echo -e "!!\n  $app install's script has encountered an error. Installation was cancelled.\n!!" >&2

	if type -t CLEAN_SETUP > /dev/null; then	# Checks the existence of the function before executing it.
		CLEAN_SETUP	# Call the specific cleanup function of the install script.
	fi

	# Compensates the ssowat bug that does not remove the app's input in case of installation error.
	sudo sed -i "\@\"$domain$path/\":@d" /etc/ssowat/conf.json

	if [ "$ynh_version" = "2.2" ]; then
		/bin/bash $script_dir/remove
	fi

	ynh_die
}

TRAP_ON () {	# Activate signal capture
	trap EXIT_PROPERLY ERR	# Capturing exit signals on error
}

TRAP_OFF () {	# Ignoring signal capture until TRAP_ON
	trap '' ERR	# Ignoring exit signals
}

CHECK_USER () {	# Check the validity of the user admin
	# $1 = User admin variable
	ynh_user_exists "$1" || (echo "Wrong admin" >&2 && false)
}

CHECK_PATH () {	# Checks / at the beginning of the path. And his absence at the end.
	if [ "${path:0:1}" != "/" ]; then    # If the first character is not /
		path="/$path"    # Add / at the beginning of path
	fi
	if [ "${path:${#path}-1}" == "/" ] && [ ${#path} -gt 1 ]; then    # If the last character is a / and it is not the only character.
		path="${path:0:${#path}-1}"	# Delete last character
	fi
}

CHECK_DOMAINPATH () {	# Checks the availability of the path and domain.
	sudo yunohost app checkurl $domain$path -a $app
}

CHECK_FINALPATH () {	# Checks that the destination folder is not already in use.
	final_path=/opt/$app
	if [ -e "$final_path" ]
	then
		echo "This path already contains a folder" >&2
		false
	fi
}

STORE_MD5_CONFIG () {	# Saves the checksum of the config file
	# $1 = Name of the conf file for storage in settings.yml
	# $2 = Full name and path of the conf file.
	ynh_app_setting_set $app $1_file_md5 $(sudo md5sum "$2" | cut -d' ' -f1)
}

CHECK_MD5_CONFIG () {	# Created a backup of the config file if it was changed.
	# $1 = Name of the conf file for storage in settings.yml
	# $2 = Full name and path of the conf file.onf.
	if [ "$(ynh_app_setting_get $app $1_file_md5)" != $(sudo md5sum "$2" | cut -d' ' -f1) ]; then
		sudo cp -a "$2" "$2.backup.$(date '+%d.%m.%y_%Hh%M,%Ss')"	# Si le fichier de config a été modifié, créer un backup.
	fi
}

FIND_PORT () {	# Search free port
	# $1 = Port number to start the search.
	port=$1
	while ! sudo yunohost app checkport $port ; do
		port=$((port+1))
	done
	CHECK_VAR "$port" "port empty"
}


### REMOVE SCRIPT

REMOVE_NGINX_CONF () {	# Delete nginx configuration
	if [ -e "/etc/nginx/conf.d/$domain.d/$app.conf" ]; then	# Delete nginx config
		echo "Delete nginx config"
		sudo rm "/etc/nginx/conf.d/$domain.d/$app.conf"
		sudo systemctl reload nginx
	fi
}

REMOVE_LOGROTATE_CONF () {	# Delete logrotate configuration
	if [ -e "/etc/logrotate.d/$app" ]; then
		echo "Delete logrotate config"
		sudo rm "/etc/logrotate.d/$app"
	fi
}

SECURE_REMOVE () {      # Deleting a folder with variable verification
	chaine="$1"	# The argument must be given between simple quotes '', to avoid interpreting the variables.
	no_var=0
	while (echo "$chaine" | grep -q '\$')	# Loop as long as there are $ in the string
	do
		no_var=1
		global_var=$(echo "$chaine" | cut -d '$' -f 2)	# Isole the first variable found.
		only_var=\$$(expr "$global_var" : '\([A-Za-z0-9_]*\)')	# Isole completely the variable by adding the $ at the beginning and keeping only the name of the variable. Mostly gets rid of / and a possible path behind.
		real_var=$(eval "echo ${only_var}")		# `eval "echo ${var}` Allows to interpret a variable contained in a variable.
		if test -z "$real_var" || [ "$real_var" = "/" ]; then
			echo "Variable $only_var is empty, suppression of $chaine cancelled." >&2
			return 1
		fi
		chaine=$(echo "$chaine" | sed "s@$only_var@$real_var@")	# Replaces variable with its value in the string.
	done
	if [ "$no_var" -eq 1 ]
	then
		if [ -e "$chaine" ]; then
			echo "Delete directory $chaine"
			sudo rm -r "$chaine"
		fi
		return 0
	else
		echo "No detected variable." >&2
		return 1
	fi
}

REMOVE_BDD () {	# Delete database and users
	# $1 = Database name
	# Uses '$app' as user name and database
	db_user=$1
	if mysqlshow -u root -p$(sudo cat $MYSQL_ROOT_PWD_FILE) | grep -q "^| $db_user"; then
		echo "Delete db"
		ynh_mysql_drop_db $db_user
		ynh_mysql_drop_user $db_user
	fi
}


# Create a user
#
# usage: ynh_mysql_create_user user pwd [host]
# | arg: user - the user name to create
# | arg: pwd - the password to identify user by
ynh_psql_create_user() {
        sudo su -c "psql" postgres <<< \
        "CREATE USER ${1} WITH PASSWORD '${2}';"
}

# Create a database and grant optionnaly privilegies to a user
#
# usage: ynh_mysql_create_db db [user [pwd]]
# | arg: db - the database name to create
# | arg: user - the user to grant privilegies
# | arg: pwd - the password to identify user by
ynh_psql_create_db() {
    db=$1
    # grant all privilegies to user
    if [[ $# -gt 1 ]]; then
        ynh_psql_create_user ${2} "${3}"
        sudo su -c "createdb -O ${2} $db" postgres
    else
        sudo su -c "createdb $db" postgres
    fi

}

# Drop a database
#
# usage: ynh_mysql_drop_db db
# | arg: db - the database name to drop
ynh_psql_drop_db() {
    sudo su -c "dropdb ${1}" postgres
}

# Drop a user
#
# usage: ynh_mysql_drop_user user
# | arg: user - the user name to drop
ynh_psql_drop_user() {
    sudo su -c "dropuser ${1}" postgres
}