2
0

43 Commits

Author SHA1 Message Date
Sergio Padrino
b3b2265ceb Merge pull request #43 from desktop/releases/0.9.11
Bump version to 0.9.11
2025-03-07 15:28:38 +01:00
Sergio Padrino
c8f98cd195 Bump version to 0.9.11 2025-03-07 15:22:49 +01:00
Sergio Padrino
e40bac1b04 Merge pull request #42 from shiftkey/patch-1
Update ci to default to Ubuntu 20.04 for prebuilds
2025-03-07 15:21:28 +01:00
Brendan Forster
81cd97ba31 Update ci to default to Ubuntu 20.04 for prebuilds 2025-02-24 08:10:54 -04:00
Markus Olsson
c8697f12d2 Merge pull request #40 from desktop/releases/v0.9.10
Release v0.9.10
2024-06-04 13:50:29 +02:00
Markus Olsson
8f6ceec51d Bump version 2024-06-04 10:17:10 +02:00
Markus Olsson
34d184fe89 Merge pull request #39 from desktop/invoke-directly
Invoke prebuild directly so we can see what's going on
2024-06-04 10:05:52 +02:00
Markus Olsson
48dcd71dc0 Invoke prebuild directly so we can see what's going on 2024-06-03 17:59:05 +02:00
Markus Olsson
84ce8a80a4 Merge pull request #38 from desktop/fix-include-regex
Fix include regex
2024-06-03 17:57:41 +02:00
Markus Olsson
f3b5b539ee Fix include regex 2024-06-03 17:43:06 +02:00
Markus Olsson
23d3c193e8 Merge pull request #37 from desktop/releases/0.9.9
Release v0.9.9
2024-06-03 17:42:38 +02:00
Markus Olsson
06606c1bf9 Bump version 2024-06-03 17:19:48 +02:00
Markus Olsson
03004d08c2 Merge pull request #36 from desktop/separate-helper-trampoline
Create a separate credential helper trampoline
2024-06-03 17:18:37 +02:00
Markus Olsson
fd06e4cb74 Liiint
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 12:17:18 +02:00
Markus Olsson
458f595f7c Include DESKTOP_TRAMPOLINE_IDENTIFIER alongside environment
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 12:16:25 +02:00
Markus Olsson
70c6ea44ca Use SetEnvironmentVariable on Windows
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 11:58:08 +02:00
Markus Olsson
eb43b574cb Liiiiiiint
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 11:48:38 +02:00
Markus Olsson
6052251d32 Test that stdin gets forwarded correctly
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 11:47:33 +02:00
Markus Olsson
f99853f6f5 Fix test
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 11:25:59 +02:00
Markus Olsson
e17797f96b We're not proxying identifier any more
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 11:23:47 +02:00
Markus Olsson
00b634d7c6 Pardon my c
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 11:23:27 +02:00
Markus Olsson
5634c425d1 Merge branch 'main' into separate-helper-trampoline 2024-06-03 11:21:50 +02:00
Markus Olsson
4d5efafe2b Create credential helper trampoline, send stdin
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 11:21:37 +02:00
Markus Olsson
f807bd740f Fix import
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 11:21:34 +02:00
Markus Olsson
50ae7d88df Rename trampoline to desktop-askpass-trampoline
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 11:21:32 +02:00
Markus Olsson
76a534cf9d Can't share type?
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 11:21:30 +02:00
Markus Olsson
df291aa89d Try sharing build settings
Co-Authored-By: Sergio Padrino <1083228+sergiou87@users.noreply.github.com>
2024-06-03 11:20:56 +02:00
Markus Olsson
ac8a04f76a Merge pull request #34 from desktop/remove-unused-env-vars
Remove unused env vars
2024-06-03 10:49:12 +02:00
Markus Olsson
d38f3fbfc1 Merge branch 'main' into remove-unused-env-vars 2024-06-03 10:45:06 +02:00
Sergio Padrino
f7b91a102a Merge pull request #35 from desktop/bump-node
Bump build dependencies
2024-05-31 14:59:18 +02:00
Markus Olsson
2bc283620c Fix friendly name in matrix
Ubuntu 18.04 is deprecated
2024-05-30 14:30:51 +02:00
Sergio Padrino
b6a400eed6 Bump prebuild and prebuild-install? 2024-05-30 13:37:03 +02:00
Sergio Padrino
4fbe92d44a Bump node-gyp to stop depending on distutils 2024-05-30 13:30:36 +02:00
Sergio Padrino
6f160ca8ee Replace distutils with setuptools and packaging 2024-05-30 13:27:14 +02:00
Markus Olsson
993ee45d23 Update ci.yml 2024-05-16 15:48:50 +02:00
Markus Olsson
052e8adec6 I don't know what I'm doing 2024-05-16 15:47:47 +02:00
Markus Olsson
d97ea83fc6 setuptools, where art tho? 2024-05-16 15:43:48 +02:00
Markus Olsson
df0985e8b1 One more reference 2024-05-16 15:41:22 +02:00
Markus Olsson
c91e438287 Official arm64 builds are being published now
I can't imagine it'll work without this but let's try
2024-05-16 15:39:51 +02:00
Markus Olsson
328c8e8476 Bump node version to LTS 2024-05-16 15:39:07 +02:00
Markus Olsson
fcb5499d11 18.04 is deprecated 2024-05-16 15:38:35 +02:00
Markus Olsson
666d093cef Fix test 2024-05-16 15:07:19 +02:00
Markus Olsson
8959c70a21 Remove unused env vars 2024-05-16 15:03:54 +02:00
12 changed files with 836 additions and 782 deletions

