From 470e9d044289d24c1a31b6dc62a38d80bb1c7c89 Mon Sep 17 00:00:00 2001 From: Mirko Golze Date: Sun, 15 Oct 2023 16:40:50 +0200 Subject: [PATCH] proxy settings --- package-lock.json | 28 ----- .../CollectionSettings/Docs/index.js | 2 +- .../CollectionSettings/ProxySettings/index.js | 88 +++++++++++---- .../Preferences/ProxySettings/index.js | 13 ++- .../src/providers/Preferences/index.js | 63 ++++++++--- packages/bruno-cli/src/commands/run.js | 4 +- .../src/runner/run-single-request.js | 28 ++--- .../bruno-cli/src/utils/axios-instance.js | 8 +- packages/bruno-cli/src/utils/proxy-util.js | 65 +++++++++++ packages/bruno-electron/package.json | 1 - .../src/ipc/network/axios-instance.js | 4 +- .../bruno-electron/src/ipc/network/index.js | 103 ++++++++++-------- .../bruno-electron/src/store/preferences.js | 7 +- .../bruno-electron/src/utils/proxy-util.js | 64 +++++++++++ .../tests/utils/proxy-util.spec.js | 50 +++++++++ tests/home.spec.js | 2 +- 16 files changed, 390 insertions(+), 140 deletions(-) create mode 100644 packages/bruno-cli/src/utils/proxy-util.js create mode 100644 packages/bruno-electron/src/utils/proxy-util.js create mode 100644 packages/bruno-electron/tests/utils/proxy-util.spec.js diff --git a/package-lock.json b/package-lock.json index d04f7e2d..e8f35901 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2418,11 +2418,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@coolaj86/urequest": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@coolaj86/urequest/-/urequest-1.3.7.tgz", - "integrity": "sha512-PPrVYra9aWvZjSCKl/x1pJ9ZpXda1652oJrPBYy5rQumJJMkmTBN3ux+sK2xAUwVvv2wnewDlaQaHLxLwSHnIA==" - }, "node_modules/@develar/schema-utils": { "version": "2.6.5", "dev": true, @@ -14796,14 +14791,6 @@ "node": ">=0.10.0" } }, - "node_modules/ssl-root-cas": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/ssl-root-cas/-/ssl-root-cas-1.3.1.tgz", - "integrity": "sha512-KR8J210Wfvjh+iNE9jcQEgbG0VG2713PHreItx6aNCPnkFO8XChz1cJ4iuCGeBj0+8wukLmgHgJqX+O5kRjPkQ==", - "dependencies": { - "@coolaj86/urequest": "^1.3.6" - } - }, "node_modules/stable": { "version": "0.1.8", "dev": true, @@ -16761,7 +16748,6 @@ "node-machine-id": "^1.1.12", "qs": "^6.11.0", "socks-proxy-agent": "^8.0.2", - "ssl-root-cas": "^1.3.1", "uuid": "^9.0.0", "vm2": "^3.9.13", "yup": "^0.32.11" @@ -18765,11 +18751,6 @@ "version": "0.2.3", "dev": true }, - "@coolaj86/urequest": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@coolaj86/urequest/-/urequest-1.3.7.tgz", - "integrity": "sha512-PPrVYra9aWvZjSCKl/x1pJ9ZpXda1652oJrPBYy5rQumJJMkmTBN3ux+sK2xAUwVvv2wnewDlaQaHLxLwSHnIA==" - }, "@develar/schema-utils": { "version": "2.6.5", "dev": true, @@ -21658,7 +21639,6 @@ "node-machine-id": "^1.1.12", "qs": "^6.11.0", "socks-proxy-agent": "^8.0.2", - "ssl-root-cas": "^1.3.1", "uuid": "^9.0.0", "vm2": "^3.9.13", "yup": "^0.32.11" @@ -27279,14 +27259,6 @@ "tweetnacl": "~0.14.0" } }, - "ssl-root-cas": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/ssl-root-cas/-/ssl-root-cas-1.3.1.tgz", - "integrity": "sha512-KR8J210Wfvjh+iNE9jcQEgbG0VG2713PHreItx6aNCPnkFO8XChz1cJ4iuCGeBj0+8wukLmgHgJqX+O5kRjPkQ==", - "requires": { - "@coolaj86/urequest": "^1.3.6" - } - }, "stable": { "version": "0.1.8", "dev": true diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js index ca15cb3a..f759af2e 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js @@ -1,7 +1,7 @@ import 'github-markdown-css/github-markdown.css'; import get from 'lodash/get'; import { updateCollectionDocs } from 'providers/ReduxStore/slices/collections'; -import { useTheme } from 'providers/Theme/index'; +import { useTheme } from 'providers/Theme'; import { useState } from 'react'; import { useDispatch } from 'react-redux'; import { saveCollectionRoot } from 'providers/ReduxStore/slices/collections/actions'; diff --git a/packages/bruno-app/src/components/CollectionSettings/ProxySettings/index.js b/packages/bruno-app/src/components/CollectionSettings/ProxySettings/index.js index 8b1b5999..df0d35df 100644 --- a/packages/bruno-app/src/components/CollectionSettings/ProxySettings/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/ProxySettings/index.js @@ -1,10 +1,52 @@ import React, { useEffect } from 'react'; import { useFormik } from 'formik'; -import * as Yup from 'yup'; import StyledWrapper from './StyledWrapper'; +import * as Yup from 'yup'; +import toast from 'react-hot-toast'; const ProxySettings = ({ proxyConfig, onUpdate }) => { + const proxySchema = Yup.object({ + enabled: Yup.string().oneOf(['global', 'enabled', 'disabled']), + protocol: Yup.string().oneOf(['http', 'https', 'socks4', 'socks5']), + hostname: Yup.string() + .when('enabled', { + is: 'enabled', + then: (hostname) => hostname.required('Specify the hostname for your proxy.'), + otherwise: (hostname) => hostname.nullable() + }) + .max(1024), + port: Yup.number() + .when('enabled', { + is: 'enabled', + then: (port) => port.typeError('Specify port between 1 and 65535'), + otherwise: (port) => port.nullable().transform((_, val) => (val ? Number(val) : null)) + }) + .min(1) + .max(65535), + auth: Yup.object() + .when('enabled', { + is: 'enabled', + then: Yup.object({ + enabled: Yup.boolean(), + username: Yup.string() + .when(['enabled'], { + is: true, + then: (username) => username.required('Specify username for proxy authentication.') + }) + .max(1024), + password: Yup.string() + .when('enabled', { + is: true, + then: (password) => password.required('Specify password for proxy authentication.') + }) + .max(1024) + }) + }) + .optional(), + noProxy: Yup.string().optional().max(1024) + }); + const formik = useFormik({ initialValues: { enabled: proxyConfig.enabled || 'global', @@ -18,20 +60,17 @@ const ProxySettings = ({ proxyConfig, onUpdate }) => { }, noProxy: proxyConfig.noProxy || '' }, - validationSchema: Yup.object({ - enabled: Yup.string().oneOf(['global', 'enabled', 'disabled']), - protocol: Yup.string().oneOf(['http', 'https', 'socks5']), - hostname: Yup.string().max(1024), - port: Yup.number().min(0).max(65535), - auth: Yup.object({ - enabled: Yup.boolean(), - username: Yup.string().max(1024), - password: Yup.string().max(1024) - }), - noProxy: Yup.string().max(1024) - }), + validationSchema: proxySchema, onSubmit: (values) => { - onUpdate(values); + proxySchema + .validate(values, { abortEarly: true }) + .then((validatedProxy) => { + onUpdate(validatedProxy); + }) + .catch((error) => { + let errMsg = error.message || 'Preferences validation error'; + toast.error(errMsg); + }); } }); @@ -55,15 +94,15 @@ const ProxySettings = ({ proxyConfig, onUpdate }) => {

Proxy Settings

+ +