[WIP] Encryption for secure values (#183)

This commit is contained in:
Gregory Schier
2025-04-15 07:18:26 -07:00
committed by GitHub
parent e114a85c39
commit 2e55a1bd6d
208 changed files with 4063 additions and 28698 deletions

View File

@@ -1,12 +1,13 @@
use crate::TemplateCallback;
use crate::error::Error::RenderError;
use crate::error::Result;
use base64::prelude::BASE64_URL_SAFE_NO_PAD;
use base64::Engine;
use base64::prelude::BASE64_URL_SAFE_NO_PAD;
use serde::{Deserialize, Serialize};
use std::fmt::Display;
use ts_rs::TS;
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize, TS)]
#[derive(Default, Clone, PartialEq, Debug, Serialize, Deserialize, TS)]
#[ts(export, export_to = "parser.ts")]
pub struct Tokens {
pub tokens: Vec<Token>,
@@ -94,6 +95,53 @@ impl Display for Token {
}
}
fn transform_val<T: TemplateCallback>(val: &Val, cb: &T) -> Result<Val> {
let val = match val {
Val::Fn {
name: fn_name,
args,
} => {
let mut new_args: Vec<FnArg> = Vec::new();
for arg in args {
let value = match arg.clone().value {
Val::Str { text } => {
let text = cb.transform_arg(&fn_name, &arg.name, &text)?;
Val::Str { text }
}
v => transform_val(&v, cb)?,
};
let arg_name = arg.name.clone();
new_args.push(FnArg {
name: arg_name,
value,
});
}
Val::Fn {
name: fn_name.clone(),
args: new_args,
}
}
_ => val.clone(),
};
Ok(val)
}
pub fn transform_args<T: TemplateCallback>(tokens: Tokens, cb: &T) -> Result<Tokens> {
let mut new_tokens = Tokens::default();
for t in tokens.tokens.iter() {
new_tokens.tokens.push(match t {
Token::Tag { val } => {
let val = transform_val(val, cb)?;
Token::Tag { val }
}
_ => t.clone(),
});
}
Ok(new_tokens)
}
// Template Syntax
//
// ${[ my_var ]}
@@ -438,8 +486,8 @@ impl Parser {
#[cfg(test)]
mod tests {
use crate::error::Result;
use crate::Val::Null;
use crate::error::Result;
use crate::*;
#[test]