2 Commits

Author SHA1 Message Date
Søren Theilgaard
45112e3f32 Create xcreds.sh
## Great solution for IdP Password Syncing by TwoCanoes!

XCreds works by keeping your local Mac password in sync with your Identity Provider password. If you use Azure or Google or another identity provider, XCreds will make sure the password is the same. XCreds runs in the background and checks if the cloud password has been changed. If it detects the password has changed, it prompts to log in to the cloud provider and updates the local password and the keychain password automatically.

```
% GitHub/Installomator/utils/assemble.sh xcreds DEBUG=0
2022-08-12 09:25:38 : WARN  : xcreds : setting variable from argument DEBUG=0
2022-08-12 09:25:38 : REQ   : xcreds : ################## Start Installomator v. 10.0beta, date 2022-08-12
2022-08-12 09:25:38 : INFO  : xcreds : ################## Version: 10.0beta
2022-08-12 09:25:38 : INFO  : xcreds : ################## Date: 2022-08-12
2022-08-12 09:25:38 : INFO  : xcreds : ################## xcreds
2022-08-12 09:25:38 : INFO  : xcreds : BLOCKING_PROCESS_ACTION=tell_user
2022-08-12 09:25:38 : INFO  : xcreds : NOTIFY=success
2022-08-12 09:25:38 : INFO  : xcreds : LOGGING=INFO
2022-08-12 09:25:38 : INFO  : xcreds : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns
2022-08-12 09:25:38 : INFO  : xcreds : Label type: pkg
2022-08-12 09:25:38 : INFO  : xcreds : archiveName: XCreds.pkg
2022-08-12 09:25:38 : INFO  : xcreds : no blocking processes defined, using XCreds as default
2022-08-12 09:25:38 : INFO  : xcreds : No version found using packageID com.twocanoes.pkg.secureremoteaccess
2022-08-12 09:25:38 : INFO  : xcreds : name: XCreds, appName: XCreds.app
2022-08-12 09:25:38 : WARN  : xcreds : No previous app found
2022-08-12 09:25:38 : WARN  : xcreds : could not find XCreds.app
2022-08-12 09:25:38 : INFO  : xcreds : appversion:
2022-08-12 09:25:38 : INFO  : xcreds : Latest version of XCreds is 1.0.0
2022-08-12 09:25:38 : REQ   : xcreds : Downloading https://github.com/twocanoes/xcreds/releases/download/v1.0.0/XCreds_1_0_0_Build-1272_Version.pkg to XCreds.pkg
2022-08-12 09:25:39 : REQ   : xcreds : no more blocking processes, continue with update
2022-08-12 09:25:39 : REQ   : xcreds : Installing XCreds
2022-08-12 09:25:39 : INFO  : xcreds : Verifying: XCreds.pkg
2022-08-12 09:25:39 : INFO  : xcreds : Team ID: UXP6YEHSPW (expected: UXP6YEHSPW )
2022-08-12 09:25:39 : INFO  : xcreds : Installing XCreds.pkg to /
2022-08-12 09:25:42 : INFO  : xcreds : Finishing...
2022-08-12 09:25:52 : INFO  : xcreds : found packageID com.twocanoes.pkg.secureremoteaccess installed, version 1.2
2022-08-12 09:25:52 : REQ   : xcreds : Installed XCreds, version 1.2
2022-08-12 09:25:52 : INFO  : xcreds : notifying
2022-08-12 09:25:52 : INFO  : xcreds : App not closed, so no reopen.
2022-08-12 09:25:52 : REQ   : xcreds : All done!
2022-08-12 09:25:52 : REQ   : xcreds : ################## End Installomator, exit code 0
```
2022-08-12 09:31:04 +02:00
Søren Theilgaard
c04c591a03 relatel label
Output from DEBUG mode and full installer (with force):
```
% Installomator/utils/assemble.sh relatel
2022-07-11 16:23:16 : REQ   : relatel : ################## Start Installomator v. 10.0beta, date 2022-07-11
2022-07-11 16:23:16 : INFO  : relatel : ################## Version: 10.0beta
2022-07-11 16:23:16 : INFO  : relatel : ################## Date: 2022-07-11
2022-07-11 16:23:16 : INFO  : relatel : ################## relatel
2022-07-11 16:23:16 : DEBUG : relatel : DEBUG mode 1 enabled.
2022-07-11 16:23:16 : INFO  : relatel : BLOCKING_PROCESS_ACTION=tell_user
2022-07-11 16:23:16 : INFO  : relatel : NOTIFY=success
2022-07-11 16:23:16 : INFO  : relatel : LOGGING=DEBUG
2022-07-11 16:23:16 : INFO  : relatel : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns
2022-07-11 16:23:16 : INFO  : relatel : Label type: dmg
2022-07-11 16:23:16 : INFO  : relatel : archiveName: Relatel.dmg
2022-07-11 16:23:16 : INFO  : relatel : no blocking processes defined, using Relatel as default
2022-07-11 16:23:16 : DEBUG : relatel : Changing directory to /Users/st/Documents/GitHub/Installomator/build
2022-07-11 16:23:16 : INFO  : relatel : App(s) found: /Applications/Relatel.app
2022-07-11 16:23:16 : INFO  : relatel : found app at /Applications/Relatel.app, version 1.3.1, on versionKey CFBundleShortVersionString
2022-07-11 16:23:16 : INFO  : relatel : appversion: 1.3.1
2022-07-11 16:23:16 : INFO  : relatel : Latest version of Relatel is 1.3.1
2022-07-11 16:23:16 : WARN  : relatel : DEBUG mode 1 enabled, not exiting, but there is no new version of app.
2022-07-11 16:23:16 : REQ   : relatel : Downloading https://cdn.rela.tel/www/public/junotron/Relatel.dmg to Relatel.dmg
2022-07-11 16:23:17 : DEBUG : relatel : File list: -rw-r--r--  1 aa  staff    83M Jul 11 16:23 Relatel.dmg
2022-07-11 16:23:17 : DEBUG : relatel : File type: Relatel.dmg: zlib compressed data
2022-07-11 16:23:17 : DEBUG : relatel : curl output was:
*   Trying 13.33.141.16:443...
* Connected to cdn.rela.tel (13.33.141.16) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/cert.pem
*  CApath: none
* (304) (OUT), TLS handshake, Client hello (1):
} [317 bytes data]
* (304) (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* (304) (IN), TLS handshake, Unknown (8):
{ [19 bytes data]
* (304) (IN), TLS handshake, Certificate (11):
{ [4960 bytes data]
* (304) (IN), TLS handshake, CERT verify (15):
{ [264 bytes data]
* (304) (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* (304) (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / AEAD-AES128-GCM-SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=cdn.firmafon.dk
*  start date: Sep 29 00:00:00 2021 GMT
*  expire date: Oct 28 23:59:59 2022 GMT
*  subjectAltName: host "cdn.rela.tel" matched cert's "cdn.rela.tel"
*  issuer: C=US; O=Amazon; OU=Server CA 1B; CN=Amazon
*  SSL certificate verify ok.
* Using HTTP2, server supports multiplexing
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x124810a00)
> GET /www/public/junotron/Relatel.dmg HTTP/2
> Host: cdn.rela.tel
> user-agent: curl/7.79.1
> accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
< HTTP/2 301
< content-length: 0
< date: Mon, 11 Jul 2022 14:13:48 GMT
< location: /www/public/junotron/Relatel-1.3.1.dmg
< server: AmazonS3
< x-cache: Hit from cloudfront
< via: 1.1 7e5377bfdf5e6ef7597f63d6648e4e9a.cloudfront.net (CloudFront)
< x-amz-cf-pop: CPH50-C2
< x-amz-cf-id: thNWMtxDW2IJefosMKa0ESJTenG4AC9I5aZrCy-sTD9YSiGFtVRqgg==
< age: 569
<
{ [0 bytes data]
* Connection #0 to host cdn.rela.tel left intact
* Issue another request to this URL: 'https://cdn.rela.tel/www/public/junotron/Relatel-1.3.1.dmg'
* Found bundle for host cdn.rela.tel: 0x600001f207b0 [can multiplex]
* Re-using existing connection! (#0) with host cdn.rela.tel
* Connected to cdn.rela.tel (13.33.141.16) port 443 (#0)
* Using Stream ID: 3 (easy handle 0x124810a00)
> GET /www/public/junotron/Relatel-1.3.1.dmg HTTP/2
> Host: cdn.rela.tel
> user-agent: curl/7.79.1
> accept: */*
>
< HTTP/2 200
< content-type: application/x-apple-diskimage
< content-length: 86919409
< date: Mon, 11 Jul 2022 14:13:48 GMT
< last-modified: Fri, 06 May 2022 12:35:41 GMT
< x-amz-version-id: efBkRS8bwIqXqI2Z6qnBgVxSZzwUHByN
< etag: "7d26b868f87f72b3fcee9788f1cd512d-6"
< server: AmazonS3
< x-cache: Hit from cloudfront
< via: 1.1 7e5377bfdf5e6ef7597f63d6648e4e9a.cloudfront.net (CloudFront)
< x-amz-cf-pop: CPH50-C2
< x-amz-cf-id: 4tPa-qwrw0EK3XG2vb6eQrC9cV8anQvW9yNcjKvgtWdXk_-3VjWkyA==
< age: 569
<
{ [2896 bytes data]
* Connection #0 to host cdn.rela.tel left intact

2022-07-11 16:23:17 : DEBUG : relatel : DEBUG mode 1, not checking for blocking processes
2022-07-11 16:23:17 : REQ   : relatel : Installing Relatel
2022-07-11 16:23:17 : INFO  : relatel : Mounting Relatel.dmg
2022-07-11 16:23:22 : DEBUG : relatel : Debugging enabled, dmgmount output was:
Checksumming Protective Master Boot Record (MBR : 0)…
Protective Master Boot Record (MBR :: verified CRC32 $B84BD009
Checksumming GPT Header (Primary GPT Header : 1)…
GPT Header (Primary GPT Header : 1): verified CRC32 $06438A51
Checksumming GPT Partition Data (Primary GPT Table : 2)…
GPT Partition Data (Primary GPT Tabl: verified CRC32 $1232986F
Checksumming  (Apple_Free : 3)…
(Apple_Free : 3): verified CRC32 $00000000
Checksumming disk image (Apple_HFS : 4)…
disk image (Apple_HFS : 4): verified CRC32 $D4C0AB37
Checksumming GPT Partition Data (Backup GPT Table : 5)…
GPT Partition Data (Backup GPT Table: verified CRC32 $1232986F
Checksumming GPT Header (Backup GPT Header : 6)…
GPT Header (Backup GPT Header : 6): verified CRC32 $A2E62118
verified CRC32 $B53E5AB9
/dev/disk6          	GUID_partition_scheme
/dev/disk6s1        	Apple_HFS                      	/Volumes/Relatel 1.3.1

2022-07-11 16:23:22 : INFO  : relatel : Mounted: /Volumes/Relatel 1.3.1
2022-07-11 16:23:22 : INFO  : relatel : Verifying: /Volumes/Relatel 1.3.1/Relatel.app
2022-07-11 16:23:22 : DEBUG : relatel : App size: 195M	/Volumes/Relatel 1.3.1/Relatel.app
2022-07-11 16:23:23 : DEBUG : relatel : Debugging enabled, App Verification output was:
/Volumes/Relatel 1.3.1 1/Relatel.app: accepted
source=Notarized Developer ID
origin=Developer ID Application: Firmafon ApS (B9358QF55B)

2022-07-11 16:23:23 : INFO  : relatel : Team ID matching: B9358QF55B (expected: B9358QF55B )
2022-07-11 16:23:23 : INFO  : relatel : Downloaded version of Relatel is 1.3.1 on versionKey CFBundleShortVersionString, same as installed.
2022-07-11 16:23:23 : DEBUG : relatel : Unmounting /Volumes/Relatel 1.3.1
2022-07-11 16:23:24 : DEBUG : relatel : Debugging enabled, Unmounting output was:
"disk6" ejected.
2022-07-11 16:23:24 : DEBUG : relatel : DEBUG mode 1, not reopening anything
2022-07-11 16:23:24 : REG   : relatel : No new version to install
2022-07-11 16:23:24 : REQ   : relatel : ################## End Installomator, exit code 0

% sudo Installomator/utils/assemble.sh relatel DEBUG=0 INSTALL=force
Password:
2022-07-11 16:23:56 : WARN  : relatel : setting variable from argument DEBUG=0
2022-07-11 16:23:56 : WARN  : relatel : setting variable from argument INSTALL=force
2022-07-11 16:23:56 : REQ   : relatel : ################## Start Installomator v. 10.0beta, date 2022-07-11
2022-07-11 16:23:56 : INFO  : relatel : ################## Version: 10.0beta
2022-07-11 16:23:56 : INFO  : relatel : ################## Date: 2022-07-11
2022-07-11 16:23:56 : INFO  : relatel : ################## relatel
2022-07-11 16:23:56 : INFO  : relatel : BLOCKING_PROCESS_ACTION=tell_user
2022-07-11 16:23:56 : INFO  : relatel : NOTIFY=success
2022-07-11 16:23:56 : INFO  : relatel : LOGGING=INFO
2022-07-11 16:23:56 : INFO  : relatel : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns
2022-07-11 16:23:56 : INFO  : relatel : Label type: dmg
2022-07-11 16:23:56 : INFO  : relatel : archiveName: Relatel.dmg
2022-07-11 16:23:56 : INFO  : relatel : no blocking processes defined, using Relatel as default
2022-07-11 16:23:56 : INFO  : relatel : App(s) found: /Applications/Relatel.app
2022-07-11 16:23:56 : INFO  : relatel : found app at /Applications/Relatel.app, version 1.3.1, on versionKey CFBundleShortVersionString
2022-07-11 16:23:56 : INFO  : relatel : appversion: 1.3.1
2022-07-11 16:23:56 : INFO  : relatel : Label is not of type “updateronly”, and it’s set to use force to install or ignoring app store apps, so not using updateTool.
2022-07-11 16:23:56 : INFO  : relatel : Latest version of Relatel is 1.3.1
2022-07-11 16:23:56 : INFO  : relatel : There is no newer version available.
2022-07-11 16:23:56 : REQ   : relatel : Downloading https://cdn.rela.tel/www/public/junotron/Relatel.dmg to Relatel.dmg
2022-07-11 16:23:57 : REQ   : relatel : no more blocking processes, continue with update
2022-07-11 16:23:57 : REQ   : relatel : Installing Relatel
2022-07-11 16:23:57 : INFO  : relatel : Mounting /var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/tmp.l86iLb4m/Relatel.dmg
2022-07-11 16:24:00 : INFO  : relatel : Mounted: /Volumes/Relatel 1.3.1
2022-07-11 16:24:00 : INFO  : relatel : Verifying: /Volumes/Relatel 1.3.1/Relatel.app
2022-07-11 16:24:01 : INFO  : relatel : Team ID matching: B9358QF55B (expected: B9358QF55B )
2022-07-11 16:24:01 : INFO  : relatel : Downloaded version of Relatel is 1.3.1 on versionKey CFBundleShortVersionString, same as installed.
2022-07-11 16:24:01 : INFO  : relatel : Using force to install anyway.
2022-07-11 16:24:01 : INFO  : relatel : App has LSMinimumSystemVersion: 10.11.0
2022-07-11 16:24:01 : WARN  : relatel : Removing existing /Applications/Relatel.app
2022-07-11 16:24:01 : INFO  : relatel : Copy /Volumes/Relatel 1.3.1/Relatel.app to /Applications
2022-07-11 16:24:02 : WARN  : relatel : Changing owner to aa
2022-07-11 16:24:02 : INFO  : relatel : Finishing...
2022-07-11 16:24:12 : INFO  : relatel : App(s) found: /Applications/Relatel.app
2022-07-11 16:24:12 : INFO  : relatel : found app at /Applications/Relatel.app, version 1.3.1, on versionKey CFBundleShortVersionString
2022-07-11 16:24:12 : REQ   : relatel : Installed Relatel, version 1.3.1
2022-07-11 16:24:12 : INFO  : relatel : notifying
2022-07-11 16:24:12 : INFO  : relatel : App not closed, so no reopen.
2022-07-11 16:24:12 : REQ   : relatel : All done!
2022-07-11 16:24:12 : REQ   : relatel : ################## End Installomator, exit code 0
```
2022-07-11 16:27:51 +02:00
40 changed files with 80 additions and 368 deletions

