summaryrefslogtreecommitdiff
path: root/www-apps/lasuite-meet/files/lasuite-meet-manage
blob: a047c936c023c7c7c0ae0da38d5b52dc85e0992c (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
#!/usr/bin/env bash

set -e

# Parse this file according to systemd.exec(5), EnvironmentFile=
exec 3< /etc/default/lasuite-meet

nl='
'

feed() {
    if [[ "${quote}" != no && "$value" = "" ]]; then
        IFS= read -r value <&3 && value="${nl}${value}" || return 1
    fi
}

peek_next() {
    next=
    feed || return
    next="${value:0:1}"
    return $(( ${#next} == 0 ))
}

consume() {
    value="${value:${#next}}"
    local n="${#next}"
    next=""
    return $(( n == 0 ))
}

get_next() {
    peek_next
    value="${value:1}"
    return $(( ${#next} == 0 ))
}

get_next_until() {
    next=
    feed || return
    next="${value%%["$1"]*}"
    value="${value:${#next}}"
    return $(( ${#next} == 0 ))
}

while true; do
    IFS= read -r line <&3 || break

    if ! [[ "$line" =~ ^[^#\;].*= ]]; then
        continue
    fi

    key="${line%%=*}"
    value="${line#*=}"
    parsed_value=

    quote=no

    while true; do
        peek_next || break
        case "$quote" in
            no)
                case "$next" in
                    \')
                        quote=single
                        consume
                    ;;
                    \")
                        quote=double
                        consume
                    ;;
                    \\)
                        consume
                        get_next || :
                        parsed_value+="$next"
                    ;;
                    *)
                        get_next_until \'\"\\
                        parsed_value+="$next"
                    ;;
                esac
            ;;
            single)
                case "$next" in
                    \')
                        quote=no
                        consume
                    ;;
                    *)
                        get_next_until \'
                        parsed_value+="$next"
                    ;;
                esac
            ;;
            double)
                case "$next" in
                    \")
                        quote=no
                        consume
                    ;;
                    \\)
                        consume
                        get_next
                        case "$next" in
                            \"|\\|\'|\$)
                                parsed_value+="$next"
                            ;;
                            "$nl")
                            ;;
                            *)
                                parsed_value+="\\$next"
                            ;;
                        esac
                    ;;
                    *)
                        get_next_until \"\\
                        parsed_value+="$next"
                    ;;
                esac
            ;;
        esac
    done

    export "${key}=${parsed_value}"
done

exec 3<&-

exec /usr/libexec/lasuite-meet/manage.py "${@}"