From c4d68df3d08879a2ceede51f98e4fc582ee5ee1c Mon Sep 17 00:00:00 2001 From: z0ccc Date: Wed, 9 Nov 2022 10:23:51 -0500 Subject: [PATCH] Removed geolocation permission --- promo/logo-300.png | Bin 0 -> 18700 bytes promo/logo-64.png | Bin 0 -> 3754 bytes promo/opera-promo.png | Bin 0 -> 16692 bytes src/Popup/Components/FooterLink.tsx | 27 +++- .../AutofillPage/handleAutofillAddress.ts | 17 -- src/Popup/Pages/AutofillPage/index.tsx | 147 ------------------ src/Popup/Pages/ConnectionPage/index.tsx | 55 ------- src/Popup/Pages/LocationPage/index.tsx | 91 +++++++---- src/Popup/Pages/OtherOptionsPage/index.tsx | 24 --- src/Popup/Pages/SettingsPage/InfoItem.tsx | 17 ++ src/Popup/Pages/SettingsPage/index.tsx | 84 ++++++---- src/Popup/Pages/UserAgentPage/index.tsx | 18 ++- src/Popup/Pages/WebRtcPage/RadioButton.tsx | 35 ----- src/Popup/Pages/WebRtcPage/getWebRTCData.ts | 73 --------- .../Pages/WebRtcPage/handleWebRtcPolicy.ts | 17 -- src/Popup/Pages/WebRtcPage/index.tsx | 67 -------- src/Popup/Popup.tsx | 94 +---------- src/assets/global.css | 4 +- src/manifest.json | 2 +- src/theme.ts | 6 - src/utils/attachDebugger.ts | 10 -- 21 files changed, 170 insertions(+), 618 deletions(-) create mode 100644 promo/logo-300.png create mode 100644 promo/logo-64.png create mode 100644 promo/opera-promo.png delete mode 100644 src/Popup/Pages/AutofillPage/handleAutofillAddress.ts delete mode 100644 src/Popup/Pages/AutofillPage/index.tsx delete mode 100644 src/Popup/Pages/ConnectionPage/index.tsx delete mode 100644 src/Popup/Pages/OtherOptionsPage/index.tsx create mode 100644 src/Popup/Pages/SettingsPage/InfoItem.tsx delete mode 100644 src/Popup/Pages/WebRtcPage/RadioButton.tsx delete mode 100644 src/Popup/Pages/WebRtcPage/getWebRTCData.ts delete mode 100644 src/Popup/Pages/WebRtcPage/handleWebRtcPolicy.ts delete mode 100644 src/Popup/Pages/WebRtcPage/index.tsx diff --git a/promo/logo-300.png b/promo/logo-300.png new file mode 100644 index 0000000000000000000000000000000000000000..475e1ea2c43b26d82bc85ef24d355b9ee716f7fb GIT binary patch literal 18700 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 literal 0 HcmV?d00001 diff --git a/promo/logo-64.png b/promo/logo-64.png new file mode 100644 index 0000000000000000000000000000000000000000..6856ec293c3784f44d4e54662543ef0f7f451285 GIT binary patch literal 3754 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�l{bc422f6+XKbc9S3YbGbnK|D-nsmAcDYs?{cq)v^Pk+7nc12Q(m$68eGBVV` zoA#rrcvKP(8-#ld%e>zPhm+FSVzt#}lxIxr81b{Y=K%j$>5LPd2=TA$cbB}Bt;?rl z+>vV6mhM8Ak@y}M-vv=TUV2%g6U6gQxBip#+Br#VKN6Oa9y+7=p!^#Zw4!h&(|F$A2Ih<7z){a_huBJufVEkJ!u zYl(E|%g{tMhMbF_5-Ca$6o4E!(2HIq0fg*8av4orlv1A8;>jcH_fIkPE+-QI2f=WO UT|tn`bN~PV07*qoM6N<$g0`+vr~m)} literal 0 HcmV?d00001 diff --git a/promo/opera-promo.png b/promo/opera-promo.png new file mode 100644 index 0000000000000000000000000000000000000000..0f5b79270204ee2e157b63318392ec4eaa7a7d00 GIT binary patch literal 16692 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 LBvCD967v55;Vb@N literal 0 HcmV?d00001 diff --git a/src/Popup/Components/FooterLink.tsx b/src/Popup/Components/FooterLink.tsx index e9c15d3..c18409a 100644 --- a/src/Popup/Components/FooterLink.tsx +++ b/src/Popup/Components/FooterLink.tsx @@ -1,14 +1,24 @@ -import { Link } from 'theme-ui' +import { Box, Link } from 'theme-ui' const FooterLink = () => { return ( - - Vytal does not change your IP address. To change your IP you will need to - use a VPN such as{' '} + + Vytal does not change your IP address. To change your IP you will need a + VPN such as{' '} + { > ProtonVPN - + . + ) } diff --git a/src/Popup/Pages/AutofillPage/handleAutofillAddress.ts b/src/Popup/Pages/AutofillPage/handleAutofillAddress.ts deleted file mode 100644 index e28a755..0000000 --- a/src/Popup/Pages/AutofillPage/handleAutofillAddress.ts +++ /dev/null @@ -1,17 +0,0 @@ -const handleAutofillAddress = (value: boolean) => { - console.log(!value) - chrome.privacy.services.autofillAddressEnabled.clear({}, () => { - chrome.privacy.services.autofillAddressEnabled.set( - { - value: !value, - }, - () => { - chrome.storage.local.set({ - autofillAddress: value, - }) - } - ) - }) -} - -export default handleAutofillAddress diff --git a/src/Popup/Pages/AutofillPage/index.tsx b/src/Popup/Pages/AutofillPage/index.tsx deleted file mode 100644 index 7fc9377..0000000 --- a/src/Popup/Pages/AutofillPage/index.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import { Text } from 'theme-ui' -import { useState, useEffect, ChangeEvent } from 'react' -import Page from '../../Components/Page' -import CheckBox from '../../Components/CheckBox' -// import { autofillData } from '../../../types' -import Table from '../../Components/Table' -import TableRow from '../../Components/TableRow' -import { Button } from 'theme-ui' -import addresses from '../../../utils/addresses' -import FooterLink from '../../Components/FooterLink' -import handleAutofillAddress from './handleAutofillAddress' - -interface AutofillPageProps { - tab: string - autofillData?: any - // reverseGeocoding: any -} - -const AutofillPage = ({ tab, autofillData }: AutofillPageProps) => { - const [autofillAddress, setAutofillAddress] = useState(false) - const [country, setCountry] = useState('') - const [city, setCity] = useState('') - const [region, setRegion] = useState('') - const [postCode, setPostCode] = useState('') - const [address, setAddress] = useState('') - const [phone, setPhone] = useState('9057814565') - // const [configuration, setConfiguration] = useState('default') - - useEffect(() => { - chrome.storage.local.get(['autofillAddress'], (storage) => { - storage.autofillAddress && setAutofillAddress(storage.autofillAddress) - }) - }, []) - - useEffect(() => { - // chrome.storage.local.get(['configuration', 'autofillData'], (storage) => { - // storage.configuration && setConfiguration(storage.configuration) - // if (storage.autofillData) { - // setIP(storage.autofillData) - // } else { - // Promise.resolve(getIP()).then((autofillData) => setIP(autofillData)) - // } - // }) - if (autofillData?.country) { - setCountry(autofillData.country) - // chrome.storage.local.set({ - // country: autofillData.country, - // }) - } - if (autofillData?.locality) { - setCity(autofillData.locality) - // chrome.storage.local.set({ - // city: autofillData.city, - // }) - } - if (autofillData?.administrative_area_level_1) { - setRegion(autofillData.administrative_area_level_1) - // chrome.storage.local.set({ - // region: autofillData.regionName, - // }) - } - if (autofillData?.postal_code) { - setPostCode(autofillData.postal_code) - // chrome.storage.local.set({ - // postCode: autofillData.zip, - // }) - } - if (autofillData?.street_number && autofillData?.route) { - setAddress(`${autofillData.street_number} ${autofillData.route}`) - // chrome.storage.local.set({ - // postCode: autofillData.zip, - // }) - } - // autofillData?.city && setCity(autofillData.city) - // autofillData?.regionName && setRegion(autofillData.regionName) - // autofillData?.zip && setPostCode() - // chrome.storage.local.set({ - // country: autofillData.country, - // city: autofillData.city, - // regionName: autofillData.regionName, - // zip: autofillData.zip, - // }) - }, [autofillData, setCity, setPostCode, setRegion]) - - // useEffect(() => { - // if (!postCode && reverseGeocoding?.postcode) { - // setPostCode(reverseGeocoding?.postcode) - // chrome.storage.local.set({ - // postCode: reverseGeocoding?.postcode, - // }) - // } - // if (reverseGeocoding?.house_number && reverseGeocoding?.road) { - // setAddress(`${reverseGeocoding.house_number} ${reverseGeocoding.road}`) - // chrome.storage.local.set({ - // address: `${reverseGeocoding.house_number} ${reverseGeocoding.road}`, - // }) - // } else if (reverseGeocoding?.road) { - // setAddress(reverseGeocoding.road) - // chrome.storage.local.set({ - // address: reverseGeocoding.road, - // }) - // } - // }, [postCode, reverseGeocoding, setAddress]) - - // const changeUserAgent = () => { - // // if (userAgentType !== 'custom') { - // // setUserAgentType('custom') - // // chrome.storage.local.set({ - // // userAgentType: 'custom', - // // }) - // // } - // } - - const changeCheckBoxValue = (e: ChangeEvent) => { - console.log(e.target.checked) - handleAutofillAddress(e.target.checked) - setAutofillAddress(e.target.checked) - } - - return ( - - - {/* */} - - - - - - - -
- -
- ) -} - -export default AutofillPage diff --git a/src/Popup/Pages/ConnectionPage/index.tsx b/src/Popup/Pages/ConnectionPage/index.tsx deleted file mode 100644 index 3317ee2..0000000 --- a/src/Popup/Pages/ConnectionPage/index.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { ipData } from '../../../types' -import FooterLink from '../../Components/FooterLink' -import Page from '../../Components/Page' -import Table from '../../Components/Table' -import TableRow from '../../Components/TableRow' - -interface ConnectionPageProps { - tab: string - ipData?: ipData -} - -const ConnectionPage = ({ tab, ipData }: ConnectionPageProps) => { - // let options: any - - // function success(pos: any) { - // var crd = pos.coords - // console.log('Your connection position is:') - // console.log(`Latitude : ${crd.latitude}`) - // console.log(`Longitude: ${crd.longitude}`) - // console.log(`More or less ${crd.accuracy} meters.`) - // } - - // function error(err: any) { - // console.error(`ERROR(${err.code}): ${err.message}`) - // } - // options = { - // enableHighAccuracy: false, - // timeout: 5000, - // maximumAge: 0, - // } - - // navigator.geolocation.watchPosition(success, error) - - return ( - - - - - - - - - - - -
-
- ) -} - -export default ConnectionPage diff --git a/src/Popup/Pages/LocationPage/index.tsx b/src/Popup/Pages/LocationPage/index.tsx index b06a72d..2b6203f 100644 --- a/src/Popup/Pages/LocationPage/index.tsx +++ b/src/Popup/Pages/LocationPage/index.tsx @@ -1,22 +1,21 @@ import { useState, useEffect, ChangeEvent } from 'react' -import { Flex, Label, Radio, Select } from 'theme-ui' +import { Box, Flex, Label, Radio, Select } from 'theme-ui' import Page from '../../Components/Page' import DebouncedInput from '../../Components/DebouncedInput' import detachDebugger from '../../../utils/detachDebugger' import countryLocales from '../../../utils/countryLocales' -import { ipData } from '../../../types' import configurations from '../../../utils/configurations' import FooterLink from '../../Components/FooterLink' -import Table from '../../Components/Table' -import TableRow from '../../Components/TableRow' +import { ipData } from '../../../types' +import getIp from '../../../utils/getIp' +import { RotateCw } from 'react-feather' interface LocationPageProps { tab: string - ipData?: ipData - geolocation?: GeolocationCoordinates } -const LocationPage = ({ tab, ipData, geolocation }: LocationPageProps) => { +const LocationPage = ({ tab }: LocationPageProps) => { + const [ipData, setIpData] = useState() const [locationType, setLocationType] = useState('') const [timezone, setTimezone] = useState('') const [locale, setLocale] = useState('') @@ -24,20 +23,16 @@ const LocationPage = ({ tab, ipData, geolocation }: LocationPageProps) => { const [lon, setLongitude] = useState('') const [configuration, setConfiguration] = useState('custom') - // console.log(geolocation) + useEffect(() => { + getIp().then((ipDataRes) => { + setIpData(ipDataRes) + }) + }, []) useEffect(() => { chrome.storage.local.get( ['locationType', 'configuration', 'timezone', 'locale', 'lat', 'lon'], (storage) => { - if (!storage.locationType || storage.locationType === 'default') { - setTimezone(Intl.DateTimeFormat().resolvedOptions().timeZone) - setLocale(Intl.DateTimeFormat().resolvedOptions().locale) - if (geolocation) { - setLatitude(`${geolocation.latitude}`) - setLongitude(`${geolocation.longitude}`) - } - } if (storage.locationType === 'matchIp' && ipData) { setTimezone(ipData.timezone) setLocale(countryLocales[ipData.countryCode].locale) @@ -61,7 +56,7 @@ const LocationPage = ({ tab, ipData, geolocation }: LocationPageProps) => { : setLocationType('default') } ) - }, [geolocation, ipData]) + }, [ipData]) const changeType = (e: ChangeEvent) => { detachDebugger() @@ -69,12 +64,10 @@ const LocationPage = ({ tab, ipData, geolocation }: LocationPageProps) => { chrome.storage.local.set({ locationType: e.target.value }) if (e.target.value === 'default') { - setTimezone(Intl.DateTimeFormat().resolvedOptions().timeZone) - setLocale(Intl.DateTimeFormat().resolvedOptions().locale) - if (geolocation) { - setLatitude(`${geolocation.latitude}`) - setLongitude(`${geolocation.longitude}`) - } + setTimezone('') + setLocale('') + setLatitude('') + setLongitude('') chrome.storage.local.set({ timezone: '', locale: '', @@ -94,7 +87,7 @@ const LocationPage = ({ tab, ipData, geolocation }: LocationPageProps) => { lon: ipData.lon, }) } - } else if (e.target.value === 'custom') + } else if (e.target.value === 'custom') { if (configuration !== 'custom') { setTimezone(configurations[configuration].timezone) setLocale(configurations[configuration].locale) @@ -107,6 +100,7 @@ const LocationPage = ({ tab, ipData, geolocation }: LocationPageProps) => { lon: configurations[configuration].lon, }) } + } } const changeConfiguration = (e: ChangeEvent) => { @@ -185,17 +179,46 @@ const LocationPage = ({ tab, ipData, geolocation }: LocationPageProps) => { {locationType === 'matchIp' && ( - - + + IP Address + + + {ipData + ? `${getFlagEmoji(ipData.countryCode)} ${ipData?.query}` + : 'loading...'} + + { + setIpData(undefined) + getIp().then((ipDataRes) => { + setIpData(ipDataRes) + }) + }} /> -
+ )} {locationType === 'custom' && ( <> diff --git a/src/Popup/Pages/OtherOptionsPage/index.tsx b/src/Popup/Pages/OtherOptionsPage/index.tsx deleted file mode 100644 index 4578b50..0000000 --- a/src/Popup/Pages/OtherOptionsPage/index.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import CheckBox from '../../Components/CheckBox' -import Page from '../../Components/Page' - -interface OtherOptionsPageProps { - tab: string -} - -const OtherOptionsPage = ({ tab }: OtherOptionsPageProps) => { - return ( - - - - - - - - - - - - ) -} - -export default OtherOptionsPage diff --git a/src/Popup/Pages/SettingsPage/InfoItem.tsx b/src/Popup/Pages/SettingsPage/InfoItem.tsx new file mode 100644 index 0000000..731fed7 --- /dev/null +++ b/src/Popup/Pages/SettingsPage/InfoItem.tsx @@ -0,0 +1,17 @@ +import { Box, Flex } from 'theme-ui' + +interface InfoItemProps { + title: string + children: React.ReactNode +} + +const SettingsPage = ({ title, children }: InfoItemProps) => { + return ( + + {title} + {children} + + ) +} + +export default SettingsPage diff --git a/src/Popup/Pages/SettingsPage/index.tsx b/src/Popup/Pages/SettingsPage/index.tsx index 8fae8ad..7864ce4 100644 --- a/src/Popup/Pages/SettingsPage/index.tsx +++ b/src/Popup/Pages/SettingsPage/index.tsx @@ -1,6 +1,6 @@ -import { Label, Select } from 'theme-ui' +import { Link, Text } from 'theme-ui' import Page from '../../Components/Page' -import CheckBox from '../../Components/CheckBox' +import InfoItem from './InfoItem' interface SystemPageProps { tab: string @@ -8,30 +8,62 @@ interface SystemPageProps { const SettingsPage = ({ tab }: SystemPageProps) => { return ( - - - - - + + + While spoofing data a notification bar becomes visible. Hiding the bar + can be done by using the{' '} + + --silent-debugger-extension-api + {' '} + flag.{' '} + + Instructions on how to run chrome with flags + + . + + + Vytal does not change your IP address. To change your IP you will need a + VPN such as{' '} + + NordVPN + {' '} + or{' '} + + ProtonVPN + + . + + + Vytal utilizes the debugger API to spoof data which is completely + undetectable. Other similar extensions rely on{' '} + + inferior script tag injections + + . + + + You can test and compare Vytal and other spoofing extensions on{' '} + + vytal.io + + . + ) } diff --git a/src/Popup/Pages/UserAgentPage/index.tsx b/src/Popup/Pages/UserAgentPage/index.tsx index b0948bb..b01a36c 100644 --- a/src/Popup/Pages/UserAgentPage/index.tsx +++ b/src/Popup/Pages/UserAgentPage/index.tsx @@ -14,8 +14,8 @@ const UserAgentPage = ({ tab }: UserAgentPageProps) => { const [userAgentType, setUserAgentType] = useState('default') const [operatingSystem, setOperatingSystem] = useState('Windows') const [browser, setBrowser] = useState('Chrome') - const [userAgent, setUserAgent] = useState(navigator.userAgent) - const [platform, setPlatform] = useState(navigator.platform) + const [userAgent, setUserAgent] = useState('') + const [platform, setPlatform] = useState('') useEffect(() => { chrome.storage.local.get( @@ -36,8 +36,8 @@ const UserAgentPage = ({ tab }: UserAgentPageProps) => { chrome.storage.local.set({ userAgentType: e.target.value }) if (e.target.value === 'default') { - setUserAgent(navigator.userAgent) - setPlatform(navigator.platform) + setUserAgent('') + setPlatform('') chrome.storage.local.set({ userAgent: '', platform: '', @@ -55,14 +55,18 @@ const UserAgentPage = ({ tab }: UserAgentPageProps) => { const changeOperatingSystem = async (e: ChangeEvent) => { detachDebugger() setOperatingSystem(e.target.value) - setUserAgent(userAgents[e.target.value]['userAgents'][browser]) + let browserValue = browser + if (!userAgents[e.target.value]['userAgents'][browser]) { + browserValue = Object.keys(userAgents[e.target.value]['userAgents'])[0] + setBrowser(browserValue) + } + setUserAgent(userAgents[e.target.value]['userAgents'][browserValue]) setPlatform(userAgents[e.target.value]['platform']) chrome.storage.local.set({ - userAgent: userAgents[e.target.value]['userAgents'][browser], + userAgent: userAgents[e.target.value]['userAgents'][browserValue], platform: userAgents[e.target.value]['platform'], operatingSystem: e.target.value, }) - // await attachCurrentTab() } const changeBrowser = (e: ChangeEvent) => { diff --git a/src/Popup/Pages/WebRtcPage/RadioButton.tsx b/src/Popup/Pages/WebRtcPage/RadioButton.tsx deleted file mode 100644 index a51227e..0000000 --- a/src/Popup/Pages/WebRtcPage/RadioButton.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { ChangeEvent } from 'react' -import { Box, Label, Radio, Text } from 'theme-ui' - -interface RadioButtonProps { - value: string - name: string - description: string - webRtcPolicy: string - onChange: (e: ChangeEvent) => void -} - -const RadioButton = ({ - value, - name, - description, - webRtcPolicy, - onChange, -}: RadioButtonProps) => { - return ( - <> - - {description} - - ) -} - -export default RadioButton diff --git a/src/Popup/Pages/WebRtcPage/getWebRTCData.ts b/src/Popup/Pages/WebRtcPage/getWebRTCData.ts deleted file mode 100644 index 99f513e..0000000 --- a/src/Popup/Pages/WebRtcPage/getWebRTCData.ts +++ /dev/null @@ -1,73 +0,0 @@ -const getWebRTC = (setWebRtcIp: any) => { - // if (navigator.getUserMedia) { - const ipRegex = - /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/ - - // compatibility for firefox and chrome - let RTCPeerConnection = window.RTCPeerConnection - - // minimal requirements for data connection - const mediaConstraints = { - optional: [{ RtpDataChannels: true }], - } - - const servers = { iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] } - - // construct a new RTCPeerConnection - const pc = new RTCPeerConnection(servers, mediaConstraints) - - let ips: any = [] - - // listen for candidate events - pc.onicecandidate = (ice) => { - // skip non-candidate events - if (ice.candidate) { - const ip = ipRegex.exec(ice.candidate.candidate) - if (ip !== null && ip.length > 1) { - ips.push(ip[1]) - } - } - } - - // create a bogus data channel - pc.createDataChannel('') - - // create an offer sdp - pc.createOffer( - (result) => { - // trigger the stun server request - pc.setLocalDescription( - result, - () => {}, - () => {} - ) - }, - () => {} - ) - - const waitForElement = async () => { - if (pc.localDescription) { - const lines = pc.localDescription.sdp.split('\n') - lines.forEach((line) => { - if (line.indexOf('a=candidate:') === 0) { - const ip = ipRegex.exec(line) - if (ip !== null && ip.length > 1) { - ips.push(ip[1]) - } - } - }) - ips = [...new Set(ips)] - console.log(ips) - setWebRtcIp(await Promise.all(ips)) - } else { - setTimeout(waitForElement, 1000) - } - } - - waitForElement() - // } else { - // setWebRTCData([]) - // } -} - -export default getWebRTC diff --git a/src/Popup/Pages/WebRtcPage/handleWebRtcPolicy.ts b/src/Popup/Pages/WebRtcPage/handleWebRtcPolicy.ts deleted file mode 100644 index dcceea5..0000000 --- a/src/Popup/Pages/WebRtcPage/handleWebRtcPolicy.ts +++ /dev/null @@ -1,17 +0,0 @@ -const handleWebRtcPolicy = (value: string) => { - console.log(value) - chrome.privacy.network.webRTCIPHandlingPolicy.clear({}, () => { - chrome.privacy.network.webRTCIPHandlingPolicy.set( - { - value, - }, - () => { - chrome.storage.local.set({ - webRtcPolicy: value, - }) - } - ) - }) -} - -export default handleWebRtcPolicy diff --git a/src/Popup/Pages/WebRtcPage/index.tsx b/src/Popup/Pages/WebRtcPage/index.tsx deleted file mode 100644 index 4099162..0000000 --- a/src/Popup/Pages/WebRtcPage/index.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { useState, useEffect, ChangeEvent } from 'react' -import Page from '../../Components/Page' -import handleWebRtcPolicy from './handleWebRtcPolicy' -import RadioButton from './RadioButton' -import FooterLink from '../../Components/FooterLink' - -interface SystemPageProps { - tab: string -} - -const WebRtcPage = ({ tab }: SystemPageProps) => { - const [webRtcPolicy, setWebRtcPolicy] = useState('default') - - useEffect(() => { - chrome.storage.local.get(['webRtcPolicy'], (storage) => { - storage.webRtcPolicy && setWebRtcPolicy(storage.webRtcPolicy) - }) - }, []) - - const changeRadioValue = (e: ChangeEvent) => { - handleWebRtcPolicy(e.target.value) - setWebRtcPolicy(e.target.value) - } - - return ( - - - - - - - ) -} - -export default WebRtcPage diff --git a/src/Popup/Popup.tsx b/src/Popup/Popup.tsx index 327bf8b..03de210 100644 --- a/src/Popup/Popup.tsx +++ b/src/Popup/Popup.tsx @@ -1,64 +1,22 @@ -import { useState, useEffect } from 'react' +import { useState } from 'react' import { ThemeProvider, Flex, Box } from 'theme-ui' import { theme } from '../theme' -import { - Wifi, - MapPin, - FileText, - MessageSquare, - Globe, - Settings, -} from 'react-feather' +import { MapPin, Globe, Info } from 'react-feather' import TabItem from './TabItem' import LocationPage from './Pages/LocationPage' import UserAgentPage from './Pages/UserAgentPage' import SettingsPage from './Pages/SettingsPage' -import AutofillPage from './Pages/AutofillPage' -import WebRtcPage from './Pages/WebRtcPage' -import ConnectionPage from './Pages/ConnectionPage' -import { ipData } from '../types' -import getIp from '../utils/getIp' -// import getReverseGeocoding from '../utils/getReverseGeocoding' import '../assets/global.css' -import OtherOptionsPage from './Pages/OtherOptionsPage' -import addresses from '../utils/addresses' const Popup = () => { const [tab, setTab] = useState('location') - const [ipData, setIpData] = useState() - // const [reverseGeocoding, setReverseGeocoding] = useState(undefined) - const [geolocation, setGeolocation] = useState() - const [autofillData, setAutofillData] = useState() - - useEffect(() => { - getIp().then((ipDataRes) => { - setIpData(ipDataRes) - let geoIndex = (ipDataRes.lat + 90) * 180 + ipDataRes.lon - console.log(geoIndex) - let closest = addresses.reduce((prev: any, curr: any) => { - return Math.abs(curr.geoIndex - geoIndex) < - Math.abs(prev.geoIndex - geoIndex) - ? curr - : prev - }) - setAutofillData(closest) - }) - navigator.geolocation.getCurrentPosition( - (pos) => setGeolocation(pos.coords), - (err) => console.warn(`ERROR(${err.code}): ${err.message}`), - { - enableHighAccuracy: true, - timeout: 5000, - } - ) - }, []) return ( { flexDirection: 'column', }} > - {/* setTab('connection')} - /> */} setTab('location')} /> - {/* setTab('autofill')} - /> - setTab('webRtc')} - /> */} setTab('userAgent')} /> - {/* setTab('otherOptions')} - /> */} setTab('settings')} /> - {/* window.open('https://vytal.io')} - /> */} - - - - + - - {/* - Connection tab won't be fully spoofed until after 1st or 2nd reload. - */} diff --git a/src/assets/global.css b/src/assets/global.css index 49ba1bd..552f8e9 100644 --- a/src/assets/global.css +++ b/src/assets/global.css @@ -5,10 +5,10 @@ } body { - font-family: 'Nunito'; + font-family: 'Nunito', Arial, Helvetica, sans-serif; font-weight: 500; } input { - font-family: 'Nunito'; + font-family: 'Nunito', Arial, Helvetica, sans-serif; } diff --git a/src/manifest.json b/src/manifest.json index 35dbf9b..506a75c 100755 --- a/src/manifest.json +++ b/src/manifest.json @@ -3,7 +3,7 @@ "name": "Vytal - Spoof timezone, location & user agent", "version": "2.1.0", "description": "Spoof Timezone, Geolocation, Locale and User Agent.", - "permissions": ["storage", "debugger", "privacy", "geolocation"], + "permissions": ["storage", "debugger"], "background": { "service_worker": "background.bundle.js" }, "action": { "default_popup": "popup.html", diff --git a/src/theme.ts b/src/theme.ts index 8e230c2..46456c1 100644 --- a/src/theme.ts +++ b/src/theme.ts @@ -4,8 +4,6 @@ export const theme: Theme = { colors: { text: '#333333', background: '#FDFDFD', - // primary: '#B77EEE', - // primaryDark: '#a55eea', primary: '#a55eea', primaryDark: '#9454d2', red: '#fc5c65', @@ -73,10 +71,6 @@ export const theme: Theme = { links: { footer: { color: 'text', - mb: '8px', - fontSize: '11px', - position: 'fixed', - bottom: '0', textDecoration: 'none', }, hover: { diff --git a/src/utils/attachDebugger.ts b/src/utils/attachDebugger.ts index 81fe410..b4e6f28 100644 --- a/src/utils/attachDebugger.ts +++ b/src/utils/attachDebugger.ts @@ -14,7 +14,6 @@ const attachDebugger = (tabId: number) => { 'platform', ], (storage) => { - console.log(storage) if ( storage.timezone || storage.lat || @@ -24,15 +23,6 @@ const attachDebugger = (tabId: number) => { ) { chrome.debugger.attach({ tabId: tabId }, '1.3', () => { if (!chrome.runtime.lastError) { - // chrome.debugger.sendCommand( - // { tabId: tabId }, - // 'Target.autoAttachRelated', - // { targetId: tabId, waitForDebuggerOnStart: false }, - // (res) => { - // console.log(res) - // } - // ) - if (storage.timezone) { chrome.debugger.sendCommand( { tabId: tabId },