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