assemblyline_models/datastore/
workflow.rs1use chrono::{DateTime, Utc};
7use serde::{Deserialize, Serialize};
8use serde_with::{SerializeDisplay, DeserializeFromStr};
9use struct_metadata::Described;
10
11use crate::{Uuid, ElasticMeta, ExpandingClassification};
12
13
14#[derive(SerializeDisplay, DeserializeFromStr, strum::Display, strum::EnumString, Described)]
15#[metadata_type(ElasticMeta)]
16#[strum(serialize_all = "UPPERCASE")]
17pub enum Priorities {
18 Low,
19 Medium,
20 High,
21 Critical,
22}
23
24#[derive(SerializeDisplay, DeserializeFromStr, strum::Display, strum::EnumString, Described)]
25#[metadata_type(ElasticMeta)]
26#[strum(serialize_all = "SCREAMING-KEBAB-CASE")]
27pub enum Statuses {
28 Malicious,
29 NonMalicious,
30 Assess,
31 Triage,
32}
33
34#[derive(Serialize, Deserialize, Described)]
36#[metadata_type(ElasticMeta)]
37#[metadata(index=true, store=true)]
38pub struct Workflow {
39 #[metadata(copyto="__text__")]
41 #[serde(flatten)]
42 pub classification: ExpandingClassification,
43 pub creation_date: DateTime<Utc>,
45 pub creator: String,
47 pub edited_by: String,
49 #[serde(default="default_enabled")]
51 pub enabled: bool,
52 pub first_seen: Option<DateTime<Utc>>,
54 #[serde(default)]
56 pub hit_count: i32,
57 #[serde(default)]
59 #[metadata(copyto="__text__")]
60 pub labels: Vec<String>,
61 pub last_edit: DateTime<Utc>,
63 pub last_seen: Option<DateTime<Utc>>,
65 #[metadata(copyto="__text__")]
67 pub name: String,
68 pub origin: Option<String>,
70 #[metadata(copyto="__text__")]
72 pub priority: Option<Priorities>,
73 pub query: String,
75 #[metadata(copyto="__text__")]
77 pub status: Option<Statuses>,
78 pub workflow_id: Option<Uuid>,
80}
81
82fn default_enabled() -> bool { true }