feat(proxy): throw when socks proxy is used with auth (#5358)

This commit is contained in:
Dmitry Gozman 2021-02-08 12:07:45 -08:00 committed by GitHub
parent f35acc258b
commit 6d56a110ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 0 deletions

View File

@ -462,6 +462,10 @@ export function normalizeProxySettings(proxy: types.ProxySettings): types.ProxyS
} catch (e) { } catch (e) {
url = new URL('http://' + server); url = new URL('http://' + server);
} }
if (url.protocol === 'socks4:' && (proxy.username || proxy.password))
throw new Error(`Socks4 proxy protocol does not support authentication`);
if (url.protocol === 'socks5:' && (proxy.username || proxy.password))
throw new Error(`Browser does not support socks5 proxy authentication`);
server = url.protocol + '//' + url.host; server = url.protocol + '//' + url.host;
if (bypass) if (bypass)
bypass = bypass.split(',').map(t => t.trim()).join(','); bypass = bypass.split(',').map(t => t.trim()).join(',');

View File

@ -103,6 +103,22 @@ it('should work with IP:PORT notion', async ({contextFactory, contextOptions, se
await browser.close(); await browser.close();
}); });
it('should throw for socks5 authentication', async ({contextFactory, contextOptions}) => {
const error = await contextFactory({
...contextOptions,
proxy: { server: `socks5://localhost:1234`, username: 'user', password: 'secret' }
}).catch(e => e);
expect(error.message).toContain('Browser does not support socks5 proxy authentication');
});
it('should throw for socks4 authentication', async ({contextFactory, contextOptions}) => {
const error = await contextFactory({
...contextOptions,
proxy: { server: `socks4://localhost:1234`, username: 'user', password: 'secret' }
}).catch(e => e);
expect(error.message).toContain('Socks4 proxy protocol does not support authentication');
});
it('should authenticate', async ({contextFactory, contextOptions, server}) => { it('should authenticate', async ({contextFactory, contextOptions, server}) => {
server.setRoute('/target.html', async (req, res) => { server.setRoute('/target.html', async (req, res) => {
const auth = req.headers['proxy-authorization']; const auth = req.headers['proxy-authorization'];