aboutsummaryrefslogtreecommitdiff
path: root/lib/util.bash
blob: 025aebabfd884191277ba36794d9ff6a5ceca022 (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
#!/usr/bin/env bash

# Log a message as error, and exit the program. This is intended for serious
# issues that prevent the script from running correctly. The exit code can be
# specified with -i, or will default to 1.
die() {
	local OPTIND
	local code

	while getopts ":i:" opt
	do
		case "$opt" in
			i) code=$OPTARG ;;
		esac
	done

	shift $(( OPTIND -1 ))

	alert "$@"
	exit ${code:-1}
}

# Fetch a file from an URL. Using this function introduces a dependency on curl.
fetch() {
	local OPTIND
	local buffer

	while getopts ":o:" opt
	do
		case "$opt" in
			o) buffer=$OPTARG ;;
		esac
	done

	shift $(( OPTIND -1 ))

	[[ -z $buffer ]] && buffer="$(tempfile)"

	notice "Downloading $1 to $buffer"

	# TODO: Switch to the most appropriate downloading tool, depending on
	# what is available.

	curl -Ls "$1" > "$buffer"
	local exit_code=$?

	printf "%s" "$buffer"

	return $exit_code
}

# Read a particular value from a key/value configuration file. Using this
# function introduces a dependency on awk.
config_etc_kv() {
	local file="$BASEDIR/etc/$1"
	shift

	if [[ ! -f $file ]]
	then
		crit "Tried to read value for $1 from $file, but $file does not exist"
		return
	fi

	debug "Reading value for $1 from $file"

	awk -F= '$1 == "'"$1"'" { print $NF }' "$file"
}

# Create a temporary directory. Similar to tempfile, but you'll get a directory
# instead.
tempdir() {
	local dir="$(mktemp -d)"

	# Ensure the file was created succesfully
	if [[ ! -d "$dir" ]]
	then
		die "Failed to create a temporary directory at $dir"
	fi

	debug "Temporary file created at $dir"

	printf "$dir"
}

# Create a temporary file. In usage, this is no different from mktemp itself,
# however, it will apply additional checks to ensure everything is going
# correctly, and the files will be cleaned up automatically at the end.
tempfile() {
	local OPTIND
	local extension="tmp"

	while getopts ":x:" opt
	do
		case "$opt" in
			x) extension=$OPTARG ;;
		esac
	done

	shift $(( OPTIND -1 ))

	local file="$(mktemp --suffix ".$extension")"

	# Ensure the file was created succesfully
	if [[ ! -f "$file" ]]
	then
		die "Failed to create a temporary file at $file"
	fi

	debug "Temporary file created at $file"

	printf "$file"
}

export -f config_etc_kv
export -f die
export -f fetch
export -f tempdir
export -f tempfile