View File

@@ -17,33 +17,26 @@ jobs:
strategy:
fail-fast: false
matrix:
node: [14.15.4]
os: [macos-latest, windows-latest, ubuntu-18.04]
node: [20.12.2]
os: [macos-latest, windows-latest, ubuntu-latest]
include:
- os: macos-latest
friendlyName: macOS
- os: windows-latest
friendlyName: Windows
- os: ubuntu-18.04
- os: ubuntu-20.04
friendlyName: Linux
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Use Node.js ${{ matrix.node }}
uses: actions/setup-node@v1
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
# This step can be removed as soon as official Windows arm64 builds are published:
# https://github.com/nodejs/build/issues/2450#issuecomment-705853342
- run: |
$NodeVersion = (node --version) -replace '^.'
$NodeFallbackVersion = "15.8.0"
& .\script\download-node-lib-win-arm64.ps1 $NodeVersion $NodeFallbackVersion
if: ${{ matrix.os == 'windows-latest' }}
name: Install Windows arm64 node.lib
- name: Install Python setup tools
run: |
python -m pip install --upgrade setuptools packaging
- name: Install and build
run: |
yarn install
@@ -57,12 +50,10 @@ jobs:
run: npm run prebuild-napi-x64
- name: Prebuild (arm64)
run: npm run prebuild-napi-arm64
if: ${{ matrix.os != 'ubuntu-18.04' }}
if: ${{ matrix.os != 'ubuntu-latest' }}
- name: Prebuild (Windows x86)
run: npm run prebuild-napi-ia32
if: ${{ matrix.os == 'windows-latest' }}
- name: Publish
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
run: yarn upload
env:
GITHUB_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: yarn prebuild --upload-all ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1 +1 @@
12.14.1
20.12.2

View File

