mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-18 23:44:12 +01:00
Environments in URL and better rendering
This commit is contained in:
@@ -7,35 +7,30 @@
|
||||
#[macro_use]
|
||||
extern crate objc;
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::env::current_dir;
|
||||
use std::fs::{create_dir_all, File};
|
||||
use std::io::Write;
|
||||
|
||||
use crate::models::{find_environments, generate_id};
|
||||
use base64::Engine;
|
||||
use http::header::{HeaderName, ACCEPT, USER_AGENT};
|
||||
use http::{HeaderMap, HeaderValue, Method};
|
||||
use rand::random;
|
||||
use reqwest::redirect::Policy;
|
||||
use serde::Serialize;
|
||||
use serde_json::json;
|
||||
use sqlx::migrate::Migrator;
|
||||
use sqlx::sqlite::SqlitePoolOptions;
|
||||
use sqlx::types::{Json, JsonValue};
|
||||
use sqlx::{Pool, Sqlite};
|
||||
use tauri::api::path::data_dir;
|
||||
use tauri::regex::Regex;
|
||||
use std::collections::HashMap;
|
||||
use std::env::current_dir;
|
||||
use std::fs::{create_dir_all, File};
|
||||
use std::io::Write;
|
||||
#[cfg(target_os = "macos")]
|
||||
use tauri::TitleBarStyle;
|
||||
use tauri::{AppHandle, Menu, MenuItem, RunEvent, State, Submenu, Window, WindowUrl, Wry};
|
||||
use tauri::{CustomMenuItem, Manager, WindowEvent};
|
||||
use tokio::sync::Mutex;
|
||||
|
||||
use window_ext::WindowExt;
|
||||
|
||||
use crate::models::{find_environments, generate_id};
|
||||
|
||||
mod models;
|
||||
mod render;
|
||||
mod window_ext;
|
||||
|
||||
#[derive(serde::Serialize)]
|
||||
@@ -84,24 +79,13 @@ async fn actually_send_ephemeral_request(
|
||||
pool: &Pool<Sqlite>,
|
||||
) -> Result<models::HttpResponse, String> {
|
||||
let start = std::time::Instant::now();
|
||||
let mut url_string = request.url.to_string();
|
||||
|
||||
let environments = find_environments(&request.workspace_id, pool)
|
||||
.await
|
||||
.expect("Failed to find environments");
|
||||
let environment: models::Environment = environments.first().unwrap().clone();
|
||||
let variables = environment.data;
|
||||
|
||||
let re = Regex::new(r"\$\{\[\s*([^]\s]+)\s*]}").expect("Failed to create regex");
|
||||
url_string = re
|
||||
.replace(&url_string, |caps: &tauri::regex::Captures| {
|
||||
let key = caps.get(1).unwrap().as_str();
|
||||
match variables.get(key) {
|
||||
Some(v) => v.as_str().unwrap(),
|
||||
None => "",
|
||||
}
|
||||
})
|
||||
.to_string();
|
||||
let mut url_string = render::render(&request.url, environment.clone());
|
||||
|
||||
if !url_string.starts_with("http://") && !url_string.starts_with("https://") {
|
||||
url_string = format!("http://{}", url_string);
|
||||
|
||||
25
src-tauri/src/render.rs
Normal file
25
src-tauri/src/render.rs
Normal file
@@ -0,0 +1,25 @@
|
||||
use tauri::regex::Regex;
|
||||
|
||||
use crate::models::Environment;
|
||||
|
||||
pub fn render(template: &str, environment: Environment) -> String {
|
||||
let variables = environment.data;
|
||||
let re = Regex::new(r"\$\{\[\s*([^]\s]+)\s*]}").expect("Failed to create regex");
|
||||
let rendered = re
|
||||
.replace(template, |caps: &tauri::regex::Captures| {
|
||||
let key = caps.get(1).unwrap().as_str();
|
||||
match variables.get(key) {
|
||||
Some(v) => {
|
||||
if v.is_string() {
|
||||
v.as_str().expect("Should be string").to_string()
|
||||
} else {
|
||||
v.to_string()
|
||||
}
|
||||
}
|
||||
None => "".to_string(),
|
||||
}
|
||||
})
|
||||
.to_string();
|
||||
|
||||
rendered
|
||||
}
|
||||
Reference in New Issue
Block a user