Updated script that can be controled by Nodejs web app
This commit is contained in:
509
lib/python3.13/site-packages/selenium/webdriver/common/devtools/v85/security.py
Executable file
509
lib/python3.13/site-packages/selenium/webdriver/common/devtools/v85/security.py
Executable file
@ -0,0 +1,509 @@
|
||||
# DO NOT EDIT THIS FILE!
|
||||
#
|
||||
# This file is generated from the CDP specification. If you need to make
|
||||
# changes, edit the generator and regenerate all of the modules.
|
||||
#
|
||||
# CDP domain: Security
|
||||
from __future__ import annotations
|
||||
from .util import event_class, T_JSON_DICT
|
||||
from dataclasses import dataclass
|
||||
import enum
|
||||
import typing
|
||||
from . import network
|
||||
|
||||
|
||||
class CertificateId(int):
|
||||
'''
|
||||
An internal certificate ID value.
|
||||
'''
|
||||
def to_json(self) -> int:
|
||||
return self
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json: int) -> CertificateId:
|
||||
return cls(json)
|
||||
|
||||
def __repr__(self):
|
||||
return 'CertificateId({})'.format(super().__repr__())
|
||||
|
||||
|
||||
class MixedContentType(enum.Enum):
|
||||
'''
|
||||
A description of mixed content (HTTP resources on HTTPS pages), as defined by
|
||||
https://www.w3.org/TR/mixed-content/#categories
|
||||
'''
|
||||
BLOCKABLE = "blockable"
|
||||
OPTIONALLY_BLOCKABLE = "optionally-blockable"
|
||||
NONE = "none"
|
||||
|
||||
def to_json(self):
|
||||
return self.value
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
return cls(json)
|
||||
|
||||
|
||||
class SecurityState(enum.Enum):
|
||||
'''
|
||||
The security level of a page or resource.
|
||||
'''
|
||||
UNKNOWN = "unknown"
|
||||
NEUTRAL = "neutral"
|
||||
INSECURE = "insecure"
|
||||
SECURE = "secure"
|
||||
INFO = "info"
|
||||
INSECURE_BROKEN = "insecure-broken"
|
||||
|
||||
def to_json(self):
|
||||
return self.value
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
return cls(json)
|
||||
|
||||
|
||||
@dataclass
|
||||
class CertificateSecurityState:
|
||||
'''
|
||||
Details about the security state of the page certificate.
|
||||
'''
|
||||
#: Protocol name (e.g. "TLS 1.2" or "QUIC").
|
||||
protocol: str
|
||||
|
||||
#: Key Exchange used by the connection, or the empty string if not applicable.
|
||||
key_exchange: str
|
||||
|
||||
#: Cipher name.
|
||||
cipher: str
|
||||
|
||||
#: Page certificate.
|
||||
certificate: typing.List[str]
|
||||
|
||||
#: Certificate subject name.
|
||||
subject_name: str
|
||||
|
||||
#: Name of the issuing CA.
|
||||
issuer: str
|
||||
|
||||
#: Certificate valid from date.
|
||||
valid_from: network.TimeSinceEpoch
|
||||
|
||||
#: Certificate valid to (expiration) date
|
||||
valid_to: network.TimeSinceEpoch
|
||||
|
||||
#: True if the certificate uses a weak signature aglorithm.
|
||||
certificate_has_weak_signature: bool
|
||||
|
||||
#: True if the certificate has a SHA1 signature in the chain.
|
||||
certificate_has_sha1_signature: bool
|
||||
|
||||
#: True if modern SSL
|
||||
modern_ssl: bool
|
||||
|
||||
#: True if the connection is using an obsolete SSL protocol.
|
||||
obsolete_ssl_protocol: bool
|
||||
|
||||
#: True if the connection is using an obsolete SSL key exchange.
|
||||
obsolete_ssl_key_exchange: bool
|
||||
|
||||
#: True if the connection is using an obsolete SSL cipher.
|
||||
obsolete_ssl_cipher: bool
|
||||
|
||||
#: True if the connection is using an obsolete SSL signature.
|
||||
obsolete_ssl_signature: bool
|
||||
|
||||
#: (EC)DH group used by the connection, if applicable.
|
||||
key_exchange_group: typing.Optional[str] = None
|
||||
|
||||
#: TLS MAC. Note that AEAD ciphers do not have separate MACs.
|
||||
mac: typing.Optional[str] = None
|
||||
|
||||
#: The highest priority network error code, if the certificate has an error.
|
||||
certificate_network_error: typing.Optional[str] = None
|
||||
|
||||
def to_json(self):
|
||||
json = dict()
|
||||
json['protocol'] = self.protocol
|
||||
json['keyExchange'] = self.key_exchange
|
||||
json['cipher'] = self.cipher
|
||||
json['certificate'] = [i for i in self.certificate]
|
||||
json['subjectName'] = self.subject_name
|
||||
json['issuer'] = self.issuer
|
||||
json['validFrom'] = self.valid_from.to_json()
|
||||
json['validTo'] = self.valid_to.to_json()
|
||||
json['certificateHasWeakSignature'] = self.certificate_has_weak_signature
|
||||
json['certificateHasSha1Signature'] = self.certificate_has_sha1_signature
|
||||
json['modernSSL'] = self.modern_ssl
|
||||
json['obsoleteSslProtocol'] = self.obsolete_ssl_protocol
|
||||
json['obsoleteSslKeyExchange'] = self.obsolete_ssl_key_exchange
|
||||
json['obsoleteSslCipher'] = self.obsolete_ssl_cipher
|
||||
json['obsoleteSslSignature'] = self.obsolete_ssl_signature
|
||||
if self.key_exchange_group is not None:
|
||||
json['keyExchangeGroup'] = self.key_exchange_group
|
||||
if self.mac is not None:
|
||||
json['mac'] = self.mac
|
||||
if self.certificate_network_error is not None:
|
||||
json['certificateNetworkError'] = self.certificate_network_error
|
||||
return json
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
return cls(
|
||||
protocol=str(json['protocol']),
|
||||
key_exchange=str(json['keyExchange']),
|
||||
cipher=str(json['cipher']),
|
||||
certificate=[str(i) for i in json['certificate']],
|
||||
subject_name=str(json['subjectName']),
|
||||
issuer=str(json['issuer']),
|
||||
valid_from=network.TimeSinceEpoch.from_json(json['validFrom']),
|
||||
valid_to=network.TimeSinceEpoch.from_json(json['validTo']),
|
||||
certificate_has_weak_signature=bool(json['certificateHasWeakSignature']),
|
||||
certificate_has_sha1_signature=bool(json['certificateHasSha1Signature']),
|
||||
modern_ssl=bool(json['modernSSL']),
|
||||
obsolete_ssl_protocol=bool(json['obsoleteSslProtocol']),
|
||||
obsolete_ssl_key_exchange=bool(json['obsoleteSslKeyExchange']),
|
||||
obsolete_ssl_cipher=bool(json['obsoleteSslCipher']),
|
||||
obsolete_ssl_signature=bool(json['obsoleteSslSignature']),
|
||||
key_exchange_group=str(json['keyExchangeGroup']) if 'keyExchangeGroup' in json else None,
|
||||
mac=str(json['mac']) if 'mac' in json else None,
|
||||
certificate_network_error=str(json['certificateNetworkError']) if 'certificateNetworkError' in json else None,
|
||||
)
|
||||
|
||||
|
||||
class SafetyTipStatus(enum.Enum):
|
||||
BAD_REPUTATION = "badReputation"
|
||||
LOOKALIKE = "lookalike"
|
||||
|
||||
def to_json(self):
|
||||
return self.value
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
return cls(json)
|
||||
|
||||
|
||||
@dataclass
|
||||
class SafetyTipInfo:
|
||||
#: Describes whether the page triggers any safety tips or reputation warnings. Default is unknown.
|
||||
safety_tip_status: SafetyTipStatus
|
||||
|
||||
#: The URL the safety tip suggested ("Did you mean?"). Only filled in for lookalike matches.
|
||||
safe_url: typing.Optional[str] = None
|
||||
|
||||
def to_json(self):
|
||||
json = dict()
|
||||
json['safetyTipStatus'] = self.safety_tip_status.to_json()
|
||||
if self.safe_url is not None:
|
||||
json['safeUrl'] = self.safe_url
|
||||
return json
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
return cls(
|
||||
safety_tip_status=SafetyTipStatus.from_json(json['safetyTipStatus']),
|
||||
safe_url=str(json['safeUrl']) if 'safeUrl' in json else None,
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class VisibleSecurityState:
|
||||
'''
|
||||
Security state information about the page.
|
||||
'''
|
||||
#: The security level of the page.
|
||||
security_state: SecurityState
|
||||
|
||||
#: Array of security state issues ids.
|
||||
security_state_issue_ids: typing.List[str]
|
||||
|
||||
#: Security state details about the page certificate.
|
||||
certificate_security_state: typing.Optional[CertificateSecurityState] = None
|
||||
|
||||
#: The type of Safety Tip triggered on the page. Note that this field will be set even if the Safety Tip UI was not actually shown.
|
||||
safety_tip_info: typing.Optional[SafetyTipInfo] = None
|
||||
|
||||
def to_json(self):
|
||||
json = dict()
|
||||
json['securityState'] = self.security_state.to_json()
|
||||
json['securityStateIssueIds'] = [i for i in self.security_state_issue_ids]
|
||||
if self.certificate_security_state is not None:
|
||||
json['certificateSecurityState'] = self.certificate_security_state.to_json()
|
||||
if self.safety_tip_info is not None:
|
||||
json['safetyTipInfo'] = self.safety_tip_info.to_json()
|
||||
return json
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
return cls(
|
||||
security_state=SecurityState.from_json(json['securityState']),
|
||||
security_state_issue_ids=[str(i) for i in json['securityStateIssueIds']],
|
||||
certificate_security_state=CertificateSecurityState.from_json(json['certificateSecurityState']) if 'certificateSecurityState' in json else None,
|
||||
safety_tip_info=SafetyTipInfo.from_json(json['safetyTipInfo']) if 'safetyTipInfo' in json else None,
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class SecurityStateExplanation:
|
||||
'''
|
||||
An explanation of an factor contributing to the security state.
|
||||
'''
|
||||
#: Security state representing the severity of the factor being explained.
|
||||
security_state: SecurityState
|
||||
|
||||
#: Title describing the type of factor.
|
||||
title: str
|
||||
|
||||
#: Short phrase describing the type of factor.
|
||||
summary: str
|
||||
|
||||
#: Full text explanation of the factor.
|
||||
description: str
|
||||
|
||||
#: The type of mixed content described by the explanation.
|
||||
mixed_content_type: MixedContentType
|
||||
|
||||
#: Page certificate.
|
||||
certificate: typing.List[str]
|
||||
|
||||
#: Recommendations to fix any issues.
|
||||
recommendations: typing.Optional[typing.List[str]] = None
|
||||
|
||||
def to_json(self):
|
||||
json = dict()
|
||||
json['securityState'] = self.security_state.to_json()
|
||||
json['title'] = self.title
|
||||
json['summary'] = self.summary
|
||||
json['description'] = self.description
|
||||
json['mixedContentType'] = self.mixed_content_type.to_json()
|
||||
json['certificate'] = [i for i in self.certificate]
|
||||
if self.recommendations is not None:
|
||||
json['recommendations'] = [i for i in self.recommendations]
|
||||
return json
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
return cls(
|
||||
security_state=SecurityState.from_json(json['securityState']),
|
||||
title=str(json['title']),
|
||||
summary=str(json['summary']),
|
||||
description=str(json['description']),
|
||||
mixed_content_type=MixedContentType.from_json(json['mixedContentType']),
|
||||
certificate=[str(i) for i in json['certificate']],
|
||||
recommendations=[str(i) for i in json['recommendations']] if 'recommendations' in json else None,
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class InsecureContentStatus:
|
||||
'''
|
||||
Information about insecure content on the page.
|
||||
'''
|
||||
#: Always false.
|
||||
ran_mixed_content: bool
|
||||
|
||||
#: Always false.
|
||||
displayed_mixed_content: bool
|
||||
|
||||
#: Always false.
|
||||
contained_mixed_form: bool
|
||||
|
||||
#: Always false.
|
||||
ran_content_with_cert_errors: bool
|
||||
|
||||
#: Always false.
|
||||
displayed_content_with_cert_errors: bool
|
||||
|
||||
#: Always set to unknown.
|
||||
ran_insecure_content_style: SecurityState
|
||||
|
||||
#: Always set to unknown.
|
||||
displayed_insecure_content_style: SecurityState
|
||||
|
||||
def to_json(self):
|
||||
json = dict()
|
||||
json['ranMixedContent'] = self.ran_mixed_content
|
||||
json['displayedMixedContent'] = self.displayed_mixed_content
|
||||
json['containedMixedForm'] = self.contained_mixed_form
|
||||
json['ranContentWithCertErrors'] = self.ran_content_with_cert_errors
|
||||
json['displayedContentWithCertErrors'] = self.displayed_content_with_cert_errors
|
||||
json['ranInsecureContentStyle'] = self.ran_insecure_content_style.to_json()
|
||||
json['displayedInsecureContentStyle'] = self.displayed_insecure_content_style.to_json()
|
||||
return json
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
return cls(
|
||||
ran_mixed_content=bool(json['ranMixedContent']),
|
||||
displayed_mixed_content=bool(json['displayedMixedContent']),
|
||||
contained_mixed_form=bool(json['containedMixedForm']),
|
||||
ran_content_with_cert_errors=bool(json['ranContentWithCertErrors']),
|
||||
displayed_content_with_cert_errors=bool(json['displayedContentWithCertErrors']),
|
||||
ran_insecure_content_style=SecurityState.from_json(json['ranInsecureContentStyle']),
|
||||
displayed_insecure_content_style=SecurityState.from_json(json['displayedInsecureContentStyle']),
|
||||
)
|
||||
|
||||
|
||||
class CertificateErrorAction(enum.Enum):
|
||||
'''
|
||||
The action to take when a certificate error occurs. continue will continue processing the
|
||||
request and cancel will cancel the request.
|
||||
'''
|
||||
CONTINUE = "continue"
|
||||
CANCEL = "cancel"
|
||||
|
||||
def to_json(self):
|
||||
return self.value
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
return cls(json)
|
||||
|
||||
|
||||
def disable() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
||||
'''
|
||||
Disables tracking security state changes.
|
||||
'''
|
||||
cmd_dict: T_JSON_DICT = {
|
||||
'method': 'Security.disable',
|
||||
}
|
||||
json = yield cmd_dict
|
||||
|
||||
|
||||
def enable() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
||||
'''
|
||||
Enables tracking security state changes.
|
||||
'''
|
||||
cmd_dict: T_JSON_DICT = {
|
||||
'method': 'Security.enable',
|
||||
}
|
||||
json = yield cmd_dict
|
||||
|
||||
|
||||
def set_ignore_certificate_errors(
|
||||
ignore: bool
|
||||
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
||||
'''
|
||||
Enable/disable whether all certificate errors should be ignored.
|
||||
|
||||
**EXPERIMENTAL**
|
||||
|
||||
:param ignore: If true, all certificate errors will be ignored.
|
||||
'''
|
||||
params: T_JSON_DICT = dict()
|
||||
params['ignore'] = ignore
|
||||
cmd_dict: T_JSON_DICT = {
|
||||
'method': 'Security.setIgnoreCertificateErrors',
|
||||
'params': params,
|
||||
}
|
||||
json = yield cmd_dict
|
||||
|
||||
|
||||
def handle_certificate_error(
|
||||
event_id: int,
|
||||
action: CertificateErrorAction
|
||||
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
||||
'''
|
||||
Handles a certificate error that fired a certificateError event.
|
||||
|
||||
:param event_id: The ID of the event.
|
||||
:param action: The action to take on the certificate error.
|
||||
'''
|
||||
params: T_JSON_DICT = dict()
|
||||
params['eventId'] = event_id
|
||||
params['action'] = action.to_json()
|
||||
cmd_dict: T_JSON_DICT = {
|
||||
'method': 'Security.handleCertificateError',
|
||||
'params': params,
|
||||
}
|
||||
json = yield cmd_dict
|
||||
|
||||
|
||||
def set_override_certificate_errors(
|
||||
override: bool
|
||||
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
||||
'''
|
||||
Enable/disable overriding certificate errors. If enabled, all certificate error events need to
|
||||
be handled by the DevTools client and should be answered with ``handleCertificateError`` commands.
|
||||
|
||||
:param override: If true, certificate errors will be overridden.
|
||||
'''
|
||||
params: T_JSON_DICT = dict()
|
||||
params['override'] = override
|
||||
cmd_dict: T_JSON_DICT = {
|
||||
'method': 'Security.setOverrideCertificateErrors',
|
||||
'params': params,
|
||||
}
|
||||
json = yield cmd_dict
|
||||
|
||||
|
||||
@event_class('Security.certificateError')
|
||||
@dataclass
|
||||
class CertificateError:
|
||||
'''
|
||||
There is a certificate error. If overriding certificate errors is enabled, then it should be
|
||||
handled with the ``handleCertificateError`` command. Note: this event does not fire if the
|
||||
certificate error has been allowed internally. Only one client per target should override
|
||||
certificate errors at the same time.
|
||||
'''
|
||||
#: The ID of the event.
|
||||
event_id: int
|
||||
#: The type of the error.
|
||||
error_type: str
|
||||
#: The url that was requested.
|
||||
request_url: str
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json: T_JSON_DICT) -> CertificateError:
|
||||
return cls(
|
||||
event_id=int(json['eventId']),
|
||||
error_type=str(json['errorType']),
|
||||
request_url=str(json['requestURL'])
|
||||
)
|
||||
|
||||
|
||||
@event_class('Security.visibleSecurityStateChanged')
|
||||
@dataclass
|
||||
class VisibleSecurityStateChanged:
|
||||
'''
|
||||
**EXPERIMENTAL**
|
||||
|
||||
The security state of the page changed.
|
||||
'''
|
||||
#: Security state information about the page.
|
||||
visible_security_state: VisibleSecurityState
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json: T_JSON_DICT) -> VisibleSecurityStateChanged:
|
||||
return cls(
|
||||
visible_security_state=VisibleSecurityState.from_json(json['visibleSecurityState'])
|
||||
)
|
||||
|
||||
|
||||
@event_class('Security.securityStateChanged')
|
||||
@dataclass
|
||||
class SecurityStateChanged:
|
||||
'''
|
||||
The security state of the page changed.
|
||||
'''
|
||||
#: Security state.
|
||||
security_state: SecurityState
|
||||
#: True if the page was loaded over cryptographic transport such as HTTPS.
|
||||
scheme_is_cryptographic: bool
|
||||
#: List of explanations for the security state. If the overall security state is ``insecure`` or
|
||||
#: ``warning``, at least one corresponding explanation should be included.
|
||||
explanations: typing.List[SecurityStateExplanation]
|
||||
#: Information about insecure content on the page.
|
||||
insecure_content_status: InsecureContentStatus
|
||||
#: Overrides user-visible description of the state.
|
||||
summary: typing.Optional[str]
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json: T_JSON_DICT) -> SecurityStateChanged:
|
||||
return cls(
|
||||
security_state=SecurityState.from_json(json['securityState']),
|
||||
scheme_is_cryptographic=bool(json['schemeIsCryptographic']),
|
||||
explanations=[SecurityStateExplanation.from_json(i) for i in json['explanations']],
|
||||
insecure_content_status=InsecureContentStatus.from_json(json['insecureContentStatus']),
|
||||
summary=str(json['summary']) if 'summary' in json else None
|
||||
)
|
Reference in New Issue
Block a user