@@ -60,7 +60,7 @@ The equivalent Bash shell code looks like this:
```sh
# environment variable
GIT_ASKPASS="C:/some/path/to/desktop-trampoline.exe" \
GIT_ASKPASS="C:/some/path/to/desktop-askpass-trampoline.exe" \
# ensure Git doesn't block the process waiting for the user to provide input
GIT_TERMINAL_PROMPT=0 \
git \

View File

@@ -1,15 +1,8 @@
{
'targets': [
{
'target_name': 'desktop-trampoline',
'target_defaults': {
'defines': [
"NAPI_VERSION=<(napi_build_version)",
],
'type': 'executable',
'sources': [
'src/desktop-trampoline.c',
'src/socket.c'
],
'include_dirs': [
'<!(node -p "require(\'node-addon-api\').include_dir")',
'include'
@@ -42,9 +35,38 @@
'msvs_settings': {
'VCCLCompilerTool': { 'ExceptionHandling': 1 },
},
'conditions': [
['OS=="win"', { 'defines': [ 'WINDOWS' ] }]
]
},
'targets': [
{
'target_name': 'desktop-askpass-trampoline',
'type': 'executable',
'sources': [
'src/desktop-trampoline.c',
'src/socket.c'
],
'conditions': [
['OS=="win"', {
'link_settings': {
'libraries': [ 'Ws2_32.lib' ]
}
}]
]
},
{
'target_name': 'desktop-credential-helper-trampoline',
'type': 'executable',
'defines': [
'CREDENTIAL_HELPER'
],
'sources': [
'src/desktop-trampoline.c',
'src/socket.c'
],
'conditions': [
['OS=="win"', {
'defines': [ 'WINDOWS' ],
'link_settings': {
'libraries': [ 'Ws2_32.lib' ]
}
@@ -53,51 +75,10 @@
},
{
'target_name': 'ssh-wrapper',
'defines': [
"NAPI_VERSION=<(napi_build_version)",
],
'type': 'executable',
'sources': [
'src/ssh-wrapper.c'
],
'include_dirs': [
'<!(node -p "require(\'node-addon-api\').include_dir")',
'include'
],
'xcode_settings': {
'OTHER_CFLAGS': [
'-Wall',
'-Werror',
'-Werror=format-security',
'-fPIC',
'-D_FORTIFY_SOURCE=1',
'-fstack-protector-strong'
]
},
'cflags!': [
'-Wall',
'-Werror',
'-fPIC',
'-pie',
'-D_FORTIFY_SOURCE=1',
'-fstack-protector-strong',
'-Werror=format-security',
'-fno-exceptions'
],
'cflags_cc!': [ '-fno-exceptions' ],
'ldflags!': [
'-z relro',
'-z now'
],
'msvs_settings': {
'VCCLCompilerTool': { 'ExceptionHandling': 1 },
},
'conditions': [
# For now only build it for macOS, since it's not needed on Windows
['OS=="win"', {
'defines': [ 'WINDOWS' ],
}]
]
},
],
}

7
index.d.ts vendored
View File

@@ -1,5 +1,8 @@
export function getDesktopTrampolinePath(): string
export function getDesktopTrampolineFilename(): string
export function getDesktopAskpassTrampolinePath(): string
export function getDesktopAskpassTrampolineFilename(): string
export function getDesktopCredentialHelperTrampolinePath(): string
export function getDesktopCredentialHelperTrampolineFilename(): string
export function getSSHWrapperPath(): string
export function getSSHWrapperFilename(): string

View File

@@ -1,18 +1,33 @@
const Path = require('path')
function getDesktopTrampolinePath() {
function getDesktopAskpassTrampolinePath() {
return Path.join(
__dirname,
'build',
'Release',
getDesktopTrampolineFilename()
getDesktopAskpassTrampolineFilename()
)
}
function getDesktopTrampolineFilename() {
function getDesktopAskpassTrampolineFilename() {
return process.platform === 'win32'
? 'desktop-trampoline.exe'
: 'desktop-trampoline'
? 'desktop-askpass-trampoline.exe'
: 'desktop-askpass-trampoline'
}
function getDesktopCredentialHelperTrampolinePath() {
return Path.join(
__dirname,
'build',
'Release',
getDesktopCredentialHelperTrampolineFilename()
)
}
function getDesktopCredentialHelperTrampolineFilename() {
return process.platform === 'win32'
? 'desktop-credential-helper-trampoline.exe'
: 'desktop-credential-helper-trampoline'
}
function getSSHWrapperPath() {
@@ -24,8 +39,10 @@ function getSSHWrapperFilename() {
}
module.exports = {
getDesktopTrampolinePath,
getDesktopTrampolineFilename,
getDesktopAskpassTrampolinePath,
getDesktopAskpassTrampolineFilename,
getDesktopCredentialHelperTrampolinePath,
getDesktopCredentialHelperTrampolineFilename,
getSSHWrapperPath,
getSSHWrapperFilename,
}

View File

@@ -1,6 +1,6 @@
{
"name": "desktop-trampoline",
"version": "0.9.8",
"version": "0.9.11",
"main": "index.js",
"keywords": [],
"author": "",
@@ -15,9 +15,9 @@
"test": "jest",
"lint": "prettier -c **/*.js **/*.md",
"lint:fix": "prettier --write **/*.js **/*.md",
"prebuild-napi-x64": "prebuild -t 3 -r napi -a x64 --strip --include-regex \"(desktop-trampoline|ssh-wrapper)(\\.exe)?$\"",
"prebuild-napi-ia32": "prebuild -t 3 -r napi -a ia32 --strip --include-regex \"(desktop-trampoline|ssh-wrapper)(\\.exe)?$\"",
"prebuild-napi-arm64": "prebuild -t 3 -r napi -a arm64 --strip --include-regex \"(desktop-trampoline|ssh-wrapper)(\\.exe)?$\"",
"prebuild-napi-x64": "prebuild -t 3 -r napi -a x64 --strip --include-regex \"(desktop-(askpass|credential-helper)-trampoline|ssh-wrapper)(\\.exe)?$\"",
"prebuild-napi-ia32": "prebuild -t 3 -r napi -a ia32 --strip --include-regex \"(desktop-(askpass|credential-helper)-trampoline|ssh-wrapper)(\\.exe)?$\"",
"prebuild-napi-arm64": "prebuild -t 3 -r napi -a arm64 --strip --include-regex \"(desktop-(askpass|credential-helper)-trampoline|ssh-wrapper)(\\.exe)?$\"",
"prebuild-all": "yarn prebuild-napi-x64 && yarn prebuild-napi-ia32 && yarn prebuild-napi-arm64",
"upload": "node ./script/upload.js"
},
@@ -31,12 +31,12 @@
"homepage": "https://github.com/desktop/desktop-trampoline#readme",
"dependencies": {
"node-addon-api": "^4.3.0",
"prebuild-install": "^7.0.1"
"prebuild-install": "^7.1.2"
},
"devDependencies": {
"jest": "^27.5.0",
"node-gyp": "^8.4.1",
"prebuild": "^11.0.3",
"node-gyp": "^10.1.0",
"prebuild": "^13.0.1",
"prettier": "^2.5.1",
"split2": "^4.1.0"
},

View File

@@ -1,36 +0,0 @@
# This script can be removed as soon as official Windows arm64 builds are published:
# https://github.com/nodejs/build/issues/2450#issuecomment-705853342
$nodeVersion = $args[0]
$fallbackVersion = $args[1]
If ($null -eq $nodeVersion -Or $null -eq $fallbackVersion) {
Write-Error "No NodeJS version given as argument to this file. Run it like download-nodejs-win-arm64.ps1 NODE_VERSION NODE_FALLBACK_VERSION"
exit 1
}
$url = "https://unofficial-builds.nodejs.org/download/release/v$nodeVersion/win-arm64/node.lib"
$fallbackUrl = "https://unofficial-builds.nodejs.org/download/release/v$fallbackVersion/win-arm64/node.lib"
# Always write to the $nodeVersion cache folder, even if we're using the fallbackVersion
$cacheFolder = "$env:TEMP\prebuild\napi\$nodeVersion\arm64"
If (!(Test-Path $cacheFolder)) {
New-Item -ItemType Directory -Force -Path $cacheFolder
}
$output = "$cacheFolder\node.lib"
$start_time = Get-Date
Try {
Invoke-WebRequest -Uri $url -OutFile $output
$downloadedNodeVersion = $nodeVersion
} Catch {
If ($_.Exception.Response -And $_.Exception.Response.StatusCode -eq "NotFound") {
Write-Output "No arm64 node.lib found for Node Windows $nodeVersion, trying fallback version $fallbackVersion..."
Invoke-WebRequest -Uri $fallbackUrl -OutFile $output
$downloadedNodeVersion = $fallbackVersion
}
}
Write-Output "Downloaded arm64 NodeJS lib v$downloadedNodeVersion to $output in $((Get-Date).Subtract($start_time).Seconds) second(s)"

View File

@@ -1,14 +0,0 @@
// to ensure that env not in the CI server log
const path = require('path')
const { spawnSync } = require('child_process')
spawnSync(
path.join(
__dirname,
'../node_modules/.bin/prebuild' +
(process.platform === 'win32' ? '.cmd' : '')
),
['--upload-all', process.env.GITHUB_AUTH_TOKEN],
{ stdio: 'inherit' }
)

View File

@@ -9,6 +9,13 @@
#define BUFFER_LENGTH 4096
#define MAXIMUM_NUMBER_LENGTH 33
#ifdef CREDENTIAL_HELPER
#define DESKTOP_TRAMPOLINE_IDENTIFIER "CREDENTIALHELPER"
#else
#define DESKTOP_TRAMPOLINE_IDENTIFIER "ASKPASS"
#endif
#define WRITE_STRING_OR_EXIT(dataName, dataString) \
if (writeSocket(socket, dataString, strlen(dataString) + 1) != 0) { \
printSocketError("ERROR: Couldn't send " dataName); \
@@ -17,12 +24,9 @@ if (writeSocket(socket, dataString, strlen(dataString) + 1) != 0) { \
// This is a list of valid environment variables that GitHub Desktop might
// send or expect to receive.
#define NUMBER_OF_VALID_ENV_VARS 4
#define NUMBER_OF_VALID_ENV_VARS 1
static const char *sValidEnvVars[NUMBER_OF_VALID_ENV_VARS] = {
"DESKTOP_TRAMPOLINE_IDENTIFIER",
"DESKTOP_TRAMPOLINE_TOKEN",
"DESKTOP_USERNAME",
"DESKTOP_ENDPOINT",
};
/** Returns 1 if a given env variable is valid, 0 otherwise. */
@@ -83,8 +87,9 @@ int runTrampolineClient(SOCKET *outSocket, int argc, char **argv, char **envp) {
}
// Get the number of environment variables
char *validEnvVars[NUMBER_OF_VALID_ENV_VARS];
int envc = 0;
char *validEnvVars[NUMBER_OF_VALID_ENV_VARS + 1];
validEnvVars[0] = "DESKTOP_TRAMPOLINE_IDENTIFIER=" DESKTOP_TRAMPOLINE_IDENTIFIER;
int envc = 1;
for (char **env = envp; *env != 0; env++) {
if (isValidEnvVar(*env)) {
validEnvVars[envc] = *env;
@@ -102,7 +107,15 @@ int runTrampolineClient(SOCKET *outSocket, int argc, char **argv, char **envp) {
WRITE_STRING_OR_EXIT("environment variable", validEnvVars[idx]);
}
// TODO: send stdin stuff?
char stdinBuffer[BUFFER_LENGTH + 1];
int stdinBytes = 0;
#ifdef CREDENTIAL_HELPER
stdinBytes = fread(stdinBuffer, sizeof(char), BUFFER_LENGTH, stdin);
#endif
stdinBuffer[stdinBytes] = '\0';
WRITE_STRING_OR_EXIT("stdin", stdinBuffer);
char buffer[BUFFER_LENGTH + 1];
size_t totalBytesRead = 0;

View File

@@ -2,65 +2,152 @@ const { stat, access } = require('fs').promises
const { constants } = require('fs')
const { execFile } = require('child_process')
const { promisify } = require('util')
const { getDesktopTrampolinePath } = require('../index')
const {
getDesktopAskpassTrampolinePath,
getDesktopCredentialHelperTrampolinePath,
} = require('../index')
const split2 = require('split2')
const { createServer } = require('net')
const trampolinePath = getDesktopTrampolinePath()
const askPassTrampolinePath = getDesktopAskpassTrampolinePath()
const helperTrampolinePath = getDesktopCredentialHelperTrampolinePath()
const run = promisify(execFile)
describe('desktop-trampoline', () => {
it('exists and is a regular file', async () =>
expect((await stat(trampolinePath)).isFile()).toBe(true))
expect((await stat(askPassTrampolinePath)).isFile()).toBe(true))
it('can be executed by current process', () =>
access(trampolinePath, constants.X_OK))
access(askPassTrampolinePath, constants.X_OK))
it('fails when required environment variables are missing', () =>
expect(run(trampolinePath, ['Username'])).rejects.toThrow())
expect(run(askPassTrampolinePath, ['Username'])).rejects.toThrow())
it('forwards arguments and valid environment variables correctly', async () => {
const captureSession = () => {
const output = []
let resolveOutput = null
const outputPromise = new Promise(resolve => {
resolveOutput = resolve
})
const server = createServer(socket => {
let timeoutId = null
socket.pipe(split2(/\0/)).on('data', data => {
output.push(data.toString('utf8'))
})
// Don't send anything and just close the socket after the trampoline is
// done forwarding data.
socket.end()
// Hack: consider the session finished after 100ms of inactivity.
// In a real-world scenario, you'd have to parse the data to know when
// the session is finished.
if (timeoutId !== null) {
clearTimeout(timeoutId)
timeoutId = null
}
timeoutId = setTimeout(() => {
resolveOutput(output)
socket.end()
server.close()
}, 100)
})
})
server.unref()
const startTrampolineServer = async () => {
return new Promise((resolve, reject) => {
server.on('error', e => reject(e))
server.listen(0, '127.0.0.1', () => {
resolve(server.address().port)
})
const serverPortPromise = new Promise((resolve, reject) => {
server.on('error', e => reject(e))
server.listen(0, '127.0.0.1', () => {
resolve(server.address().port)
})
}
})
return [serverPortPromise, outputPromise]
}
it('forwards arguments and valid environment variables correctly', async () => {
const [portPromise, outputPromise] = captureSession()
const port = await portPromise
const port = await startTrampolineServer()
const env = {
DESKTOP_TRAMPOLINE_IDENTIFIER: '123456',
DESKTOP_TRAMPOLINE_TOKEN: '123456',
DESKTOP_PORT: port,
DESKTOP_USERNAME: 'sergiou87',
DESKTOP_USERNAME_FAKE: 'fake-user',
INVALID_VARIABLE: 'foo bar',
}
const opts = { env }
await run(trampolinePath, ['baz'], opts)
await run(askPassTrampolinePath, ['baz'], opts)
const output = await outputPromise
const outputArguments = output.slice(1, 2)
expect(outputArguments).toStrictEqual(['baz'])
// output[2] is the number of env variables
const outputEnv = output.slice(3)
const envc = parseInt(output[2])
const outputEnv = output.slice(3, 3 + envc)
expect(outputEnv).toHaveLength(2)
expect(outputEnv).toContain('DESKTOP_TRAMPOLINE_IDENTIFIER=123456')
expect(outputEnv).toContain(`DESKTOP_USERNAME=sergiou87`)
expect(outputEnv).toContain('DESKTOP_TRAMPOLINE_TOKEN=123456')
expect(outputEnv).toContain('DESKTOP_TRAMPOLINE_IDENTIFIER=ASKPASS')
})
server.close()
it('forwards stdin when running in credential-helper mode', async () => {
const [portPromise, outputPromise] = captureSession()
const port = await portPromise
const cp = run(helperTrampolinePath, ['get'], {
env: { DESKTOP_PORT: port },
})
cp.child.stdin.end('oh hai\n')
await cp
const output = await outputPromise
expect(output.at(-1)).toBe('oh hai\n')
})
it("doesn't forward stdin when running in askpass mode", async () => {
const [portPromise, outputPromise] = captureSession()
const port = await portPromise
const cp = run(askPassTrampolinePath, ['get'], {
env: { DESKTOP_PORT: port },
})
cp.child.stdin.end('oh hai\n')
await cp
const output = await outputPromise
expect(output.at(-1)).toBe('')
})
it('askpass handler ignores the DESKTOP_TRAMPOLINE_IDENTIFIER env var', async () => {
const [portPromise, outputPromise] = captureSession()
const port = await portPromise
const cp = run(askPassTrampolinePath, ['get'], {
env: { DESKTOP_PORT: port, DESKTOP_TRAMPOLINE_IDENTIFIER: 'foo' },
})
cp.child.stdin.end('oh hai\n')
await cp
const output = await outputPromise
const envc = parseInt(output[2])
const outputEnv = output.slice(3, 3 + envc)
expect(outputEnv).toContain('DESKTOP_TRAMPOLINE_IDENTIFIER=ASKPASS')
})
it('credential handler ignores the DESKTOP_TRAMPOLINE_IDENTIFIER env var', async () => {
const [portPromise, outputPromise] = captureSession()
const port = await portPromise
const cp = run(helperTrampolinePath, ['get'], {
env: { DESKTOP_PORT: port, DESKTOP_TRAMPOLINE_IDENTIFIER: 'foo' },
})
cp.child.stdin.end('oh hai\n')
await cp
const output = await outputPromise
const envc = parseInt(output[2])
const outputEnv = output.slice(3, 3 + envc)
expect(outputEnv).toContain(
'DESKTOP_TRAMPOLINE_IDENTIFIER=CREDENTIALHELPER'
)
})
})

1234
yarn.lock
View File

File diff suppressed because it is too large Load Diff