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::Error;
use capnp_rpc::pry; use capnp_rpc::pry;
use std::borrow::Cow; use std::borrow::Cow;
use std::io::Write;
use uuid::Uuid;
use crate::CONFIG;
const TARGET: &str = "bffh::api::user"; 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( fn gen_card_token(
&mut self, &mut self,
_: GenCardTokenParams, _: GenCardTokenParams,
_: GenCardTokenResults, mut results: GenCardTokenResults,
) -> Promise<(), Error> { ) -> Promise<(), Error> {
let _guard = self.span.enter(); 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"); 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 _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"); 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( fn get_space_info(
&mut self, &mut self,
_: GetSpaceInfoParams, _: GetSpaceInfoParams,
_: GetSpaceInfoResults, mut results: GetSpaceInfoResults,
) -> Promise<(), Error> { ) -> Promise<(), Error> {
let _guard = self.span.enter(); 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"); 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)] #[serde(default, skip)]
pub logging: LogConfig, 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 { impl Config {
@ -164,6 +170,8 @@ impl Default for Config {
tlskeylog: None, tlskeylog: None,
verbosity: 0, verbosity: 0,
logging: LogConfig::default(), 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 RESOURCES: OnceCell<ResourcesHandle> = OnceCell::new();
pub static CONFIG: OnceCell<Config> = OnceCell::new();
struct SignalHandlerErr; struct SignalHandlerErr;
impl error::Description for SignalHandlerErr { impl error::Description for SignalHandlerErr {
const CODE: &'static str = "signals::new"; const CODE: &'static str = "signals::new";
@ -182,7 +184,8 @@ impl Diflouroborane {
desc.clone(), desc.clone(),
))) )))
})); }));
RESOURCES.set(resources.clone()); RESOURCES.set(resources.clone()).unwrap();
CONFIG.set(config.clone()).unwrap();
Ok(Self { Ok(Self {
config, config,

View File

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