rusty_stack/installers/common/
sealed_token.rs1use std::fmt;
2
3#[derive(Clone)]
4pub struct SealedToken(String);
5
6impl SealedToken {
7 pub fn new(value: impl Into<String>) -> Self {
8 Self(value.into())
9 }
10
11 pub fn from_env() -> Self {
12 Self(std::env::var("GITHUB_INSTALLER_TOKEN").unwrap_or_default())
13 }
14
15 pub fn as_str(&self) -> &str {
16 &self.0
17 }
18
19 pub fn purge(&mut self) {
20 let len = self.0.len();
21 self.0.clear();
22 self.0.extend(std::iter::repeat_n('\0', len));
23 self.0.clear();
24 }
25}
26
27impl fmt::Debug for SealedToken {
28 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
29 f.write_str("[REDACTED]")
30 }
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn debug_is_redacted() {
39 let token = SealedToken::new("abc");
40 assert_eq!(format!("{:?}", token), "[REDACTED]");
41 }
42}