Implement remaining card management

This commit is contained in:
Nadja Reitzenstein 2023-01-09 16:58:32 +01:00
parent 24c02fccff
commit e42a32934a
4 changed files with 51 additions and 17 deletions

View File

@ -12,6 +12,9 @@ use capnp::capability::Promise;
use capnp::Error;
use capnp_rpc::pry;
use std::borrow::Cow;
use std::io::Write;
use uuid::Uuid;
use crate::CONFIG;
const TARGET: &str = "bffh::api::user";
@ -333,35 +336,54 @@ impl card_d_e_s_fire_e_v2::Server for User {
fn gen_card_token(
&mut self,
_: GenCardTokenParams,
_: GenCardTokenResults,
mut results: GenCardTokenResults,
) -> Promise<(), Error> {
let _guard = self.span.enter();
let _span = tracing::trace_span!(target: TARGET, "get_token_list").entered();
let _span = tracing::trace_span!(target: TARGET, "get_card_token").entered();
tracing::trace!("method call");
Promise::err(Error::unimplemented(format!(
"Method get_token_list is not implemented yet"
)))
results.get().set_token(Uuid::new_v4().as_bytes());
Promise::ok(())
}
fn get_meta_info(&mut self, _: GetMetaInfoParams, _: GetMetaInfoResults) -> Promise<(), Error> {
fn get_meta_info(&mut self, _: GetMetaInfoParams, mut results: GetMetaInfoResults)
-> Promise<(), Error>
{
let _guard = self.span.enter();
let _span = tracing::trace_span!(target: TARGET, "get_token_list").entered();
let _span = tracing::trace_span!(target: TARGET, "get_meta_info").entered();
tracing::trace!("method call");
Promise::err(Error::unimplemented(format!(
"Method get_token_list is not implemented yet"
)))
results.get().set_bytes(b"FABACCESS\x00DESFIRE\x001.0\x00");
Promise::ok(())
}
fn get_space_info(
&mut self,
_: GetSpaceInfoParams,
_: GetSpaceInfoResults,
mut results: GetSpaceInfoResults,
) -> Promise<(), Error> {
let _guard = self.span.enter();
let _span = tracing::trace_span!(target: TARGET, "get_token_list").entered();
let _span = tracing::trace_span!(target: TARGET, "get_space_info").entered();
tracing::trace!("method call");
Promise::err(Error::unimplemented(format!(
"Method get_token_list is not implemented yet"
)))
let space = if let Some(space) = CONFIG.get().and_then(|c| c.spacename.as_ref()) {
space
} else {
return Promise::err(Error::failed("No space name configured".to_string()));
};
let url = if let Some(url) = CONFIG.get().and_then(|c| c.instanceurl.as_ref()) {
url
} else {
return Promise::err(Error::failed("No instance url configured".to_string()));
};
let mut data = Vec::new();
write!(&mut data, "urn:fabaccess:lab:{space}\x00{url}").unwrap();
results.get().set_bytes(&data);
Promise::ok(())
}
}

View File

@ -96,6 +96,12 @@ pub struct Config {
#[serde(default, skip)]
pub logging: LogConfig,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub spacename: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub instanceurl: Option<String>,
}
impl Config {
@ -164,6 +170,8 @@ impl Default for Config {
tlskeylog: None,
verbosity: 0,
logging: LogConfig::default(),
instanceurl: None,
spacename: None,
}
}
}

View File

@ -81,6 +81,8 @@ pub struct Diflouroborane {
pub static RESOURCES: OnceCell<ResourcesHandle> = OnceCell::new();
pub static CONFIG: OnceCell<Config> = OnceCell::new();
struct SignalHandlerErr;
impl error::Description for SignalHandlerErr {
const CODE: &'static str = "signals::new";
@ -182,7 +184,8 @@ impl Diflouroborane {
desc.clone(),
)))
}));
RESOURCES.set(resources.clone());
RESOURCES.set(resources.clone()).unwrap();
CONFIG.set(config.clone()).unwrap();
Ok(Self {
config,

View File

@ -2,6 +2,7 @@ use crate::resources::Resource;
use std::collections::HashMap;
use std::sync::Arc;
#[derive(Debug)]
struct Inner {
id: HashMap<String, Resource>,
}
@ -19,7 +20,7 @@ impl Inner {
}
}
#[derive(Clone)]
#[derive(Clone, Debug)]
pub struct ResourcesHandle {
inner: Arc<Inner>,
}