FileApl, refactor
This commit is contained in:
parent
303c122877
commit
528a391132
6 changed files with 69 additions and 45 deletions
|
@ -63,6 +63,8 @@ features = [
|
||||||
"console",
|
"console",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["middleware", "redis_apl", "webhook_utils", "tracing"]
|
default = ["middleware", "redis_apl", "webhook_utils", "tracing"]
|
||||||
middleware = [
|
middleware = [
|
||||||
|
@ -73,6 +75,7 @@ middleware = [
|
||||||
"dep:http",
|
"dep:http",
|
||||||
]
|
]
|
||||||
redis_apl = ["dep:redis"]
|
redis_apl = ["dep:redis"]
|
||||||
|
file_apl = []
|
||||||
webhook_utils = ["dep:http"]
|
webhook_utils = ["dep:http"]
|
||||||
tracing = ["dep:tracing", "dep:tracing-subscriber"]
|
tracing = ["dep:tracing", "dep:tracing-subscriber"]
|
||||||
bridge = [
|
bridge = [
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
use super::APL;
|
|
||||||
use anyhow::Result;
|
|
||||||
use async_trait::async_trait;
|
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
|
||||||
/**
|
|
||||||
is not implemented yet!
|
|
||||||
*/
|
|
||||||
pub struct EnvApl {}
|
|
||||||
|
|
||||||
#[async_trait]
|
|
||||||
impl APL for EnvApl {
|
|
||||||
async fn set(&self, _auth_data: crate::AuthData) -> Result<()> {
|
|
||||||
todo!()
|
|
||||||
}
|
|
||||||
async fn get(&self, _saleor_api_url: &str) -> Result<crate::AuthData> {
|
|
||||||
todo!()
|
|
||||||
}
|
|
||||||
async fn get_all(&self) -> Result<Vec<crate::AuthData>> {
|
|
||||||
todo!()
|
|
||||||
}
|
|
||||||
async fn delete(&self, _saleor_api_url: &str) -> Result<()> {
|
|
||||||
todo!()
|
|
||||||
}
|
|
||||||
async fn is_ready(&self) -> Result<()> {
|
|
||||||
todo!()
|
|
||||||
}
|
|
||||||
async fn is_configured(&self) -> Result<()> {
|
|
||||||
todo!()
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,13 +1,19 @@
|
||||||
|
use std::{
|
||||||
|
collections::HashMap,
|
||||||
|
ops::{Deref, DerefMut},
|
||||||
|
};
|
||||||
|
|
||||||
|
use crate::AuthData;
|
||||||
|
|
||||||
use super::APL;
|
use super::APL;
|
||||||
use anyhow::{Result};
|
use anyhow::{anyhow, Result};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use tracing::debug;
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
/**
|
/**
|
||||||
is not implemented yet!
|
Only works for this app, can't have multiple apps use same file
|
||||||
*/
|
*/
|
||||||
pub struct FileApl {
|
pub struct FileApl {
|
||||||
pub path: String,
|
pub path: String,
|
||||||
|
@ -15,22 +21,67 @@ pub struct FileApl {
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl APL for FileApl {
|
impl APL for FileApl {
|
||||||
async fn set(&self, _auth_data: crate::AuthData) -> Result<()> {
|
async fn set(&self, auth_data: crate::AuthData) -> Result<()> {
|
||||||
todo!()
|
let path = std::path::Path::new(&self.path);
|
||||||
|
debug!("reading from {:?}", &path);
|
||||||
|
let mut auths: FileStructure = serde_json::from_str(&std::fs::read_to_string(path)?)?;
|
||||||
|
|
||||||
|
auths.insert(auth_data.saleor_api_url.clone(), auth_data);
|
||||||
|
|
||||||
|
debug!("writing to {:?}", &path);
|
||||||
|
std::fs::write(path, &serde_json::to_string_pretty(&auths)?.as_bytes())?;
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
async fn get(&self, _saleor_api_url: &str) -> Result<crate::AuthData> {
|
|
||||||
todo!()
|
async fn get(&self, saleor_api_url: &str) -> Result<crate::AuthData> {
|
||||||
|
let path = std::path::Path::new(&self.path);
|
||||||
|
debug!("reading from {:?}", &path);
|
||||||
|
let auth_data: FileStructure = serde_json::from_str(&std::fs::read_to_string(path)?)?;
|
||||||
|
auth_data
|
||||||
|
.get(saleor_api_url)
|
||||||
|
.cloned()
|
||||||
|
.ok_or(anyhow!("AuthData for {saleor_api_url} not found"))
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn get_all(&self) -> Result<Vec<crate::AuthData>> {
|
async fn get_all(&self) -> Result<Vec<crate::AuthData>> {
|
||||||
todo!()
|
let path = std::path::Path::new(&self.path);
|
||||||
|
debug!("reading from {:?}", &path);
|
||||||
|
let auth_data: FileStructure = serde_json::from_str(&std::fs::read_to_string(path)?)?;
|
||||||
|
Ok(auth_data.0.values().cloned().collect())
|
||||||
}
|
}
|
||||||
async fn delete(&self, _saleor_api_url: &str) -> Result<()> {
|
|
||||||
todo!()
|
async fn delete(&self, saleor_api_url: &str) -> Result<()> {
|
||||||
|
let path = std::path::Path::new(&self.path);
|
||||||
|
debug!("reading from {:?}", &path);
|
||||||
|
let mut auths: FileStructure = serde_json::from_str(&std::fs::read_to_string(path)?)?;
|
||||||
|
auths.remove(saleor_api_url);
|
||||||
|
|
||||||
|
debug!("writing to {:?}", &path);
|
||||||
|
std::fs::write(path, &serde_json::to_string_pretty(&auths)?.as_bytes())?;
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn is_ready(&self) -> Result<()> {
|
async fn is_ready(&self) -> Result<()> {
|
||||||
todo!()
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn is_configured(&self) -> Result<()> {
|
async fn is_configured(&self) -> Result<()> {
|
||||||
todo!()
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Deserialize, Serialize)]
|
||||||
|
struct FileStructure(HashMap<String, AuthData>);
|
||||||
|
|
||||||
|
impl Deref for FileStructure {
|
||||||
|
type Target = HashMap<String, AuthData>;
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DerefMut for FileStructure {
|
||||||
|
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||||
|
&mut self.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ impl APL for RedisApl {
|
||||||
async fn set(&self, auth_data: AuthData) -> Result<()> {
|
async fn set(&self, auth_data: AuthData) -> Result<()> {
|
||||||
debug!("set()");
|
debug!("set()");
|
||||||
let mut conn = self.client.get_multiplexed_async_connection().await?;
|
let mut conn = self.client.get_multiplexed_async_connection().await?;
|
||||||
conn.set(
|
conn.set::<_, _, String>(
|
||||||
self.prepare_key(&auth_data.saleor_api_url),
|
self.prepare_key(&auth_data.saleor_api_url),
|
||||||
serde_json::to_string(&auth_data)?,
|
serde_json::to_string(&auth_data)?,
|
||||||
)
|
)
|
||||||
|
|
|
@ -73,7 +73,7 @@ impl SaleorApp {
|
||||||
File => {
|
File => {
|
||||||
#[cfg(feature = "file_apl")]
|
#[cfg(feature = "file_apl")]
|
||||||
return Ok(Box::new(FileApl {
|
return Ok(Box::new(FileApl {
|
||||||
path: "apl.txt".to_owned(),
|
path: config.apl_url.to_owned(),
|
||||||
}));
|
}));
|
||||||
#[cfg(not(feature = "file_apl"))]
|
#[cfg(not(feature = "file_apl"))]
|
||||||
{
|
{
|
||||||
|
|
1
sdk/src/tests/mod.rs
Normal file
1
sdk/src/tests/mod.rs
Normal file
|
@ -0,0 +1 @@
|
||||||
|
|
Loading…
Reference in a new issue