168 lines
6.8 KiB
Bash
Executable File
168 lines
6.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# _____ _ _
|
|
# | __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
|
|
# | __| _| -_| -_| . | . | | . | . | | -_|
|
|
# |__| |_| |___|___|___|___|_|_|_|___|___|_|_|___|
|
|
#
|
|
# Freedom in the Cloud
|
|
#
|
|
# Integration with the FreedomBox android app
|
|
#
|
|
# License
|
|
# =======
|
|
#
|
|
# Copyright (C) 2018 Bob Mottram <bob@freedombone.net>
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
function android_update_apps {
|
|
if [ "$1" ]; then
|
|
detect_installable_apps
|
|
fi
|
|
|
|
local_hostname=$(grep 'host-name' /etc/avahi/avahi-daemon.conf | awk -F '=' '{print $2}').local
|
|
plinth_api="/var/www/${local_hostname}/htdocs/plinth/api.json"
|
|
|
|
# Create a self-signed cert if needed
|
|
# The FreedomBox app assumes a self-signed cert
|
|
if [ ! -f "/etc/ssl/certs/${local_hostname}.crt" ]; then
|
|
install_web_local_user_interface
|
|
systemctl restart nginx
|
|
fi
|
|
|
|
if [ ! -d "/var/www/${local_hostname}/htdocs/plinth" ]; then
|
|
mkdir -p "/var/www/${local_hostname}/htdocs/plinth"
|
|
fi
|
|
if [ ! -d "/var/www/${local_hostname}/htdocs/icons" ]; then
|
|
mkdir -p "/var/www/${local_hostname}/htdocs/icons"
|
|
fi
|
|
|
|
echo '{' > "$plinth_api"
|
|
echo ' "shortcuts": [' >> "$plinth_api"
|
|
|
|
android_ctr=0
|
|
app_index=0
|
|
# shellcheck disable=SC2068,SC2034
|
|
for a in ${APPS_INSTALLED[@]}
|
|
do
|
|
app_name=${APPS_INSTALLED_NAMES[$app_index]}
|
|
if [ "$app_name" ]; then
|
|
app_filename="/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"
|
|
if [ -f "$app_filename" ]; then
|
|
# get the icon for the app
|
|
icon_filename="/usr/share/${PROJECT_NAME}/android-app/${app_name}.png"
|
|
if [ -f "$icon_filename" ]; then
|
|
cp "$icon_filename" "/var/www/${local_hostname}/htdocs/icons/${app_name}.png"
|
|
else
|
|
icon_filename=
|
|
fi
|
|
|
|
app_name_upper=$(echo "$app_name" | awk '{print toupper($0)}')
|
|
SHORT_DESCRIPTION=
|
|
DESCRIPTION=
|
|
MOBILE_APP_URL=
|
|
|
|
if ! grep -q "${app_name_upper}_SHORT_DESCRIPTION=" "$app_filename"; then
|
|
app_index=$((app_index+1))
|
|
continue
|
|
fi
|
|
if grep -q "#${app_name_upper}_SHORT_DESCRIPTION=" "$app_filename"; then
|
|
app_index=$((app_index+1))
|
|
continue
|
|
fi
|
|
SHORT_DESCRIPTION="$(grep "${app_name_upper}_SHORT_DESCRIPTION=" "$app_filename" | head -n 1 | sed 's|\$||g' | sed "s|'||g" | sed 's|\"||g' | awk -F '=' '{print $2}')"
|
|
|
|
if grep -q "${app_name_upper}_DESCRIPTION=" "$app_filename"; then
|
|
DESCRIPTION="$(grep "${app_name_upper}_DESCRIPTION=" "$app_filename" | head -n 1 | sed 's|\$||g' | sed "s|'||g" | sed 's|\"||g' | awk -F '=' '{print $2}')"
|
|
fi
|
|
if grep -q "${app_name_upper}_MOBILE_APP_URL=" "$app_filename"; then
|
|
MOBILE_APP_URL="$(grep "${app_name_upper}_MOBILE_APP_URL=" "$app_filename" | head -n 1 | sed 's|\$||g' | sed 's|\$||g' | sed "s|'||g" | sed 's|\"||g' | awk -F '=' '{print $2}')"
|
|
fi
|
|
|
|
if [ $android_ctr -gt 0 ]; then
|
|
echo ',' >> "$plinth_api"
|
|
fi
|
|
|
|
{ echo ' {';
|
|
echo " \"name\": \"${app_name}\",";
|
|
echo " \"short_description\": \"$SHORT_DESCRIPTION\",";
|
|
echo " \"description\": [";
|
|
echo " \"$DESCRIPTION\"";
|
|
echo ' ],';
|
|
echo " \"icon_url\": \"/icons/${app_name}.png\",";
|
|
echo " \"clients\": ["; } >> "$plinth_api"
|
|
|
|
read_config_param "${app_name_upper}_DOMAIN_NAME"
|
|
test_domain_name="${app_name_upper}_DOMAIN_NAME"
|
|
domain_name=${!test_domain_name}
|
|
if [ "$domain_name" ]; then
|
|
if [[ "$domain_name" != *'.onion' ]]; then
|
|
domain_name="https://${!test_domain_name}"
|
|
else
|
|
domain_name="http://${!test_domain_name}"
|
|
fi
|
|
fi
|
|
if [[ "$domain_name" && "$app_name" != 'matrix' ]]; then
|
|
{ echo ' {';
|
|
echo " \"name\": \"${app_name}\",";
|
|
echo " \"platforms\": [";
|
|
echo ' {';
|
|
echo ' "type": "web",';
|
|
echo " \"url\": \"$domain_name\"";
|
|
echo -n ' }'; } >> "$plinth_api"
|
|
fi
|
|
|
|
if [ "$MOBILE_APP_URL" ]; then
|
|
if [[ "$domain_name" && "$app_name" != 'matrix' ]]; then
|
|
echo ',' >> "$plinth_api"
|
|
else
|
|
{ echo ' {';
|
|
echo " \"name\": \"${app_name}\",";
|
|
echo " \"platforms\": ["; } >> "$plinth_api"
|
|
fi
|
|
store_name='f-droid'
|
|
if [[ "$MOBILE_APP_URL" == *'google'* ]]; then
|
|
store_name='google-play'
|
|
fi
|
|
{ echo ' {';
|
|
echo ' "type": "store",';
|
|
echo ' "os": "android",';
|
|
echo " \"store_name\": \"$store_name\",";
|
|
echo " \"url\": \"$MOBILE_APP_URL\"";
|
|
echo ' }'; } >> "$plinth_api"
|
|
else
|
|
echo '' >> "$plinth_api"
|
|
fi
|
|
|
|
{ echo ' ]';
|
|
echo ' }';
|
|
echo ' ]';
|
|
echo -n ' }'; } >> "$plinth_api"
|
|
|
|
android_ctr=$((android_ctr+1))
|
|
fi
|
|
fi
|
|
app_index=$((app_index+1))
|
|
done
|
|
|
|
{ echo '';
|
|
echo ' ]';
|
|
echo '}'; } >> "$plinth_api"
|
|
|
|
chown -R www-data:www-data "/var/www/${local_hostname}/htdocs/plinth"
|
|
chown -R www-data:www-data "/var/www/${local_hostname}/htdocs/icons"
|
|
}
|
|
|
|
# NOTE: deliberately no exit 0
|