diff --git a/cmd/maintained-apps/validate/main.go b/cmd/maintained-apps/validate/main.go index e6ea010740..173b93fd18 100644 --- a/cmd/maintained-apps/validate/main.go +++ b/cmd/maintained-apps/validate/main.go @@ -487,7 +487,7 @@ func detectApplicationChange(installationSearchDirectory string, appListPre, app func validateSqlInput(input string) error { // Allow alphanumeric, spaces, dots, hyphens, underscores, forward/back slashes, colons, parentheses, pluses. - if matched, _ := regexp.MatchString(`^[a-zA-Z0-9\s.\-_/\\:()+]*$`, input); !matched { + if matched, _ := regexp.MatchString(`^[a-zA-Z0-9\s.\-_/\\:()+,&]*$`, input); !matched { return fmt.Errorf("invalid characters in input: %s", input) } diff --git a/ee/maintained-apps/inputs/winget/amazon-workspaces.json b/ee/maintained-apps/inputs/winget/amazon-workspaces.json new file mode 100644 index 0000000000..1f9944704f --- /dev/null +++ b/ee/maintained-apps/inputs/winget/amazon-workspaces.json @@ -0,0 +1,10 @@ +{ + "name": "Amazon WorkSpaces", + "slug": "amazon-workspaces/windows", + "package_identifier": "Amazon.WorkspacesClient", + "unique_identifier": "Amazon WorkSpaces", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/outputs/amazon-workspaces/windows.json b/ee/maintained-apps/outputs/amazon-workspaces/windows.json new file mode 100644 index 0000000000..616cdd3af3 --- /dev/null +++ b/ee/maintained-apps/outputs/amazon-workspaces/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "5.32.2.5905", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Amazon WorkSpaces' AND publisher = 'Amazon Web Services, Inc';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon WorkSpaces' AND publisher = 'Amazon Web Services, Inc' AND version_compare(version, '5.32.2.5905') < 0);" + }, + "installer_url": "https://d2td7dqidlhjx7.cloudfront.net/prod/global/windows/Amazon+WorkSpaces.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "b645e295", + "sha256": "d92852c27efd33f349da727f6a7d2c5622441bf7fdb1a00a3132e4a4988f3f96", + "default_categories": [ + "Productivity" + ], + "upgrade_code": "{CB7B8EA8-3D5A-4233-A9CB-31A692E24E62}" + } + ], + "refs": { + "8959087b": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv ${logFile} /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n", + "b645e295": "# Fleet uninstalls app by finding all related product codes for the specified upgrade code\n$inst = New-Object -ComObject \"WindowsInstaller.Installer\"\n$timeoutSeconds = 300 # 5 minute timeout per product\n\nforeach ($product_code in $inst.RelatedProducts('{CB7B8EA8-3D5A-4233-A9CB-31A692E24E62}')) {\n $process = Start-Process msiexec -ArgumentList @(\"/quiet\", \"/x\", $product_code, \"/norestart\") -PassThru\n \n # Wait for process with timeout\n $completed = $process.WaitForExit($timeoutSeconds * 1000)\n \n if (-not $completed) {\n Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue\n Exit 1603 # ERROR_UNINSTALL_FAILURE\n }\n \n # If the uninstall failed, bail\n if ($process.ExitCode -ne 0) {\n Write-Output \"Uninstall for $($product_code) exited $($process.ExitCode)\"\n Exit $process.ExitCode\n }\n}\n\n# All uninstalls succeeded; exit success\nExit 0\n" + } +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 320cb81c5a..42e6d499f4 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -148,6 +148,13 @@ "unique_identifier": "Amazon Corretto (x64)", "description": "Amazon Corretto 25 is a no-cost, multiplatform, production-ready distribution of OpenJDK 25." }, + { + "name": "Amazon WorkSpaces", + "slug": "amazon-workspaces/windows", + "platform": "windows", + "unique_identifier": "Amazon WorkSpaces", + "description": "Amazon WorkSpaces provides secure, managed virtual desktop infrastructure (VDI) in the cloud." + }, { "name": "Android Studio", "slug": "android-studio/darwin", diff --git a/frontend/pages/SoftwarePage/components/icons/AmazonWorkspaces.tsx b/frontend/pages/SoftwarePage/components/icons/AmazonWorkspaces.tsx new file mode 100644 index 0000000000..d991854d36 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AmazonWorkspaces.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AmazonWorkspaces = (props: SVGProps) => ( + + + +); +export default AmazonWorkspaces; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index 4399161670..63d022f51c 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -6,6 +6,7 @@ import { ISoftware } from "interfaces/software"; import { matchLoosePrefixToKey } from "utilities/strings/stringUtils"; import AmazonCorretto25 from "./AmazonCorretto25"; +import AmazonWorkspaces from "./AmazonWorkspaces"; import AnotherRedisDesktopManager from "./AnotherRedisDesktopManager"; import AzulZulu25Jdk from "./AzulZulu25Jdk"; import AzulZulu25Jre from "./AzulZulu25Jre"; @@ -300,6 +301,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "amazon chime": AmazonChime, "amazon corretto 25": AmazonCorretto25, "amazon dcv": AmazonDCV, + "amazon workspaces": AmazonWorkspaces, androidPlayStore: AndroidPlayStore, "android studio": AndroidStudio, anka: Anka, diff --git a/website/assets/images/app-icon-amazon-workspaces-60x60@2x.png b/website/assets/images/app-icon-amazon-workspaces-60x60@2x.png new file mode 100644 index 0000000000..13b1d5003a Binary files /dev/null and b/website/assets/images/app-icon-amazon-workspaces-60x60@2x.png differ