chore: add reqenv
This commit is contained in:
parent
db96e0284a
commit
bb02cfa772
10
reqenv/.gitignore
vendored
Normal file
10
reqenv/.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/target
|
||||||
|
target
|
||||||
|
Cargo.lock
|
||||||
|
.cache
|
||||||
|
.temp
|
||||||
|
.env
|
||||||
|
*.log
|
||||||
|
.DS_Store
|
||||||
|
logs
|
||||||
|
tmp
|
56
reqenv/Cargo.toml
Normal file
56
reqenv/Cargo.toml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
[package]
|
||||||
|
name = "reqenv"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["JesusPerez <jpl@jesusperez.pro>"]
|
||||||
|
edition = "2018"
|
||||||
|
publish = false
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
anyhow = "1.0.40"
|
||||||
|
base64 = "0.13.0"
|
||||||
|
casbin = "2.0.7"
|
||||||
|
chrono = "0.4"
|
||||||
|
dotenv = "0.15.0"
|
||||||
|
envmnt = "0.9.0"
|
||||||
|
error-chain = "0.12.4"
|
||||||
|
glob = "0.3.0"
|
||||||
|
json = "0.12.4"
|
||||||
|
once_cell = "1.7.2"
|
||||||
|
parking_lot = "0.11.1"
|
||||||
|
rand = "0.8.3"
|
||||||
|
regex = "1.4.3"
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
serde_derive = "1.0.125"
|
||||||
|
serde_json = "1.0.64"
|
||||||
|
serde_yaml = "0.8.17"
|
||||||
|
slab = "0.4.3"
|
||||||
|
tempfile = "3.2.0"
|
||||||
|
tera = "1.8.0"
|
||||||
|
thiserror = "1.0.24"
|
||||||
|
toml = "0.5.8"
|
||||||
|
yaml-rust = "0.4"
|
||||||
|
tokio = { version = "1.5.0", features = ["full"] }
|
||||||
|
uuid = { version = "0.8", features = ["serde", "v4"] }
|
||||||
|
url = "2.2.1"
|
||||||
|
warp = { version = "0.3", features = ["default","websocket","tls","compression"] }
|
||||||
|
app_tools = { version = "0.1.0", path = "../../utils/app_tools" }
|
||||||
|
app_env = { version = "0.1.0", path = "../../defs/app_env" }
|
||||||
|
app_auth = { version = "0.1.0", path = "../../defs/app_auth" }
|
||||||
|
app_errors = { version = "0.1.0", path = "../../defs/app_errors" }
|
||||||
|
reqtasks = { version = "0.1.0", path = "../reqtasks" }
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
pretty_env_logger = "0.4"
|
||||||
|
tracing-subscriber = "0.2.15"
|
||||||
|
tracing-log = "0.1"
|
||||||
|
serde_derive = "1.0.125"
|
||||||
|
handlebars = "4.1.0"
|
||||||
|
tokio = { version = "1.5.0", features = ["macros", "rt-multi-thread"] }
|
||||||
|
tokio-stream = { version = "0.1.5", features = ["net"] }
|
||||||
|
listenfd = "0.3"
|
||||||
|
envmnt = "0.9.0"
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
envmnt = "0.9.0"
|
7
reqenv/README.md
Normal file
7
reqenv/README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# ReqTasks handlers library
|
||||||
|
|
||||||
|
Handlers to manage request using [warp](https://github.com/seanmonstar/warp)
|
||||||
|
|
||||||
|
It use one struct **ReqTasks**
|
||||||
|
|
||||||
|
It can be extended or included in other types like <u>reqenv</u>
|
9
reqenv/TODO.md
Normal file
9
reqenv/TODO.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# ReqEnv handlers library
|
||||||
|
|
||||||
|
- [ ] Tests
|
||||||
|
|
||||||
|
- [ ] Manage tokens and certification
|
||||||
|
|
||||||
|
- [ ] Dynamic load profiles, modules, etc
|
||||||
|
|
||||||
|
- [ ] Track sessions, devices, etc. [server timing](https://w3c.github.io/server-timing/)
|
119
reqenv/src/lib.rs
Normal file
119
reqenv/src/lib.rs
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
//
|
||||||
|
/*! Zterton
|
||||||
|
*/
|
||||||
|
// Copyright 2021, Jesús Pérez Lorenzo
|
||||||
|
//
|
||||||
|
//use std::collections::HashMap;
|
||||||
|
use std::fmt;
|
||||||
|
//use std::str::from_utf8;
|
||||||
|
//use tera::Tera;
|
||||||
|
|
||||||
|
use warp::{
|
||||||
|
http::{method::Method, HeaderMap, HeaderValue},
|
||||||
|
// Filter,
|
||||||
|
};
|
||||||
|
|
||||||
|
use reqtasks::ReqTasks;
|
||||||
|
use app_env::{
|
||||||
|
appenv::AppEnv,
|
||||||
|
config::Config,
|
||||||
|
module::Module,
|
||||||
|
AppStore,
|
||||||
|
// AppData,
|
||||||
|
};
|
||||||
|
use app_auth::{
|
||||||
|
AuthStore,
|
||||||
|
UserCtx,
|
||||||
|
LoginRequest,
|
||||||
|
// BEARER_PREFIX,
|
||||||
|
// AuthError,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// `ReqEnv` includes ReqTasks as core type
|
||||||
|
/// it is a kind of wrapping type
|
||||||
|
/// to declare:
|
||||||
|
/// - auth methods locally
|
||||||
|
/// - other attributes
|
||||||
|
/// - other request tasks methods
|
||||||
|
///
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct ReqEnv {
|
||||||
|
pub req: ReqTasks,
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for ReqEnv {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(f, "{} {} {}", &self.req.path, &self.req.origin, &self.req.key_module)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ReqEnv {
|
||||||
|
pub fn new(
|
||||||
|
app_db: AppStore,
|
||||||
|
auth_store: AuthStore,
|
||||||
|
header: HeaderMap<HeaderValue>,
|
||||||
|
method: Method,
|
||||||
|
path: &str,
|
||||||
|
origin: &str,
|
||||||
|
key_module: &str
|
||||||
|
) -> Self {
|
||||||
|
let app_data = app_db.app_data.read();
|
||||||
|
// let auth_store: &'a AuthStore = &AuthStore {
|
||||||
|
// users: auth_db.users.clone(),
|
||||||
|
// sessions: auth_db.sessions.clone(),
|
||||||
|
// enforcer: auth_db.enforcer.clone(),
|
||||||
|
// };
|
||||||
|
Self {
|
||||||
|
req: ReqTasks {
|
||||||
|
app_data: app_data.to_owned(),
|
||||||
|
auth_store: auth_store.to_owned(),
|
||||||
|
header,
|
||||||
|
method,
|
||||||
|
path: format!("{}{}",key_module,path).to_string(),
|
||||||
|
origin: format!("{}{}",key_module,origin).to_string(),
|
||||||
|
key_module: key_module.to_string(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// Get `AppEnv`
|
||||||
|
#[must_use]
|
||||||
|
pub fn env(&self) -> AppEnv {
|
||||||
|
self.req.env()
|
||||||
|
}
|
||||||
|
/// Get Tera
|
||||||
|
#[must_use]
|
||||||
|
pub fn tera(&self) -> tera::Tera {
|
||||||
|
self.req.tera()
|
||||||
|
}
|
||||||
|
/// Get Context (ctx)
|
||||||
|
#[must_use]
|
||||||
|
pub fn ctx(&self) -> tera::Context {
|
||||||
|
self.req.ctx()
|
||||||
|
}
|
||||||
|
/// Get `AppEnv` Config
|
||||||
|
#[must_use]
|
||||||
|
pub fn config(&self) -> Config {
|
||||||
|
self.req.config()
|
||||||
|
}
|
||||||
|
#[must_use]
|
||||||
|
pub fn module(&self) -> Module {
|
||||||
|
self.req.module()
|
||||||
|
}
|
||||||
|
#[must_use]
|
||||||
|
pub fn lang(&self) -> String {
|
||||||
|
self.req.lang()
|
||||||
|
}
|
||||||
|
#[allow(clippy::missing_errors_doc)]
|
||||||
|
pub fn token_from_header(&self) -> anyhow::Result<String> {
|
||||||
|
self.req.token_from_header()
|
||||||
|
}
|
||||||
|
#[allow(clippy::missing_errors_doc)]
|
||||||
|
pub async fn token_session(&self, login: &LoginRequest) -> anyhow::Result<String> {
|
||||||
|
self.req.token_session(login).await
|
||||||
|
}
|
||||||
|
#[allow(clippy::missing_errors_doc)]
|
||||||
|
pub async fn user_authentication(&self) -> anyhow::Result<UserCtx> {
|
||||||
|
self.req.user_authentication().await
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user