View File

@@ -1,41 +1,3 @@
## v10beta1
- [swiftDialog](https://github.com/bartreardon/swiftDialog) integration (#641, #632), many thanks to @bartreardon, [sample scripts](in the MDM folder)
- added WorkspaceOne option for LOGO (#517)
- added function for JSON parsing with JXA (#529)
- updated assemble.sh script to update Labels.txt when script is rebuilt (#540)
- added a no requisite install script (#493)
- GitHub lookup now don't use API calls, this should avoid or at least reduce rate limiting (#543)
- fixed redundant exit codes (#643, #561)
NOTE: some exit codes have changed! see [Installomator Exit Codes](https://github.com/Installomator/Installomator/wiki/Installomator-Exit-Codes) for a list
- new labels:
- bluejeanswithaudiodriver (#473)
- duodevicehealth (#548)
- googlechromeenterprise (#532)
- ipswupdater (#545)
- mmhmm (#571)
- nordlayer (#419)
- prune (#538)
- whatroute (#560)
- updated labels:
- blender (#535, #622)
- camtasia2019 (#547)
- clickshare (#565)
- egnyte (#500)
- googledrive (#563)
- grammarly (#576)
- marathon, marathon2, marathoninfinity (#544)
- miro (#475, #539)
- notion (#566)
- ringcentralapp (#550)
- sublimetext (#593, #578, #567, #623, #626)
- talkdeskcallbar (#536)
- talkdeskcxcloud (#537)
- wireshark (#585)
## v9.2
**Note**: Both Google and Mozilla recommend using the pkg installers instead of the dmg downloads for managed deployments. So far, Installomator has provided labels for both. (`googlechrome` and `googlechromepkg` or `firefox` and `firefoxpkg`, respectively) Since there are problems with the dmg downloads, a future release of Installomator will _disable_ the `firefox` and `googlechrome` dmg labels. You should switch to using `googlechromepkg` and `firefoxpkg` labels instead.

View File

@@ -302,8 +302,8 @@ if [[ $(/usr/bin/arch) == "arm64" ]]; then
rosetta2=no
fi
fi
VERSION="10.0beta1"
VERSIONDATE="2022-08-12"
VERSION="10.0beta"
VERSIONDATE="2022-05-19"
# MARK: Functions
@@ -329,7 +329,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
@@ -463,11 +463,11 @@ downloadURLFromGit() { # $1 git user name, $2 git repo name
fi
if [ -n "$archiveName" ]; then
#downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*$archiveName.*")
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
| awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
else
#downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*\.$filetype")
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
| awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
fi
if [ -z "$downloadURL" ]; then
cleanupAndExit 9 "could not retrieve download URL for $gitusername/$gitreponame" ERROR
@@ -483,8 +483,7 @@ versionFromGit() {
gitusername=${1?:"no git user name"}
gitreponame=${2?:"no git repo name"}
#appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g')
appNewVersion=$(curl -sLI "https://github.com/$gitusername/$gitreponame/releases/latest" | grep -i "^location" | tr "/" "\n" | tail -1 | sed 's/[^0-9\.]//g')
appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g')
if [ -z "$appNewVersion" ]; then
printlog "could not retrieve version number for $gitusername/$gitreponame" WARN
appNewVersion=""
@@ -507,16 +506,6 @@ 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
@@ -1382,11 +1371,10 @@ 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 "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'osx10')][contains(text(),'Download')]/@href)" - 2> /dev/null)
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)
elif [[ $(arch) == "i386" ]]; then
downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'macarm64')][contains(text(),'Download')]/@href)" - 2> /dev/null)
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)
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)
@@ -1755,11 +1743,7 @@ bitwarden)
blender)
name="blender"
type="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
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)
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' )
expectedTeamID="68UA947AUU"
;;
@@ -1774,18 +1758,6 @@ bluejeans)
appNewVersion=$(echo $downloadURL | cut -d '/' -f6)
expectedTeamID="HE4P42JBGN"
;;
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='<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><array><dict><key>attributeSetting</key><integer>1</integer><key>choiceAttribute</key><string>selected</string><key>choiceIdentifier</key><string>com.tatvikmohit.BlueJeans-Audio</string></dict></array></plist>'
expectedTeamID="HE4P42JBGN"
;;
boxdrive)
name="Box"
type="pkg"
@@ -1935,10 +1907,10 @@ clevershare2)
expectedTeamID="P76M9BE8DQ"
;;
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 -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/&amp//g' )" ; ((MajorVersion++)) ; ((MajorVersion--)); ((MinorVersion++)) ; ((MinorVersion--)); ((PatchVersion++)) ; ((PatchVersion--)); ((BuildVersion++)) ; ((BuildVersion--)); echo "${MajorVersion}.${MinorVersion}.${PatchVersion}-b${BuildVersion}")"
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)
expectedTeamID="P6CDJZR997"
;;
clipy)
@@ -2217,15 +2189,6 @@ duckduckgo)
appNewVersion=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/sparkle:shortVersionString)[1]' 2>/dev/null | cut -d ">" -f2 | cut -d "<" -f1)
expectedTeamID="HKE973VLUW"
;;
duodevicehealth)
name="Duo Device Health"
type="pkgInDmg"
downloadURL="https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg"
appNewVersion=$(curl -fsLIXGET "https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg" | grep -i "^content-disposition" | sed -e 's/.*filename\=\"DuoDeviceHealth\-\(.*\)\.dmg\".*/\1/')
appName="Duo Device Health.app"
expectedTeamID="FNN8Z5JMFP"
;;
easeusdatarecoverywizard)
# credit: Søren Theilgaard (@theilgaard)
name="EaseUS Data Recovery Wizard"
@@ -2246,7 +2209,6 @@ 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 )
;;
@@ -2377,8 +2339,7 @@ firefox)
name="Firefox"
type="dmg"
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US"
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
@@ -2387,8 +2348,7 @@ firefox_da)
name="Firefox"
type="dmg"
downloadURL="https://download.mozilla.org/?product=firefox-latest&amp;os=osx&amp;lang=da"
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
printlog "WARNING for ERROR: Label firefox, firefox_da and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
@@ -2414,8 +2374,7 @@ firefox_intl)
printlog "Download not found for '$userLanguage', using default ('en-US')."
downloadURL="https://download.mozilla.org/?product=firefox-latest-ssl&os=osx"
fi
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"/"); print a[1]}')
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
@@ -2425,8 +2384,7 @@ firefoxesrpkg)
name="Firefox"
type="pkg"
downloadURL="https://download.mozilla.org/?product=firefox-esr-pkg-latest-ssl&os=osx"
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "FIREFOX_ESR")
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*releases\/([0-9.]*)esr.*/\1/g')
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
;;
@@ -2451,8 +2409,7 @@ firefoxesr_intl)
printlog "Download not found for '$userLanguage', using default ('en-US')."
downloadURL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx"
fi
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"esr/"); print a[1]}')
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
@@ -2461,8 +2418,7 @@ firefoxpkg)
name="Firefox"
type="pkg"
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
;;
@@ -2486,8 +2442,7 @@ firefoxpkg_intl)
printlog "Download not found for that language. Using en-US" WARN
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
fi
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i location | cut -d "/" -f7)
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
;;
@@ -2577,16 +2532,6 @@ googlechrome)
expectedTeamID="EQHXZ8M8AV"
printlog "WARNING for ERROR: Label googlechrome should not be used. Instead use googlechromepkg as per recommendations from Google. It's not fully certain that the app actually gets updated here. googlechromepkg will have built in updates and make sure the client is updated in the future." REQ
;;
googlechromeenterprise)
name="Google Chrome"
type="pkg"
downloadURL="https://dl.google.com/dl/chrome/mac/universal/stable/gcem/GoogleChrome.pkg"
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
expectedTeamID="EQHXZ8M8AV"
updateTool="/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/MacOS/GoogleSoftwareUpdateAgent"
updateToolArguments=( -runMode oneshot -userInitiated YES )
updateToolRunAsCurrentUser=1
;;
googlechromepkg)
name="Google Chrome"
type="pkg"
@@ -2606,14 +2551,9 @@ googledrivefilestream)
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
name="Google Drive File Stream"
type="pkgInDmg"
if [[ $(arch) == "arm64" ]]; then
packageID="com.google.drivefs.arm64"
elif [[ $(arch) == "i386" ]]; then
packageID="com.google.drivefs.x86_64"
fi
packageID="com.google.drivefs"
downloadURL="https://dl.google.com/drive-file-stream/GoogleDriveFileStream.dmg" # downloadURL="https://dl.google.com/drive-file-stream/GoogleDrive.dmg"
blockingProcesses=( "Google Docs" "Google Drive" "Google Sheets" "Google Slides" )
appName="Google Drive.app"
expectedTeamID="EQHXZ8M8AV"
;;
googledrivebackupandsync)
@@ -2674,8 +2614,9 @@ grammarly)
name="Grammarly Desktop"
type="dmg"
packageID="com.grammarly.ProjectLlama"
downloadURL="https://download-mac.grammarly.com/Grammarly.dmg"
downloadURL=$(curl -fsL "https://download-mac.grammarly.com/appcast.xml" | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2)
expectedTeamID="W8F64X92K3"
appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4)
# appName="Grammarly Installer.app"
installerTool="Grammarly Installer.app"
CLIInstaller="Grammarly Installer.app/Contents/MacOS/Grammarly Desktop"
@@ -2858,14 +2799,6 @@ installomator_theile)
expectedTeamID="JME5BW3F3R"
blockingProcesses=( NONE )
;;
ipswupdater)
name="IPSW Updater"
type="zip"
ipswupdaterVersions=$(curl -fs "https://ipsw.app/download/updates.php?current_version=0.9.16")
downloadURL=$(getJSONValue "$ipswupdaterVersions" "[0].url")
appNewVersion=$(getJSONValue "$ipswupdaterVersions" "[0].version")
expectedTeamID="YRW6NUGA63"
;;
istatmenus)
# credit: AP Orlebeke (@apizz)
name="iStat Menus"
@@ -3307,7 +3240,6 @@ marathon)
name="Marathon"
type="dmg"
archiveName="Marathon-[0-9.]*-Mac.dmg"
versionKey="CFBundleVersion"
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
expectedTeamID="E8K89CXZE7"
@@ -3316,7 +3248,6 @@ marathon2)
name="Marathon 2"
type="dmg"
archiveName="Marathon2-[0-9.]*-Mac.dmg"
versionKey="CFBundleVersion"
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
expectedTeamID="E8K89CXZE7"
@@ -3325,7 +3256,6 @@ marathoninfinity)
name="Marathon Infinity"
type="dmg"
archiveName="MarathonInfinity-[0-9.]*-Mac.dmg"
versionKey="CFBundleVersion"
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
expectedTeamID="E8K89CXZE7"
@@ -3635,21 +3565,9 @@ miro)
# credit: @matins
name="Miro"
type="dmg"
if [[ $(arch) == arm64 ]]; then
downloadURL="https://desktop.miro.com/platforms/darwin-arm64/Miro.dmg"
elif [[ $(arch) == i386 ]]; then
downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg"
fi
downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg"
expectedTeamID="M3GM7MFY7U"
;;
mmhmm)
name="mmhmm"
type="pkg"
downloadURL="https://updates.mmhmm.app/mac/mmhmm.pkg"
curlOptions=( -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" )
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://help.mmhmm.app/hc/en-us/articles/4420969712151-mmhmm-for-Mac" | grep 'The latest version of mmhmm for Mac is <strong>*' | sed -e 's/.*\<strong\>\(.*\)\.\<\/strong\>.*/\1/')
expectedTeamID="M3KUT44L48"
;;
mobikinassistantforandroid)
name="MobiKin Assistant for Android"
type="dmg"
@@ -3811,24 +3729,16 @@ nomadlogin)
appNewVersion=$(curl -fs https://nomad.menu/support/ | grep "NoMAD Login AD Downloads" | sed -E 's/.*Current Version ([0-9\.]*)<.*/\1/g')
expectedTeamID="AAPZK3CB24"
;;
nordlayer)
# credit: Taboc741 (https://github.com/taboc741)
name="NordLayer"
type="pkg"
downloadURL="https://downloads.nordlayer.com/mac/latest/NordLayer.pkg"
expectedTeamID="W5W395V82Y"
;;
notion)
# credit: Søren Theilgaard (@theilgaard)
name="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"
;;
nudge)
@@ -4148,13 +4058,6 @@ proxyman)
appNewVersion="$(versionFromGit ProxymanApp Proxyman)"
expectedTeamID="3X57WP8E8V"
;;
prune)
name="Prune"
type="zip"
downloadURL=$(downloadURLFromGit BIG-RAT Prune)
appNewVersion=$(versionFromGit BIG-RAT Prune)
expectedTeamID="PS2F6S478M"
;;
pymol)
name="PyMOL"
type="dmg"
@@ -4263,7 +4166,7 @@ ricohpsprinters)
;;
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"
@@ -4271,7 +4174,7 @@ ringcentralapp)
downloadURL="https://app.ringcentral.com/download/RingCentral.pkg"
fi
expectedTeamID="M932RC5J66"
blockingProcesses=( "RingCentral" )
blockingProcesses=( "Ringcentral" )
;;
ringcentralclassicapp)
name="Glip"
@@ -4614,7 +4517,7 @@ sublimetext)
# credit: Søren Theilgaard (@theilgaard)
name="Sublime Text"
type="zip"
downloadURL="$(curl -fs "https://www.sublimetext.com/download_thanks?target=mac#direct-downloads" | grep -io "https://download.*_mac.zip" | head -1)"
downloadURL="$(curl -fs https://www.sublimetext.com/download | grep -io "https://download.*_mac.zip")"
appNewVersion=$(curl -fs https://www.sublimetext.com/download | grep -i -A 4 "id.*changelog" | grep -io "Build [0-9]*")
expectedTeamID="Z6D26JE4Y4"
;;
@@ -4693,16 +4596,14 @@ tageditor)
talkdeskcallbar)
name="Callbar"
type="dmg"
talkdeskcallbarVersions=$(curl -fsL "https://downloadcallbar.talkdesk.com/release_metadata.json")
appNewVersion=$(getJSONValue "$talkdeskcallbarVersions" "version")
appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p')
downloadURL=https://downloadcallbar.talkdesk.com/Callbar-${appNewVersion}.dmg
expectedTeamID="YGGJX44TB8"
;;
talkdeskcxcloud)
name="Talkdesk"
type="dmg"
talkdeskcxcloudVersions=$(curl -fs "https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json")
appNewVersion=$(getJSONValue "$talkdeskcxcloudVersions" "[0].version")
appNewVersion=$(curl -fs https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json | sed -n -e 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p' | head -n 1)
downloadURL="https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-${appNewVersion}.dmg"
expectedTeamID="YGGJX44TB8"
;;
@@ -5050,13 +4951,6 @@ wechat)
downloadURL="https://dldir1.qq.com/weixin/mac/WeChatMac.dmg"
expectedTeamID="5A4RE8SF68"
;;
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"
;;
whatsapp)
name="WhatsApp"
type="dmg"
@@ -5082,12 +4976,12 @@ wickrpro)
wireshark)
name="Wireshark"
type="dmg"
appNewVersion=$(curl -fs https://www.wireshark.org/download.html | grep -i "href.*_stable" | sed -E 's/.*\(([0-9.]*)\).*/\1/g')
if [[ $(arch) == i386 ]]; then
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Intel%2064.dmg"
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Intel%2064.dmg"
elif [[ $(arch) == arm64 ]]; then
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Arm%2064.dmg"
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Arm%2064.dmg"
fi
appNewVersion=$(curl -fs https://www.wireshark.org/download.html | grep -i "href.*_stable" | sed -E 's/.*\(([0-9.]*)\).*/\1/g')
expectedTeamID="7Z6EMTD2C6"
;;
wordservice)

View File

@@ -56,7 +56,6 @@ bettertouchtool
bitwarden
blender
bluejeans
bluejeanswithaudiodriver
boxdrive
boxsync
boxtools
@@ -111,7 +110,6 @@ drawio
drift
dropbox
duckduckgo
duodevicehealth
easeusdatarecoverywizard
easyfind
egnyte
@@ -148,7 +146,6 @@ gimp
githubdesktop
golang
googlechrome
googlechromeenterprise
googlechromepkg
googledrive
googledrivebackupandsync
@@ -184,7 +181,6 @@ insomnia
installomator
installomator_theile
intellijideace
ipswupdater
istatmenus
iterm2
itsycal
@@ -263,7 +259,6 @@ microsoftyammer
mightymike
mindmanager
miro
mmhmm
mobikinassistantforandroid
mochakeyboard
mochatelnet
@@ -279,7 +274,6 @@ netnewswire
nextcloud
nomad
nomadlogin
nordlayer
notion
nudge
nvivo
@@ -323,7 +317,6 @@ promiseutilityr
propresenter7
protonvpn
proxyman
prune
pycharmce
pymol
qgis-pr
@@ -444,7 +437,6 @@ webex
webexmeetings
webexteams
wechat
whatroute
whatsapp
wickrme
wickrpro

View File

@@ -1,43 +0,0 @@
#!/bin/sh
# This script is meant to povide the simplest MDM/management platform agnostic way to install Installomator
# The only requirement is an Internet connection
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
# Get the URL of the latest PKG From the Installomator GitHub repo
url=$(curl --silent --fail "https://api.github.com/repos/Installomator/Installomator/releases/latest" | awk -F '"' "/browser_download_url/ && /pkg\"/ { print \$4; exit }")
# Expected Team ID of the downloaded PKG
expectedTeamID="JME5BW3F3R"
exitCode=0
# Check for Installomator and install if not found
if [ ! -e "/usr/local/Installomator/Installomator.sh" ]; then
echo "Installomator not found. Installing."
# Create temporary working directory
tempDirectory=$( mktemp -d )
echo "Created working directory '$tempDirectory'"
# Download the installer package
echo "Downloading Installomator package"
curl --location --silent "$url" -o "$tempDirectory/Installomator.pkg"
# Verify the download
teamID=$(spctl -a -vv -t install "$tempDirectory/Installomator.pkg" 2>&1 | awk '/origin=/ {print $NF }' | tr -d '()')
echo "Team ID for downloaded package: $teamID"
# Install the package if Team ID validates
if [ "$expectedTeamID" = "$teamID" ] || [ "$expectedTeamID" = "" ]; then
echo "Package verified. Installing package Installomator.pkg"
installer -pkg "$tempDirectory/Installomator.pkg" -target / -verbose
exitCode=$?
else
echo "Package verification failed before package installation could start. Download link may be invalid. Aborting."
exitCode=1
exit $exitCode
fi
# Remove the temporary working directory when done
echo "Deleting working directory '$tempDirectory' and its contents"
rm -Rf "$tempDirectory"
else
echo "Installomator already installed."
fi
exit $exitCode

View File

@@ -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
@@ -156,11 +156,11 @@ downloadURLFromGit() { # $1 git user name, $2 git repo name
fi
if [ -n "$archiveName" ]; then
#downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*$archiveName.*")
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
| awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
else
#downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*\.$filetype")
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
| awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
fi
if [ -z "$downloadURL" ]; then
cleanupAndExit 9 "could not retrieve download URL for $gitusername/$gitreponame" ERROR
@@ -176,8 +176,7 @@ versionFromGit() {
gitusername=${1?:"no git user name"}
gitreponame=${2?:"no git repo name"}
#appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g')
appNewVersion=$(curl -sLI "https://github.com/$gitusername/$gitreponame/releases/latest" | grep -i "^location" | tr "/" "\n" | tail -1 | sed 's/[^0-9\.]//g')
appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g')
if [ -z "$appNewVersion" ]; then
printlog "could not retrieve version number for $gitusername/$gitreponame" WARN
appNewVersion=""
@@ -200,16 +199,6 @@ 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

View File

@@ -2,11 +2,10 @@ 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 "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'osx10')][contains(text(),'Download')]/@href)" - 2> /dev/null)
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)
elif [[ $(arch) == "i386" ]]; then
downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'macarm64')][contains(text(),'Download')]/@href)" - 2> /dev/null)
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)
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)

