#!/bin/bash

# https://github.com/YunoHost/yunohost/pull/394

# Substitute/replace a string (or expression) by another in a file
#
# usage: ynh_replace_string match_string replace_string target_file
# | arg: match_string - String to be searched and replaced in the file
# | arg: replace_string - String that will replace matches
# | arg: target_file - File in which the string will be replaced.
#
# As this helper is based on sed command, regular expressions and
# references to sub-expressions can be used
# (see sed manual page for more information)
ynh_replace_string () {
	local delimit=@
	local match_string=$1
	local replace_string=$2
	local workfile=$3

	# Escape the delimiter if it's in the string.
	match_string=${match_string//${delimit}/"\\${delimit}"}
	replace_string=${replace_string//${delimit}/"\\${delimit}"}

	sudo sed --in-place "s${delimit}${match_string}${delimit}${replace_string}${delimit}g" "$workfile"
}

# Substitute/replace a password by another in a file
#
# usage: ynh_replace_password_string match_string replace_string target_file
# | arg: match_string - String to be searched and replaced in the file
# | arg: replace_string - String that will replace matches
# | arg: target_file - File in which the string will be replaced.
#
# This helper will use ynh_replace_string, but as you can use special
# characters, you can't use some regular expressions and sub-expressions.
ynh_replace_password_string () {
	local match_string=$1
	local replace_string=$2
	local workfile=$3

	# Escape any backslash to preserve them as simple backslash.
	match_string=${match_string//\\/"\\\\"}
	replace_string=${replace_string//\\/"\\\\"}

	# Escape the & character, who has a special function in sed.
	match_string=${match_string//&/"\&"}
	replace_string=${replace_string//&/"\&"}

	ynh_replace_string "$match_string" "$replace_string" "$workfile"
}