noresponse 2.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/crystalline/enum.rbi +17 -0
- data/lib/crystalline/metadata_fields.rb +263 -0
- data/lib/crystalline/module.rb +186 -0
- data/lib/crystalline/types.rb +168 -0
- data/lib/crystalline/utils.rb +67 -0
- data/lib/crystalline.rb +11 -0
- data/lib/no_response/assessments.rb +1252 -0
- data/lib/no_response/auth.rb +263 -0
- data/lib/no_response/issued_credential.rb +21 -0
- data/lib/no_response/keys.rb +318 -0
- data/lib/no_response/late_results.rb +301 -0
- data/lib/no_response/models/callbacks.rb +10 -0
- data/lib/no_response/models/errors/apistatuserror.rb +41 -0
- data/lib/no_response/models/errors/apistatuserror.rbi +30 -0
- data/lib/no_response/models/errors/authenticationerror.rb +108 -0
- data/lib/no_response/models/errors/authenticationerror.rbi +56 -0
- data/lib/no_response/models/errors/badrequesterror.rb +108 -0
- data/lib/no_response/models/errors/badrequesterror.rbi +56 -0
- data/lib/no_response/models/errors/conflicterror.rb +108 -0
- data/lib/no_response/models/errors/conflicterror.rbi +56 -0
- data/lib/no_response/models/errors/notfounderror.rb +108 -0
- data/lib/no_response/models/errors/notfounderror.rbi +56 -0
- data/lib/no_response/models/errors/permissiondeniederror.rb +108 -0
- data/lib/no_response/models/errors/permissiondeniederror.rbi +56 -0
- data/lib/no_response/models/errors/ratelimiterror.rb +108 -0
- data/lib/no_response/models/errors/ratelimiterror.rbi +56 -0
- data/lib/no_response/models/errors.rb +16 -0
- data/lib/no_response/models/operations/createassessment_request.rb +36 -0
- data/lib/no_response/models/operations/createassessment_request.rbi +20 -0
- data/lib/no_response/models/operations/createassessment_response.rb +32 -0
- data/lib/no_response/models/operations/createassessment_response.rbi +20 -0
- data/lib/no_response/models/operations/getassessment_request.rb +41 -0
- data/lib/no_response/models/operations/getassessment_request.rbi +20 -0
- data/lib/no_response/models/operations/getassessment_response.rb +32 -0
- data/lib/no_response/models/operations/getassessment_response.rbi +20 -0
- data/lib/no_response/models/operations/queryaccountassessments_response.rb +44 -0
- data/lib/no_response/models/operations/queryaccountassessments_response.rbi +20 -0
- data/lib/no_response/models/operations/recordassessmentoutcome_request.rb +52 -0
- data/lib/no_response/models/operations/recordassessmentoutcome_request.rbi +26 -0
- data/lib/no_response/models/operations/recordassessmentoutcome_response.rb +32 -0
- data/lib/no_response/models/operations/recordassessmentoutcome_response.rbi +20 -0
- data/lib/no_response/models/operations/rotateapikey_response.rb +32 -0
- data/lib/no_response/models/operations/rotateapikey_response.rbi +20 -0
- data/lib/no_response/models/operations.rb +17 -0
- data/lib/no_response/models/shared/alternate_name.rb +23 -0
- data/lib/no_response/models/shared/alternate_name.rbi +9 -0
- data/lib/no_response/models/shared/alternate_name_union.rb +23 -0
- data/lib/no_response/models/shared/alternate_name_union.rbi +9 -0
- data/lib/no_response/models/shared/assessment.rb +235 -0
- data/lib/no_response/models/shared/assessment.rbi +116 -0
- data/lib/no_response/models/shared/assessmentlist.rb +78 -0
- data/lib/no_response/models/shared/assessmentlist.rbi +38 -0
- data/lib/no_response/models/shared/assessmentoutcome.rb +61 -0
- data/lib/no_response/models/shared/assessmentoutcome.rbi +32 -0
- data/lib/no_response/models/shared/assessmentoutcomerequest.rb +71 -0
- data/lib/no_response/models/shared/assessmentoutcomerequest.rbi +32 -0
- data/lib/no_response/models/shared/assessmentquery.rb +70 -0
- data/lib/no_response/models/shared/assessmentquery.rbi +32 -0
- data/lib/no_response/models/shared/assessmentrequest.rb +125 -0
- data/lib/no_response/models/shared/assessmentrequest.rbi +62 -0
- data/lib/no_response/models/shared/assessmentrequestclientcontext.rb +125 -0
- data/lib/no_response/models/shared/assessmentrequestclientcontext.rbi +62 -0
- data/lib/no_response/models/shared/assessmentrequestidentifiers.rb +74 -0
- data/lib/no_response/models/shared/assessmentrequestidentifiers.rbi +38 -0
- data/lib/no_response/models/shared/assessmentrequestissuedcredential.rb +33 -0
- data/lib/no_response/models/shared/assessmentrequestissuedcredential.rbi +14 -0
- data/lib/no_response/models/shared/assessmentrequestpolicycontext.rb +46 -0
- data/lib/no_response/models/shared/assessmentrequestpolicycontext.rbi +20 -0
- data/lib/no_response/models/shared/assessmenttiming.rb +41 -0
- data/lib/no_response/models/shared/assessmenttiming.rbi +20 -0
- data/lib/no_response/models/shared/assurancelevel.rb +18 -0
- data/lib/no_response/models/shared/assurancelevel.rbi +9 -0
- data/lib/no_response/models/shared/authcontext.rb +285 -0
- data/lib/no_response/models/shared/authcontext.rbi +152 -0
- data/lib/no_response/models/shared/authcontextmfa.rb +55 -0
- data/lib/no_response/models/shared/authcontextmfa.rbi +26 -0
- data/lib/no_response/models/shared/authenticationerrorcode.rb +18 -0
- data/lib/no_response/models/shared/authenticationerrorcode.rbi +9 -0
- data/lib/no_response/models/shared/badrequesterrorcode.rb +20 -0
- data/lib/no_response/models/shared/badrequesterrorcode.rbi +9 -0
- data/lib/no_response/models/shared/band.rb +21 -0
- data/lib/no_response/models/shared/band.rbi +9 -0
- data/lib/no_response/models/shared/breach.rb +108 -0
- data/lib/no_response/models/shared/breach.rbi +56 -0
- data/lib/no_response/models/shared/breachexposed.rb +28 -0
- data/lib/no_response/models/shared/breachexposed.rbi +9 -0
- data/lib/no_response/models/shared/breachkind.rb +24 -0
- data/lib/no_response/models/shared/breachkind.rbi +9 -0
- data/lib/no_response/models/shared/breachselector.rb +20 -0
- data/lib/no_response/models/shared/breachselector.rbi +9 -0
- data/lib/no_response/models/shared/breachsummary.rb +109 -0
- data/lib/no_response/models/shared/breachsummary.rbi +56 -0
- data/lib/no_response/models/shared/confidence.rb +21 -0
- data/lib/no_response/models/shared/confidence.rbi +9 -0
- data/lib/no_response/models/shared/conflicterrorcode.rb +19 -0
- data/lib/no_response/models/shared/conflicterrorcode.rbi +9 -0
- data/lib/no_response/models/shared/consistency.rb +85 -0
- data/lib/no_response/models/shared/consistency.rbi +32 -0
- data/lib/no_response/models/shared/consistencyvalue.rb +21 -0
- data/lib/no_response/models/shared/consistencyvalue.rbi +9 -0
- data/lib/no_response/models/shared/country.rb +20 -0
- data/lib/no_response/models/shared/country.rbi +9 -0
- data/lib/no_response/models/shared/email.rb +23 -0
- data/lib/no_response/models/shared/email.rbi +9 -0
- data/lib/no_response/models/shared/email_union.rb +23 -0
- data/lib/no_response/models/shared/email_union.rbi +9 -0
- data/lib/no_response/models/shared/failurereason.rb +24 -0
- data/lib/no_response/models/shared/failurereason.rbi +9 -0
- data/lib/no_response/models/shared/flow.rb +18 -0
- data/lib/no_response/models/shared/flow.rbi +9 -0
- data/lib/no_response/models/shared/freshness.rb +20 -0
- data/lib/no_response/models/shared/freshness.rbi +9 -0
- data/lib/no_response/models/shared/hookpoint.rb +19 -0
- data/lib/no_response/models/shared/hookpoint.rbi +9 -0
- data/lib/no_response/models/shared/identifierkind.rb +21 -0
- data/lib/no_response/models/shared/identifierkind.rbi +9 -0
- data/lib/no_response/models/shared/incompletereason.rb +23 -0
- data/lib/no_response/models/shared/incompletereason.rbi +9 -0
- data/lib/no_response/models/shared/incompletesource.rb +53 -0
- data/lib/no_response/models/shared/incompletesource.rbi +20 -0
- data/lib/no_response/models/shared/ipsummary.rb +61 -0
- data/lib/no_response/models/shared/ipsummary.rbi +26 -0
- data/lib/no_response/models/shared/ipsummarytype.rb +24 -0
- data/lib/no_response/models/shared/ipsummarytype.rbi +9 -0
- data/lib/no_response/models/shared/keyrotation.rb +79 -0
- data/lib/no_response/models/shared/keyrotation.rbi +44 -0
- data/lib/no_response/models/shared/keyrotationrequest.rb +33 -0
- data/lib/no_response/models/shared/keyrotationrequest.rbi +14 -0
- data/lib/no_response/models/shared/lane.rb +21 -0
- data/lib/no_response/models/shared/lane.rbi +9 -0
- data/lib/no_response/models/shared/linetype.rb +22 -0
- data/lib/no_response/models/shared/linetype.rbi +9 -0
- data/lib/no_response/models/shared/location.rb +23 -0
- data/lib/no_response/models/shared/location.rbi +9 -0
- data/lib/no_response/models/shared/location_union.rb +23 -0
- data/lib/no_response/models/shared/location_union.rbi +9 -0
- data/lib/no_response/models/shared/name_candidate.rb +23 -0
- data/lib/no_response/models/shared/name_candidate.rbi +9 -0
- data/lib/no_response/models/shared/name_candidate_union.rb +23 -0
- data/lib/no_response/models/shared/name_candidate_union.rbi +9 -0
- data/lib/no_response/models/shared/notfounderrorcode.rb +18 -0
- data/lib/no_response/models/shared/notfounderrorcode.rbi +9 -0
- data/lib/no_response/models/shared/outcome.rb +23 -0
- data/lib/no_response/models/shared/outcome.rbi +9 -0
- data/lib/no_response/models/shared/permissiondeniederrorcode.rb +18 -0
- data/lib/no_response/models/shared/permissiondeniederrorcode.rbi +9 -0
- data/lib/no_response/models/shared/phoneenrichment.rb +32 -0
- data/lib/no_response/models/shared/phoneenrichment.rbi +14 -0
- data/lib/no_response/models/shared/phoneenrichmentfields.rb +451 -0
- data/lib/no_response/models/shared/phoneenrichmentfields.rbi +212 -0
- data/lib/no_response/models/shared/platform.rb +18 -0
- data/lib/no_response/models/shared/platform.rbi +9 -0
- data/lib/no_response/models/shared/probleminvalidparam.rb +48 -0
- data/lib/no_response/models/shared/probleminvalidparam.rbi +26 -0
- data/lib/no_response/models/shared/ratelimiterrorcode.rb +18 -0
- data/lib/no_response/models/shared/ratelimiterrorcode.rbi +9 -0
- data/lib/no_response/models/shared/reasoncode.rb +52 -0
- data/lib/no_response/models/shared/reasoncode.rbi +9 -0
- data/lib/no_response/models/shared/reasonidentifier.rb +23 -0
- data/lib/no_response/models/shared/reasonidentifier.rbi +9 -0
- data/lib/no_response/models/shared/recommendation.rb +20 -0
- data/lib/no_response/models/shared/recommendation.rbi +9 -0
- data/lib/no_response/models/shared/responsemode.rb +16 -0
- data/lib/no_response/models/shared/responsemode.rbi +9 -0
- data/lib/no_response/models/shared/risk.rb +171 -0
- data/lib/no_response/models/shared/risk.rbi +80 -0
- data/lib/no_response/models/shared/riskconfidence.rb +20 -0
- data/lib/no_response/models/shared/riskconfidence.rbi +9 -0
- data/lib/no_response/models/shared/riskcoverage.rb +49 -0
- data/lib/no_response/models/shared/riskcoverage.rbi +26 -0
- data/lib/no_response/models/shared/riskdetails.rb +55 -0
- data/lib/no_response/models/shared/riskdetails.rbi +26 -0
- data/lib/no_response/models/shared/riskdetailsbreachname.rb +40 -0
- data/lib/no_response/models/shared/riskdetailsbreachname.rbi +20 -0
- data/lib/no_response/models/shared/riskdetailsphonename.rb +40 -0
- data/lib/no_response/models/shared/riskdetailsphonename.rbi +20 -0
- data/lib/no_response/models/shared/riskreason.rb +67 -0
- data/lib/no_response/models/shared/riskreason.rbi +26 -0
- data/lib/no_response/models/shared/risksummary.rb +73 -0
- data/lib/no_response/models/shared/risksummary.rbi +38 -0
- data/lib/no_response/models/shared/risksummaryemail.rb +55 -0
- data/lib/no_response/models/shared/risksummaryemail.rbi +26 -0
- data/lib/no_response/models/shared/risksummaryphone.rb +69 -0
- data/lib/no_response/models/shared/risksummaryphone.rbi +32 -0
- data/lib/no_response/models/shared/risksummaryusername.rb +41 -0
- data/lib/no_response/models/shared/risksummaryusername.rbi +20 -0
- data/lib/no_response/models/shared/scope.rb +21 -0
- data/lib/no_response/models/shared/scope.rbi +9 -0
- data/lib/no_response/models/shared/security.rb +32 -0
- data/lib/no_response/models/shared/security.rbi +14 -0
- data/lib/no_response/models/shared/signal.rb +149 -0
- data/lib/no_response/models/shared/signal.rbi +68 -0
- data/lib/no_response/models/shared/signaloutcome.rb +22 -0
- data/lib/no_response/models/shared/signaloutcome.rbi +9 -0
- data/lib/no_response/models/shared/social_profile.rb +23 -0
- data/lib/no_response/models/shared/social_profile.rbi +9 -0
- data/lib/no_response/models/shared/social_profile_union.rb +23 -0
- data/lib/no_response/models/shared/social_profile_union.rbi +9 -0
- data/lib/no_response/models/shared/status.rb +20 -0
- data/lib/no_response/models/shared/status.rbi +9 -0
- data/lib/no_response/models/shared/timezone.rb +23 -0
- data/lib/no_response/models/shared/timezone.rbi +9 -0
- data/lib/no_response/models/shared/timezone_union.rb +23 -0
- data/lib/no_response/models/shared/timezone_union.rbi +9 -0
- data/lib/no_response/models/shared/transport.rb +17 -0
- data/lib/no_response/models/shared/transport.rbi +9 -0
- data/lib/no_response/models/shared/website.rb +23 -0
- data/lib/no_response/models/shared/website.rbi +9 -0
- data/lib/no_response/models/shared/website_union.rb +23 -0
- data/lib/no_response/models/shared/website_union.rbi +9 -0
- data/lib/no_response/models/shared.rb +92 -0
- data/lib/no_response/noresponseclient.rb +110 -0
- data/lib/no_response/sdk_hooks/hooks.rb +97 -0
- data/lib/no_response/sdk_hooks/idempotency_key_hook.rb +25 -0
- data/lib/no_response/sdk_hooks/registration.rb +43 -0
- data/lib/no_response/sdk_hooks/types.rb +178 -0
- data/lib/no_response/sdkconfiguration.rb +107 -0
- data/lib/no_response/sdkconfiguration.rbi +83 -0
- data/lib/no_response/utils/forms.rb +230 -0
- data/lib/no_response/utils/headers.rb +80 -0
- data/lib/no_response/utils/query_params.rb +165 -0
- data/lib/no_response/utils/request_bodies.rb +77 -0
- data/lib/no_response/utils/retries.rb +137 -0
- data/lib/no_response/utils/security.rb +156 -0
- data/lib/no_response/utils/url.rb +122 -0
- data/lib/no_response/utils/utils.rb +243 -0
- data/lib/no_response/wait.rb +66 -0
- data/lib/no_response/webhooks.rb +177 -0
- data/lib/noresponse.rb +25 -0
- metadata +501 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# Band - low 0-29, medium 30-59, high 60-84, critical 85-100.
|
|
8
|
+
class Band
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
LOW = new("low")
|
|
12
|
+
MEDIUM = new("medium")
|
|
13
|
+
HIGH = new("high")
|
|
14
|
+
CRITICAL = new("critical")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
open!
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# One breach table that matched, detailed view only. name is the catalogue's display name for the table's site, not the upstream provider. No member carries a record, value, password or hash.
|
|
8
|
+
class Breach
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
field :name, ::String, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("name"), required: true}}
|
|
13
|
+
# Who is in the table: site_breach, a site's own users; credential_list, a combolist or compilation; stealer_log, malware or botnet victims; scrape; hacking_forum, a criminal hacking, cracking or carding community; abuse_service, the customers of DDoS-for-hire, account generators, dump or card shops, darknet markets, stalkerware or breach-lookup services; darkweb_site, an onion site of unknown purpose.
|
|
14
|
+
field(
|
|
15
|
+
:kind,
|
|
16
|
+
Models::Shared::BreachKind,
|
|
17
|
+
{
|
|
18
|
+
'format_json': {
|
|
19
|
+
'letter_case': ::NoResponse::Utils.field_name("kind"),
|
|
20
|
+
required: true,
|
|
21
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::BreachKind, false)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
# The submitted identifier a breach table matched on: email or username. Phone and name are not breach selectors.
|
|
26
|
+
field(
|
|
27
|
+
:matched_on,
|
|
28
|
+
Models::Shared::BreachSelector,
|
|
29
|
+
{
|
|
30
|
+
'format_json': {
|
|
31
|
+
'letter_case': ::NoResponse::Utils.field_name("matched_on"),
|
|
32
|
+
required: true,
|
|
33
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::BreachSelector, false)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
# The breached site's domain, lower case. Absent when the table has none (a credential list, for example).
|
|
38
|
+
field(
|
|
39
|
+
:domain,
|
|
40
|
+
Crystalline::Nilable.new(::String),
|
|
41
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("domain")}}
|
|
42
|
+
)
|
|
43
|
+
# The table's category from its name, lower case (social, gaming, combolist, ...).
|
|
44
|
+
field(
|
|
45
|
+
:category,
|
|
46
|
+
Crystalline::Nilable.new(::String),
|
|
47
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("category")}}
|
|
48
|
+
)
|
|
49
|
+
# A breach table's date year.
|
|
50
|
+
field(
|
|
51
|
+
:year,
|
|
52
|
+
Crystalline::Nilable.new(::Integer),
|
|
53
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("year")}}
|
|
54
|
+
)
|
|
55
|
+
# Absent when only the year is known.
|
|
56
|
+
field(
|
|
57
|
+
:month,
|
|
58
|
+
Crystalline::Nilable.new(::Integer),
|
|
59
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("month")}}
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
field(
|
|
63
|
+
:exposed,
|
|
64
|
+
Crystalline::Nilable.new(Crystalline::Array.new(Models::Shared::BreachExposed)),
|
|
65
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("exposed")}}
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
sig {
|
|
69
|
+
params(
|
|
70
|
+
name: ::String,
|
|
71
|
+
kind: Models::Shared::BreachKind,
|
|
72
|
+
matched_on: Models::Shared::BreachSelector,
|
|
73
|
+
domain: T.nilable(::String),
|
|
74
|
+
category: T.nilable(::String),
|
|
75
|
+
year: T.nilable(::Integer),
|
|
76
|
+
month: T.nilable(::Integer),
|
|
77
|
+
exposed: T.nilable(T::Array[Models::Shared::BreachExposed])
|
|
78
|
+
)
|
|
79
|
+
.void
|
|
80
|
+
}
|
|
81
|
+
def initialize(name:, kind:, matched_on:, domain: nil, category: nil, year: nil, month: nil, exposed: nil)
|
|
82
|
+
@name = name
|
|
83
|
+
@kind = kind
|
|
84
|
+
@matched_on = matched_on
|
|
85
|
+
@domain = domain
|
|
86
|
+
@category = category
|
|
87
|
+
@year = year
|
|
88
|
+
@month = month
|
|
89
|
+
@exposed = exposed
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
93
|
+
def ==(other)
|
|
94
|
+
return false unless other.is_a?(self.class)
|
|
95
|
+
return false unless @name == other.name
|
|
96
|
+
return false unless @kind == other.kind
|
|
97
|
+
return false unless @matched_on == other.matched_on
|
|
98
|
+
return false unless @domain == other.domain
|
|
99
|
+
return false unless @category == other.category
|
|
100
|
+
return false unless @year == other.year
|
|
101
|
+
return false unless @month == other.month
|
|
102
|
+
return false unless @exposed == other.exposed
|
|
103
|
+
true
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::Breach
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::Breach
|
|
9
|
+
def name
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def name=(str_)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def kind
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def kind=(str_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def matched_on
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def matched_on=(str_)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def domain
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def domain=(str_)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def category
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def category=(str_)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def year
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def year=(str_)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def month
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def month=(str_)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def exposed
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def exposed=(str_)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# BreachExposed - The kind of data a breach table held beside the identifier. password means a plaintext password was present and password_hash means a hash, salt or token was present. The value itself is not stored or returned; the schema has no member for one.
|
|
8
|
+
class BreachExposed
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
EMAIL = new("email")
|
|
12
|
+
USERNAME = new("username")
|
|
13
|
+
NAME = new("name")
|
|
14
|
+
PASSWORD = new("password")
|
|
15
|
+
PASSWORD_HASH = new("password_hash")
|
|
16
|
+
PHONE = new("phone")
|
|
17
|
+
ADDRESS = new("address")
|
|
18
|
+
DOB = new("dob")
|
|
19
|
+
IP = new("ip")
|
|
20
|
+
PAYMENT = new("payment")
|
|
21
|
+
SECURITY_QA = new("security_qa")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
open!
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# BreachKind - Who is in the table: site_breach, a site's own users; credential_list, a combolist or compilation; stealer_log, malware or botnet victims; scrape; hacking_forum, a criminal hacking, cracking or carding community; abuse_service, the customers of DDoS-for-hire, account generators, dump or card shops, darknet markets, stalkerware or breach-lookup services; darkweb_site, an onion site of unknown purpose.
|
|
8
|
+
class BreachKind
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
SITE_BREACH = new("site_breach")
|
|
12
|
+
CREDENTIAL_LIST = new("credential_list")
|
|
13
|
+
STEALER_LOG = new("stealer_log")
|
|
14
|
+
SCRAPE = new("scrape")
|
|
15
|
+
HACKING_FORUM = new("hacking_forum")
|
|
16
|
+
ABUSE_SERVICE = new("abuse_service")
|
|
17
|
+
DARKWEB_SITE = new("darkweb_site")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
open!
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# BreachSelector - The submitted identifier a breach table matched on: email or username. Phone and name are not breach selectors.
|
|
8
|
+
class BreachSelector
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
EMAIL = new("email")
|
|
12
|
+
USERNAME = new("username")
|
|
13
|
+
IP = new("ip")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
open!
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# Breach facts for one selector. found is the one required member: false is a definite 'in no breach table'. Every other member is optional, and absent makes no claim. No member carries a breach value, password or hash, and unknown members are refused. truncated means the value matched more tables or records than the lookup keeps, so absence-based claims (a missing name match, for example) are withheld; a truncated result is always found.
|
|
8
|
+
class BreachSummary
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
field(
|
|
13
|
+
:found,
|
|
14
|
+
Crystalline::Boolean.new,
|
|
15
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("found"), required: true}}
|
|
16
|
+
)
|
|
17
|
+
# Distinct breach tables the value appears in.
|
|
18
|
+
field(
|
|
19
|
+
:breach_count,
|
|
20
|
+
Crystalline::Nilable.new(::Integer),
|
|
21
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("breach_count")}}
|
|
22
|
+
)
|
|
23
|
+
# Year of the oldest dated table.
|
|
24
|
+
field(
|
|
25
|
+
:first_year,
|
|
26
|
+
Crystalline::Nilable.new(::Integer),
|
|
27
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("first_year")}}
|
|
28
|
+
)
|
|
29
|
+
# Year of the newest dated table.
|
|
30
|
+
field(
|
|
31
|
+
:last_year,
|
|
32
|
+
Crystalline::Nilable.new(::Integer),
|
|
33
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("last_year")}}
|
|
34
|
+
)
|
|
35
|
+
# The union of data kinds the matching tables held, without the values.
|
|
36
|
+
field(
|
|
37
|
+
:exposed,
|
|
38
|
+
Crystalline::Nilable.new(Crystalline::Array.new(Models::Shared::BreachExposed)),
|
|
39
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("exposed")}}
|
|
40
|
+
)
|
|
41
|
+
# The value is in a credential_list or stealer_log table.
|
|
42
|
+
field(
|
|
43
|
+
:in_credential_lists,
|
|
44
|
+
Crystalline::Nilable.new(Crystalline::Boolean.new),
|
|
45
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("in_credential_lists")}}
|
|
46
|
+
)
|
|
47
|
+
# A plaintext password sat next to the value in a table dated two years ago or less, or the value is in a stealer_log table.
|
|
48
|
+
field(
|
|
49
|
+
:recent_password_exposure,
|
|
50
|
+
Crystalline::Nilable.new(Crystalline::Boolean.new),
|
|
51
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("recent_password_exposure")}}
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
field(
|
|
55
|
+
:truncated,
|
|
56
|
+
Crystalline::Nilable.new(Crystalline::Boolean.new),
|
|
57
|
+
{'format_json': {'letter_case': ::NoResponse::Utils.field_name("truncated")}}
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
sig {
|
|
61
|
+
params(
|
|
62
|
+
found: T::Boolean,
|
|
63
|
+
breach_count: T.nilable(::Integer),
|
|
64
|
+
first_year: T.nilable(::Integer),
|
|
65
|
+
last_year: T.nilable(::Integer),
|
|
66
|
+
exposed: T.nilable(T::Array[Models::Shared::BreachExposed]),
|
|
67
|
+
in_credential_lists: T.nilable(T::Boolean),
|
|
68
|
+
recent_password_exposure: T.nilable(T::Boolean),
|
|
69
|
+
truncated: T.nilable(T::Boolean)
|
|
70
|
+
)
|
|
71
|
+
.void
|
|
72
|
+
}
|
|
73
|
+
def initialize(
|
|
74
|
+
found:,
|
|
75
|
+
breach_count: nil,
|
|
76
|
+
first_year: nil,
|
|
77
|
+
last_year: nil,
|
|
78
|
+
exposed: nil,
|
|
79
|
+
in_credential_lists: nil,
|
|
80
|
+
recent_password_exposure: nil,
|
|
81
|
+
truncated: nil
|
|
82
|
+
)
|
|
83
|
+
@found = found
|
|
84
|
+
@breach_count = breach_count
|
|
85
|
+
@first_year = first_year
|
|
86
|
+
@last_year = last_year
|
|
87
|
+
@exposed = exposed
|
|
88
|
+
@in_credential_lists = in_credential_lists
|
|
89
|
+
@recent_password_exposure = recent_password_exposure
|
|
90
|
+
@truncated = truncated
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
94
|
+
def ==(other)
|
|
95
|
+
return false unless other.is_a?(self.class)
|
|
96
|
+
return false unless @found == other.found
|
|
97
|
+
return false unless @breach_count == other.breach_count
|
|
98
|
+
return false unless @first_year == other.first_year
|
|
99
|
+
return false unless @last_year == other.last_year
|
|
100
|
+
return false unless @exposed == other.exposed
|
|
101
|
+
return false unless @in_credential_lists == other.in_credential_lists
|
|
102
|
+
return false unless @recent_password_exposure == other.recent_password_exposure
|
|
103
|
+
return false unless @truncated == other.truncated
|
|
104
|
+
true
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::BreachSummary
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::BreachSummary
|
|
9
|
+
def found
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def found=(str_)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def breach_count
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def breach_count=(str_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def first_year
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def first_year=(str_)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def last_year
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def last_year=(str_)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def exposed
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def exposed=(str_)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def in_credential_lists
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def in_credential_lists=(str_)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def recent_password_exposure
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def recent_password_exposure=(str_)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def truncated
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def truncated=(str_)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# Confidence - Ordinal confidence in the recommendation under the current policy: low, medium, high or unavailable.
|
|
8
|
+
class Confidence
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
LOW = new("low")
|
|
12
|
+
MEDIUM = new("medium")
|
|
13
|
+
HIGH = new("high")
|
|
14
|
+
UNAVAILABLE = new("unavailable")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
open!
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# ConflictErrorCode - Machine codes an HTTP 409 answer can carry.
|
|
8
|
+
class ConflictErrorCode
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
IDEMPOTENCY_KEY_REUSED = new("idempotency_key_reused")
|
|
12
|
+
KEY_ROTATION_IN_PROGRESS = new("key_rotation_in_progress")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
open!
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# Cross-identifier agreement, computed from facts only. Every member is optional; absent makes no claim.
|
|
8
|
+
class Consistency
|
|
9
|
+
extend T::Sig
|
|
10
|
+
include Crystalline::MetadataFields
|
|
11
|
+
|
|
12
|
+
# How a submitted identifier agrees with what the evidence holds for the other identifiers. unknown is a definite 'cannot tell' (for example a truncated or too-common breach result); absent means the comparison was not made.
|
|
13
|
+
field(
|
|
14
|
+
:name,
|
|
15
|
+
Crystalline::Nilable.new(Models::Shared::ConsistencyValue),
|
|
16
|
+
{
|
|
17
|
+
'format_json': {
|
|
18
|
+
'letter_case': ::NoResponse::Utils.field_name("name"),
|
|
19
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::ConsistencyValue, true)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
)
|
|
23
|
+
# How a submitted identifier agrees with what the evidence holds for the other identifiers. unknown is a definite 'cannot tell' (for example a truncated or too-common breach result); absent means the comparison was not made.
|
|
24
|
+
field(
|
|
25
|
+
:phone,
|
|
26
|
+
Crystalline::Nilable.new(Models::Shared::ConsistencyValue),
|
|
27
|
+
{
|
|
28
|
+
'format_json': {
|
|
29
|
+
'letter_case': ::NoResponse::Utils.field_name("phone"),
|
|
30
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::ConsistencyValue, true)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
)
|
|
34
|
+
# How a submitted identifier agrees with what the evidence holds for the other identifiers. unknown is a definite 'cannot tell' (for example a truncated or too-common breach result); absent means the comparison was not made.
|
|
35
|
+
field(
|
|
36
|
+
:ip,
|
|
37
|
+
Crystalline::Nilable.new(Models::Shared::ConsistencyValue),
|
|
38
|
+
{
|
|
39
|
+
'format_json': {
|
|
40
|
+
'letter_case': ::NoResponse::Utils.field_name("ip"),
|
|
41
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::ConsistencyValue, true)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
# IP country, phone country, breach countries and policy_context.region together.
|
|
46
|
+
field(
|
|
47
|
+
:country,
|
|
48
|
+
Crystalline::Nilable.new(Models::Shared::Country),
|
|
49
|
+
{
|
|
50
|
+
'format_json': {
|
|
51
|
+
'letter_case': ::NoResponse::Utils.field_name("country"),
|
|
52
|
+
'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::Country, true)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
sig {
|
|
58
|
+
params(
|
|
59
|
+
name: T.nilable(Models::Shared::ConsistencyValue),
|
|
60
|
+
phone: T.nilable(Models::Shared::ConsistencyValue),
|
|
61
|
+
ip: T.nilable(Models::Shared::ConsistencyValue),
|
|
62
|
+
country: T.nilable(Models::Shared::Country)
|
|
63
|
+
)
|
|
64
|
+
.void
|
|
65
|
+
}
|
|
66
|
+
def initialize(name: nil, phone: nil, ip: nil, country: nil)
|
|
67
|
+
@name = name
|
|
68
|
+
@phone = phone
|
|
69
|
+
@ip = ip
|
|
70
|
+
@country = country
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
|
74
|
+
def ==(other)
|
|
75
|
+
return false unless other.is_a?(self.class)
|
|
76
|
+
return false unless @name == other.name
|
|
77
|
+
return false unless @phone == other.phone
|
|
78
|
+
return false unless @ip == other.ip
|
|
79
|
+
return false unless @country == other.country
|
|
80
|
+
true
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
class NoResponse::Models::Shared::Consistency
|
|
5
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class NoResponse::Models::Shared::Consistency
|
|
9
|
+
def name
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def name=(str_)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def phone
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def phone=(str_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def ip
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def ip=(str_)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def country
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def country=(str_)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module NoResponse
|
|
5
|
+
module Models
|
|
6
|
+
module Shared
|
|
7
|
+
# ConsistencyValue - How a submitted identifier agrees with what the evidence holds for the other identifiers. unknown is a definite 'cannot tell' (for example a truncated or too-common breach result); absent means the comparison was not made.
|
|
8
|
+
class ConsistencyValue
|
|
9
|
+
include ::Crystalline::Enum
|
|
10
|
+
enums do
|
|
11
|
+
MATCH = new("match")
|
|
12
|
+
PARTIAL = new("partial")
|
|
13
|
+
MISMATCH = new("mismatch")
|
|
14
|
+
UNKNOWN = new("unknown")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
open!
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|