View File

@@ -1,11 +1,7 @@
blender)
name="blender"
type="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
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)
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' )
expectedTeamID="68UA947AUU"
;;

View File

@@ -1,12 +0,0 @@
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='<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><array><dict><key>attributeSetting</key><integer>1</integer><key>choiceAttribute</key><string>selected</string><key>choiceIdentifier</key><string>com.tatvikmohit.BlueJeans-Audio</string></dict></array></plist>'
expectedTeamID="HE4P42JBGN"
;;

View File

@@ -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 -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/&amp//g' )" ; ((MajorVersion++)) ; ((MajorVersion--)); ((MinorVersion++)) ; ((MinorVersion--)); ((PatchVersion++)) ; ((PatchVersion--)); ((BuildVersion++)) ; ((BuildVersion--)); echo "${MajorVersion}.${MinorVersion}.${PatchVersion}-b${BuildVersion}")"
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)
expectedTeamID="P6CDJZR997"
;;

View File

@@ -1,9 +0,0 @@
duodevicehealth)
name="Duo Device Health"
type="pkgInDmg"
downloadURL="https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg"
appNewVersion=$(curl -fsLIXGET "https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg" | grep -i "^content-disposition" | sed -e 's/.*filename\=\"DuoDeviceHealth\-\(.*\)\.dmg\".*/\1/')
appName="Duo Device Health.app"
expectedTeamID="FNN8Z5JMFP"
;;

