From d8dad02c7538747a29113def17a72a8e2298a93a Mon Sep 17 00:00:00 2001 From: Jahziel Villasana-Espinoza Date: Mon, 3 Mar 2025 19:36:03 -0500 Subject: [PATCH] feat: FMAv2 initial file setup (#26791) > For #26080 # Checklist for submitter If some of the following don't apply, delete the relevant line. - [x] Manual QA for all new/changed functionality --- ee/maintained-apps/outputs/apps.json | 145 ++++++++++++++++++ .../outputs/darwin/1password.json | 19 +++ .../outputs/darwin/adobe-acrobat-reader.json | 19 +++ .../outputs/darwin/box-drive.json | 19 +++ .../outputs/darwin/brave-browser.json | 19 +++ .../outputs/darwin/cloudflare-warp.json | 19 +++ ee/maintained-apps/outputs/darwin/docker.json | 19 +++ ee/maintained-apps/outputs/darwin/figma.json | 19 +++ .../outputs/darwin/firefox.json | 19 +++ .../outputs/darwin/google-chrome.json | 18 +++ .../outputs/darwin/microsoft-edge.json | 19 +++ .../outputs/darwin/microsoft-excel.json | 19 +++ .../outputs/darwin/microsoft-teams.json | 19 +++ .../outputs/darwin/microsoft-word.json | 19 +++ ee/maintained-apps/outputs/darwin/notion.json | 19 +++ .../outputs/darwin/postman.json | 19 +++ ee/maintained-apps/outputs/darwin/slack.json | 19 +++ .../outputs/darwin/teamviewer.json | 19 +++ .../outputs/darwin/visual-studio-code.json | 19 +++ .../outputs/darwin/whatsapp.json | 19 +++ .../outputs/darwin/zoom-for-it-admins.json | 19 +++ 21 files changed, 524 insertions(+) create mode 100644 ee/maintained-apps/outputs/apps.json create mode 100644 ee/maintained-apps/outputs/darwin/1password.json create mode 100644 ee/maintained-apps/outputs/darwin/adobe-acrobat-reader.json create mode 100644 ee/maintained-apps/outputs/darwin/box-drive.json create mode 100644 ee/maintained-apps/outputs/darwin/brave-browser.json create mode 100644 ee/maintained-apps/outputs/darwin/cloudflare-warp.json create mode 100644 ee/maintained-apps/outputs/darwin/docker.json create mode 100644 ee/maintained-apps/outputs/darwin/figma.json create mode 100644 ee/maintained-apps/outputs/darwin/firefox.json create mode 100644 ee/maintained-apps/outputs/darwin/google-chrome.json create mode 100644 ee/maintained-apps/outputs/darwin/microsoft-edge.json create mode 100644 ee/maintained-apps/outputs/darwin/microsoft-excel.json create mode 100644 ee/maintained-apps/outputs/darwin/microsoft-teams.json create mode 100644 ee/maintained-apps/outputs/darwin/microsoft-word.json create mode 100644 ee/maintained-apps/outputs/darwin/notion.json create mode 100644 ee/maintained-apps/outputs/darwin/postman.json create mode 100644 ee/maintained-apps/outputs/darwin/slack.json create mode 100644 ee/maintained-apps/outputs/darwin/teamviewer.json create mode 100644 ee/maintained-apps/outputs/darwin/visual-studio-code.json create mode 100644 ee/maintained-apps/outputs/darwin/whatsapp.json create mode 100644 ee/maintained-apps/outputs/darwin/zoom-for-it-admins.json diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json new file mode 100644 index 0000000000..12708d0d58 --- /dev/null +++ b/ee/maintained-apps/outputs/apps.json @@ -0,0 +1,145 @@ +{ + "version": 2, + "apps": [ + { + "name": "1Password", + "slug": "1password/darwin", + "platform": "darwin", + "unique_identifier": "com.1password.1password", + "description": "Password manager that keeps all passwords secure behind one password" + }, + { + "name": "Adobe Acrobat Reader", + "slug": "adobe-acrobat-reader/darwin", + "platform": "darwin", + "unique_identifier": "com.adobe.Reader", + "description": "Adobe Acrobat Reader is the industry-standard tool for viewing, printing, and commenting on PDF documents." + }, + { + "name": "Box Drive", + "slug": "box-drive/darwin", + "platform": "darwin", + "unique_identifier": "com.box.desktop", + "description": "Box Drive is the desktop client for Box Cloud, enabling seamless access to your files without taking up local storage." + }, + { + "name": "Brave", + "slug": "brave-browser/darwin", + "platform": "darwin", + "unique_identifier": "com.brave.Browser", + "description": "Brave is a web browser designed with privacy, blocking ads and trackers by default while maintaining fast speed." + }, + { + "name": "Cloudflare WARP", + "slug": "cloudflare-warp/darwin", + "platform": "darwin", + "unique_identifier": "com.cloudflare.1dot1dot1dot1.macos", + "description": "Cloudflare WARP enhances internet safety and performance by encrypting your data and optimizing connections for privacy." + }, + { + "name": "Docker Desktop", + "slug": "docker/darwin", + "platform": "darwin", + "unique_identifier": "com.docker.docker", + "description": "Docker Desktop provides a seamless environment for building, sharing, and running containerized applications and microservices." + }, + { + "name": "Figma", + "slug": "figma/darwin", + "platform": "darwin", + "unique_identifier": "com.figma.Desktop", + "description": "Figma is a collaborative design tool for teams to create, prototype, and share designs in real time." + }, + { + "name": "Mozilla Firefox", + "slug": "firefox/darwin", + "platform": "darwin", + "unique_identifier": "org.mozilla.firefox", + "description": "Firefox is a powerful, open-source web browser built for speed, privacy, and customization." + }, + { + "name": "Google Chrome", + "slug": "google-chrome/darwin", + "platform": "darwin", + "unique_identifier": "com.google.Chrome", + "description": "Google Chrome is a fast, reliable web browser built for performance and compatibility across platforms." + }, + { + "name": "Microsoft Edge", + "slug": "microsoft-edge/darwin", + "platform": "darwin", + "unique_identifier": "com.microsoft.edgemac", + "description": "Microsoft Edge is a secure, fast, and modern web browser built for productivity and compatibility." + }, + { + "name": "Microsoft Excel", + "slug": "microsoft-excel/darwin", + "platform": "darwin", + "unique_identifier": "com.microsoft.Excel", + "description": "Microsoft Excel is the industry-standard spreadsheet software, perfect for data analysis, reporting, and visualization." + }, + { + "name": "Microsoft Teams", + "slug": "microsoft-teams/darwin", + "platform": "darwin", + "unique_identifier": "com.microsoft.teams2", + "description": "Microsoft Teams is an all-in-one collaboration platform for meetings, chats, calls, and document sharing." + }, + { + "name": "Microsoft Word", + "slug": "microsoft-word/darwin", + "platform": "darwin", + "unique_identifier": "com.microsoft.Word", + "description": "Microsoft Word is the industry-standard word processor for creating, editing, and sharing professional documents." + }, + { + "name": "Notion", + "slug": "notion/darwin", + "platform": "darwin", + "unique_identifier": "notion.id", + "description": "Notion is an all-in-one workspace for writing, planning, collaborating, and organizing." + }, + { + "name": "Postman", + "slug": "postman/darwin", + "platform": "darwin", + "unique_identifier": "com.postmanlabs.mac", + "description": "Postman is a collaboration platform for API development that simplifies building, testing, and sharing APIs." + }, + { + "name": "Slack", + "slug": "slack/darwin", + "platform": "darwin", + "unique_identifier": "com.tinyspeck.slackmacgap", + "description": "Slack is a team communication and collaboration software for modern workplaces" + }, + { + "name": "TeamViewer", + "slug": "teamviewer/darwin", + "platform": "darwin", + "unique_identifier": "com.teamviewer.TeamViewer", + "description": "TeamViewer is a versatile remote access and connectivity platform trusted for secure remote desktop control, support, and collaboration." + }, + { + "name": "Microsoft Visual Studio Code", + "slug": "visual-studio-code/darwin", + "platform": "darwin", + "unique_identifier": "com.microsoft.VSCode", + "description": "Microsoft Visual Studio Code (VS Code) is an open-source, lightweight, and powerful code editor." + }, + { + "name": "WhatsApp", + "slug": "whatsapp/darwin", + "platform": "darwin", + "unique_identifier": "net.whatsapp.WhatsApp", + "description": "WhatsApp's native desktop client for seamless messaging and calling on macOS." + }, + { + "name": "Zoom for IT Admins", + "slug": "zoom-for-it-admins/darwin", + "platform": "darwin", + "unique_identifier": "us.zoom.xos", + "description": "Zoom is a leading video communication platform for meetings, webinars, and collaboration." + } + ] +} diff --git a/ee/maintained-apps/outputs/darwin/1password.json b/ee/maintained-apps/outputs/darwin/1password.json new file mode 100644 index 0000000000..8b7f77333d --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/1password.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "8.10.60", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.1password.1password';" + }, + "installer_url": "https://downloads.1password.com/mac/1Password-8.10.60-aarch64.zip", + "unique_identifier": "com.1password.1password", + "install_script_ref": "19ababc1-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19abb6e2-ed65-11ef-8c2d-0242ac12000a", + "sha256": "76b26233c12250cdcce78f8a3d074bbc09927c11f960fa90935e328c7ce806d3" + } + ], + "refs": { + "19ababc1-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_application 'com.1password.1password'\nsudo [ -d \"$APPDIR/1Password.app\" ] && sudo mv \"$APPDIR/1Password.app\" \"$TMPDIR/1Password.app.bkp\"\nsudo cp -R \"$TMPDIR/1Password.app\" \"$APPDIR\"\n", + "19abb6e2-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/1Password.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/2BUA8C4S2C.com.1password*'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/2BUA8C4S2C.com.agilebits'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.1password.1password-launcher'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.1password.browser-support'\ntrash $LOGGED_IN_USER '~/Library/Application Support/1Password'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Arc/User Data/NativeMessagingHosts/com.1password.1password.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.1password.1password.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/CrashReporter/1Password*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Google/Chrome Beta/NativeMessagingHosts/com.1password.1password.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Google/Chrome Canary/NativeMessagingHosts/com.1password.1password.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Google/Chrome Dev/NativeMessagingHosts/com.1password.1password.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.1password.1password.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Microsoft Edge Beta/NativeMessagingHosts/com.1password.1password.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Microsoft Edge Canary/NativeMessagingHosts/com.1password.1password.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Microsoft Edge Dev/NativeMessagingHosts/com.1password.1password.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Microsoft Edge/NativeMessagingHosts/com.1password.1password.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Mozilla/NativeMessagingHosts/com.1password.1password.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Vivaldi/NativeMessagingHosts/com.1password.1password.json'\ntrash $LOGGED_IN_USER '~/Library/Containers/2BUA8C4S2C.com.1password.browser-helper'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.1password.1password*'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.1password.browser-support'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/2BUA8C4S2C.com.1password'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/2BUA8C4S2C.com.agilebits'\ntrash $LOGGED_IN_USER '~/Library/Logs/1Password'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.1password.1password.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/group.com.1password.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.1password.1password.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/adobe-acrobat-reader.json b/ee/maintained-apps/outputs/darwin/adobe-acrobat-reader.json new file mode 100644 index 0000000000..3cd16ee253 --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/adobe-acrobat-reader.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "8.10.60", + "installer_url": "https://downloads.1password.com/mac/1Password-8.10.60-aarch64.zip", + "unique_identifier": "com.adobe.Reader", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.adobe.Reader';" + }, + "install_script_ref": "19abc536-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19abc828-ed65-11ef-8c2d-0242ac12000a", + "sha256": "37fa04f8e633085a36f598ea94cb1da0245b2fc9eca898f7198880026dad5bd1" + } + ], + "refs": { + "19abc536-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# install pkg files\nsudo installer -pkg \"$TMPDIR/AcroRdrDC_2400520400_MUI.pkg\" -target /\n", + "19abc828-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.adobe.ARMDC.Communicator'\nremove_launchctl_service 'com.adobe.ARMDC.SMJobBlessHelper'\nremove_launchctl_service 'com.adobe.ARMDCHelper.cc24aef4a1b90ed56a725c38014c95072f92651fb65e1bf9c8e43c37a23d420d'\nquit_application 'com.adobe.AdobeRdrCEF'\nquit_application 'com.adobe.AdobeRdrCEFHelper'\nquit_application 'com.adobe.Reader'\nsudo pkgutil --forget 'com.adobe.acrobat.DC.reader.*'\nsudo pkgutil --forget 'com.adobe.armdc.app.pkg'\nsudo pkgutil --forget 'com.adobe.RdrServicesUpdater'\nsudo rm -rf '/Applications/Adobe Acrobat Reader.app'\nsudo rm -rf '/Library/Preferences/com.adobe.reader.DC.WebResource.plist'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.adobe.Reader'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.adobe.Reader.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.adobe.AdobeRdrCEFHelper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.adobe.crashreporter.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.adobe.Reader.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/box-drive.json b/ee/maintained-apps/outputs/darwin/box-drive.json new file mode 100644 index 0000000000..e7603a7c32 --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/box-drive.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "2.43.205", + "installer_url": "https://e3.boxcdn.net/desktop/releases/mac/BoxDrive-2.43.205.pkg", + "unique_identifier": "com.box.desktop", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.box.desktop';" + }, + "install_script_ref": "19abd092-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19abd303-ed65-11ef-8c2d-0242ac12000a", + "sha256": "200c5fa6d8eec5516924938d46e7fa6122fdc189044fd935e8c155faa5beaf3d" + } + ], + "refs": { + "19abd092-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# install pkg files\nsudo installer -pkg \"$TMPDIR/BoxDrive-2.43.205.pkg\" -target /\n", + "19abd303-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\n(cd /Users/$LOGGED_IN_USER; sudo -u $LOGGED_IN_USER fileproviderctl domain remove -A com.box.desktop.boxfileprovider)\n(cd /Users/$LOGGED_IN_USER; sudo -u $LOGGED_IN_USER /Applications/Box.app/Contents/MacOS/fpe/streem --remove-fpe-domain-and-archive-unsynced-content Box)\n(cd /Users/$LOGGED_IN_USER; sudo -u $LOGGED_IN_USER /Applications/Box.app/Contents/MacOS/fpe/streem --remove-fpe-domain-and-preserve-unsynced-content Box)\n(cd /Users/$LOGGED_IN_USER; defaults delete com.box.desktop)\necho \"${LOGGED_IN_USER} ALL = (root) NOPASSWD: /Library/Application\\ Support/Box/uninstall_box_drive_r\" >> /etc/sudoers.d/box_uninstall\nremove_launchctl_service 'com.box.desktop.helper'\nquit_application 'com.box.Box-Local-Com-Server'\nquit_application 'com.box.desktop'\nquit_application 'com.box.desktop.findersyncext'\nquit_application 'com.box.desktop.helper'\nquit_application 'com.box.desktop.ui'\n(cd /Users/$LOGGED_IN_USER && sudo -u \"$LOGGED_IN_USER\" '/Library/Application Support/Box/uninstall_box_drive')\nsudo pkgutil --forget 'com.box.desktop.installer.*'\nrm /etc/sudoers.d/box_uninstall\ntrash $LOGGED_IN_USER '~/.Box_*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Box/Box'\ntrash $LOGGED_IN_USER '~/Library/Application Support/FileProvider/com.box.desktop.boxfileprovider'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.box.desktop.findersyncext'\ntrash $LOGGED_IN_USER '~/Library/Logs/Box/Box'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.box.desktop.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.box.desktop.ui.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/brave-browser.json b/ee/maintained-apps/outputs/darwin/brave-browser.json new file mode 100644 index 0000000000..bd41652c07 --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/brave-browser.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "1.75.178.0", + "installer_url": "https://updates-cdn.bravesoftware.com/sparkle/Brave-Browser/stable-arm64/175.178/Brave-Browser-arm64.dmg", + "unique_identifier": "com.brave.Browser", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.brave.Browser';" + }, + "install_script_ref": "19abe0bf-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19abe347-ed65-11ef-8c2d-0242ac12000a", + "sha256": "87fbadfa852feea93caca5b3f6b8061257d9210c66ecee97408e4d3eb38dec5d" + } + ], + "refs": { + "19abe0bf-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.brave.Browser'\nsudo [ -d \"$APPDIR/Brave Browser.app\" ] && sudo mv \"$APPDIR/Brave Browser.app\" \"$TMPDIR/Brave Browser.app.bkp\"\nsudo cp -R \"$TMPDIR/Brave Browser.app\" \"$APPDIR\"\n", + "19abe347-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Brave Browser.app\"\nsudo rmdir '~/Library/Application Support/BraveSoftware'\nsudo rmdir '~/Library/Caches/BraveSoftware'\ntrash $LOGGED_IN_USER '~/Library/Application Support/BraveSoftware/Brave-Browser'\ntrash $LOGGED_IN_USER '~/Library/Caches/BraveSoftware/Brave-Browser'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.brave.Browser'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.brave.Browser'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.brave.Browser.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.brave.Browser.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/cloudflare-warp.json b/ee/maintained-apps/outputs/darwin/cloudflare-warp.json new file mode 100644 index 0000000000..da26d637d9 --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/cloudflare-warp.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "2024.12.554.0", + "installer_url": "https://downloads.cloudflareclient.com/v1/download/macos/version/2024.12.554.0", + "unique_identifier": "com.cloudflare.1dot1dot1dot1.macos", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.cloudflare.1dot1dot1dot1.macos';" + }, + "install_script_ref": "19ac0ea2-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac110b-ed65-11ef-8c2d-0242ac12000a", + "sha256": "1cc6d8a35452216165000266e13a03ac893dfc6b13302ea226fea6357c907a6d" + } + ], + "refs": { + "19ac0ea2-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# install pkg files\nsudo installer -pkg \"$TMPDIR/Cloudflare_WARP_2024.12.554.0.pkg\" -target /\n", + "19ac110b-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.cloudflare.1dot1dot1dot1.macos.loginlauncherapp'\nremove_launchctl_service 'com.cloudflare.1dot1dot1dot1.macos.warp.daemon'\nquit_application 'com.cloudflare.1dot1dot1dot1.macos'\n(cd /Users/$LOGGED_IN_USER && sudo -u \"$LOGGED_IN_USER\" '/Applications/Cloudflare WARP.app/Contents/Resources/uninstall.sh')\n(cd /Users/$LOGGED_IN_USER && sudo -u \"$LOGGED_IN_USER\" '%!s(bool=true)')\nsudo pkgutil --forget 'com.cloudflare.1dot1dot1dot1.macos'\nsudo rm -rf '/usr/local/bin/warp-cli'\nsudo rm -rf '/usr/local/bin/warp-dex'\nsudo rm -rf '/usr/local/bin/warp-diag'\n/Applications/Cloudflare\\ WARP.app/Contents/Resources/uninstall.sh\ntrash $LOGGED_IN_USER '/Library/LaunchDaemons/com.cloudflare.1dot1dot1dot1.macos.warp.daemon.plist'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.cloudflare.1dot1dot1dot1.macos.loginlauncherapp'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.cloudflare.1dot1dot1dot1.macos'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.cloudflare.1dot1dot1dot1.macos'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.plausiblelabs.crashreporter.data/com.cloudflare.1dot1dot1dot1.macos'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.cloudflare.1dot1dot1dot1.macos.loginlauncherapp'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.cloudflare.1dot1dot1dot1.macos'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.cloudflare.1dot1dot1dot1.macos.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.cloudflare.1dot1dot1dot1.macos.plist'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.cloudflare.1dot1dot1dot1.macos'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/docker.json b/ee/maintained-apps/outputs/darwin/docker.json new file mode 100644 index 0000000000..07750a7256 --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/docker.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "4.38.0,181591", + "installer_url": "https://desktop.docker.com/mac/main/arm64/181591/Docker.dmg", + "unique_identifier": "com.docker.docker", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.docker.docker';" + }, + "install_script_ref": "19ac18bc-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac19d9-ed65-11ef-8c2d-0242ac12000a", + "sha256": "29fe402d5a64d86565ae4ad69f19158b3c4d710c2ccfc6e1feb0d21239a2149e" + } + ], + "refs": { + "19ac18bc-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.docker.docker'\nquit_application 'com.electron.dockerdesktop'\nsudo [ -d \"$APPDIR/Docker.app\" ] && sudo mv \"$APPDIR/Docker.app\" \"$TMPDIR/Docker.app.bkp\"\nsudo cp -R \"$TMPDIR/Docker.app\" \"$APPDIR\"\n[ -d \"/usr/local/bin\" ] && /bin/ln -h -f -s -- \"$APPDIR/Docker.app/Contents/Resources/bin/docker\" \"/usr/local/bin/docker\"\n[ -d \"/usr/local/bin\" ] && /bin/ln -h -f -s -- \"$APPDIR/Docker.app/Contents/Resources/bin/docker-credential-desktop\" \"/usr/local/bin/docker-credential-desktop\"\n[ -d \"/usr/local/bin\" ] && /bin/ln -h -f -s -- \"$APPDIR/Docker.app/Contents/Resources/bin/docker-credential-ecr-login\" \"/usr/local/bin/docker-credential-ecr-login\"\n[ -d \"/usr/local/bin\" ] && /bin/ln -h -f -s -- \"$APPDIR/Docker.app/Contents/Resources/bin/docker-credential-osxkeychain\" \"/usr/local/bin/docker-credential-osxkeychain\"\n[ -d \"/usr/local/bin\" ] && /bin/ln -h -f -s -- \"$APPDIR/Docker.app/Contents/Resources/bin/hub-tool\" \"/usr/local/bin/hub-tool\"\n[ -d \"/usr/local/cli-plugins\" ] && /bin/ln -h -f -s -- \"$APPDIR/Docker.app/Contents/Resources/cli-plugins/docker-compose\" \"/usr/local/cli-plugins/docker-compose\"\n[ -d \"/usr/local/bin\" ] && /bin/ln -h -f -s -- \"$APPDIR/Docker.app/Contents/Resources/bin/kubectl\" \"/usr/local/bin/kubectl.docker\"\n", + "19ac19d9-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.docker.helper'\nremove_launchctl_service 'com.docker.socket'\nremove_launchctl_service 'com.docker.vmnetd'\nquit_application 'com.docker.docker'\nquit_application 'com.electron.dockerdesktop'\nsudo rm -rf '/Library/PrivilegedHelperTools/com.docker.socket'\nsudo rm -rf '/Library/PrivilegedHelperTools/com.docker.vmnetd'\nsudo rmdir '~/.docker/bin'\nsudo rm -rf \"$APPDIR/Docker.app\"\nsudo rm -rf '/usr/local/bin/docker'\nsudo rm -rf '/usr/local/bin/docker-credential-desktop'\nsudo rm -rf '/usr/local/bin/docker-credential-ecr-login'\nsudo rm -rf '/usr/local/bin/docker-credential-osxkeychain'\nsudo rm -rf '/usr/local/bin/hub-tool'\nsudo rm -rf '/usr/local/cli-plugins/docker-compose'\nsudo rm -rf '/usr/local/bin/kubectl.docker'\nsudo rmdir '~/Library/Caches/com.plausiblelabs.crashreporter.data'\nsudo rmdir '~/Library/Caches/KSCrashReports'\ntrash $LOGGED_IN_USER '/usr/local/bin/docker-compose.backup'\ntrash $LOGGED_IN_USER '/usr/local/bin/docker.backup'\ntrash $LOGGED_IN_USER '~/.docker'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.docker.helper'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/group.com.docker'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.docker.helper.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.electron.dockerdesktop.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.bugsnag.Bugsnag/com.docker.docker'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Docker Desktop'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.docker.docker'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.plausiblelabs.crashreporter.data/com.docker.docker'\ntrash $LOGGED_IN_USER '~/Library/Caches/KSCrashReports/Docker'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.docker.docker'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.docker.helper'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/group.com.docker'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.docker.docker'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.docker.docker.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Logs/Docker Desktop'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.docker.docker.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.electron.docker-frontend.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.electron.dockerdesktop.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.electron.docker-frontend.savedState'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.electron.dockerdesktop.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/figma.json b/ee/maintained-apps/outputs/darwin/figma.json new file mode 100644 index 0000000000..4612784332 --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/figma.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "125.0.8", + "installer_url": "https://desktop.figma.com/mac-arm/Figma-125.0.8.zip", + "unique_identifier": "com.figma.Desktop", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.figma.Desktop';" + }, + "install_script_ref": "19ac251c-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac26a9-ed65-11ef-8c2d-0242ac12000a", + "sha256": "eb765f11a1526e3f98d12d8eff1c1f587058291418fd5f2e1e6d5f25e941d9bc" + } + ], + "refs": { + "19ac251c-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_application 'com.figma.Desktop'\nsudo [ -d \"$APPDIR/Figma.app\" ] && sudo mv \"$APPDIR/Figma.app\" \"$TMPDIR/Figma.app.bkp\"\nsudo cp -R \"$TMPDIR/Figma.app\" \"$APPDIR\"\n", + "19ac26a9-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Figma.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Figma'\ntrash $LOGGED_IN_USER '~/Library/Application Support/figma-desktop'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.figma.agent'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.figma.Desktop'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.figma.Desktop.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.figma.Desktop.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/firefox.json b/ee/maintained-apps/outputs/darwin/firefox.json new file mode 100644 index 0000000000..6fbda5935c --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/firefox.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "135.0", + "installer_url": "https://download-installer.cdn.mozilla.net/pub/firefox/releases/135.0/mac/en-US/Firefox%20135.0.dmg", + "unique_identifier": "org.mozilla.firefox", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.mozilla.firefox';" + }, + "install_script_ref": "19ac3c87-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac3e07-ed65-11ef-8c2d-0242ac12000a", + "sha256": "e55e24e6b2a4980f4b9091900835977b282f599dcdd5e38b753d95bad8a11da9" + } + ], + "refs": { + "19ac3c87-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'org.mozilla.firefox'\nsudo [ -d \"$APPDIR/Firefox.app\" ] && sudo mv \"$APPDIR/Firefox.app\" \"$TMPDIR/Firefox.app.bkp\"\nsudo cp -R \"$TMPDIR/Firefox.app\" \"$APPDIR\"\n", + "19ac3e07-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'org.mozilla.firefox'\nsudo rm -rf \"$APPDIR/Firefox.app\"\nsudo rm -rf 'firefox'\nsudo rmdir '~/Library/Application Support/Mozilla'\nsudo rmdir '~/Library/Caches/Mozilla'\nsudo rmdir '~/Library/Caches/Mozilla/updates'\nsudo rmdir '~/Library/Caches/Mozilla/updates/Applications'\ntrash $LOGGED_IN_USER '/Library/Logs/DiagnosticReports/firefox_*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/org.mozilla.firefox.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/CrashReporter/firefox_*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Firefox'\ntrash $LOGGED_IN_USER '~/Library/Caches/Firefox'\ntrash $LOGGED_IN_USER '~/Library/Caches/Mozilla/updates/Applications/Firefox'\ntrash $LOGGED_IN_USER '~/Library/Caches/org.mozilla.crashreporter'\ntrash $LOGGED_IN_USER '~/Library/Caches/org.mozilla.firefox'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.mozilla.crashreporter.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.mozilla.firefox.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.mozilla.firefox.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/org.mozilla.firefox'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/google-chrome.json b/ee/maintained-apps/outputs/darwin/google-chrome.json new file mode 100644 index 0000000000..5fe031d2ff --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/google-chrome.json @@ -0,0 +1,18 @@ +{ + "versions": [ + { + "version": "133.0.6943.99", + "installer_url": "https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg", + "unique_identifier": "com.google.Chrome", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.google.Chrome';" + }, + "install_script_ref": "19ac440a-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac467c-ed65-11ef-8c2d-0242ac12000a" + } + ], + "refs": { + "19ac440a-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.google.Chrome'\nsudo [ -d \"$APPDIR/Google Chrome.app\" ] && sudo mv \"$APPDIR/Google Chrome.app\" \"$TMPDIR/Google Chrome.app.bkp\"\nsudo cp -R \"$TMPDIR/Google Chrome.app\" \"$APPDIR\"\n", + "19ac467c-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Google Chrome.app\"\nremove_launchctl_service 'com.google.keystone.agent'\nremove_launchctl_service 'com.google.keystone.daemon'\nsudo rmdir '/Library/Google'\nsudo rmdir '~/Library/Application Support/Google'\nsudo rmdir '~/Library/Caches/Google'\nsudo rmdir '~/Library/Google'\ntrash $LOGGED_IN_USER '/Library/Caches/com.google.SoftwareUpdate.*'\ntrash $LOGGED_IN_USER '/Library/Google/Google Chrome Brand.plist'\ntrash $LOGGED_IN_USER '/Library/Google/GoogleSoftwareUpdate'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.google.chrome.app.*.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.google.chrome.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Google/Chrome'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.google.Chrome'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.google.Chrome.helper.*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.google.Keystone'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.google.Keystone.Agent'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.google.SoftwareUpdate'\ntrash $LOGGED_IN_USER '~/Library/Caches/Google/Chrome'\ntrash $LOGGED_IN_USER '~/Library/Google/Google Chrome Brand.plist'\ntrash $LOGGED_IN_USER '~/Library/Google/GoogleSoftwareUpdate'\ntrash $LOGGED_IN_USER '~/Library/LaunchAgents/com.google.keystone.agent.plist'\ntrash $LOGGED_IN_USER '~/Library/LaunchAgents/com.google.keystone.xpcservice.plist'\ntrash $LOGGED_IN_USER '~/Library/Logs/GoogleSoftwareUpdateAgent.log'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.google.Chrome.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.google.Keystone.Agent.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.google.Chrome.app.*.savedState'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.google.Chrome.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.google.Chrome'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/microsoft-edge.json b/ee/maintained-apps/outputs/darwin/microsoft-edge.json new file mode 100644 index 0000000000..6352f43d23 --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/microsoft-edge.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "133.0.3065.69,1f23240b-ab7b-4f22-9b0f-dd3fc2639c09", + "installer_url": "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/1f23240b-ab7b-4f22-9b0f-dd3fc2639c09/MicrosoftEdge-133.0.3065.69.pkg", + "unique_identifier": "com.microsoft.edgemac", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.edgemac';" + }, + "install_script_ref": "19ac4c3d-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac4dd7-ed65-11ef-8c2d-0242ac12000a", + "sha256": "5ea3058eb400e8d92d7861ce303a9b58f30d28c64b05945d5e5f0513e6dc8b6b" + } + ], + "refs": { + "19ac4c3d-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# install pkg files\n\nCHOICE_XML=$(mktemp /tmp/choice_xml_XXX)\n\ncat << EOF > \"$CHOICE_XML\"\n\n\n\n \n \n attributeSetting\n 0\n choiceAttribute\n selected\n choiceIdentifier\n com.microsoft.package.Microsoft_AutoUpdate.app\n \n \n\n\nEOF\n\nsudo installer -pkg \"$TMPDIR\"/MicrosoftEdge-133.0.3065.69.pkg -target / -applyChoiceChangesXML \"$CHOICE_XML\"\n\n", + "19ac4dd7-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.microsoft.EdgeUpdater.update-internal.109.0.1518.89.system'\nremove_launchctl_service 'com.microsoft.EdgeUpdater.update.system'\nremove_launchctl_service 'com.microsoft.EdgeUpdater.wake.system'\nsudo pkgutil --forget 'com.microsoft.edgemac'\nsudo rm -rf '/Library/Application Support/Microsoft/EdgeUpdater'\nsudo rmdir '/Library/Application Support/Microsoft'\nsudo rmdir '~/Library/Microsoft'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.microsoft.edgemac.wdgExtension'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Microsoft Edge'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.microsoft.edgemac'\ntrash $LOGGED_IN_USER '~/Library/Caches/Microsoft Edge'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.microsoft.edgemac.wdgExtension'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.microsoft.edgemac'\ntrash $LOGGED_IN_USER '~/Library/LaunchAgents/com.microsoft.EdgeUpdater.*.plist'\ntrash $LOGGED_IN_USER '~/Library/Microsoft/MicrosoftSoftwareUpdate/Actives/com.microsoft.edgemac'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.microsoft.edgemac.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.microsoft.edgemac.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.microsoft.edgemac'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/microsoft-excel.json b/ee/maintained-apps/outputs/darwin/microsoft-excel.json new file mode 100644 index 0000000000..bc5405128c --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/microsoft-excel.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "16.94.25020927", + "installer_url": "https://officecdnmac.microsoft.com/pr/C1297A47-86C4-4C1F-97FA-950631F94777/MacAutoupdate/Microsoft_Excel_16.94.25020927_Installer.pkg", + "unique_identifier": "com.microsoft.Excel", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Excel';" + }, + "install_script_ref": "19ac51c7-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac532e-ed65-11ef-8c2d-0242ac12000a", + "sha256": "7ba1fd596243a955975a111242877cc5c5a08fb184fe40db9ed7a5aad6923d27" + } + ], + "refs": { + "19ac51c7-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# install pkg files\n\nCHOICE_XML=$(mktemp /tmp/choice_xml_XXX)\n\ncat << EOF > \"$CHOICE_XML\"\n\n\n\n \n \n attributeSetting\n 0\n choiceAttribute\n selected\n choiceIdentifier\n com.microsoft.autoupdate\n \n \n\n\nEOF\n\nsudo installer -pkg \"$TMPDIR\"/Microsoft_Excel_16.94.25020927_Installer.pkg -target / -applyChoiceChangesXML \"$CHOICE_XML\"\n\n", + "19ac532e-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.microsoft.office.licensingV2.helper'\nquit_application 'com.microsoft.autoupdate2'\nsudo pkgutil --forget 'com.microsoft.package.Microsoft_Excel.app'\nsudo pkgutil --forget 'com.microsoft.pkg.licensing'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.microsoft.Excel'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.microsoft.excel.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.microsoft.Excel'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.microsoft.Excel'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.microsoft.Excel.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.microsoft.Excel.savedState'\ntrash $LOGGED_IN_USER '~/Library/Webkit/com.microsoft.Excel'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/microsoft-teams.json b/ee/maintained-apps/outputs/darwin/microsoft-teams.json new file mode 100644 index 0000000000..1199330ce8 --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/microsoft-teams.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "25016.1904.3401.2239", + "installer_url": "https://statics.teams.cdn.office.net/production-osx/25016.1904.3401.2239/MicrosoftTeams.pkg", + "unique_identifier": "com.microsoft.teams2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.teams2';" + }, + "install_script_ref": "19ac6a43-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac6e5f-ed65-11ef-8c2d-0242ac12000a", + "sha256": "63a283bf5a022a221478df5630fb3e2b160bc20f3a7c13f09f350241cbf2b16e" + } + ], + "refs": { + "19ac6a43-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# install pkg files\n\nCHOICE_XML=$(mktemp /tmp/choice_xml_XXX)\n\ncat << EOF > \"$CHOICE_XML\"\n\n\n\n \n \n attributeSetting\n 0\n choiceAttribute\n selected\n choiceIdentifier\n com.microsoft.autoupdate\n \n \n\n\nEOF\n\nsudo installer -pkg \"$TMPDIR\"/MicrosoftTeams.pkg -target / -applyChoiceChangesXML \"$CHOICE_XML\"\n\n", + "19ac6e5f-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.microsoft.teams.TeamsUpdaterDaemon'\nquit_application 'com.microsoft.autoupdate2'\nsudo pkgutil --forget 'com.microsoft.MSTeamsAudioDevice'\nsudo pkgutil --forget 'com.microsoft.package.Microsoft_AutoUpdate.app'\nsudo pkgutil --forget 'com.microsoft.teams2'\nsudo rm -rf '/Applications/Microsoft Teams.app'\nsudo rm -rf '/Library/Application Support/Microsoft/TeamsUpdaterDaemon'\nsudo rm -rf '/Library/Logs/Microsoft/MSTeams'\nsudo rm -rf '/Library/Logs/Microsoft/Teams'\nsudo rm -rf '/Library/Preferences/com.microsoft.teams.plist'\nsudo rmdir '~/Library/Application Support/Microsoft'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/*.com.microsoft.teams'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.microsoft.teams*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.microsoft.teams'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Microsoft/Teams'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Teams'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.microsoft.teams'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.microsoft.teams*'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.microsoft.teams.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/*.com.microsoft.teams'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.microsoft.teams'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.microsoft.teams.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Logs/Microsoft Teams Helper (Renderer)'\ntrash $LOGGED_IN_USER '~/Library/Logs/Microsoft Teams'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.microsoft.teams*.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.microsoft.teams*.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.microsoft.teams'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/microsoft-word.json b/ee/maintained-apps/outputs/darwin/microsoft-word.json new file mode 100644 index 0000000000..8fff2db363 --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/microsoft-word.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "16.94.25020927", + "installer_url": "https://officecdnmac.microsoft.com/pr/C1297A47-86C4-4C1F-97FA-950631F94777/MacAutoupdate/Microsoft_Word_16.94.25020927_Installer.pkg", + "unique_identifier": "com.microsoft.Word", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Word';" + }, + "install_script_ref": "19ac7579-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac7675-ed65-11ef-8c2d-0242ac12000a", + "sha256": "77864ce4f0033ef33d3c9bfdd901522cebf85b1c834d991923e8a287bf302cb9" + } + ], + "refs": { + "19ac7579-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# install pkg files\n\nCHOICE_XML=$(mktemp /tmp/choice_xml_XXX)\n\ncat << EOF > \"$CHOICE_XML\"\n\n\n\n \n \n attributeSetting\n 0\n choiceAttribute\n selected\n choiceIdentifier\n com.microsoft.autoupdate\n \n \n\n\nEOF\n\nsudo installer -pkg \"$TMPDIR\"/Microsoft_Word_16.94.25020927_Installer.pkg -target / -applyChoiceChangesXML \"$CHOICE_XML\"\n\n", + "19ac7675-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.microsoft.office.licensingV2.helper'\nquit_application 'com.microsoft.autoupdate2'\nsudo pkgutil --forget 'com.microsoft.package.Microsoft_Word.app'\nsudo pkgutil --forget 'com.microsoft.pkg.licensing'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.microsoft.Word'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.microsoft.word.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/CrashReporter/Microsoft Word_*.plist'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.microsoft.Word'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.microsoft.Word.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.microsoft.Word.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/notion.json b/ee/maintained-apps/outputs/darwin/notion.json new file mode 100644 index 0000000000..a74a18ea9d --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/notion.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "4.5.0", + "installer_url": "https://desktop-release.notion-static.com/Notion-4.5.0-arm64.dmg", + "unique_identifier": "notion.id", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'notion.id';" + }, + "install_script_ref": "19ac79e9-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac7ba1-ed65-11ef-8c2d-0242ac12000a", + "sha256": "0dfd1598e04501104c8e304477a248c61956fc95d94d436f21f4704b0d4e4a90" + } + ], + "refs": { + "19ac79e9-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'notion.id'\nsudo [ -d \"$APPDIR/Notion.app\" ] && sudo mv \"$APPDIR/Notion.app\" \"$TMPDIR/Notion.app.bkp\"\nsudo cp -R \"$TMPDIR/Notion.app\" \"$APPDIR\"\n", + "19ac7ba1-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Notion.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Caches/notion-updater'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/notion.id.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Notion'\ntrash $LOGGED_IN_USER '~/Library/Caches/notion.id*'\ntrash $LOGGED_IN_USER '~/Library/Logs/Notion'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ByHost/notion.id.*'\ntrash $LOGGED_IN_USER '~/Library/Preferences/notion.id.*'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/notion.id.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/notion.id'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/postman.json b/ee/maintained-apps/outputs/darwin/postman.json new file mode 100644 index 0000000000..aab16df8e0 --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/postman.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "11.33.0", + "installer_url": "https://dl.pstmn.io/download/version/11.33.0/osx_arm64", + "unique_identifier": "com.postmanlabs.mac", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.postmanlabs.mac';" + }, + "install_script_ref": "19ac8c6f-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac8ee9-ed65-11ef-8c2d-0242ac12000a", + "sha256": "d890a56a301b4678be5bfe9ecdc0ba00f4205695aee16f21fea8166cdbd9681e" + } + ], + "refs": { + "19ac8c6f-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_application 'com.postmanlabs.mac'\nsudo [ -d \"$APPDIR/Postman.app\" ] && sudo mv \"$APPDIR/Postman.app\" \"$TMPDIR/Postman.app.bkp\"\nsudo cp -R \"$TMPDIR/Postman.app\" \"$APPDIR\"\n", + "19ac8ee9-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Postman.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.postmanlabs.mac.ShipIt'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Postman'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.postmanlabs.mac'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.postmanlabs.mac.ShipIt'\ntrash $LOGGED_IN_USER '~/Library/Caches/Postman'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.postmanlabs.mac'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ByHost/com.postmanlabs.mac.ShipIt.*.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.postmanlabs.mac.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.postmanlabs.mac.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/slack.json b/ee/maintained-apps/outputs/darwin/slack.json new file mode 100644 index 0000000000..a70840b85b --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/slack.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "4.42.117", + "installer_url": "https://downloads.slack-edge.com/desktop-releases/mac/arm64/4.42.117/Slack-4.42.117-macOS.dmg", + "unique_identifier": "com.tinyspeck.slackmacgap", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.tinyspeck.slackmacgap';" + }, + "install_script_ref": "19ac9218-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac9342-ed65-11ef-8c2d-0242ac12000a", + "sha256": "93e8406c6b515815889c63f99e26d1de485aaf820471a107c8f41da4a219d1db" + } + ], + "refs": { + "19ac9218-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_application 'com.tinyspeck.slackmacgap'\nsudo [ -d \"$APPDIR/Slack.app\" ] && sudo mv \"$APPDIR/Slack.app\" \"$TMPDIR/Slack.app.bkp\"\nsudo cp -R \"$TMPDIR/Slack.app\" \"$APPDIR\"\n", + "19ac9342-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.tinyspeck.slackmacgap'\nsudo rm -rf \"$APPDIR/Slack.app\"\ntrash $LOGGED_IN_USER '/Library/Logs/DiagnosticReports/Slack_*'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.tinyspeck.slackmacgap'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.tinyspeck.slackmacgap.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Slack'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.tinyspeck.slackmacgap*'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.tinyspeck.slackmacgap*'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.tinyspeck.slackmacgap.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/*.com.tinyspeck.slackmacgap'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/*.slack'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.tinyspeck.slackmacgap*'\ntrash $LOGGED_IN_USER '~/Library/Logs/Slack'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ByHost/com.tinyspeck.slackmacgap.ShipIt.*.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tinyspeck.slackmacgap*'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.tinyspeck.slackmacgap.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.tinyspeck.slackmacgap'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/teamviewer.json b/ee/maintained-apps/outputs/darwin/teamviewer.json new file mode 100644 index 0000000000..6df9e49dfc --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/teamviewer.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "15.62.4", + "installer_url": "https://dl.teamviewer.com/download/version_15x/update/15.62.4/TeamViewer.pkg", + "unique_identifier": "com.teamviewer.TeamViewer", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.teamviewer.TeamViewer';" + }, + "install_script_ref": "19ac975b-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac985e-ed65-11ef-8c2d-0242ac12000a", + "sha256": "9a631df3413128b64485e837fdeef683f152a73c643eb1d611f5ccacd58dbf16" + } + ], + "refs": { + "19ac975b-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# install pkg files\nsudo installer -pkg \"$TMPDIR/TeamViewer.pkg\" -target /\n", + "19ac985e-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.teamviewer.desktop'\nremove_launchctl_service 'com.teamviewer.Helper'\nremove_launchctl_service 'com.teamviewer.service'\nremove_launchctl_service 'com.teamviewer.teamviewer'\nremove_launchctl_service 'com.teamviewer.teamviewer_desktop'\nremove_launchctl_service 'com.teamviewer.teamviewer_service'\nremove_launchctl_service 'com.teamviewer.UninstallerHelper'\nremove_launchctl_service 'com.teamviewer.UninstallerWatcher'\nquit_application 'com.teamviewer.TeamViewer'\nquit_application 'com.teamviewer.TeamViewerUninstaller'\nsudo pkgutil --forget 'com.teamviewer.AuthorizationPlugin'\nsudo pkgutil --forget 'com.teamviewer.AuthorizationResources'\nsudo pkgutil --forget 'com.teamviewer.remoteaudiodriver'\nsudo pkgutil --forget 'com.teamviewer.teamviewer.*'\nsudo pkgutil --forget 'TeamViewerUninstaller'\nsudo rm -rf '/Applications/TeamViewer.app'\nsudo rm -rf '/Library/Preferences/com.teamviewer*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/TeamViewer'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.teamviewer.TeamViewer'\ntrash $LOGGED_IN_USER '~/Library/Caches/TeamViewer'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.teamviewer.TeamViewer.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Logs/TeamViewer'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.teamviewer*'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.teamviewer.TeamViewer.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/visual-studio-code.json b/ee/maintained-apps/outputs/darwin/visual-studio-code.json new file mode 100644 index 0000000000..ce6e235027 --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/visual-studio-code.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "1.97.2", + "installer_url": "https://update.code.visualstudio.com/1.97.2/darwin-arm64/stable", + "unique_identifier": "com.microsoft.VSCode", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.VSCode';" + }, + "install_script_ref": "19ac9d72-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19ac9e40-ed65-11ef-8c2d-0242ac12000a", + "sha256": "567ba4fae5545586a0bff02eea263d59873fcf488368a9a9ccf3d4c22dfa8ebc" + } + ], + "refs": { + "19ac9d72-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_application 'com.microsoft.VSCode'\nsudo [ -d \"$APPDIR/Visual Studio Code.app\" ] && sudo mv \"$APPDIR/Visual Studio Code.app\" \"$TMPDIR/Visual Studio Code.app.bkp\"\nsudo cp -R \"$TMPDIR/Visual Studio Code.app\" \"$APPDIR\"\n", + "19ac9e40-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.microsoft.VSCode.ShipIt'\nquit_application 'com.microsoft.VSCode'\nsudo rm -rf \"$APPDIR/Visual Studio Code.app\"\ntrash $LOGGED_IN_USER '~/.vscode'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Code'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.microsoft.vscode.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.microsoft.VSCode'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.microsoft.VSCode.ShipIt'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.microsoft.VSCode'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ByHost/com.microsoft.VSCode.ShipIt.*.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.microsoft.VSCode.helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.microsoft.VSCode.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.microsoft.VSCode.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/whatsapp.json b/ee/maintained-apps/outputs/darwin/whatsapp.json new file mode 100644 index 0000000000..8e5fed2faa --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/whatsapp.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "2.25.1.83", + "installer_url": "https://web.whatsapp.com/desktop/mac_native/release/?version=2.25.1.83&extension=zip&configuration=Release&branch=relbranch", + "unique_identifier": "net.whatsapp.WhatsApp", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'net.whatsapp.WhatsApp';" + }, + "install_script_ref": "19acafbf-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19acb0c6-ed65-11ef-8c2d-0242ac12000a", + "sha256": "1844b54471bd62f8182760b03e3fe65751a5825bedf65441fd97fed24453124d" + } + ], + "refs": { + "19acafbf-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_application 'net.whatsapp.WhatsApp'\nsudo [ -d \"$APPDIR/WhatsApp.app\" ] && sudo mv \"$APPDIR/WhatsApp.app\" \"$TMPDIR/WhatsApp.app.bkp\"\nsudo cp -R \"$TMPDIR/WhatsApp.app\" \"$APPDIR\"\n", + "19acb0c6-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/WhatsApp.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/net.whatsapp.WhatsApp*'\ntrash $LOGGED_IN_USER '~/Library/Caches/net.whatsapp.WhatsApp'\ntrash $LOGGED_IN_USER '~/Library/Containers/net.whatsapp.WhatsApp*'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/group.com.facebook.family'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/group.net.whatsapp*'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/net.whatsapp.WhatsApp.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/darwin/zoom-for-it-admins.json b/ee/maintained-apps/outputs/darwin/zoom-for-it-admins.json new file mode 100644 index 0000000000..9967cc3cfb --- /dev/null +++ b/ee/maintained-apps/outputs/darwin/zoom-for-it-admins.json @@ -0,0 +1,19 @@ +{ + "versions": [ + { + "version": "6.3.10.49367", + "installer_url": "https://cdn.zoom.us/prod/6.3.10.49367/ZoomInstallerIT.pkg", + "unique_identifier": "us.zoom.xos", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'us.zoom.xos';" + }, + "install_script_ref": "19acb314-ed65-11ef-8c2d-0242ac12000a", + "uninstall_script_ref": "19acb3bd-ed65-11ef-8c2d-0242ac12000a", + "sha256": "7274197cfc7fadee5db3efa592c26eb4a2a56fa5cb315d1ad5805b0674819237" + } + ], + "refs": { + "19acb314-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# install pkg files\nsudo installer -pkg \"$TMPDIR/ZoomInstallerIT.pkg\" -target /\n", + "19acb3bd-ed65-11ef-8c2d-0242ac12000a": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\nsend_signal() {\n local signal=\"$1\"\n local bundle_id=\"$2\"\n local logged_in_user=\"$3\"\n local logged_in_uid pids\n\n if [ -z \"$signal\" ] || [ -z \"$bundle_id\" ] || [ -z \"$logged_in_user\" ]; then\n echo \"Usage: uninstall_signal \"\n return 1\n fi\n\n logged_in_uid=$(id -u \"$logged_in_user\")\n if [ -z \"$logged_in_uid\" ]; then\n echo \"Could not find UID for user '$logged_in_user'.\"\n return 1\n fi\n\n echo \"Signalling '$signal' to application ID '$bundle_id' for user '$logged_in_user'\"\n\n pids=$(/bin/launchctl asuser \"$logged_in_uid\" sudo -iu \"$logged_in_user\" /bin/launchctl list | awk -v bundle_id=\"$bundle_id\" '\n $3 ~ bundle_id { print $1 }')\n\n if [ -z \"$pids\" ]; then\n echo \"No processes found for bundle ID '$bundle_id'.\"\n return 0\n fi\n\n echo \"Unix PIDs are $pids for processes with bundle identifier $bundle_id\"\n for pid in $pids; do\n if kill -s \"$signal\" \"$pid\" 2>/dev/null; then\n echo \"Successfully signaled PID $pid with signal $signal.\"\n else\n echo \"Failed to kill PID $pid with signal $signal. Check permissions.\"\n fi\n done\n\n sleep 3\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'us.zoom.ZoomDaemon'\nsend_signal 'KILL' 'us.zoom.xos' \"$LOGGED_IN_USER\"\nsudo pkgutil --forget 'us.zoom.pkg.videomeeting'\nsudo rm -rf '/Applications/zoom.us.app'\nsudo rm -rf '/Library/Audio/Plug-Ins/HAL/ZoomAudioDevice.driver'\nsudo rm -rf '/Library/Internet Plug-Ins/ZoomUsPlugIn.plugin'\nsudo rm -rf '/Library/Logs/DiagnosticReports/zoom.us*'\nsudo rm -rf '/Library/PrivilegedHelperTools/us.zoom.ZoomDaemon'\ntrash $LOGGED_IN_USER '/Library/Preferences/us.zoom.config.plist'\ntrash $LOGGED_IN_USER '~/.zoomus'\ntrash $LOGGED_IN_USER '~/Desktop/Zoom'\ntrash $LOGGED_IN_USER '~/Documents/Zoom'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/*.ZoomClient3rd'\ntrash $LOGGED_IN_USER '~/Library/Application Support/CloudDocs/session/containers/iCloud.us.zoom.videomeetings'\ntrash $LOGGED_IN_USER '~/Library/Application Support/CloudDocs/session/containers/iCloud.us.zoom.videomeetings.plist'\ntrash $LOGGED_IN_USER '~/Library/Application Support/CrashReporter/zoom.us*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/zoom.us'\ntrash $LOGGED_IN_USER '~/Library/Caches/us.zoom.xos'\ntrash $LOGGED_IN_USER '~/Library/Cookies/us.zoom.xos.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/*.ZoomClient3rd'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/us.zoom.xos'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/us.zoom.xos.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Internet Plug-Ins/ZoomUsPlugIn.plugin'\ntrash $LOGGED_IN_USER '~/Library/Logs/zoom.us'\ntrash $LOGGED_IN_USER '~/Library/Logs/zoominstall.log'\ntrash $LOGGED_IN_USER '~/Library/Logs/ZoomPhone'\ntrash $LOGGED_IN_USER '~/Library/Mobile Documents/iCloud~us~zoom~videomeetings'\ntrash $LOGGED_IN_USER '~/Library/Preferences/us.zoom.airhost.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/us.zoom.caphost.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/us.zoom.Transcode.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/us.zoom.xos.Hotkey.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/us.zoom.xos.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/us.zoom.ZoomAutoUpdater.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ZoomChat.plist'\ntrash $LOGGED_IN_USER '~/Library/Safari/PerSiteZoomPreferences.plist'\ntrash $LOGGED_IN_USER '~/Library/SafariTechnologyPreview/PerSiteZoomPreferences.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/us.zoom.xos.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/us.zoom.xos'\n" + } +}