diff --git a/ee/maintained-apps/inputs/winget/putty.json b/ee/maintained-apps/inputs/winget/putty.json new file mode 100644 index 0000000000..b77cd4446d --- /dev/null +++ b/ee/maintained-apps/inputs/winget/putty.json @@ -0,0 +1,10 @@ +{ + "name": "PuTTY", + "slug": "putty/windows", + "package_identifier": "PuTTY.PuTTY", + "unique_identifier": "PuTTY release 0.83 (x64)", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 2436754d94..ebd75f0b02 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -1261,6 +1261,13 @@ "unique_identifier": "com.initex.proxifier.v3.macos", "description": "Proxifier is an app that allows network applications that do not support working through proxy servers to operate through a SOCKS or HTTPS proxy and chains." }, + { + "name": "PuTTY", + "slug": "putty/windows", + "platform": "windows", + "unique_identifier": "PuTTY release 0.83 (x64)", + "description": "PuTTY is a free, open-source SSH and Telnet client for Windows." + }, { "name": "PyCharm Community Edition", "slug": "pycharm-ce/darwin", diff --git a/ee/maintained-apps/outputs/putty/windows.json b/ee/maintained-apps/outputs/putty/windows.json new file mode 100644 index 0000000000..8de34d9366 --- /dev/null +++ b/ee/maintained-apps/outputs/putty/windows.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "0.83.0.0", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'PuTTY release 0.83 (x64)' AND publisher = 'Simon Tatham';" + }, + "installer_url": "https://the.earth.li/~sgtatham/putty/0.83/w64/putty-64bit-0.83-installer.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "84bf0290", + "sha256": "aa8e5036d973688f1e8622fbe9ab22e037346e0def0197bf5e7cdf37da4e223d", + "default_categories": [ + "Productivity" + ], + "upgrade_code": "{C9EAA861-2B72-4FAF-9FEE-EEB1AD5FD15E}" + } + ], + "refs": { + "84bf0290": "# 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(\"{C9EAA861-2B72-4FAF-9FEE-EEB1AD5FD15E}\")) {\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", + "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" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/Putty.tsx b/frontend/pages/SoftwarePage/components/icons/Putty.tsx new file mode 100644 index 0000000000..ea5bccaea7 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Putty.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Putty = (props: SVGProps) => ( + + + +); +export default Putty; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index 5e5f8b0f67..ed56ba5210 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -12,6 +12,7 @@ import Nextcloud from "./Nextcloud"; import Notepad from "./Notepad++"; import OktaVerify from "./OktaVerify"; import Proxifier from "./Proxifier"; +import Putty from "./Putty"; import SevenZip from "./7Zip"; import Abstract from "./Abstract"; import AcrobatReader from "./AcrobatReader"; @@ -408,6 +409,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "proton mail": ProtonMail, protonvpn: ProtonVpn, proxifier: Proxifier, + putty: Putty, "pycharm ce": PyCharmCe, pycharm: PyCharm, quip: Quip, diff --git a/website/assets/images/app-icon-putty-60x60@2x.png b/website/assets/images/app-icon-putty-60x60@2x.png new file mode 100644 index 0000000000..3ec15de001 Binary files /dev/null and b/website/assets/images/app-icon-putty-60x60@2x.png differ