View File

@@ -3,7 +3,6 @@ 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 )
;;

View File

@@ -2,8 +2,7 @@ firefox)
name="Firefox"
type="dmg"
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US"
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ

View File

@@ -2,8 +2,7 @@ firefox_da)
name="Firefox"
type="dmg"
downloadURL="https://download.mozilla.org/?product=firefox-latest&amp;os=osx&amp;lang=da"
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
printlog "WARNING for ERROR: Label firefox, firefox_da and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ

View File

@@ -19,8 +19,7 @@ firefox_intl)
printlog "Download not found for '$userLanguage', using default ('en-US')."
downloadURL="https://download.mozilla.org/?product=firefox-latest-ssl&os=osx"
fi
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"/"); print a[1]}')
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ

View File

@@ -3,8 +3,7 @@ firefoxesrpkg)
name="Firefox"
type="pkg"
downloadURL="https://download.mozilla.org/?product=firefox-esr-pkg-latest-ssl&os=osx"
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "FIREFOX_ESR")
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*releases\/([0-9.]*)esr.*/\1/g')
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
;;

View File

@@ -19,8 +19,7 @@ firefoxesr_intl)
printlog "Download not found for '$userLanguage', using default ('en-US')."
downloadURL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx"
fi
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"esr/"); print a[1]}')
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ

