Skip to content

Vultron ActivityStream Vocabulary Activities

vultron.as_vocab.activities

vultron.as_vocab.activities.actor

Provides Vultron ActivityStreams Activities related to Actors

AcceptActorRecommendation dataclass

Bases: as_Accept

The case owner is accepting a recommendation to add an actor to the case. Should be followed by an RmInviteToCase activity targeted at the recommended actor.

Source code in vultron/as_vocab/activities/actor.py
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class AcceptActorRecommendation(as_Accept):
    """The case owner is accepting a recommendation to add an actor to the case.
    Should be followed by an RmInviteToCase activity targeted at the recommended actor.
    """

    as_type: str = field(default="Accept", init=False)
    as_object: Optional[as_Actor | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[VulnerabilityCase | as_Link | str] = field(
        default=None,
        repr=True,
    )

RecommendActor dataclass

Bases: as_Offer

The actor is recommending another actor to a case.

Source code in vultron/as_vocab/activities/actor.py
33
34
35
36
37
38
39
40
41
42
43
44
45
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RecommendActor(as_Offer):
    """The actor is recommending another actor to a case."""

    as_type: str = field(default="Offer", init=False)
    as_object: Optional[as_Actor | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[VulnerabilityCase | as_Link | str] = field(
        default=None,
        repr=True,
    )

RejectActorRecommendation dataclass

Bases: as_Reject

The case owner is rejecting a recommendation to add an actor to the case.

Source code in vultron/as_vocab/activities/actor.py
65
66
67
68
69
70
71
72
73
74
75
76
77
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RejectActorRecommendation(as_Reject):
    """The case owner is rejecting a recommendation to add an actor to the case."""

    as_type: str = field(default="Reject", init=False)
    as_object: Optional[as_Actor | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[VulnerabilityCase | as_Link | str] = field(
        default=None,
        repr=True,
    )

vultron.as_vocab.activities.case

Custom Activity Streams Activities for VulnerabilityCase objects. Each activity should have a VulnerabilityCase object as either its target or object.

AcceptCaseOwnershipTransfer dataclass

Bases: as_Accept

The actor is accepting an offer to transfer ownership of the case.

  • as_object: VulnerabilityCase
  • in_reply_to: the original offer
Source code in vultron/as_vocab/activities/case.py
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class AcceptCaseOwnershipTransfer(as_Accept):
    """The actor is accepting an offer to transfer ownership of the case.

    - as_object: VulnerabilityCase
    - in_reply_to: the original offer
    """

    as_type: str = field(default="Accept", init=False)
    as_object: Optional[VulnerabilityCase | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    in_reply_to: OfferCaseOwnershipTransfer = field(
        default=None,
    )

AddNoteToCase dataclass

Bases: as_Add

Add a Note to a VulnerabilityCase. as_object: Note target: VulnerabilityCase

Source code in vultron/as_vocab/activities/case.py
121
122
123
124
125
126
127
128
129
130
131
132
133
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class AddNoteToCase(as_Add):
    """Add a Note to a VulnerabilityCase.
    as_object: Note
    target: VulnerabilityCase
    """

    as_type: str = field(default="Add", init=False)
    as_object: Optional[as_Note | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[VulnerabilityCase | as_Link | str] = field(default=None)

AddReportToCase dataclass

Bases: as_Add

Add a VulnerabilityReport to a VulnerabilityCase as_object: VulnerabilityReport target: VulnerabilityCase

Source code in vultron/as_vocab/activities/case.py
50
51
52
53
54
55
56
57
58
59
60
61
62
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class AddReportToCase(as_Add):
    """Add a VulnerabilityReport to a VulnerabilityCase
    as_object: VulnerabilityReport
    target: VulnerabilityCase
    """

    as_type: str = field(default="Add", init=False)
    as_object: Optional[VulnerabilityReport | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[VulnerabilityCase | as_Link | str] = field(default=None)

AddStatusToCase dataclass

Bases: as_Add

Add a CaseStatus to a VulnerabilityCase. This should only be performed by the case owner. Other case participants can add a case status to their participant record, which the case owner should then add to the case if appropriate. as_object: CaseStatus target: VulnerabilityCase

Source code in vultron/as_vocab/activities/case.py
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class AddStatusToCase(as_Add):
    """Add a CaseStatus to a VulnerabilityCase.
    This should only be performed by the case owner.
    Other case participants can add a case status to their participant record, which the case
    owner should then add to the case if appropriate.
    as_object: CaseStatus
    target: VulnerabilityCase
    """

    as_type: str = field(default="Add", init=False)
    as_object: Optional[CaseStatus | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[VulnerabilityCase | as_Link | str] = field(default=None)

CreateCase dataclass

Bases: as_Create

Create a VulnerabilityCase. as_object: VulnerabilityCase

Source code in vultron/as_vocab/activities/case.py
 94
 95
 96
 97
 98
 99
100
101
102
103
104
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class CreateCase(as_Create):
    """Create a VulnerabilityCase.
    as_object: VulnerabilityCase
    """

    as_type: str = field(default="Create", init=False)
    as_object: Optional[VulnerabilityCase | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

CreateCaseStatus dataclass

Bases: as_Create

Create a CaseStatus. as_object: CaseStatus

Source code in vultron/as_vocab/activities/case.py
107
108
109
110
111
112
113
114
115
116
117
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class CreateCaseStatus(as_Create):
    """Create a CaseStatus.
    as_object: CaseStatus
    """

    as_type: str = field(default="Create", init=False)
    as_object: Optional[CaseStatus | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

OfferCaseOwnershipTransfer dataclass

Bases: as_Offer

The actor is offering to transfer ownership of the case to another actor. as_object: VulnerabilityCase target: as_Actor

Source code in vultron/as_vocab/activities/case.py
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class OfferCaseOwnershipTransfer(as_Offer):
    """The actor is offering to transfer ownership of the case to another actor.
    as_object: VulnerabilityCase
    target: as_Actor
    """

    as_type: str = field(default="Offer", init=False)
    as_object: Optional[VulnerabilityCase | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[as_Actor | as_Link | str] = field(
        metadata=config(exclude=exclude_if_none), default=None
    )

RejectCaseOwnershipTransfer dataclass

Bases: as_Reject

The actor is rejecting an offer to transfer ownership of the case. as_object: VulnerabilityCase context: the original offer

Source code in vultron/as_vocab/activities/case.py
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RejectCaseOwnershipTransfer(as_Reject):
    """The actor is rejecting an offer to transfer ownership of the case.
    as_object: VulnerabilityCase
    context: the original offer
    """

    as_type: str = field(default="Reject", init=False)
    as_object: Optional[VulnerabilityCase | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    in_reply_to: OfferCaseOwnershipTransfer = field(
        default=None,
    )

RmAcceptInviteToCase dataclass

Bases: as_Accept

The actor is accepting an invitation to a case. This corresponds to the Vultron Message Type RV when the case already exists. See also RmValidateReport for the scenario when the case does not exist yet. as_object: VulnerabilityCase in_reply_to: RmInviteToCase

Source code in vultron/as_vocab/activities/case.py
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmAcceptInviteToCase(as_Accept):
    """The actor is accepting an invitation to a case.
    This corresponds to the Vultron Message Type RV when the case already exists.
    See also RmValidateReport for the scenario when the case does not exist yet.
    as_object: VulnerabilityCase
    in_reply_to: RmInviteToCase
    """

    as_type: str = field(default="Accept", init=False)
    as_object: Optional[VulnerabilityCase | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    in_reply_to: RmInviteToCase = field(default=None)

RmCloseCase dataclass

Bases: as_Leave

The actor is ending their participation in the case and closing their local copy of the case. This corresponds to the Vultron RC message type. Case closure is considered a permanent Leave from the case. If the case owner (attributedTo) is the actor, then the case is closed for all participants. If the actor is not the case owner, then the actor should be removed from the case participants. as_object: VulnerabilityCase

Source code in vultron/as_vocab/activities/case.py
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmCloseCase(as_Leave):
    """The actor is ending their participation in the case and closing their local copy of the case.
    This corresponds to the Vultron RC message type.
    Case closure is considered a permanent Leave from the case.
    If the case owner (attributedTo) is the actor, then the case is closed for all participants.
    If the actor is not the case owner, then the actor should be removed from the case participants.
    as_object: VulnerabilityCase
    """

    as_type: str = field(default="Leave", init=False)
    as_object: Optional[VulnerabilityCase | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

RmDeferCase dataclass

Bases: as_Ignore

The actor is deferring a case. This implies that the actor is no longer actively working on the case. Deferring a case does not imply that the actor is abandoning the case entirely, it just means that the actor is no longer actively working on it. This represents the Vultron Message Type RD, and indicates that the actor is now in the RM.DEFERRED state. Contrast with RmCloseCase, which indicates that the actor is abandoning the case entirely. as_object: VulnerabilityCase

Source code in vultron/as_vocab/activities/case.py
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmDeferCase(as_Ignore):
    """The actor is deferring a case.
    This implies that the actor is no longer actively working on the case.
    Deferring a case does not imply that the actor is abandoning the case entirely,
    it just means that the actor is no longer actively working on it.
    This represents the Vultron Message Type RD, and indicates that the actor is now in the RM.DEFERRED state.
    Contrast with RmCloseCase, which indicates that the actor is abandoning the case entirely.
    as_object: VulnerabilityCase
    """

    as_type: str = field(default="Ignore", init=False)
    as_object: Optional[VulnerabilityCase | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

RmEngageCase dataclass

Bases: as_Join

The actor is has joined (i.e., is actively working on) a case. This represents the Vultron Message Type RA, and indicates that the actor is now in the RM.ACCEPTED state. as_object: VulnerabilityCase

Source code in vultron/as_vocab/activities/case.py
156
157
158
159
160
161
162
163
164
165
166
167
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmEngageCase(as_Join):
    """The actor is has joined (i.e., is actively working on) a case.
    This represents the Vultron Message Type RA, and indicates that the actor is now in the RM.ACCEPTED state.
    as_object: VulnerabilityCase
    """

    as_type: str = field(default="Join", init=False)
    as_object: Optional[VulnerabilityCase | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

RmInviteToCase dataclass

Bases: as_Invite

The actor is inviting another actor to a case. This corresponds to the Vultron Message Type RS when a case already exists. See also RmSubmitReport for the scenario when a case does not exist yet. as_object: VulnerabilityCase

Source code in vultron/as_vocab/activities/case.py
257
258
259
260
261
262
263
264
265
266
267
268
269
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmInviteToCase(as_Invite):
    """The actor is inviting another actor to a case.
    This corresponds to the Vultron Message Type RS when a case already exists.
    See also RmSubmitReport for the scenario when a case does not exist yet.
    as_object: VulnerabilityCase
    """

    as_type: str = field(default="Invite", init=False)
    as_object: Optional[VulnerabilityCase | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

RmRejectInviteToCase dataclass

Bases: as_Reject

The actor is rejecting an invitation to a case. This corresponds to the Vultron Message Type RI when the case already exists. See also RmInvalidateReport for the scenario when the case does not exist yet.

as_object: VulnerabilityCase in_reply_to: RmInviteToCase

Source code in vultron/as_vocab/activities/case.py
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmRejectInviteToCase(as_Reject):
    """The actor is rejecting an invitation to a case.
    This corresponds to the Vultron Message Type RI when the case already exists.
    See also RmInvalidateReport for the scenario when the case does not exist yet.

    `as_object`: `VulnerabilityCase`
    `in_reply_to`: `RmInviteToCase`
    """

    as_type: str = field(default="Reject", init=False)
    as_object: Optional[VulnerabilityCase | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    in_reply_to: RmInviteToCase = field(default=None)

UpdateCase dataclass

Bases: as_Update

Update a VulnerabilityCase. as_object: VulnerabilityCase

Source code in vultron/as_vocab/activities/case.py
137
138
139
140
141
142
143
144
145
146
147
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class UpdateCase(as_Update):
    """Update a VulnerabilityCase.
    as_object: VulnerabilityCase
    """

    as_type: str = field(default="Update", init=False)
    as_object: Optional[VulnerabilityCase | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

vultron.as_vocab.activities.case_participant

Provides Vultron ActivityStreams Activities related to CaseParticipants

AddParticipantToCase dataclass

Bases: as_Add

Add a CaseParticipant to a VulnerabilityCase as_object: CaseParticipant target: VulnerabilityCase

Source code in vultron/as_vocab/activities/case_participant.py
74
75
76
77
78
79
80
81
82
83
84
85
86
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class AddParticipantToCase(as_Add):
    """Add a CaseParticipant to a VulnerabilityCase
    as_object: CaseParticipant
    target: VulnerabilityCase
    """

    as_type: str = field(default="Add", init=False)
    as_object: Optional[CaseParticipant | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[VulnerabilityCase | as_Link | str] = field(default=None)

AddStatusToParticipant dataclass

Bases: as_Add

Add a CaseStatus to a CaseParticipant as_object: CaseStatus target: CaseParticipant

Source code in vultron/as_vocab/activities/case_participant.py
59
60
61
62
63
64
65
66
67
68
69
70
71
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class AddStatusToParticipant(as_Add):
    """Add a CaseStatus to a CaseParticipant
    as_object: CaseStatus
    target: CaseParticipant
    """

    as_type: str = field(default="Add", init=False)
    as_object: Optional[ParticipantStatus | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[CaseParticipant | as_Link | str] = field(default=None)

CreateParticipant dataclass

Bases: as_Create

Create a new CaseParticipant

Source code in vultron/as_vocab/activities/case_participant.py
34
35
36
37
38
39
40
41
42
43
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class CreateParticipant(as_Create):
    """Create a new CaseParticipant"""

    as_type: str = field(default="Create", init=False)
    as_object: Optional[CaseParticipant | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[VulnerabilityCase | as_Link | str] = field(default=None)

CreateStatusForParticipant dataclass

Bases: as_Create

Create a new CaseStatus for a CaseParticipant

Source code in vultron/as_vocab/activities/case_participant.py
46
47
48
49
50
51
52
53
54
55
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class CreateStatusForParticipant(as_Create):
    """Create a new CaseStatus for a CaseParticipant"""

    as_type: str = field(default="Create", init=False)
    as_object: Optional[ParticipantStatus | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[CaseParticipant | as_Link | str] = field(default=None)

RemoveParticipantFromCase dataclass

Bases: as_Remove

Remove a CaseParticipant from a VulnerabilityCase. This should only be performed by the case owner. as_object: CaseParticipant origin: VulnerabilityCase

Source code in vultron/as_vocab/activities/case_participant.py
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RemoveParticipantFromCase(as_Remove):
    """Remove a CaseParticipant from a VulnerabilityCase.
    This should only be performed by the case owner.
    as_object: CaseParticipant
    origin: VulnerabilityCase
    """

    as_type: str = field(default="Remove", init=False)
    as_object: Optional[CaseParticipant | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    origin: Optional[VulnerabilityCase | as_Link | str] = field(default=None)

vultron.as_vocab.activities.embargo

Provides Vultron Activity Streams Vocabulary classes for Embargo activities

ActivateEmbargo dataclass

Bases: as_Add

The case owner is activating an embargo on the case. This corresponds to the Vultron Message Types EA and EC at the case level as_object: the EmbargoEvent being activated target: the VulnerabilityCase for which the EmbargoEvent was proposed in_reply_to: the EmProposeEmbargo activity that proposed the EmbargoEvent

Source code in vultron/as_vocab/activities/embargo.py
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class ActivateEmbargo(as_Add):
    """The case owner is activating an embargo on the case.
    This corresponds to the Vultron Message Types EA and EC at the case level
    as_object: the EmbargoEvent being activated
    target: the VulnerabilityCase for which the EmbargoEvent was proposed
    in_reply_to: the EmProposeEmbargo activity that proposed the EmbargoEvent
    """

    as_type: str = field(default="Add", init=False)
    as_object: Optional[EmbargoEvent | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[VulnerabilityCase | as_Link | str] = field(
        default=None, repr=True
    )
    in_reply_to: Optional[EmProposeEmbargo | as_Link | str] = field(
        default=None, repr=True
    )

AddEmbargoToCase dataclass

Bases: as_Add

Add an EmbargoEvent to a case. This should only be performed by the case owner. For use when the case owner is activating an embargo on the case without first proposing it to the participants. See ActivateEmbargo for use when the case owner is activating an embargo on the case in response to a previous EmProposeEmbargo activity.

Source code in vultron/as_vocab/activities/embargo.py
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class AddEmbargoToCase(as_Add):
    """Add an EmbargoEvent to a case. This should only be performed by the case owner.
    For use when the case owner is activating an embargo on the case without first proposing it to the participants.
    See ActivateEmbargo for use when the case owner is activating an embargo on the case
    in response to a previous EmProposeEmbargo activity.
    """

    as_type: str = field(default="Add", init=False)
    as_object: Optional[EmbargoEvent | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    target: Optional[VulnerabilityCase | as_Link | str] = field(
        default=None, repr=True
    )

AnnounceEmbargo dataclass

Bases: as_Announce

The case owner is announcing an embargo on the case. as_object: the EmbargoEvent being announced context: the VulnerabilityCase for which the EmbargoEvent is active

Source code in vultron/as_vocab/activities/embargo.py
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class AnnounceEmbargo(as_Announce):
    """The case owner is announcing an embargo on the case.
    as_object: the EmbargoEvent being announced
    context: the VulnerabilityCase for which the EmbargoEvent is active
    """

    as_type: str = field(default="Announce", init=False)
    as_object: Optional[EmbargoEvent | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    context: Optional[VulnerabilityCase | as_Link | str] = field(
        default=None, repr=True
    )

ChoosePreferredEmbargo dataclass

Bases: as_Question

The case owner is asking the participants to indicate their embargo preferences from among the proposed embargoes. Case participants should respond with an EmAcceptEmbargo or EmRejectEmbargo activity for each proposed embargo. Either anyOf or oneOf should be specified, but not both. The Case owner will then need to decide which embargo to make active on the case.

Source code in vultron/as_vocab/activities/embargo.py
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class ChoosePreferredEmbargo(as_Question):
    """The case owner is asking the participants to indicate their embargo preferences from among the proposed embargoes.
    Case participants should respond with an EmAcceptEmbargo or EmRejectEmbargo activity for each proposed embargo.
    Either anyOf or oneOf should be specified, but not both.
    The Case owner will then need to decide which embargo to make active on the case.
    """

    # note: not specifying as_object here because Questions are intransitive

    as_type: str = field(default="Question", init=False)
    any_of: Optional[Sequence[EmbargoEvent | as_Link | str]] = field(
        metadata=config(exclude=exclude_if_none), default=None
    )
    one_of: Optional[Sequence[EmbargoEvent | as_Link | str]] = field(
        metadata=config(exclude=exclude_if_none), default=None
    )

EmAcceptEmbargo dataclass

Bases: as_Accept

The actor is accepting an embargo on the case. This corresponds to the Vultron Message Types EA and EC as_object: the EmbargoEvent being rejected context: the VulnerabilityCase for which the EmbargoEvent was proposed origin: the EmProposeEmbargo activity that proposed the EmbargoEvent

Source code in vultron/as_vocab/activities/embargo.py
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class EmAcceptEmbargo(as_Accept):
    """The actor is accepting an embargo on the case.
    This corresponds to the Vultron Message Types EA and EC
    as_object: the EmbargoEvent being rejected
    context: the VulnerabilityCase for which the EmbargoEvent was proposed
    origin: the EmProposeEmbargo activity that proposed the EmbargoEvent
    """

    as_type: str = field(default="Accept", init=False)

    as_object: Optional[EmbargoEvent | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    context: Optional[VulnerabilityCase | as_Link | str] = field(
        default=None, repr=True
    )
    in_reply_to: Optional[EmProposeEmbargo | as_Link | str] = field(
        default=None, repr=True
    )

EmProposeEmbargo dataclass

Bases: as_Invite

The actor is proposing an embargo on the case. This corresponds to the Vultron Message Types EP and EV as_object: EmbargoEvent

Source code in vultron/as_vocab/activities/embargo.py
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class EmProposeEmbargo(as_Invite):
    """The actor is proposing an embargo on the case.
    This corresponds to the Vultron Message Types EP and EV
    as_object: EmbargoEvent
    """

    as_type: str = field(default="Invite", init=False)

    as_object: Optional[EmbargoEvent | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    context: Optional[VulnerabilityCase | as_Link | str] = field(
        default=None, repr=True
    )

EmRejectEmbargo dataclass

Bases: as_Reject

The actor is rejecting an embargo on the case. This corresponds to the Vultron Message Types ER and EJ as_object: the EmbargoEvent being rejected context: the VulnerabilityCase for which the EmbargoEvent was proposed in_reply_to: the EmProposeEmbargo activity that proposed the EmbargoEvent

Source code in vultron/as_vocab/activities/embargo.py
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class EmRejectEmbargo(as_Reject):
    """The actor is rejecting an embargo on the case.
    This corresponds to the Vultron Message Types ER and EJ
    as_object: the EmbargoEvent being rejected
    context: the VulnerabilityCase for which the EmbargoEvent was proposed
    in_reply_to: the EmProposeEmbargo activity that proposed the EmbargoEvent
    """

    as_type: str = field(default="Reject", init=False)

    as_object: Optional[EmbargoEvent | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    context: Optional[VulnerabilityCase | as_Link | str] = field(
        default=None, repr=True
    )
    in_reply_to: Optional[EmProposeEmbargo | as_Link | str] = field(
        default=None, repr=True
    )

RemoveEmbargoFromCase dataclass

Bases: as_Remove

Remove an EmbargoEvent from the proposedEmbargoes of a VulnerabilityCase. This should only be performed by the case owner. as_object: EmbargoEvent origin: VulnerabilityCase

Source code in vultron/as_vocab/activities/embargo.py
183
184
185
186
187
188
189
190
191
192
193
194
195
196
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RemoveEmbargoFromCase(as_Remove):
    """Remove an EmbargoEvent from the proposedEmbargoes of a VulnerabilityCase.
    This should only be performed by the case owner.
    as_object: EmbargoEvent
    origin: VulnerabilityCase
    """

    as_type: str = field(default="Remove", init=False)
    as_object: Optional[EmbargoEvent | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )
    origin: Optional[VulnerabilityCase | as_Link | str] = field(default=None)

vultron.as_vocab.activities.report

This module contains extensions to the ActivityStreams Vocabulary for Vultron activities related to VulnerabilityReports.

RmCloseReport dataclass

Bases: as_Leave

The actor is closing the report. This corresponds to the Vultron Message Type RC when no case exists. It can only be emitted when the report is in the RM.INVALID state, because anything past that will have an associated VulnerabilityCase object, and closure of the case falls to the RmCloseCase activity. as_object: VulnerabilityReport

Source code in vultron/as_vocab/activities/report.py
106
107
108
109
110
111
112
113
114
115
116
117
118
119
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmCloseReport(as_Leave):
    """The actor is closing the report.
    This corresponds to the Vultron Message Type RC when no case exists.
    It can only be emitted when the report is in the RM.INVALID state, because anything past that will
    have an associated VulnerabilityCase object, and closure of the case falls to the RmCloseCase activity.
    as_object: VulnerabilityReport
    """

    as_type: str = field(default="Leave", init=False)
    as_object: Optional[VulnerabilityReport | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

RmCreateReport dataclass

Bases: as_Create

The actor is creating a report.

Source code in vultron/as_vocab/activities/report.py
36
37
38
39
40
41
42
43
44
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmCreateReport(as_Create):
    """The actor is creating a report."""

    as_type: str = field(default="Create", init=False)
    as_object: Optional[VulnerabilityReport | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

RmInvalidateReport dataclass

Bases: as_Reject

The actor has invalidated a report. Corresponds to the Vultron Message Type RI when no case exists. See also RmRejectInviteToCase for the scenario when a case already exists. as_object: VulnerabilityReport

Source code in vultron/as_vocab/activities/report.py
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmInvalidateReport(as_Reject):
    """The actor has invalidated a report.
    Corresponds to the Vultron Message Type RI when no case exists.
    See also RmRejectInviteToCase for the scenario when a case already exists.
    as_object: VulnerabilityReport
    """

    as_type: str = field(default="Reject", init=False)
    as_object: Optional[VulnerabilityReport | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

RmReadReport dataclass

Bases: as_Read

The actor has read a report. This corresponds to the Vultron Message Type RK when no case exists. as_object: VulnerabilityReport

Source code in vultron/as_vocab/activities/report.py
62
63
64
65
66
67
68
69
70
71
72
73
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmReadReport(as_Read):
    """The actor has read a report.
    This corresponds to the Vultron Message Type RK when no case exists.
    as_object: VulnerabilityReport
    """

    as_type: str = field(default="Read", init=False)
    as_object: Optional[VulnerabilityReport | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

RmSubmitReport dataclass

Bases: as_Offer

The actor is submitting a report to another actor This corresponds to the Vultron RS message type when no case exists. See also RmInviteToCase for the scenario when a case already exists. as_object: VulnerabilityReport

Source code in vultron/as_vocab/activities/report.py
47
48
49
50
51
52
53
54
55
56
57
58
59
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmSubmitReport(as_Offer):
    """The actor is submitting a report to another actor
    This corresponds to the Vultron RS message type when no case exists.
    See also RmInviteToCase for the scenario when a case already exists.
    as_object: VulnerabilityReport
    """

    as_type: str = field(default="Offer", init=False)
    as_object: Optional[VulnerabilityReport | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )

RmValidateReport dataclass

Bases: as_Accept

The actor has validated a report. Corresponds to the Vultron Message Type RV when no case exists. This should be followed by a Create(VulnerabilityCase) activity. as_object: VulnerabilityReport

Source code in vultron/as_vocab/activities/report.py
76
77
78
79
80
81
82
83
84
85
86
87
88
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(kw_only=True)
class RmValidateReport(as_Accept):
    """The actor has validated a report.
    Corresponds to the Vultron Message Type RV when no case exists.
    This should be followed by a Create(VulnerabilityCase) activity.
    as_object: VulnerabilityReport
    """

    as_type: str = field(default="Accept", init=False)
    as_object: Optional[VulnerabilityReport | as_Link | str] = field(
        metadata=config(field_name="object"), default=None, repr=True
    )