Files
2026-06-10 21:57:55 +02:00

123 lines
5.7 KiB
PowerShell

class DeployViewModel : FirefoxAddinManager.ObservableBase {
[System.Collections.ObjectModel.ObservableCollection[AddonModel]] $Addons
[System.Windows.Input.ICommand] $DeployCommand
[System.Windows.Input.ICommand] $ExportScriptCommand
[System.Windows.Input.ICommand] $DownloadXpisCommand
hidden [string] $_statusMessage = ""
hidden [bool] $_isDeploying = $false
[string] $StatusMessage {
get { return $this._statusMessage }
set { $this._statusMessage = $value; $this.OnPropertyChanged("StatusMessage") }
}
[bool] $IsDeploying {
get { return $this._isDeploying }
set { $this._isDeploying = $value; $this.OnPropertyChanged("IsDeploying") }
}
DeployViewModel() {
$this.Addons = [System.Collections.ObjectModel.ObservableCollection[AddonModel]]::new()
$this._LoadDefaultAddons()
$this._InitCommands()
}
hidden [void] _LoadDefaultAddons() {
@(
@("uBlock Origin", "uBlock0@raymondhill.net",
"https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi",
"https://addons.mozilla.org/firefox/addon/ublock-origin/", "Effizienter Werbeblocker"),
@("Dark Reader", "addon@darkreader.org",
"https://addons.mozilla.org/firefox/downloads/latest/darkreader/latest.xpi",
"https://addons.mozilla.org/firefox/addon/darkreader/", "Dunkles Design"),
@("Bitwarden", "{446900e4-71c2-419f-a6a7-df9c091e268b}",
"https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi",
"https://addons.mozilla.org/firefox/addon/bitwarden-password-manager/", "Passwort-Manager"),
@("KeePassXC", "keepassxc-browser@keepassxc.org",
"https://addons.mozilla.org/firefox/downloads/latest/keepassxc-browser/latest.xpi",
"https://addons.mozilla.org/firefox/addon/keepassxc-browser/", "KeePass-Integration"),
@("Acrobat Reader", "acrobat_reader@adobe.com",
"https://addons.mozilla.org/firefox/downloads/latest/acrobat-reader/latest.xpi",
"https://addons.mozilla.org/firefox/addon/adobe-acrobat-dc-pdf/", "PDF-Viewer"),
@("Foxit Reader", "foxitreader@foxitsoftware.com",
"https://addons.mozilla.org/firefox/downloads/latest/foxit-reader/latest.xpi",
"https://addons.mozilla.org/firefox/addon/foxit-reader/", "Foxit PDF-Viewer")
) | ForEach-Object {
$this.Addons.Add([AddonModel]::new($_[0], $_[1], $_[2], $_[3], $_[4]))
}
}
hidden [void] _InitCommands() {
$vm = $this
$this.DeployCommand = [FirefoxAddinManager.RelayCommand]::new(
{
if (-not [FirefoxService]::IsAdmin()) {
[System.Windows.MessageBox]::Show(
"Administratorrechte erforderlich.", "Kein Admin",
"OK", "Warning"); return
}
$vm.IsDeploying = $true
$vm.StatusMessage = "Deploying..."
# JSON-String loeschen
[RegistryService]::RemoveJsonString()
# Wildcard setzen
[RegistryService]::SetWildcard("blocked")
# Ausgewaehlte Add-ons deployen
$count = 0
foreach ($addon in $vm.Addons) {
if ($addon.IsSelected) {
[RegistryService]::DeployAddon($addon)
$count++
}
}
$vm.IsDeploying = $false
$vm.StatusMessage = "$count Add-on(s) deployed. Firefox neu starten."
},
{ return ($this.Addons | Where-Object { $_.IsSelected }).Count -gt 0 }
)
$this.ExportScriptCommand = [FirefoxAddinManager.RelayCommand]::new(
{
$selected = $vm.Addons | Where-Object { $_.IsSelected }
if (-not $selected) {
[System.Windows.MessageBox]::Show("Bitte Add-ons auswaehlen.", "Hinweis", "OK", "Information")
return
}
$dlg = New-Object Microsoft.Win32.SaveFileDialog
$dlg.Filter = "PowerShell (*.ps1)|*.ps1"
$dlg.FileName = "Deploy-FirefoxAddons.ps1"
if (-not $dlg.ShowDialog()) { return }
$lines = @(
"#Requires -RunAsAdministrator"
'$base = "HKLM:\SOFTWARE\Policies\Mozilla\Firefox\ExtensionSettings"'
'Remove-ItemProperty "HKLM:\SOFTWARE\Policies\Mozilla\Firefox" -Name ExtensionSettings -ErrorAction SilentlyContinue'
'$wc = "$base\*"; if (-not (Test-Path $wc)) { New-Item $wc -Force | Out-Null }'
'Set-ItemProperty $wc -Name installation_mode -Value blocked'
)
foreach ($a in $selected) {
$lines += ""
$lines += "# $($a.Name)"
$lines += '$k = "' + "HKLM:\SOFTWARE\Policies\Mozilla\Firefox\ExtensionSettings\$($a.Id)" + '"'
$lines += 'if (-not (Test-Path $k)) { New-Item $k -Force | Out-Null }'
$lines += 'Set-ItemProperty $k -Name installation_mode -Value force_installed'
$lines += 'Set-ItemProperty $k -Name install_url -Value "' + $a.InstallUrl + '"'
}
$lines | Out-File $dlg.FileName -Encoding UTF8
$vm.StatusMessage = "Skript exportiert: $($dlg.FileName)"
},
{ $true }
)
}
[AddonModel[]] GetSelectedAddons() {
return @($this.Addons | Where-Object { $_.IsSelected })
}
}