View File

@@ -2,8 +2,7 @@ firefoxpkg)
name="Firefox"
type="pkg"
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
;;

View File

@@ -18,8 +18,7 @@ firefoxpkg_intl)
printlog "Download not found for that language. Using en-US" WARN
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
fi
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i location | cut -d "/" -f7)
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
;;

View File

@@ -1,10 +0,0 @@
googlechromeenterprise)
name="Google Chrome"
type="pkg"
downloadURL="https://dl.google.com/dl/chrome/mac/universal/stable/gcem/GoogleChrome.pkg"
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
expectedTeamID="EQHXZ8M8AV"
updateTool="/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/MacOS/GoogleSoftwareUpdateAgent"
updateToolArguments=( -runMode oneshot -userInitiated YES )
updateToolRunAsCurrentUser=1
;;

View File

@@ -3,13 +3,8 @@ googledrivefilestream)
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
name="Google Drive File Stream"
type="pkgInDmg"
if [[ $(arch) == "arm64" ]]; then
packageID="com.google.drivefs.arm64"
elif [[ $(arch) == "i386" ]]; then
packageID="com.google.drivefs.x86_64"
fi
packageID="com.google.drivefs"
downloadURL="https://dl.google.com/drive-file-stream/GoogleDriveFileStream.dmg" # downloadURL="https://dl.google.com/drive-file-stream/GoogleDrive.dmg"
blockingProcesses=( "Google Docs" "Google Drive" "Google Sheets" "Google Slides" )
appName="Google Drive.app"
expectedTeamID="EQHXZ8M8AV"
;;

