plugins/vault/private/Set-JaxVaultTokenPermissions.ps1

function Set-JaxVaultTokenPermissions {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string] $TokenDirectory,

        [Parameter(Mandatory = $true)]
        [string] $TokenPath
    )

    if ($IsWindows) {
        $identity = [Security.Principal.WindowsIdentity]::GetCurrent().User

        $directoryAcl = [Security.AccessControl.DirectorySecurity]::new()
        $directoryAcl.SetAccessRuleProtection($true, $false)
        $directoryAcl.SetOwner($identity)
        $directoryAcl.AddAccessRule([Security.AccessControl.FileSystemAccessRule]::new(
            $identity,
            [Security.AccessControl.FileSystemRights]::FullControl,
            [Security.AccessControl.InheritanceFlags]'ContainerInherit, ObjectInherit',
            [Security.AccessControl.PropagationFlags]::None,
            [Security.AccessControl.AccessControlType]::Allow
        ))
        [IO.FileSystemAclExtensions]::SetAccessControl([IO.DirectoryInfo]::new($TokenDirectory), $directoryAcl)

        $fileAcl = [Security.AccessControl.FileSecurity]::new()
        $fileAcl.SetAccessRuleProtection($true, $false)
        $fileAcl.SetOwner($identity)
        $fileAcl.AddAccessRule([Security.AccessControl.FileSystemAccessRule]::new(
            $identity,
            [Security.AccessControl.FileSystemRights]::FullControl,
            [Security.AccessControl.AccessControlType]::Allow
        ))
        [IO.FileSystemAclExtensions]::SetAccessControl([IO.FileInfo]::new($TokenPath), $fileAcl)
        return
    }

    $directoryMode = [IO.UnixFileMode]::UserRead -bor [IO.UnixFileMode]::UserWrite -bor [IO.UnixFileMode]::UserExecute
    $fileMode = [IO.UnixFileMode]::UserRead -bor [IO.UnixFileMode]::UserWrite
    [IO.File]::SetUnixFileMode($TokenDirectory, $directoryMode)
    [IO.File]::SetUnixFileMode($TokenPath, $fileMode)
}