diff --git a/Installomator.sh b/Installomator.sh index a568068..54d2fbb 100755 --- a/Installomator.sh +++ b/Installomator.sh @@ -81,6 +81,7 @@ LOGO=appstore # - mosylem Mosyle Manager (Education) # - addigy Addigy # - microsoft Microsoft Endpoint Manager (Intune) +# - ws1 Workspace ONE (AirWatch) # path can also be set in the command call, and if file exists, it will be used. # Like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"' # (spaces have to be escaped). @@ -367,10 +368,13 @@ displaydialogContinue() { # $1: message $2: title displaynotification() { # $1: message $2: title message=${1:-"Message"} title=${2:-"Notification"} + hubcli="/usr/local/bin/hubcli" manageaction="/Library/Application Support/JAMF/bin/Management Action.app/Contents/MacOS/Management Action" if [[ -x "$manageaction" ]]; then "$manageaction" -message "$message" -title "$title" + elif [[ -x "$hubcli" ]]; then + "$hubcli" notify -t "$title" -i "$message" -c "Dismiss" else runAsUser osascript -e "display notification \"$message\" with title \"$title\"" fi @@ -5264,6 +5268,11 @@ case $LOGO in LOGO="/Library/Intune/Microsoft Intune Agent.app/Contents/Resources/AppIcon.icns" if [[ -z $MDMProfileName ]]; then; MDMProfileName="Management Profile"; fi ;; + ws1) + # Workspace ONE + LOGO="/Applications/Workspace ONE Intelligent Hub.app/Contents/Resources/AppIcon.icns" + if [[ -z $MDMProfileName ]]; then; MDMProfileName="Device Manager"; fi + ;; esac if [[ ! -a "${LOGO}" ]]; then if [[ $(sw_vers -buildVersion) > "19" ]]; then diff --git a/fragments/functions.sh b/fragments/functions.sh index 9e9e977..ddbe70f 100644 --- a/fragments/functions.sh +++ b/fragments/functions.sh @@ -22,7 +22,7 @@ cleanupAndExit() { # $1 = exit code, $2 message, $3 level printlog "$2" $3 fi printlog "################## End Installomator, exit code $1 \n" REQ - + # if label is wrong and we wanted name of the label, then return ################## if [[ $RETURN_LABEL_NAME -eq 1 ]]; then 1=0 # If only label name should be returned we exit without any errors @@ -199,6 +199,16 @@ xpath() { fi } +# from @Pico: https://macadmins.slack.com/archives/CGXNNJXJ9/p1652222365989229?thread_ts=1651786411.413349&cid=CGXNNJXJ9 +getJSONValue() { + # $1: JSON string OR file path to parse (tested to work with up to 1GB string and 2GB file). + # $2: JSON key path to look up (using dot or bracket notation). + printf '%s' "$1" | /usr/bin/osascript -l 'JavaScript' \ + -e "let json = $.NSString.alloc.initWithDataEncoding($.NSFileHandle.fileHandleWithStandardInput.readDataToEndOfFile$(/usr/bin/uname -r | /usr/bin/awk -F '.' '($1 > 18) { print "AndReturnError(ObjC.wrap())" }'), $.NSUTF8StringEncoding)" \ + -e 'if ($.NSFileManager.defaultManager.fileExistsAtPath(json)) json = $.NSString.stringWithContentsOfFileEncodingError(json, $.NSUTF8StringEncoding, ObjC.wrap())' \ + -e "const value = JSON.parse(json.js)$([ -n "${2%%[.[]*}" ] && echo '.')$2" \ + -e 'if (typeof value === "object") { JSON.stringify(value, null, 4) } else { value }' +} getAppVersion() { # modified by: Søren Theilgaard (@theilgaard) and Isaac Ordonez diff --git a/fragments/labels/adobecreativeclouddesktop.sh b/fragments/labels/adobecreativeclouddesktop.sh index 7445443..95582db 100644 --- a/fragments/labels/adobecreativeclouddesktop.sh +++ b/fragments/labels/adobecreativeclouddesktop.sh @@ -2,10 +2,11 @@ adobecreativeclouddesktop) name="Adobe Creative Cloud" #appName="Install.app" type="dmg" + adobeurl="https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" if [[ $(arch) == "arm64" ]]; then - downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*macarm64.*dmg" | cut -d '"' -f1 | head -1) + downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'osx10')][contains(text(),'Download')]/@href)" - 2> /dev/null) elif [[ $(arch) == "i386" ]]; then - downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*osx10.*dmg" | cut -d '"' -f1 | head -1) + downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'macarm64')][contains(text(),'Download')]/@href)" - 2> /dev/null) fi #downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*dmg" | head -1) appNewVersion=$(curl -fs "https://helpx.adobe.com/creative-cloud/release-note/cc-release-notes.html" | grep "mandatory" | head -1 | grep -o "Version *.* released" | cut -d " " -f2) diff --git a/fragments/labels/blender.sh b/fragments/labels/blender.sh index f45255e..f024a77 100644 --- a/fragments/labels/blender.sh +++ b/fragments/labels/blender.sh @@ -1,7 +1,11 @@ blender) name="blender" type="dmg" - downloadURL=$(redirect=$(curl -sfL https://www.blender.org/download/ | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) && curl -sfL "$redirect" | sed 's/.*href="//' | sed 's/".*//' | grep -m1 .dmg) + if [[ $(arch) == "arm64" ]]; then + downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*arm64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g') + elif [[ $(arch) == "i386" ]]; then + downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*x64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g') + fi appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' ) expectedTeamID="68UA947AUU" ;; diff --git a/fragments/labels/bluejeanswithaudiodriver.sh b/fragments/labels/bluejeanswithaudiodriver.sh new file mode 100644 index 0000000..d210af1 --- /dev/null +++ b/fragments/labels/bluejeanswithaudiodriver.sh @@ -0,0 +1,12 @@ +bluejeanswithaudiodriver) + name="BlueJeans" + type="pkg" + if [[ $(arch) == "arm64" ]]; then + downloadURL=$(curl -fs "https://www.bluejeans.com/downloads" | xmllint --html --format - 2>/dev/null | grep -o "https://.*BlueJeans.*Installer.*arm.*.pkg" ) + elif [[ $(arch) == "i386" ]]; then + downloadURL=$(curl -fs "https://www.bluejeans.com/downloads" | xmllint --html --format - 2>/dev/null | grep -o "https://.*BlueJeansInstaller.*x86.*.dmg" | sed 's/dmg/pkg/g') + fi + appNewVersion=$(echo $downloadURL | cut -d '/' -f6) + choiceChangesXML='attributeSetting1choiceAttributeselectedchoiceIdentifiercom.tatvikmohit.BlueJeans-Audio' + expectedTeamID="HE4P42JBGN" + ;; diff --git a/fragments/labels/clickshare.sh b/fragments/labels/clickshare.sh index 6911551..1b0221b 100644 --- a/fragments/labels/clickshare.sh +++ b/fragments/labels/clickshare.sh @@ -1,7 +1,7 @@ clickshare) - # credit: Søren Theilgaard (@theilgaard) name="ClickShare" type="appInDmgInZip" - downloadURL=https://www.barco.com$(curl -fs "https://www.barco.com/en/clickshare/app" | grep -E -o '(\/\S*Download\?FileNumber=R3306192\S*ShowDownloadPage=False)' | tail -1) + downloadURL="https://www.barco.com$( curl -fs "https://www.barco.com/en/clickshare/app" | grep -A6 -i "macos" | grep -i "FileNumber" | tr '"' "\n" | grep -i "FileNumber" )" + appNewVersion="$(eval "$( echo $downloadURL | sed -E 's/.*(MajorVersion.*BuildVersion=[0-9]*).*/\1/' | sed 's/&//g' )" ; ((MajorVersion++)) ; ((MajorVersion--)); ((MinorVersion++)) ; ((MinorVersion--)); ((PatchVersion++)) ; ((PatchVersion--)); ((BuildVersion++)) ; ((BuildVersion--)); echo "${MajorVersion}.${MinorVersion}.${PatchVersion}-b${BuildVersion}")" expectedTeamID="P6CDJZR997" ;; diff --git a/fragments/labels/egnyte.sh b/fragments/labels/egnyte.sh index 185156e..3188a5d 100644 --- a/fragments/labels/egnyte.sh +++ b/fragments/labels/egnyte.sh @@ -3,6 +3,7 @@ egnyte) name="Egnyte Connect" type="pkg" downloadURL="https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/latest/EgnyteConnectMac.pkg" + appNewVersion=$(curl -fs "https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/versions/default.xml" | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' | cut -d '"' -f 2) expectedTeamID="FELUD555VC" blockingProcesses=( NONE ) ;; diff --git a/fragments/labels/firefox.sh b/fragments/labels/firefox.sh index 7b310e5..2ff72ab 100644 --- a/fragments/labels/firefox.sh +++ b/fragments/labels/firefox.sh @@ -2,7 +2,8 @@ firefox) name="Firefox" type="dmg" downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" - appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '*' | sed -e 's/.*\\(.*\)\.\<\/strong\>.*/\1/') + expectedTeamID="M3KUT44L48" + ;; diff --git a/fragments/labels/nordlayer.sh b/fragments/labels/nordlayer.sh new file mode 100644 index 0000000..614b8cf --- /dev/null +++ b/fragments/labels/nordlayer.sh @@ -0,0 +1,7 @@ +nordlayer) + # credit: Taboc741 (https://github.com/taboc741) + name="NordLayer" + type="pkg" + downloadURL="https://downloads.nordlayer.com/mac/latest/NordLayer.pkg" + expectedTeamID="W5W395V82Y" + ;; diff --git a/fragments/labels/notion.sh b/fragments/labels/notion.sh index aa1ab0a..7e608e8 100644 --- a/fragments/labels/notion.sh +++ b/fragments/labels/notion.sh @@ -4,9 +4,10 @@ notion) type="dmg" if [[ $(arch) == "arm64" ]]; then downloadURL="https://www.notion.so/desktop/apple-silicon/download" + appNewVersion=$( curl -fsIL "https://www.notion.so/desktop/apple-silicon/download" | grep -i "^location" | awk '{print $2}' | sed -e 's/.*Notion\-\(.*\)\-arm64.dmg.*/\1/' ) elif [[ $(arch) == "i386" ]]; then downloadURL="https://www.notion.so/desktop/mac/download" + appNewVersion=$( curl -fsIL "https://www.notion.so/desktop/mac/download" | grep -i "^location" | awk '{print $2}' | sed -e 's/.*Notion\-\(.*\).dmg.*/\1/' ) fi - appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | tr -d '\r\n' | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g' ) expectedTeamID="LBQJ96FQ8D" ;; diff --git a/fragments/labels/ringcentralapp.sh b/fragments/labels/ringcentralapp.sh index fbd047e..dd052d3 100644 --- a/fragments/labels/ringcentralapp.sh +++ b/fragments/labels/ringcentralapp.sh @@ -1,6 +1,6 @@ ringcentralapp) # credit: Isaac Ordonez, Mann consulting (@mannconsulting) - name="Ringcentral" + name="RingCentral" type="pkg" if [[ $(arch) != "i386" ]]; then downloadURL="https://app.ringcentral.com/download/RingCentral-arm64.pkg" @@ -8,5 +8,5 @@ ringcentralapp) downloadURL="https://app.ringcentral.com/download/RingCentral.pkg" fi expectedTeamID="M932RC5J66" - blockingProcesses=( "Ringcentral" ) + blockingProcesses=( "RingCentral" ) ;; diff --git a/fragments/labels/whatroute.sh b/fragments/labels/whatroute.sh new file mode 100644 index 0000000..2577a23 --- /dev/null +++ b/fragments/labels/whatroute.sh @@ -0,0 +1,7 @@ +whatroute) + name="WhatRoute" + type="zip" + downloadURL="$(curl -fs https://www.whatroute.net/whatroute2appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | cut -d '"' -f2)" + appNewVersion="$(curl -fs https://www.whatroute.net/whatroute2appcast.xml | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | cut -d '"' -f2)" + expectedTeamID="H5879E8LML" + ;; diff --git a/utils/assemble.sh b/utils/assemble.sh index 7531173..834a0c1 100755 --- a/utils/assemble.sh +++ b/utils/assemble.sh @@ -127,6 +127,8 @@ if [[ $buildScript -eq 1 ]]; then echo "# copying script to $repo_dir/Installomator.sh" cp $destination_file $repo_dir/Installomator.sh chmod 755 $repo_dir/Installomator.sh + # also update Labels.txt + $repo_dir/Installomator.sh | tail -n +2 > $repo_dir/Labels.txt fi # build a pkg when flag is set