View File

@@ -2,8 +2,9 @@ grammarly)
name="Grammarly Desktop"
type="dmg"
packageID="com.grammarly.ProjectLlama"
downloadURL="https://download-mac.grammarly.com/Grammarly.dmg"
downloadURL=$(curl -fsL "https://download-mac.grammarly.com/appcast.xml" | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2)
expectedTeamID="W8F64X92K3"
appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4)
# appName="Grammarly Installer.app"
installerTool="Grammarly Installer.app"
CLIInstaller="Grammarly Installer.app/Contents/MacOS/Grammarly Desktop"

View File

@@ -1,8 +0,0 @@
ipswupdater)
name="IPSW Updater"
type="zip"
ipswupdaterVersions=$(curl -fs "https://ipsw.app/download/updates.php?current_version=0.9.16")
downloadURL=$(getJSONValue "$ipswupdaterVersions" "[0].url")
appNewVersion=$(getJSONValue "$ipswupdaterVersions" "[0].version")
expectedTeamID="YRW6NUGA63"
;;

View File

@@ -2,7 +2,6 @@ marathon)
name="Marathon"
type="dmg"
archiveName="Marathon-[0-9.]*-Mac.dmg"
versionKey="CFBundleVersion"
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
expectedTeamID="E8K89CXZE7"

