mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-20 07:51:20 +02:00
[WIP] Encryption for secure values (#183)
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user