umya_spreadsheet/structs/
workbook_protection.rs

1// workbookProtection
2use super::BooleanValue;
3use super::StringValue;
4use super::UInt32Value;
5use crate::helper::crypt::*;
6use crate::reader::driver::*;
7use crate::writer::driver::*;
8use md5::Digest;
9use quick_xml::events::{BytesStart, Event};
10use quick_xml::Reader;
11use quick_xml::Writer;
12use std::io::Cursor;
13
14#[derive(Default, Debug, Clone, PartialEq, PartialOrd)]
15pub struct WorkbookProtection {
16    workbook_algorithm_name: StringValue,
17    workbook_hash_value: StringValue,
18    workbook_salt_value: StringValue,
19    workbook_spin_count: UInt32Value,
20    workbook_password: StringValue,
21    revisions_algorithm_name: StringValue,
22    revisions_hash_value: StringValue,
23    revisions_salt_value: StringValue,
24    revisions_spin_count: UInt32Value,
25    revisions_password: StringValue,
26    lock_revision: BooleanValue,
27    lock_structure: BooleanValue,
28    lock_windows: BooleanValue,
29}
30impl WorkbookProtection {
31    #[inline]
32    pub fn get_workbook_algorithm_name(&self) -> &str {
33        self.workbook_algorithm_name.get_value_str()
34    }
35
36    #[inline]
37    pub fn set_workbook_algorithm_name<S: Into<String>>(&mut self, value: S) -> &mut Self {
38        self.workbook_algorithm_name.set_value(value);
39        self
40    }
41
42    #[inline]
43    pub fn get_workbook_hash_value(&self) -> &str {
44        self.workbook_hash_value.get_value_str()
45    }
46
47    #[inline]
48    pub fn set_workbook_hash_value<S: Into<String>>(&mut self, value: S) -> &mut Self {
49        self.workbook_hash_value.set_value(value);
50        self
51    }
52
53    #[inline]
54    pub fn get_workbook_salt_value(&self) -> &str {
55        self.workbook_salt_value.get_value_str()
56    }
57
58    #[inline]
59    pub fn set_workbook_salt_value<S: Into<String>>(&mut self, value: S) -> &mut Self {
60        self.workbook_salt_value.set_value(value);
61        self
62    }
63
64    #[inline]
65    pub fn get_workbook_spin_count(&self) -> &u32 {
66        self.workbook_spin_count.get_value()
67    }
68
69    #[inline]
70    pub fn set_workbook_spin_count(&mut self, value: u32) -> &mut Self {
71        self.workbook_spin_count.set_value(value);
72        self
73    }
74
75    #[inline]
76    pub fn get_workbook_password_raw(&self) -> &str {
77        self.workbook_password.get_value_str()
78    }
79
80    #[inline]
81    pub fn set_workbook_password_raw<S: Into<String>>(&mut self, value: S) -> &mut Self {
82        self.workbook_password.set_value(value);
83        self
84    }
85
86    #[inline]
87    pub fn remove_workbook_password_raw(&mut self) -> &mut Self {
88        self.workbook_password.remove_value();
89        self
90    }
91
92    #[inline]
93    pub fn get_revisions_algorithm_name(&self) -> &str {
94        self.revisions_algorithm_name.get_value_str()
95    }
96
97    #[inline]
98    pub fn set_revisions_algorithm_name<S: Into<String>>(&mut self, value: S) -> &mut Self {
99        self.revisions_algorithm_name.set_value(value);
100        self
101    }
102
103    #[inline]
104    pub fn get_revisions_hash_value(&self) -> &str {
105        self.revisions_hash_value.get_value_str()
106    }
107
108    #[inline]
109    pub fn set_revisions_hash_value<S: Into<String>>(&mut self, value: S) -> &mut Self {
110        self.revisions_hash_value.set_value(value);
111        self
112    }
113
114    #[inline]
115    pub fn get_revisions_salt_value(&self) -> &str {
116        self.revisions_salt_value.get_value_str()
117    }
118
119    #[inline]
120    pub fn set_revisions_salt_value<S: Into<String>>(&mut self, value: S) -> &mut Self {
121        self.revisions_salt_value.set_value(value);
122        self
123    }
124
125    #[inline]
126    pub fn get_revisions_spin_count(&self) -> &u32 {
127        self.revisions_spin_count.get_value()
128    }
129
130    #[inline]
131    pub fn set_revisions_spin_count(&mut self, value: u32) -> &mut Self {
132        self.revisions_spin_count.set_value(value);
133        self
134    }
135
136    #[inline]
137    pub fn get_revisions_password_raw(&self) -> &str {
138        self.revisions_password.get_value_str()
139    }
140
141    #[inline]
142    pub fn set_revisions_password_raw<S: Into<String>>(&mut self, value: S) -> &mut Self {
143        self.revisions_password.set_value(value);
144        self
145    }
146
147    #[inline]
148    pub fn remove_revisions_password_raw(&mut self) -> &mut Self {
149        self.revisions_password.remove_value();
150        self
151    }
152
153    #[inline]
154    pub fn get_lock_revision(&self) -> &bool {
155        self.lock_revision.get_value()
156    }
157
158    #[inline]
159    pub fn set_lock_revision(&mut self, value: bool) -> &mut Self {
160        self.lock_revision.set_value(value);
161        self
162    }
163
164    #[inline]
165    pub fn get_lock_structure(&self) -> &bool {
166        self.lock_structure.get_value()
167    }
168
169    #[inline]
170    pub fn set_lock_structure(&mut self, value: bool) -> &mut Self {
171        self.lock_structure.set_value(value);
172        self
173    }
174
175    #[inline]
176    pub fn get_lock_windows(&self) -> &bool {
177        self.lock_windows.get_value()
178    }
179
180    #[inline]
181    pub fn set_lock_windows(&mut self, value: bool) -> &mut Self {
182        self.lock_windows.set_value(value);
183        self
184    }
185
186    #[inline]
187    pub fn set_workbook_password(&mut self, password: &str) -> &mut Self {
188        encrypt_workbook_protection(password, self);
189        self
190    }
191
192    #[inline]
193    pub fn set_revisions_password(&mut self, password: &str) -> &mut Self {
194        encrypt_revisions_protection(password, self);
195        self
196    }
197
198    pub(crate) fn set_attributes<R: std::io::BufRead>(
199        &mut self,
200        _reader: &mut Reader<R>,
201        e: &BytesStart,
202    ) {
203        set_string_from_xml!(self, e, workbook_algorithm_name, "workbookAlgorithmName");
204        set_string_from_xml!(self, e, workbook_hash_value, "workbookHashValue");
205        set_string_from_xml!(self, e, workbook_salt_value, "workbookSaltValue");
206        set_string_from_xml!(self, e, workbook_spin_count, "workbookSpinCount");
207        set_string_from_xml!(self, e, workbook_password, "workbookPassword");
208        set_string_from_xml!(self, e, revisions_algorithm_name, "revisionsAlgorithmName");
209        set_string_from_xml!(self, e, revisions_hash_value, "revisionsHashValue");
210        set_string_from_xml!(self, e, revisions_salt_value, "revisionsSaltValue");
211        set_string_from_xml!(self, e, revisions_spin_count, "revisionsSpinCount");
212        set_string_from_xml!(self, e, revisions_password, "revisionsPassword");
213        set_string_from_xml!(self, e, lock_revision, "lockRevision");
214        set_string_from_xml!(self, e, lock_structure, "lockStructure");
215        set_string_from_xml!(self, e, lock_windows, "lockWindows");
216    }
217
218    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
219        // workbookProtection
220        let mut attributes: Vec<(&str, &str)> = Vec::new();
221        if self.workbook_algorithm_name.has_value() {
222            attributes.push((
223                "workbookAlgorithmName",
224                self.workbook_algorithm_name.get_value_str(),
225            ));
226        }
227        if self.workbook_hash_value.has_value() {
228            attributes.push((
229                "workbookHashValue",
230                self.workbook_hash_value.get_value_str(),
231            ));
232        }
233        if self.workbook_salt_value.has_value() {
234            attributes.push((
235                "workbookSaltValue",
236                self.workbook_salt_value.get_value_str(),
237            ));
238        }
239        let workbook_spin_count = self.workbook_spin_count.get_value_string();
240        if self.workbook_spin_count.has_value() {
241            attributes.push(("workbookSpinCount", &workbook_spin_count));
242        }
243        if self.workbook_password.has_value() {
244            attributes.push(("workbookPassword", self.workbook_password.get_value_str()));
245        }
246        if self.revisions_algorithm_name.has_value() {
247            attributes.push((
248                "revisionsAlgorithmName",
249                self.revisions_algorithm_name.get_value_str(),
250            ));
251        }
252        if self.revisions_hash_value.has_value() {
253            attributes.push((
254                "revisionsHashValue",
255                self.revisions_hash_value.get_value_str(),
256            ));
257        }
258        if self.revisions_salt_value.has_value() {
259            attributes.push((
260                "revisionsSaltValue",
261                self.revisions_salt_value.get_value_str(),
262            ));
263        }
264        let revisions_spin_count = self.revisions_spin_count.get_value_string();
265        if self.revisions_spin_count.has_value() {
266            attributes.push(("revisionsSpinCount", &revisions_spin_count));
267        }
268        if self.revisions_password.has_value() {
269            attributes.push(("revisionsPassword", self.revisions_password.get_value_str()));
270        }
271        if self.lock_revision.has_value() {
272            attributes.push(("lockRevision", self.lock_revision.get_value_string()));
273        }
274        if self.lock_structure.has_value() {
275            attributes.push(("lockStructure", self.lock_structure.get_value_string()));
276        }
277        if self.lock_windows.has_value() {
278            attributes.push(("lockWindows", self.lock_windows.get_value_string()));
279        }
280
281        write_start_tag(writer, "workbookProtection", attributes, true);
282    }
283}