View File

@@ -2,7 +2,6 @@ marathon2)
name="Marathon 2"
type="dmg"
archiveName="Marathon2-[0-9.]*-Mac.dmg"
versionKey="CFBundleVersion"
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
expectedTeamID="E8K89CXZE7"

View File

@@ -2,7 +2,6 @@ marathoninfinity)
name="Marathon Infinity"
type="dmg"
archiveName="MarathonInfinity-[0-9.]*-Mac.dmg"
versionKey="CFBundleVersion"
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
expectedTeamID="E8K89CXZE7"

View File

@@ -2,10 +2,6 @@ miro)
# credit: @matins
name="Miro"
type="dmg"
if [[ $(arch) == arm64 ]]; then
downloadURL="https://desktop.miro.com/platforms/darwin-arm64/Miro.dmg"
elif [[ $(arch) == i386 ]]; then
downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg"
fi
downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg"
expectedTeamID="M3GM7MFY7U"
;;

View File

@@ -1,8 +0,0 @@
mmhmm)
name="mmhmm"
type="pkg"
downloadURL="https://updates.mmhmm.app/mac/mmhmm.pkg"
curlOptions=( -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" )
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://help.mmhmm.app/hc/en-us/articles/4420969712151-mmhmm-for-Mac" | grep 'The latest version of mmhmm for Mac is <strong>*' | sed -e 's/.*\<strong\>\(.*\)\.\<\/strong\>.*/\1/')
expectedTeamID="M3KUT44L48"
;;

View File

@@ -1,7 +0,0 @@
nordlayer)
# credit: Taboc741 (https://github.com/taboc741)
name="NordLayer"
type="pkg"
downloadURL="https://downloads.nordlayer.com/mac/latest/NordLayer.pkg"
expectedTeamID="W5W395V82Y"
;;

