Private/SnowPlatform.ps1
|
function Get-SnowplowPlatform { [CmdletBinding()] param() if ($IsWindows) { return 'Windows' } if ($IsLinux) { return 'Linux' } if ($IsMacOS) { return 'MacOS' } 'Unknown' } function Get-SnowplowDirectories { [CmdletBinding()] param() $homeDirectory = [Environment]::GetFolderPath('UserProfile') switch (Get-SnowplowPlatform) { Windows { $config = Join-Path ([Environment]::GetFolderPath('ApplicationData')) 'Snowplow' $local = Join-Path ([Environment]::GetFolderPath('LocalApplicationData')) 'Snowplow' $cache = Join-Path $local 'Cache' $data = Join-Path $local 'Data' } MacOS { $support = Join-Path (Join-Path (Join-Path $homeDirectory 'Library') 'Application Support') 'Snowplow' $config = $support $cache = Join-Path (Join-Path (Join-Path $homeDirectory 'Library') 'Caches') 'Snowplow' $data = Join-Path $support 'Data' } Linux { $configRoot = if ($env:XDG_CONFIG_HOME -and [IO.Path]::IsPathRooted($env:XDG_CONFIG_HOME)) { $env:XDG_CONFIG_HOME } else { Join-Path $homeDirectory '.config' } $cacheRoot = if ($env:XDG_CACHE_HOME -and [IO.Path]::IsPathRooted($env:XDG_CACHE_HOME)) { $env:XDG_CACHE_HOME } else { Join-Path $homeDirectory '.cache' } $dataRoot = if ($env:XDG_DATA_HOME -and [IO.Path]::IsPathRooted($env:XDG_DATA_HOME)) { $env:XDG_DATA_HOME } else { Join-Path (Join-Path $homeDirectory '.local') 'share' } $config = Join-Path $configRoot 'snowplow' $cache = Join-Path $cacheRoot 'snowplow' $data = Join-Path $dataRoot 'snowplow' } default { throw [System.PlatformNotSupportedException]::new('Snowplow supports PowerShell on Windows, Linux, and macOS.') } } [pscustomobject]@{ Config = $config; Cache = $cache; Data = $data } } function Protect-SnowplowPath { [CmdletBinding()] param( [Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][ValidateSet('Directory', 'File')][string]$Type ) if ((Get-SnowplowPlatform) -notin @('Linux', 'MacOS')) { return } $mode = if ($Type -eq 'Directory') { '700' } else { '600' } & chmod $mode -- $Path if ($LASTEXITCODE -ne 0) { throw [System.IO.IOException]::new("Could not restrict permissions on '$Path'.") } } |