From 44553cdd393cff28e50b99d45e890b73bda3f285 Mon Sep 17 00:00:00 2001 From: BrainwreckedTech <--get> Date: Mon, 18 Jan 2021 18:52:22 -0500 Subject: [PATCH] Initial Commit --- mkwebapp | 229 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100755 mkwebapp diff --git a/mkwebapp b/mkwebapp new file mode 100755 index 0000000..35084a2 --- /dev/null +++ b/mkwebapp @@ -0,0 +1,229 @@ +#!/usr/bin/env sh + +# ©2021 Brainwrecked Tech + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 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 General Public License for more details. + +# For a copy of this license, see . + +set -x + +CONF_DIR="${HOME}/.config" +EWA_PRFX="org.gnome.Epiphany.WebApp-" +LOCALDIR="${HOME}/.local" +SHAREDIR="${LOCALDIR}/share" + +APPS_DIR="${SHAREDIR}/applications" +ICONSDIR="${SHAREDIR}/icons" + +WAPPDIRF="${SHAREDIR}/desktop-directories/web-applications.directory" +WAPPMENF="${CONF_DIR}/menus/applications-merged/web-applications.menu" + +WA_BRWSR="${1}" +WAPPNAME="${2}" +WAPPDESC="${3}" +WAPPADDR="${4}" +WAPPICON="${5}" + +### MAKE SURE THE WEB APP DIRECTORY ENTRY EXISTS + +if [ ! -e "${WAPPDIRF}" ]; then + +cat << EOF > "${WAPPDIRF}" +[Desktop Entry] +Type=Directory +Encoding=UTF-8 +Name=Web Applications +EOF + +fi + +### MAKE SURE THE WEB APP MENU ENTRY EXISTS + +if [ ! -e "${WAPPMENF}" ]; then + +cat << EOF > "${WAPPMENF}" + + + Applications + + Web Applications + web-applications.directory + + WebApplications + + + +EOF + +fi + +### ASK FOR A BROWSER NAME IF $1 WASN'T SPECIFIED OR INVALID + +if [ -z "${WA_BRWSR}" ]; then + printf 'Supported browsers are (google-)chrome, chromium, epiphany, firefox, iridium).\n' + printf 'Browser: ' + read -r WA_BRWSR +fi + +### ASK FOR AN APPLICATION NAME IF $2 WASN'T SPECIFIED + +if [ -z "${WAPPNAME}" ]; then + printf 'Application Name: ' + read -r WAPPNAME +fi + +### ASK FOR A DESCRIPTION IF $3 WASN'T SPECIFIED + +if [ -z "${WAPPDESC}" ]; then + printf 'Description: ' + read -r WAPPDESC +fi + +### ASK FOR AN APPLICATION URL IF $4 WASN'T SPECIFIED + +if [ -z "${WAPPADDR}" ]; then + printf '\nMake sure this is the address that you want to initially show.' + printf '\nThis is usually NOT the address of the login screen.\n' + printf '\nApplication Addr: ' + read -r WAPPADDR +fi + +### ASK FOR AN APPLICATION ICON IF $5 WASN'T SPECIFIED + +if [ -z "${WAPPICON}" ]; then + printf '\nNo need to download an icon -- give the URL to an image and this script' + printf '\nwill grab it, rename it, and put it in the right place.\n' + printf '\nApplication Icon: ' + read -r WAPPICON + printf '\n' +fi + +### CORRECT SHORT NAMES TO FULL NAMES +[ "${WA_BRWSR}" ] = "chrome" && WA_BRWSR="google-chrome" + +### SET SUFFIX AND BIN BASED ON BROWSER +case "${WA_BRWSR}" in + "chrome") WDSUFFIX="pwa" ; BRWSRBIN="google-chrome" ; break;; + "chromium") WDSUFFIX="pwa" ; BRWSRBIN="chromium" ; break;; + "firefox") WDSUFFIX="ssb" ; BRWSRBIN="firefox" ; break;; + "google-chrome") WDSUFFIX="pwa" ; BRWSRBIN="google-chrome" ; break;; + "epiphany") WDSUFFIX="ewa" ; BRWSRBIN="epiphany" ; break;; + "iridium") WDSUFFIX="pwa" ; BRWSRBIN="iridium-browser" ; break;; +esac + +### PLACES FOR STUFF +WAPP_DIR="${APPS_DIR}/${WDSUFFIX}" +WAPP_ICO="${ICONSDIR}/${WAPPNAME,,}.${WAPPICON##*.}" +WAPP_DTF="${APPS_DIR}/${WDSUFFIX}/${WAPPNAME,,}.desktop" + +### EPIPHANY WEB APPS ARE SNOWFLAKE + +if [ "${WA_BRWSR}" = "epiphany" ]; then + WAPP_DIR="${SHAREDIR}/${EWA_PRFX}${WAPPNAME,,}" + WAPP_ICO="${WAPP_DIR}/app-icon.${WAPPICON##*.}" + WAPP_DTF="${WAPP_DIR}/${EWA_PRFX}${WAPPNAME,,}.desktop" +else + EWA_PRFX= +fi + +### FIREFOX IS ALSO SNOWFLAKE +if [ "${WA_BRWSR}" = "firefox" ]; then + + ### CREATE DIRECTORY FOR FIREFOX CACHE + printf -- ':: ' && mkdir -pv "/run/user/${UID}/${WAPPNAME,,}-ssb" + + ### CREATE A NEW PROFILE FOR THIS WEB APP + echo /usr/bin/firefox -CreateProfile "${WAPPNAME,,}-ssb" -no-remote + + ### FIND THE DIRECTORY FIREFOX CREATED + FFPFDIR="$(find "${HOME}/.mozilla/firefox" -type d -name '*'."${WAPPNAME,,}-ssb")" + + ### INJECT PREFERENCES + USRPREF1='user_pref("browser.cache.disk.parent_directory", "/run/user/'"${UID}"'/'"${WAPPNAME,,}"'-ssb");' + USRPREF2='user_pref("browser.ssb.enabled", true);' + USRPREF3='user_pref("extensions.pocket.enabled", false);' + USRPREF4='user_pref("privacy.donottrackheader.enabled", true);' + printf '%s\n%s\n%s\n%s\n' "${USRPREF1}" "${USRPREF2}" "${USRPREF3}" "${USRPREF4}" > "${FFPFDIR}/user.js" + +fi + +### MAKE WEBAPP DIRECTORY +printf -- ':: ' && mkdir -pv "${WAPP_DIR}" + +### SNOWFLAKE EPIPHANY REQUIRES A HIDDEN FILE IN THE WEBAPP DIRECTORY +[ "${WA_BRWSR}" = "epiphany" ] && touch "${WAPP_DIR}/.app" + +### GRAB THE ICON AND WRITE IT TO THE WEB APP ICON DIRECTORY +curl -s "${WAPPICON}" -o "${WAPP_ICO}" -w ':: curl: wrote "%{url_effective}" to "%{filename_effective}"\n' + +### CREATE COMMAND LINE FOR THE .desktop FILE +case "${WDSUFFIX}" in + ewa) WAPP_CMD="${BRWSRBIN} --application-mode --profile='${WAPP_DIR}' ${WAPPADDR}";; + pwa) WAPP_CMD="${BRWSRBIN} --user-data-dir='${CONF_DIR}/${WA_BRWSR}/${WAPPNAME,,}-pwa' --no-first-run --no-default-browser-check --app='${WAPPADDR}'";; + ssb) WAPP_CMD="${BRWSRBIN} -P ${WAPPNAME,,}-ssb --class ${WAPPNAME,,}-ssb --no-remote --ssb ${WAPPADDR}";; +esac + +### CREATE WMCLASS FOR THE .desktop FILE +case "${WDSUFFIX}" in + ewa) WAWMCLAS="${EWA_PRFX}${WAPPNAME,,}";; + pwa) WAWMCLAS="${WAPPNAME,,}-pwa";; + ssb) WAWMCLAS="${WAPPNAME,,}-ssb";; +esac + +### CREATE A DESKTOP ENTRY FOR THE WEB APP +DTE0="[Desktop Entry]" +DTE1="Name=${WAPPNAME} (${WDSUFFIX^^})" +DTE2="GenericName=${WAPPDESC}" +DTE3="Exec=${WAPP_CMD}" +DTE4="StartupNotify=true" +DTE5="Terminal=false" +DTE6="Type=Application" +DTE7="Categories=WebApplications" +DTE8="Icon=${WAPP_ICO}" +DTE9="StartupWMClass=${WAWMCLAS}" + +printf '%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n' "${DTE0}" "${DTE1}" "${DTE2}" "${DTE3}" "${DTE4}" "${DTE5}" "${DTE6}" "${DTE7}" "${DTE8}" "${DTE9}" > "${WAPP_DTF}" + +printf -- ':: chmod: ' +chmod -v +x "${WAPP_DTF}" + +if [ -n "${EWA_PRFX}" ]; then + printf -- ':: ln -s: ' + ln -sv "../${EWA_PRFX}${WAPPNAME,,}/${EWA_PRFX}${WAPPNAME,,}.desktop" "${APPS_DIR}/${EWA_PRFX}${WAPPNAME,,}.desktop" +fi + +### CREATE A PROXIED VERSION +WAPP_DTF="${WAPP_DTF/.desktop/.proxied.desktop}" +[ "${WDSUFFIX}" = "pwa" ] && PRX_MTHD="Local Proxy" && WAPP_CMD="${WAPP_CMD} --proxy-server=socks://127.0.0.1:8080" +[ ! "${WDSUFFIX}" = "pwa" ] && PRX_MTHD="Proxychains" && WAPP_CMD="proxychains ${WAPP_CMD}" + +DTE0="[Desktop Entry]" +DTE1="Name=${WAPPNAME} (${WDSUFFIX^^}) via ${PRX_MTHD}" +DTE2="GenericName=${WAPPDESC}" +DTE3="Exec=${WAPP_CMD}" +DTE4="StartupNotify=true" +DTE5="Terminal=false" +DTE6="Type=Application" +DTE7="Categories=WebApplications" +DTE8="Icon=${WAPP_ICO}" +DTE9="StartupWMClass=${WAWMCLAS}" + +printf '%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n' "${DTE0}" "${DTE1}" "${DTE2}" "${DTE3}" "${DTE4}" "${DTE5}" "${DTE6}" "${DTE7}" "${DTE8}" "${DTE9}" > "${WAPP_DTF}" + +printf -- ':: chmod: ' +chmod -v +x "${WAPP_DTF}" + +if [ -n "${EWA_PRFX}" ]; then + printf -- ':: ln -s: ' + ln -sv "../${EWA_PRFX}${WAPPNAME,,}/${EWA_PRFX}${WAPPNAME,,}.proxied.desktop" "${APPS_DIR}/${EWA_PRFX}${WAPPNAME,,}.proxied.desktop" +fi \ No newline at end of file