View File

@@ -4,10 +4,9 @@ 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"
;;

View File

@@ -1,7 +0,0 @@
prune)
name="Prune"
type="zip"
downloadURL=$(downloadURLFromGit BIG-RAT Prune)
appNewVersion=$(versionFromGit BIG-RAT Prune)
expectedTeamID="PS2F6S478M"
;;

View File

@@ -0,0 +1,7 @@
relatel)
name="Relatel"
type="dmg"
downloadURL="https://cdn.rela.tel/www/public/junotron/Relatel.dmg"
appNewVersion="$(curl -fs "https://cdn.firmafon.dk/www/public/junotron/latest-mac.yml" | grep -i "version" | cut -w -f2)"
expectedTeamID="B9358QF55B"
;;

View File

@@ -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" )
;;

View File

@@ -2,7 +2,7 @@ sublimetext)
# credit: Søren Theilgaard (@theilgaard)
name="Sublime Text"
type="zip"
downloadURL="$(curl -fs "https://www.sublimetext.com/download_thanks?target=mac#direct-downloads" | grep -io "https://download.*_mac.zip" | head -1)"
downloadURL="$(curl -fs https://www.sublimetext.com/download | grep -io "https://download.*_mac.zip")"
appNewVersion=$(curl -fs https://www.sublimetext.com/download | grep -i -A 4 "id.*changelog" | grep -io "Build [0-9]*")
expectedTeamID="Z6D26JE4Y4"
;;

View File

@@ -1,8 +1,7 @@
talkdeskcallbar)
name="Callbar"
type="dmg"
talkdeskcallbarVersions=$(curl -fsL "https://downloadcallbar.talkdesk.com/release_metadata.json")
appNewVersion=$(getJSONValue "$talkdeskcallbarVersions" "version")
appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p')
downloadURL=https://downloadcallbar.talkdesk.com/Callbar-${appNewVersion}.dmg
expectedTeamID="YGGJX44TB8"
;;

View File

@@ -1,8 +1,7 @@
talkdeskcxcloud)
name="Talkdesk"
type="dmg"
talkdeskcxcloudVersions=$(curl -fs "https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json")
appNewVersion=$(getJSONValue "$talkdeskcxcloudVersions" "[0].version")
appNewVersion=$(curl -fs https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json | sed -n -e 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p' | head -n 1)
downloadURL="https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-${appNewVersion}.dmg"
expectedTeamID="YGGJX44TB8"
;;

View File

@@ -1,11 +1,11 @@
wireshark)
name="Wireshark"
type="dmg"
appNewVersion=$(curl -fs https://www.wireshark.org/download.html | grep -i "href.*_stable" | sed -E 's/.*\(([0-9.]*)\).*/\1/g')
if [[ $(arch) == i386 ]]; then
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Intel%2064.dmg"
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Intel%2064.dmg"
elif [[ $(arch) == arm64 ]]; then
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Arm%2064.dmg"
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Arm%2064.dmg"
fi
appNewVersion=$(curl -fs https://www.wireshark.org/download.html | grep -i "href.*_stable" | sed -E 's/.*\(([0-9.]*)\).*/\1/g')
expectedTeamID="7Z6EMTD2C6"
;;

View File

@@ -0,0 +1,8 @@
xcreds)
name="XCreds"
type="pkg"
packageID="com.twocanoes.pkg.secureremoteaccess"
downloadURL="$(downloadURLFromGit twocanoes xcreds)"
appNewVersion="$(versionFromGit twocanoes xcreds)"
expectedTeamID="UXP6YEHSPW"
;;

View File

@@ -1 +1 @@
10.0beta1
10.0beta

View File

@@ -1,7 +0,0 @@
googleadseditor)
name="Google Ads Editor"
type="dmg"
downloadURL="https://dl.google.com/adwords_editor/google_ads_editor.dmg"
appNewVersion=""
expectedTeamID="EQHXZ8M8AV"
;;

View File

@@ -127,8 +127,6 @@ 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