rmp_serde::encode::write(&mut dw, &v).expect("serialize failed!");
AssetUrlToken(dw.finish().0)
}
+
+ #[throws(BadAssetUrlToken)]
+ pub fn check<V>(&self, what: &str, v: &V, got: &AssetUrlToken)
+ -> Authorisation<V>
+ where V: Serialize {
+ let exp = self.token(what, v);
+ if ! bool::from(ConstantTimeEq::ct_eq(
+ &exp.0[..],
+ &got.0[..],
+ )) { throw!(BadAssetUrlToken) }
+ else { Authorisation::authorised(v) }
+ }
}
impl Display for AssetUrlToken {
#[throws(fmt::Error)]
pub use slotmap::{dense::DenseSlotMap, SparseSecondaryMap, Key as _};
pub use strum::{EnumString, EnumIter, EnumProperty};
pub use strum::{IntoEnumIterator, IntoStaticStr};
+pub use subtle::ConstantTimeEq;
pub use tempfile::NamedTempFile;
pub use thiserror::Error;
pub use url::Url;
pub use crate::authproofs::{self, Authorisation, Unauthorised};
pub use crate::authproofs::AuthorisationSuperuser;
pub use crate::bundles::{self, InstanceBundles, MgmtBundleListExt};
-pub use crate::bundles::{AssetUrlKey, AssetUrlToken};
+pub use crate::bundles::{AssetUrlKey, AssetUrlToken, BadAssetUrlToken};
pub use crate::commands::{AccessTokenInfo, AccessTokenReport, MgmtError};
pub use crate::commands::{MgmtCommand, MgmtResponse};
pub use crate::commands::{MgmtGameInstruction, MgmtGameResponse};