浏览代码

Interactive installs for individual apps

Bob Mottram 8 年前
父节点
当前提交
7a9678a785

+ 91
- 1
src/freedombone-app-blog 查看文件

@@ -61,7 +61,97 @@ function configure_interactive_blog {
61 61
 }
62 62
 
63 63
 function install_interactive_blog {
64
-    echo -n ''
64
+    if [ ! $ONION_ONLY ]; then
65
+        ONION_ONLY='no'
66
+    fi
67
+    if grep -q "ONION_ONLY" $CONFIGURATION_FILE; then
68
+        ONION_ONLY=$(grep "ONION_ONLY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
69
+    fi
70
+    if grep -q "MY_BLOG_TITLE" $CONFIGURATION_FILE; then
71
+        MY_BLOG_TITLE=$(grep "MY_BLOG_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
72
+    fi
73
+    if grep -q "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
74
+        FULLBLOG_DOMAIN_NAME=$(grep "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
75
+    fi
76
+    if grep -q "FULLBLOG_CODE" $CONFIGURATION_FILE; then
77
+        FULLBLOG_CODE=$(grep "FULLBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
78
+    fi
79
+    if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then
80
+        DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
81
+    fi
82
+
83
+    if [[ $ONION_ONLY != "no" ]]; then
84
+        MY_BLOG_TITLE='My Blog'
85
+        FULLBLOG_DOMAIN_NAME='blog.local'
86
+    else
87
+        FULLBLOG_DETAILS_COMPLETE=
88
+        while [ ! $FULLBLOG_DETAILS_COMPLETE ]
89
+        do
90
+            data=$(tempfile 2>/dev/null)
91
+            trap "rm -f $data" 0 1 2 5 15
92
+            if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
93
+                dialog --backtitle $"Freedombone Configuration" \
94
+                       --title $"Blog Configuration" \
95
+                       --form $"\nPlease enter your blog details:" 11 55 4 \
96
+                       $"Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
97
+                       $"Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \
98
+                       $"Code:" 3 1 "$(grep 'FULLBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 33 255 \
99
+                       2> $data
100
+            else
101
+                dialog --backtitle $"Freedombone Configuration" \
102
+                       --title $"Blog Configuration" \
103
+                       --form $"\nPlease enter your blog details:" 11 55 3 \
104
+                       $"Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
105
+                       $"Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \
106
+                       2> $data
107
+            fi
108
+            sel=$?
109
+            case $sel in
110
+                1) exit 1;;
111
+                255) exit 1;;
112
+            esac
113
+            MY_BLOG_TITLE=$(cat $data | sed -n 1p)
114
+            FULLBLOG_DOMAIN_NAME=$(cat $data | sed -n 2p)
115
+            if [ $FULLBLOG_DOMAIN_NAME ]; then
116
+                if [[ $FULLBLOG_DOMAIN_NAME == "$WIKI_DOMAIN_NAME" ]]; then
117
+                    FULLBLOG_DOMAIN_NAME=""
118
+                fi
119
+                TEST_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME
120
+                validate_domain_name
121
+                if [[ $TEST_DOMAIN_NAME != $FULLBLOG_DOMAIN_NAME ]]; then
122
+                    FULLBLOG_DOMAIN_NAME=
123
+                    dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
124
+                else
125
+                    if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
126
+                        FULLBLOG_CODE=$(cat $data | sed -n 3p)
127
+                        validate_freedns_code "$FULLBLOG_CODE"
128
+                        if [ ! $VALID_CODE ]; then
129
+                            FULLBLOG_DOMAIN_NAME=
130
+                        fi
131
+                    fi
132
+                fi
133
+            fi
134
+            if [ $FULLBLOG_DOMAIN_NAME ]; then
135
+                FULLBLOG_DETAILS_COMPLETE="yes"
136
+            fi
137
+        done
138
+
139
+        if grep -q "MY_BLOG_TITLE=" $CONFIGURATION_FILE; then
140
+            sed -i "s|MY_BLOG_TITLE=.*|MY_BLOG_TITLE=$MY_BLOG_TITLE|g" $CONFIGURATION_FILE
141
+        else
142
+            echo "MY_BLOG_TITLE=$MY_BLOG_TITLE" >> $CONFIGURATION_FILE
143
+        fi
144
+        if grep -q "FULLBLOG_DOMAIN_NAME=" $CONFIGURATION_FILE; then
145
+            sed -i "s|FULLBLOG_DOMAIN_NAME=.*|FULLBLOG_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME|g" $CONFIGURATION_FILE
146
+        else
147
+            echo "FULLBLOG_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE
148
+        fi
149
+        if grep -q "FULLBLOG_CODE=" $CONFIGURATION_FILE; then
150
+            sed -i "s|FULLBLOG_CODE=.*|FULLBLOG_CODE=$FULLBLOG_CODE|g" $CONFIGURATION_FILE
151
+        else
152
+            echo "FULLBLOG_CODE=$FULLBLOG_CODE" >> $CONFIGURATION_FILE
153
+        fi
154
+    fi
65 155
 }
66 156
 
67 157
 function change_password_blog {

+ 106
- 1
src/freedombone-app-gnusocial 查看文件

@@ -54,7 +54,112 @@ GNUSOCIAL_NSFW_REPO="https://gitgud.io/ShitposterClub/SensitiveContent"
54 54
 GNUSOCIAL_NSFW_COMMIT='a096bbe0cfae9a9b177682920ffb58d32a48e136'
55 55
 
56 56
 function install_interactive_gnusocial {
57
-    echo -n ''
57
+    if [ ! $ONION_ONLY ]; then
58
+        ONION_ONLY='no'
59
+    fi
60
+    if grep -q "ONION_ONLY" $CONFIGURATION_FILE; then
61
+        ONION_ONLY=$(grep "ONION_ONLY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
62
+    fi
63
+    if grep -q "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
64
+        MICROBLOG_DOMAIN_NAME=$(grep "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
65
+    fi
66
+    if grep -q "MICROBLOG_CODE" $CONFIGURATION_FILE; then
67
+        MICROBLOG_CODE=$(grep "MICROBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
68
+    fi
69
+    if grep -q "MICROBLOG_WELCOME_MESSAGE" $CONFIGURATION_FILE; then
70
+        MICROBLOG_WELCOME_MESSAGE=$(grep "MICROBLOG_WELCOME_MESSAGE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
71
+    fi
72
+    if grep -q "MICROBLOG_BACKGROUND_IMAGE_URL" $CONFIGURATION_FILE; then
73
+        MICROBLOG_BACKGROUND_IMAGE_URL=$(grep "MICROBLOG_BACKGROUND_IMAGE_URL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
74
+    fi
75
+    if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then
76
+        DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
77
+    fi
78
+    if [[ $ONION_ONLY != "no" ]]; then
79
+        MICROBLOG_DOMAIN_NAME='microblog.local'
80
+    else
81
+        MICROBLOG_DETAILS_COMPLETE=
82
+        while [ ! $MICROBLOG_DETAILS_COMPLETE ]
83
+        do
84
+            data=$(tempfile 2>/dev/null)
85
+            trap "rm -f $data" 0 1 2 5 15
86
+            if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
87
+                dialog --backtitle $"Freedombone Configuration" \
88
+                       --title $"Microblog Configuration" \
89
+                       --form $"\nPlease enter your Microblog details. Welcome message and background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 4 \
90
+                       $"Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
91
+                       $"Welcome Message:" 2 1 "$(grep '$MICROBLOG_WELCOME_MESSAGE' temp.cfg | awk -F '=' '{print $2}')" 2 25 255 255 \
92
+                       $"Background image URL:" 3 1 "$(grep '$MICROBLOG_BACKGROUND_IMAGE_URL' temp.cfg | awk -F '=' '{print $2}')" 3 25 255 255 \
93
+                       $"Code:" 4 1 "$(grep 'MICROBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 4 25 33 255 \
94
+                       2> $data
95
+            else
96
+                dialog --backtitle $"Freedombone Configuration" \
97
+                       --title $"Microblog Configuration" \
98
+                       --form $"\nPlease enter your Microblog details. Welcome message and background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 4 \
99
+                       $"Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
100
+                       $"Welcome Message:" 2 1 "$(grep '$MICROBLOG_WELCOME_MESSAGE' temp.cfg | awk -F '=' '{print $2}')" 2 25 255 255 \
101
+                       $"Background image URL:" 3 1 "$(grep '$MICROBLOG_BACKGROUND_IMAGE_URL' temp.cfg | awk -F '=' '{print $2}')" 3 25 255 255 \
102
+                       2> $data
103
+            fi
104
+            sel=$?
105
+            case $sel in
106
+                1) exit 1;;
107
+                255) exit 1;;
108
+            esac
109
+            MICROBLOG_DOMAIN_NAME=$(cat $data | sed -n 1p)
110
+            welcome_msg=$(cat $data | sed -n 2p)
111
+            if [ ${#welcome_msg} -gt 1 ]; then
112
+                MICROBLOG_WELCOME_MESSAGE=$welcome_msg
113
+            fi
114
+            img_url=$(cat $data | sed -n 3p)
115
+            if [ ${#img_url} -gt 1 ]; then
116
+                MICROBLOG_BACKGROUND_IMAGE_URL=$img_url
117
+            fi
118
+            if [ $MICROBLOG_DOMAIN_NAME ]; then
119
+                if [[ $MICROBLOG_DOMAIN_NAME == "$HUBZILLA_DOMAIN_NAME" ]]; then
120
+                    MICROBLOG_DOMAIN_NAME=""
121
+                fi
122
+                TEST_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME
123
+                validate_domain_name
124
+                if [[ $TEST_DOMAIN_NAME != $MICROBLOG_DOMAIN_NAME ]]; then
125
+                    MICROBLOG_DOMAIN_NAME=
126
+                    dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
127
+                else
128
+                    if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
129
+                        MICROBLOG_CODE=$(cat $data | sed -n 4p)
130
+                        validate_freedns_code "$MICROBLOG_CODE"
131
+                        if [ ! $VALID_CODE ]; then
132
+                            MICROBLOG_DOMAIN_NAME=
133
+                        fi
134
+                    fi
135
+                fi
136
+            fi
137
+            if [ $MICROBLOG_DOMAIN_NAME ]; then
138
+                MICROBLOG_DETAILS_COMPLETE="yes"
139
+            fi
140
+        done
141
+        # save the results in the config file
142
+        if grep -q "MICROBLOG_DOMAIN_NAME=" $CONFIGURATION_FILE; then
143
+            sed -i "s|MICROBLOG_DOMAIN_NAME=.*|MICROBLOG_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME|g" $CONFIGURATION_FILE
144
+        else
145
+            echo "MICROBLOG_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE
146
+        fi
147
+        if grep -q "MICROBLOG_CODE=" $CONFIGURATION_FILE; then
148
+            sed -i "s|MICROBLOG_CODE=.*|MICROBLOG_CODE=$MICROBLOG_CODE|g" $CONFIGURATION_FILE
149
+        else
150
+            echo "MICROBLOG_CODE=$MICROBLOG_CODE" >> $CONFIGURATION_FILE
151
+        fi
152
+        if grep -q "MICROBLOG_WELCOME_MESSAGE=" $CONFIGURATION_FILE; then
153
+            sed -i "s|MICROBLOG_WELCOME_MESSAGE=.*|MICROBLOG_WELCOME_MESSAGE=$MICROBLOG_WELCOME_MESSAGE|g" $CONFIGURATION_FILE
154
+        else
155
+            echo "MICROBLOG_WELCOME_MESSAGE=$MICROBLOG_WELCOME_MESSAGE" >> $CONFIGURATION_FILE
156
+        fi
157
+        if grep -q "MICROBLOG_BACKGROUND_IMAGE_URL=" $CONFIGURATION_FILE; then
158
+            sed -i "s|MICROBLOG_BACKGROUND_IMAGE_URL=.*|MICROBLOG_BACKGROUND_IMAGE_URL=$MICROBLOG_BACKGROUND_IMAGE_URL|g" $CONFIGURATION_FILE
159
+        else
160
+            echo "MICROBLOG_BACKGROUND_IMAGE_URL=$MICROBLOG_BACKGROUND_IMAGE_URL" >> $CONFIGURATION_FILE
161
+        fi
162
+    fi
58 163
 }
59 164
 
60 165
 function change_password_gnusocial {

+ 79
- 1
src/freedombone-app-gogs 查看文件

@@ -40,7 +40,85 @@ GIT_ADMIN_PASSWORD=
40 40
 GOGS_BIN=
41 41
 
42 42
 function install_interactive_gogs {
43
-    echo -n ''
43
+    if [ ! $ONION_ONLY ]; then
44
+        ONION_ONLY='no'
45
+    fi
46
+    if grep -q "ONION_ONLY" $CONFIGURATION_FILE; then
47
+        ONION_ONLY=$(grep "ONION_ONLY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
48
+    fi
49
+    if grep -q "GIT_DOMAIN_NAME" $CONFIGURATION_FILE; then
50
+        GIT_DOMAIN_NAME=$(grep "GIT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
51
+    fi
52
+    if grep -q "GIT_CODE" $CONFIGURATION_FILE; then
53
+        GIT_CODE=$(grep "GIT_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
54
+    fi
55
+    if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then
56
+        DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
57
+    fi
58
+    if [[ $ONION_ONLY != "no" ]]; then
59
+        GIT_DOMAIN_NAME='git.local'
60
+    else
61
+        DEVELOPER_DETAILS_COMPLETE=
62
+        while [ ! $DEVELOPER_DETAILS_COMPLETE ]
63
+        do
64
+            data=$(tempfile 2>/dev/null)
65
+            trap "rm -f $data" 0 1 2 5 15
66
+
67
+            if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
68
+                dialog --backtitle $"Freedombone Configuration" \
69
+                       --title $"Developer Configuration" \
70
+                       --form $"\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 3 \
71
+                       $"Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
72
+                       $"Code:" 2 1 "$(grep 'GIT_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \
73
+                       2> $data
74
+            else
75
+                dialog --backtitle $"Freedombone Configuration" \
76
+                       --title $"Developer Configuration" \
77
+                       --form $"\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 2 \
78
+                       $"Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
79
+                       2> $data
80
+            fi
81
+            sel=$?
82
+            case $sel in
83
+                1) exit 1;;
84
+                255) exit 1;;
85
+            esac
86
+            GIT_DOMAIN_NAME=$(cat $data | sed -n 1p)
87
+            if [ $GIT_DOMAIN_NAME ]; then
88
+                TEST_DOMAIN_NAME=$GIT_DOMAIN_NAME
89
+                validate_domain_name
90
+                if [[ $TEST_DOMAIN_NAME != $GIT_DOMAIN_NAME ]]; then
91
+                    GIT_DOMAIN_NAME=
92
+                    dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
93
+                else
94
+                    if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
95
+                        GIT_CODE=$(cat $data | sed -n 2p)
96
+                        validate_freedns_code "$GIT_CODE"
97
+                        if [ ! $VALID_CODE ]; then
98
+                            GIT_DOMAIN_NAME=
99
+                        fi
100
+                    fi
101
+                fi
102
+            else
103
+                DEVELOPER_DETAILS_COMPLETE="yes"
104
+            fi
105
+            if [ $GIT_DOMAIN_NAME ]; then
106
+                DEVELOPER_DETAILS_COMPLETE="yes"
107
+            fi
108
+        done
109
+
110
+        # save the results in the config file
111
+        if grep -q "GIT_DOMAIN_NAME=" $CONFIGURATION_FILE; then
112
+            sed -i "s|GIT_DOMAIN_NAME=.*|GIT_DOMAIN_NAME=$GIT_DOMAIN_NAME|g" $CONFIGURATION_FILE
113
+        else
114
+            echo "GIT_DOMAIN_NAME=$GIT_DOMAIN_NAME" >> $CONFIGURATION_FILE
115
+        fi
116
+        if grep -q "GIT_CODE=" $CONFIGURATION_FILE; then
117
+            sed -i "s|GIT_CODE=.*|GIT_CODE=$GIT_CODE|g" $CONFIGURATION_FILE
118
+        else
119
+            echo "GIT_CODE=$GIT_CODE" >> $CONFIGURATION_FILE
120
+        fi
121
+    fi
44 122
 }
45 123
 
46 124
 function change_password_gogs {

+ 75
- 1
src/freedombone-app-hubzilla 查看文件

@@ -126,7 +126,81 @@ function configure_interactive_hubzilla {
126 126
 }
127 127
 
128 128
 function install_interactive_hubzilla {
129
-    echo -n ''
129
+    if [ ! $ONION_ONLY ]; then
130
+        ONION_ONLY='no'
131
+    fi
132
+    if grep -q "ONION_ONLY" $CONFIGURATION_FILE; then
133
+        ONION_ONLY=$(grep "ONION_ONLY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
134
+    fi
135
+    if grep -q "HUBZILLA_DOMAIN_NAME" $CONFIGURATION_FILE; then
136
+        HUBZILLA_DOMAIN_NAME=$(grep "HUBZILLA_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
137
+    fi
138
+    if grep -q "HUBZILLA_CODE" $CONFIGURATION_FILE; then
139
+        HUBZILLA_CODE=$(grep "HUBZILLA_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
140
+    fi
141
+    if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then
142
+        DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
143
+    fi
144
+    if [[ $ONION_ONLY != "no" ]]; then
145
+        HUBZILLA_DOMAIN_NAME='hubzilla.local'
146
+    else
147
+        HUBZILLA_DETAILS_COMPLETE=
148
+        while [ ! $HUBZILLA_DETAILS_COMPLETE ]
149
+        do
150
+            data=$(tempfile 2>/dev/null)
151
+            trap "rm -f $data" 0 1 2 5 15
152
+            if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
153
+                dialog --backtitle $"Freedombone Configuration" \
154
+                       --title $"Hubzilla Configuration" \
155
+                       --form $"\nPlease enter your Hubzilla details.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 55 3 \
156
+                       $"Domain:" 1 1 "$(grep 'HUBZILLA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
157
+                       $"Code:" 2 1 "$(grep 'HUBZILLA_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \
158
+                       2> $data
159
+            else
160
+                dialog --backtitle $"Freedombone Configuration" \
161
+                       --title $"Hubzilla Configuration" \
162
+                       --form $"\nPlease enter your Hubzilla details\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 11 55 3 \
163
+                       $"Domain:" 1 1 "$(grep 'HUBZILLA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
164
+                       2> $data
165
+            fi
166
+            sel=$?
167
+            case $sel in
168
+                1) exit 1;;
169
+                255) exit 1;;
170
+            esac
171
+            HUBZILLA_DOMAIN_NAME=$(cat $data | sed -n 1p)
172
+            if [ $HUBZILLA_DOMAIN_NAME ]; then
173
+                TEST_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME
174
+                validate_domain_name
175
+                if [[ $TEST_DOMAIN_NAME != $HUBZILLA_DOMAIN_NAME ]]; then
176
+                    HUBZILLA_DOMAIN_NAME=
177
+                    dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
178
+                else
179
+                    if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
180
+                        HUBZILLA_CODE=$(cat $data | sed -n 2p)
181
+                        validate_freedns_code "$HUBZILLA_CODE"
182
+                        if [ ! $VALID_CODE ]; then
183
+                            HUBZILLA_DOMAIN_NAME=
184
+                        fi
185
+                    fi
186
+                fi
187
+            fi
188
+            if [ $HUBZILLA_DOMAIN_NAME ]; then
189
+                HUBZILLA_DETAILS_COMPLETE="yes"
190
+            fi
191
+        done
192
+        # save the results in the config file
193
+        if grep -q "HUBZILLA_DOMAIN_NAME=" $CONFIGURATION_FILE; then
194
+            sed -i "s|HUBZILLA_DOMAIN_NAME=.*|HUBZILLA_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME|g" $CONFIGURATION_FILE
195
+        else
196
+            echo "HUBZILLA_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME" >> $CONFIGURATION_FILE
197
+        fi
198
+        if grep -q "HUBZILLA_CODE=" $CONFIGURATION_FILE; then
199
+            sed -i "s|HUBZILLA_CODE=.*|HUBZILLA_CODE=$HUBZILLA_CODE|g" $CONFIGURATION_FILE
200
+        else
201
+            echo "HUBZILLA_CODE=$HUBZILLA_CODE" >> $CONFIGURATION_FILE
202
+        fi
203
+    fi
130 204
 }
131 205
 
132 206
 function change_password_hubzilla {

+ 79
- 1
src/freedombone-app-mediagoblin 查看文件

@@ -38,7 +38,85 @@ MEDIAGOBLIN_ADMIN_PASSWORD=
38 38
 MEDIAGOBLIN_ONION_PORT=8096
39 39
 
40 40
 function install_interactive_mediagoblin {
41
-    echo -n ''
41
+    if [ ! $ONION_ONLY ]; then
42
+        ONION_ONLY='no'
43
+    fi
44
+    if grep -q "ONION_ONLY" $CONFIGURATION_FILE; then
45
+        ONION_ONLY=$(grep "ONION_ONLY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
46
+    fi
47
+    if grep -q "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE; then
48
+        MEDIAGOBLIN_DOMAIN_NAME=$(grep "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
49
+    fi
50
+    if grep -q "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE; then
51
+        MEDIAGOBLIN_CODE=$(grep "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
52
+    fi
53
+    if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then
54
+        DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
55
+    fi
56
+    if [[ $ONION_ONLY != "no" ]]; then
57
+        MEDIAGOBLIN_DOMAIN_NAME='media.local'
58
+    else
59
+        MEDIAGOBLIN_DETAILS_COMPLETE=
60
+        while [ ! $MEDIAGOBLIN_DETAILS_COMPLETE ]
61
+        do
62
+            data=$(tempfile 2>/dev/null)
63
+            trap "rm -f $data" 0 1 2 5 15
64
+            if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
65
+                dialog --backtitle $"Freedombone Configuration" \
66
+                       --title $"Mediagoblin Configuration" \
67
+                       --form $"\nPlease enter your Mediagoblin details, or just select Ok if you don't need a Mediagoblin site:" 11 55 2 \
68
+                       $"Domain:" 1 1 "$(grep 'MEDIAGOBLIN_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
69
+                       $"Code:" 2 1 "$(grep 'MEDIAGOBLIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \
70
+                       2> $data
71
+            else
72
+                dialog --backtitle $"Freedombone Configuration" \
73
+                       --title $"Mediagoblin Configuration" \
74
+                       --form $"\nPlease enter your Mediagoblin details, or just select Ok if you don't need a Mediagoblin site:" 11 55 2 \
75
+                       $"Domain:" 1 1 "$(grep 'MEDIAGOBLIN_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
76
+                       2> $data
77
+            fi
78
+            sel=$?
79
+            case $sel in
80
+                1) exit 1;;
81
+                255) exit 1;;
82
+            esac
83
+            MEDIAGOBLIN_DOMAIN_NAME=$(cat $data | sed -n 1p)
84
+            if [ $MEDIAGOBLIN_DOMAIN_NAME ]; then
85
+                TEST_DOMAIN_NAME=$MEDIAGOBLIN_DOMAIN_NAME
86
+                validate_domain_name
87
+                if [[ $TEST_DOMAIN_NAME != $MEDIAGOBLIN_DOMAIN_NAME ]]; then
88
+                    MEDIAGOBLIN_DOMAIN_NAME='invalid'
89
+                    dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
90
+                else
91
+                    if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
92
+                        MEDIAGOBLIN_CODE=$(cat $data | sed -n 2p)
93
+                        validate_freedns_code "$MEDIAGOBLIN_CODE"
94
+                        if [ ! $VALID_CODE ]; then
95
+                            MEDIAGOBLIN_DOMAIN_NAME='invalid'
96
+                        fi
97
+                    fi
98
+                fi
99
+            fi
100
+            if [ $MEDIAGOBLIN_DOMAIN_NAME ]; then
101
+                if [[ $MEDIAGOBLIN_DOMAIN_NAME == 'invalid' ]]; then
102
+                    MEDIAGOBLIN_DOMAIN_NAME=
103
+                else
104
+                    MEDIAGOBLIN_DETAILS_COMPLETE="yes"
105
+                fi
106
+            fi
107
+        done
108
+        # save the results in the config file
109
+        if grep -q "MEDIAGOBLIN_DOMAIN_NAME=" $CONFIGURATION_FILE; then
110
+            sed -i "s|MEDIAGOBLIN_DOMAIN_NAME=.*|MEDIAGOBLIN_DOMAIN_NAME=$MEDIAGOBLIN_DOMAIN_NAME|g" $CONFIGURATION_FILE
111
+        else
112
+            echo "MEDIAGOBLIN_DOMAIN_NAME=$MEDIAGOBLIN_DOMAIN_NAME" >> $CONFIGURATION_FILE
113
+        fi
114
+        if grep -q "MEDIAGOBLIN_CODE=" $CONFIGURATION_FILE; then
115
+            sed -i "s|MEDIAGOBLIN_CODE=.*|MEDIAGOBLIN_CODE=$MEDIAGOBLIN_CODE|g" $CONFIGURATION_FILE
116
+        else
117
+            echo "MEDIAGOBLIN_CODE=$MEDIAGOBLIN_CODE" >> $CONFIGURATION_FILE
118
+        fi
119
+    fi
42 120
 }
43 121
 
44 122
 function change_password_mediagoblin {

+ 90
- 1
src/freedombone-app-wiki 查看文件

@@ -37,7 +37,96 @@ WIKI_CODE=
37 37
 WIKI_ONION_PORT=8089
38 38
 
39 39
 function install_interactive_wiki {
40
-    echo -n ''
40
+    if [ ! $ONION_ONLY ]; then
41
+        ONION_ONLY='no'
42
+    fi
43
+    if grep -q "ONION_ONLY" $CONFIGURATION_FILE; then
44
+        ONION_ONLY=$(grep "ONION_ONLY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
45
+    fi
46
+    if grep -q "WIKI_TITLE" $CONFIGURATION_FILE; then
47
+        WIKI_TITLE=$(grep "WIKI_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
48
+    fi
49
+    if grep -q "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE; then
50
+        WIKI_DOMAIN_NAME=$(grep "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
51
+    fi
52
+    if grep -q "WIKI_CODE" $CONFIGURATION_FILE; then
53
+        WIKI_CODE=$(grep "WIKI_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
54
+    fi
55
+    if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then
56
+        DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
57
+    fi
58
+
59
+    if [[ $ONION_ONLY != "no" ]]; then
60
+        WIKI_TITLE=$'My Wiki'
61
+        WIKI_DOMAIN_NAME='wiki.local'
62
+    else
63
+        WIKI_DETAILS_COMPLETE=
64
+        while [ ! $WIKI_DETAILS_COMPLETE ]
65
+        do
66
+            data=$(tempfile 2>/dev/null)
67
+            trap "rm -f $data" 0 1 2 5 15
68
+
69
+            if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
70
+                dialog --backtitle $"Freedombone Configuration" \
71
+                       --title $"Wiki Configuration" \
72
+                       --form $"\nPlease enter your wiki details:" 11 55 4 \
73
+                       $"Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
74
+                       $"Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \
75
+                       $"Code:" 3 1 "$(grep 'WIKI_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 33 255 \
76
+                       2> $data
77
+            else
78
+                dialog --backtitle $"Freedombone Configuration" \
79
+                       --title $"Wiki Configuration" \
80
+                       --form $"\nPlease enter your wiki details:" 11 55 3 \
81
+                       $"Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
82
+                       $"Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \
83
+                       2> $data
84
+            fi
85
+            sel=$?
86
+            case $sel in
87
+                1) exit 1;;
88
+                255) exit 1;;
89
+            esac
90
+            WIKI_TITLE=$(cat $data | sed -n 1p)
91
+            WIKI_DOMAIN_NAME=$(cat $data | sed -n 2p)
92
+            if [ $WIKI_DOMAIN_NAME ]; then
93
+                TEST_DOMAIN_NAME=$WIKI_DOMAIN_NAME
94
+                validate_domain_name
95
+                if [[ $TEST_DOMAIN_NAME != $WIKI_DOMAIN_NAME ]]; then
96
+                    WIKI_DOMAIN_NAME=
97
+                    dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
98
+                else
99
+                    if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
100
+                        WIKI_CODE=$(cat $data | sed -n 3p)
101
+                        validate_freedns_code "$WIKI_CODE"
102
+                        if [ ! $VALID_CODE ]; then
103
+                            WIKI_DOMAIN_NAME=
104
+                        fi
105
+                    fi
106
+                fi
107
+            fi
108
+            if [ $WIKI_DOMAIN_NAME ]; then
109
+                WIKI_DETAILS_COMPLETE="yes"
110
+            fi
111
+        done
112
+
113
+        # save the results in the config file
114
+        if grep -q "WIKI_TITLE=" $CONFIGURATION_FILE; then
115
+            sed -i "s|WIKI_TITLE=.*|WIKI_TITLE=$WIKI_TITLE|g" $CONFIGURATION_FILE
116
+        else
117
+            echo "WIKI_TITLE=$WIKI_TITLE" >> $CONFIGURATION_FILE
118
+        fi
119
+        if grep -q "WIKI_DOMAIN_NAME=" $CONFIGURATION_FILE; then
120
+            sed -i "s|WIKI_DOMAIN_NAME=.*|WIKI_DOMAIN_NAME=$WIKI_DOMAIN_NAME|g" $CONFIGURATION_FILE
121
+        else
122
+            echo "WIKI_DOMAIN_NAME=$WIKI_DOMAIN_NAME" >> $CONFIGURATION_FILE
123
+        fi
124
+        if grep -q "WIKI_CODE=" $CONFIGURATION_FILE; then
125
+            sed -i "s|WIKI_CODE=.*|WIKI_CODE=$WIKI_CODE|g" $CONFIGURATION_FILE
126
+        else
127
+            echo "WIKI_CODE=$WIKI_CODE" >> $CONFIGURATION_FILE
128
+        fi
129
+    fi
41 130
 }
42 131
 
43 132
 function change_password_wiki {

+ 12
- 0
src/freedombone-utils-selector 查看文件

@@ -224,6 +224,7 @@ function remove_apps {
224 224
 
225 225
 function install_apps {
226 226
     is_interactive=$1
227
+
227 228
     app_index=0
228 229
     for a in "${APPS_AVAILABLE[@]}"
229 230
     do
@@ -235,6 +236,16 @@ function install_apps {
235 236
                         install_interactive_${a}
236 237
                     fi
237 238
                 fi
239
+            fi
240
+        fi
241
+        app_index=$[app_index+1]
242
+    done
243
+
244
+    app_index=0
245
+    for a in "${APPS_AVAILABLE[@]}"
246
+    do
247
+        if [[ ${APPS_INSTALLED[$app_index]} == "0" ]]; then
248
+            if [[ ${APPS_CHOSEN[$app_index]} == "1" ]]; then
238 249
                 echo $"Installing application: ${a}"
239 250
                 install_${a}
240 251
                 echo $"${a} was installed"
@@ -242,6 +253,7 @@ function install_apps {
242 253
         fi
243 254
         app_index=$[app_index+1]
244 255
     done
256
+
245 257
     update_installed_apps_list
246 258
 }
247 259
 

+ 63
- 0
src/freedombone-utils-validation 查看文件

@@ -0,0 +1,63 @@
1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Validation functions
12
+#
13
+# License
14
+# =======
15
+#
16
+# Copyright (C) 2014-2016 Bob Mottram <bob@robotics.uk.to>
17
+#
18
+# This program is free software: you can redistribute it and/or modify
19
+# it under the terms of the GNU Affero General Public License as published by
20
+# the Free Software Foundation, either version 3 of the License, or
21
+# (at your option) any later version.
22
+#
23
+# This program is distributed in the hope that it will be useful,
24
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
25
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
+# GNU Affero General Public License for more details.
27
+#
28
+# You should have received a copy of the GNU Affero General Public License
29
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30
+
31
+# If this file exists it contains a global password used with
32
+# disk image installs. This simplifies password management for
33
+# deployment at scale
34
+
35
+function validate_domain_name {
36
+    # count the number of dots in the domain name
37
+    dots=${TEST_DOMAIN_NAME//[^.]}
38
+    no_of_dots=${#dots}
39
+    if (( no_of_dots > 3 )); then
40
+        TEST_DOMAIN_NAME="The domain $TEST_DOMAIN_NAME has too many subdomains. It should be of the type w.x.y.z, x.y.z or y.z"
41
+    fi
42
+    if (( no_of_dots == 0 )); then
43
+        TEST_DOMAIN_NAME="The domain $TEST_DOMAIN_NAME has no top level domain. It should be of the type w.x.y.z, x.y.z or y.z"
44
+    fi
45
+}
46
+
47
+function validate_freedns_code {
48
+    freedns_code="$1"
49
+
50
+    FREEDNS_MESSAGE=$"Please enter the FreeDNS code for this domain.\n\nThe code can be found by going to https://freedns.afraid.org, selecting 'Dynamic DNS' and then opening 'Wget example'. The code will consist of letters and numbers and be between the ? and = characters."
51
+
52
+    if [[ "$freedns_code" == *"."* || "$freedns_code" == "http"* || "$freedns_code" == *"wget "* || "$freedns_code" == *" "* ]]; then
53
+        dialog --title $"Invalid FreeDNS Code" --msgbox "$FREEDNS_MESSAGE" 10 70
54
+        VALID_CODE=
55
+    fi
56
+    if [ ${#freedns_code} -lt 30 ]; then
57
+        dialog --title $"Invalid FreeDNS Code" --msgbox $'FreeDNS code is too short. Did you enter the entire code?' 6 70
58
+        VALID_CODE=
59
+    fi
60
+    VALID_CODE='yes'
61
+}
62
+
63
+# NOTE: deliberately no exit 0