mirror of https://github.com/CIRCL/lookyloo
new: optionally allow website to violate your privacy (more)
parent
cf14afa626
commit
680735b3d3
|
@ -667,6 +667,7 @@ class Lookyloo():
|
||||||
color_scheme=query.get('color_scheme', None),
|
color_scheme=query.get('color_scheme', None),
|
||||||
rendered_hostname_only=query.get('rendered_hostname_only', True),
|
rendered_hostname_only=query.get('rendered_hostname_only', True),
|
||||||
with_favicon=query.get('with_favicon', True),
|
with_favicon=query.get('with_favicon', True),
|
||||||
|
allow_tracking=query.get('allow_tracking', True),
|
||||||
# force=query.get('force', False),
|
# force=query.get('force', False),
|
||||||
# recapture_interval=query.get('recapture_interval', 300),
|
# recapture_interval=query.get('recapture_interval', 300),
|
||||||
priority=priority
|
priority=priority
|
||||||
|
|
|
@ -926,13 +926,13 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fsspec"
|
name = "fsspec"
|
||||||
version = "2024.3.0"
|
version = "2024.3.1"
|
||||||
description = "File-system specification"
|
description = "File-system specification"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "fsspec-2024.3.0-py3-none-any.whl", hash = "sha256:779001bd0122c9c4975cf03827d5e86c3afb914a3ae27040f15d341ab506a693"},
|
{file = "fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512"},
|
||||||
{file = "fsspec-2024.3.0.tar.gz", hash = "sha256:f13a130c0ed07e15c4e1aeb0472a823e9c426b0b5792a1f40d902b0a71972d43"},
|
{file = "fsspec-2024.3.1.tar.gz", hash = "sha256:f39780e282d7d117ffb42bb96992f8a90795e4d0fb0f661a70ca39fe9c43ded9"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
|
@ -1237,13 +1237,13 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "importlib-resources"
|
name = "importlib-resources"
|
||||||
version = "6.3.1"
|
version = "6.3.2"
|
||||||
description = "Read resources from Python packages"
|
description = "Read resources from Python packages"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "importlib_resources-6.3.1-py3-none-any.whl", hash = "sha256:4811639ca7fa830abdb8e9ca0a104dc6ad13de691d9fe0d3173a71304f068159"},
|
{file = "importlib_resources-6.3.2-py3-none-any.whl", hash = "sha256:f41f4098b16cd140a97d256137cfd943d958219007990b2afb00439fc623f580"},
|
||||||
{file = "importlib_resources-6.3.1.tar.gz", hash = "sha256:29a3d16556e330c3c8fb8202118c5ff41241cc34cbfb25989bbad226d99b7995"},
|
{file = "importlib_resources-6.3.2.tar.gz", hash = "sha256:963eb79649252b0160c1afcfe5a1d3fe3ad66edd0a8b114beacffb70c0674223"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
@ -1463,20 +1463,20 @@ referencing = ">=0.31.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lacuscore"
|
name = "lacuscore"
|
||||||
version = "1.8.9"
|
version = "1.8.10"
|
||||||
description = "Core of Lacus, usable as a module"
|
description = "Core of Lacus, usable as a module"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8,<4.0"
|
python-versions = "<4.0,>=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "lacuscore-1.8.9-py3-none-any.whl", hash = "sha256:8088a3ad164d8b6707889a8ee5ff8fded82a3ec193720f434a72cb98d998aba8"},
|
{file = "lacuscore-1.8.10-py3-none-any.whl", hash = "sha256:95a62f127565bdc3c61ff893c930fe7ed8b34604e95b023e82fa10f3233ac49d"},
|
||||||
{file = "lacuscore-1.8.9.tar.gz", hash = "sha256:26c9a392caf57091bf0a9c866f8b617d3f65190592b9c8fe912206922cd8e530"},
|
{file = "lacuscore-1.8.10.tar.gz", hash = "sha256:5408333a851fd01d06f05bf28854a1f530b96a513c2040b6c70f39f6a80e3059"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
async-timeout = {version = ">=4.0.3,<5.0.0", markers = "python_version < \"3.11\""}
|
async-timeout = {version = ">=4.0.3,<5.0.0", markers = "python_version < \"3.11\""}
|
||||||
defang = ">=0.5.3,<0.6.0"
|
defang = ">=0.5.3,<0.6.0"
|
||||||
dnspython = ">=2.6.1,<3.0.0"
|
dnspython = ">=2.6.1,<3.0.0"
|
||||||
playwrightcapture = {version = ">=1.23.10,<2.0.0", extras = ["recaptcha"]}
|
playwrightcapture = {version = ">=1.23.11,<2.0.0", extras = ["recaptcha"]}
|
||||||
redis = {version = ">=5.0.3,<6.0.0", extras = ["hiredis"]}
|
redis = {version = ">=5.0.3,<6.0.0", extras = ["hiredis"]}
|
||||||
requests = ">=2.31.0,<3.0.0"
|
requests = ">=2.31.0,<3.0.0"
|
||||||
ua-parser = ">=0.18.0,<0.19.0"
|
ua-parser = ">=0.18.0,<0.19.0"
|
||||||
|
@ -2286,13 +2286,13 @@ test = ["pytest"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "playwrightcapture"
|
name = "playwrightcapture"
|
||||||
version = "1.23.10"
|
version = "1.23.11"
|
||||||
description = "A simple library to capture websites using playwright"
|
description = "A simple library to capture websites using playwright"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8,<4.0"
|
python-versions = "<4.0,>=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "playwrightcapture-1.23.10-py3-none-any.whl", hash = "sha256:14f02be5266b0be76b64e3ef484b05d8eec05d6d46ca8e2d1aed9f4067baa959"},
|
{file = "playwrightcapture-1.23.11-py3-none-any.whl", hash = "sha256:5bcf79460d86671fe38152bc6e456fe33d7b7b9ed473b73ad560faed9888660e"},
|
||||||
{file = "playwrightcapture-1.23.10.tar.gz", hash = "sha256:8c30130e96fafdf5db20987b255b7fec2fcf9b11dd66fd253958496fa8718a35"},
|
{file = "playwrightcapture-1.23.11.tar.gz", hash = "sha256:959bc7b7fbb912b0fe12c9c3cd0a32b206188559defa60bc8140ac11fdf6cdb5"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
@ -2304,7 +2304,7 @@ puremagic = ">=1.21,<2.0"
|
||||||
pydub = {version = ">=0.25.1,<0.26.0", optional = true, markers = "extra == \"recaptcha\""}
|
pydub = {version = ">=0.25.1,<0.26.0", optional = true, markers = "extra == \"recaptcha\""}
|
||||||
pytz = {version = ">=2024.1,<2025.0", markers = "python_version < \"3.9\""}
|
pytz = {version = ">=2024.1,<2025.0", markers = "python_version < \"3.9\""}
|
||||||
requests = {version = ">=2.31.0,<3.0.0", extras = ["socks"], optional = true, markers = "extra == \"recaptcha\""}
|
requests = {version = ">=2.31.0,<3.0.0", extras = ["socks"], optional = true, markers = "extra == \"recaptcha\""}
|
||||||
setuptools = ">=69.1.1,<70.0.0"
|
setuptools = ">=69.2.0,<70.0.0"
|
||||||
SpeechRecognition = {version = ">=3.10.1,<4.0.0", optional = true, markers = "extra == \"recaptcha\""}
|
SpeechRecognition = {version = ">=3.10.1,<4.0.0", optional = true, markers = "extra == \"recaptcha\""}
|
||||||
tzdata = ">=2024.1,<2025.0"
|
tzdata = ">=2024.1,<2025.0"
|
||||||
w3lib = ">=2.1.2,<3.0.0"
|
w3lib = ">=2.1.2,<3.0.0"
|
||||||
|
@ -2520,13 +2520,13 @@ docs = ["Sphinx (>=5.3.0,<6.0.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pylacus"
|
name = "pylacus"
|
||||||
version = "1.8.1"
|
version = "1.8.2"
|
||||||
description = "Python CLI and module for lacus"
|
description = "Python CLI and module for lacus"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8,<4.0"
|
python-versions = "<4.0,>=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "pylacus-1.8.1-py3-none-any.whl", hash = "sha256:15e85357c7f0af0cf25ced4fd8690d8f6dac64a02da87a4d22a6059dc8291a06"},
|
{file = "pylacus-1.8.2-py3-none-any.whl", hash = "sha256:7451dd6892e252d4caf00406cb828c2e7290226d9ca345516ab9c3e36610fe06"},
|
||||||
{file = "pylacus-1.8.1.tar.gz", hash = "sha256:e10929608fad539196413e87f0b2b16c6beb5e04f0a1051cd0cb3feb255682fc"},
|
{file = "pylacus-1.8.2.tar.gz", hash = "sha256:fc96020cc833e665484441de3c65e84e68f40bd8c75485d4dc671806e7da7974"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
@ -2602,13 +2602,13 @@ virustotal = ["validators (>=0.22.0,<0.23.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pypandora"
|
name = "pypandora"
|
||||||
version = "1.8.0"
|
version = "1.8.1"
|
||||||
description = "Python CLI and module for pandora"
|
description = "Python CLI and module for pandora"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8,<4.0"
|
python-versions = ">=3.8,<4.0"
|
||||||
files = [
|
files = [
|
||||||
{file = "pypandora-1.8.0-py3-none-any.whl", hash = "sha256:42956eab2f789efcaba3631a436e2325295d9dcbca1c4e5ff32dd3607f640781"},
|
{file = "pypandora-1.8.1-py3-none-any.whl", hash = "sha256:79f703726070672071d0d5bc40751f3daff7959cbb4497324969d06375f46aa7"},
|
||||||
{file = "pypandora-1.8.0.tar.gz", hash = "sha256:e8d110588b9a1cec00b362140b10a60a5d152406f1e4ac7eb89c9f0d42826d84"},
|
{file = "pypandora-1.8.1.tar.gz", hash = "sha256:8ffa3822fc521823c76828fd220fed569c02e164ebd66b751fd8657da6316618"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
@ -3077,19 +3077,19 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "s3fs"
|
name = "s3fs"
|
||||||
version = "2024.3.0"
|
version = "2024.3.1"
|
||||||
description = "Convenient Filesystem interface over S3"
|
description = "Convenient Filesystem interface over S3"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">= 3.8"
|
python-versions = ">= 3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "s3fs-2024.3.0-py3-none-any.whl", hash = "sha256:def23c00eb89e3a49bbe7211eb617204c99959cadf9a796faa512bafa861c115"},
|
{file = "s3fs-2024.3.1-py3-none-any.whl", hash = "sha256:f4566a5446c473740d272ec08e0b4aae8db1aa05f662c42ff0aa2c89bb5060ea"},
|
||||||
{file = "s3fs-2024.3.0.tar.gz", hash = "sha256:a663235c8adb7e6bbc45a75292c9395b0fbd580bb394adc4ced9e8ad4bd864da"},
|
{file = "s3fs-2024.3.1.tar.gz", hash = "sha256:1b8bc8dbd65e7b60f5487378f6eeffe1de59aa72caa9efca6dad6ab877405487"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
aiobotocore = ">=2.5.4,<3.0.0"
|
aiobotocore = ">=2.5.4,<3.0.0"
|
||||||
aiohttp = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1"
|
aiohttp = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1"
|
||||||
fsspec = "2024.3.0"
|
fsspec = "2024.3.1"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
awscli = ["aiobotocore[awscli] (>=2.5.4,<3.0.0)"]
|
awscli = ["aiobotocore[awscli] (>=2.5.4,<3.0.0)"]
|
||||||
|
@ -3172,13 +3172,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tldextract"
|
name = "tldextract"
|
||||||
version = "5.1.1"
|
version = "5.1.2"
|
||||||
description = "Accurately separates a URL's subdomain, domain, and public suffix, using the Public Suffix List (PSL). By default, this includes the public ICANN TLDs and their exceptions. You can optionally support the Public Suffix List's private domains as well."
|
description = "Accurately separates a URL's subdomain, domain, and public suffix, using the Public Suffix List (PSL). By default, this includes the public ICANN TLDs and their exceptions. You can optionally support the Public Suffix List's private domains as well."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "tldextract-5.1.1-py3-none-any.whl", hash = "sha256:b9c4510a8766d377033b6bace7e9f1f17a891383ced3c5d50c150f181e9e1cc2"},
|
{file = "tldextract-5.1.2-py3-none-any.whl", hash = "sha256:4dfc4c277b6b97fa053899fcdb892d2dc27295851ab5fac4e07797b6a21b2e46"},
|
||||||
{file = "tldextract-5.1.1.tar.gz", hash = "sha256:9b6dbf803cb5636397f0203d48541c0da8ba53babaf0e8a6feda2d88746813d4"},
|
{file = "tldextract-5.1.2.tar.gz", hash = "sha256:c9e17f756f05afb5abac04fe8f766e7e70f9fe387adb1859f0f52408ee060200"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
@ -3188,7 +3188,8 @@ requests = ">=2.1.0"
|
||||||
requests-file = ">=1.4"
|
requests-file = ">=1.4"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
testing = ["black", "mypy", "pytest", "pytest-gitignore", "pytest-mock", "responses", "ruff", "tox", "types-filelock", "types-requests"]
|
release = ["build", "twine"]
|
||||||
|
testing = ["black", "mypy", "pytest", "pytest-gitignore", "pytest-mock", "responses", "ruff", "syrupy", "tox", "types-filelock", "types-requests"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tomli"
|
name = "tomli"
|
||||||
|
@ -3735,4 +3736,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = ">=3.8.1,<3.13"
|
python-versions = ">=3.8.1,<3.13"
|
||||||
content-hash = "c6d8bf2b0b4bf1d6bb93eb235ecf658e42166942983eb3b1369c32e65269823d"
|
content-hash = "04f4fb6039a06bfcdd9fa386612dc5f7f47033f03335ee8541a46cdbc77f9a31"
|
||||||
|
|
|
@ -66,9 +66,9 @@ har2tree = "^1.23.3"
|
||||||
passivetotal = "^2.5.9"
|
passivetotal = "^2.5.9"
|
||||||
werkzeug = "^3.0.1"
|
werkzeug = "^3.0.1"
|
||||||
filetype = "^1.2.0"
|
filetype = "^1.2.0"
|
||||||
pypandora = "^1.8.0"
|
pypandora = "^1.8.1"
|
||||||
lacuscore = "^1.8.9"
|
lacuscore = "^1.8.10"
|
||||||
pylacus = "^1.8.1"
|
pylacus = "^1.8.2"
|
||||||
pyipasnhistory = "^2.1.2"
|
pyipasnhistory = "^2.1.2"
|
||||||
publicsuffixlist = "^0.10.0.20240205"
|
publicsuffixlist = "^0.10.0.20240205"
|
||||||
pyfaup = "^1.2"
|
pyfaup = "^1.2"
|
||||||
|
@ -76,7 +76,7 @@ chardet = "^5.2.0"
|
||||||
pysecuritytxt = "^1.3.0"
|
pysecuritytxt = "^1.3.0"
|
||||||
pylookyloomonitoring = "^1.1.3"
|
pylookyloomonitoring = "^1.1.3"
|
||||||
pytz = {"version" = "^2024.1", python = "<3.9"}
|
pytz = {"version" = "^2024.1", python = "<3.9"}
|
||||||
s3fs = "^2024.3.0"
|
s3fs = "^2024.3.1"
|
||||||
urllib3 = [
|
urllib3 = [
|
||||||
{version = "<2", python = "<3.10"},
|
{version = "<2", python = "<3.10"},
|
||||||
{version = "^2.0.7", python = ">=3.10"}
|
{version = "^2.0.7", python = ">=3.10"}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import argparse
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from lookyloo import Lookyloo
|
from lookyloo import Lookyloo
|
||||||
from lookyloo.helpers import get_homedir
|
from lookyloo.default import get_homedir
|
||||||
|
|
||||||
removed_captures_dir = get_homedir() / 'removed_captures'
|
removed_captures_dir = get_homedir() / 'removed_captures'
|
||||||
|
|
||||||
|
|
|
@ -1530,6 +1530,7 @@ def capture_web() -> str | Response | WerkzeugResponse:
|
||||||
capture_query['browser'] = request.form['browser']
|
capture_query['browser'] = request.form['browser']
|
||||||
|
|
||||||
capture_query['listing'] = True if request.form.get('listing') else False
|
capture_query['listing'] = True if request.form.get('listing') else False
|
||||||
|
capture_query['allow_tracking'] = True if request.form.get('allow_tracking') else False
|
||||||
|
|
||||||
if request.form.get('referer'):
|
if request.form.get('referer'):
|
||||||
capture_query['referer'] = request.form['referer']
|
capture_query['referer'] = request.form['referer']
|
||||||
|
|
|
@ -385,6 +385,7 @@ submit_fields_post = api.model('SubmitFieldsPost', {
|
||||||
'document': fields.String(description="A base64 encoded document, it can be anything a browser can display.", example=''),
|
'document': fields.String(description="A base64 encoded document, it can be anything a browser can display.", example=''),
|
||||||
'document_name': fields.String(description="The name of the document.", example=''),
|
'document_name': fields.String(description="The name of the document.", example=''),
|
||||||
'listing': fields.Integer(description="Display the capture on the index", min=0, max=1, example=1),
|
'listing': fields.Integer(description="Display the capture on the index", min=0, max=1, example=1),
|
||||||
|
'allow_tracking': fields.Integer(description="Attempt to let the website violate your privacy", min=0, max=1, example=0),
|
||||||
'user_agent': fields.String(description="User agent to use for the capture", example=''),
|
'user_agent': fields.String(description="User agent to use for the capture", example=''),
|
||||||
'browser_name': fields.String(description="Use this browser. Must be chromium, firefox or webkit.", example=''),
|
'browser_name': fields.String(description="Use this browser. Must be chromium, firefox or webkit.", example=''),
|
||||||
'device_name': fields.String(description="Use the pre-configured settings for this device. Get a list from /json/devices.", example=''),
|
'device_name': fields.String(description="Use the pre-configured settings for this device. Get a list from /json/devices.", example=''),
|
||||||
|
@ -401,6 +402,7 @@ class SubmitCapture(Resource): # type: ignore[misc]
|
||||||
|
|
||||||
@api.param('url', 'The URL to capture', required=True) # type: ignore[misc]
|
@api.param('url', 'The URL to capture', required=True) # type: ignore[misc]
|
||||||
@api.param('listing', 'Display the capture on the index', default=1) # type: ignore[misc]
|
@api.param('listing', 'Display the capture on the index', default=1) # type: ignore[misc]
|
||||||
|
@api.param('allow_tracking', 'Attempt to let the website violate your privacy', default=1) # type: ignore[misc]
|
||||||
@api.param('user_agent', 'User agent to use for the capture') # type: ignore[misc]
|
@api.param('user_agent', 'User agent to use for the capture') # type: ignore[misc]
|
||||||
@api.param('browser_name', 'Use this browser. Must be chromium, firefox or webkit.') # type: ignore[misc]
|
@api.param('browser_name', 'Use this browser. Must be chromium, firefox or webkit.') # type: ignore[misc]
|
||||||
@api.param('device_name', 'Use the pre-configured settings for this device') # type: ignore[misc]
|
@api.param('device_name', 'Use the pre-configured settings for this device') # type: ignore[misc]
|
||||||
|
@ -418,7 +420,9 @@ class SubmitCapture(Resource): # type: ignore[misc]
|
||||||
|
|
||||||
to_query: CaptureSettings = {
|
to_query: CaptureSettings = {
|
||||||
'url': request.args['url'],
|
'url': request.args['url'],
|
||||||
'listing': False if 'listing' in request.args and request.args['listing'] in [0, '0'] else True}
|
'listing': False if 'listing' in request.args and request.args['listing'] in [0, '0'] else True,
|
||||||
|
'allow_tracking': False if 'allow_tracking' in request.args and request.args['allow_tracking'] in [0, '0'] else True
|
||||||
|
}
|
||||||
if request.args.get('user_agent'):
|
if request.args.get('user_agent'):
|
||||||
to_query['user_agent'] = request.args['user_agent']
|
to_query['user_agent'] = request.args['user_agent']
|
||||||
if request.args.get('browser_name'):
|
if request.args.get('browser_name'):
|
||||||
|
|
|
@ -223,6 +223,16 @@
|
||||||
|
|
||||||
<div id="collapseConfigCapture" class="collapse">
|
<div id="collapseConfigCapture" class="collapse">
|
||||||
<div class="card card-body">
|
<div class="card card-body">
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="allow_tracking" class="col-sm-2 col-form-check-label">Allow tracking:</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" name="allow_tracking" aria-describedby="allow_tracking_help"></input>
|
||||||
|
<div id="allow_tracking_help" class="form-text">We'll attempt to click on the button allowing the website captured to violate your privacy.</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- Referer -->
|
<!-- Referer -->
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
|
|
Loading…
Reference in New Issue