Skip to content
Snippets Groups Projects
Commit 084ed848 authored by Hugo Trentesaux's avatar Hugo Trentesaux
Browse files

refac certification checks

parent 3c8ade7c
No related branches found
No related tags found
1 merge request!219automatically claim membership
...@@ -282,8 +282,13 @@ pub mod pallet { ...@@ -282,8 +282,13 @@ pub mod pallet {
) -> DispatchResultWithPostInfo { ) -> DispatchResultWithPostInfo {
let who = ensure_signed(origin)?; let who = ensure_signed(origin)?;
// Verify caller ownership
let issuer_owner_key =
T::OwnerKeyOf::convert(issuer).ok_or(Error::<T>::IssuerNotFound)?;
ensure!(issuer_owner_key == who, DispatchError::BadOrigin);
let block_number = frame_system::pallet::Pallet::<T>::block_number(); let block_number = frame_system::pallet::Pallet::<T>::block_number();
Self::check_cert_allowed(who, issuer, receiver, block_number)?; Self::check_add_cert(issuer, receiver, block_number)?;
Self::do_add_cert(block_number, issuer, receiver); Self::do_add_cert(block_number, issuer, receiver);
Ok(().into()) Ok(().into())
...@@ -326,37 +331,18 @@ pub mod pallet { ...@@ -326,37 +331,18 @@ pub mod pallet {
receiver: T::IdtyIndex, receiver: T::IdtyIndex,
verify_rules: bool, verify_rules: bool,
) -> DispatchResultWithPostInfo { ) -> DispatchResultWithPostInfo {
// Verify rule (1.) Forbid self cert
ensure!(issuer != receiver, Error::<T>::CannotCertifySelf);
let block_number = frame_system::pallet::Pallet::<T>::block_number(); let block_number = frame_system::pallet::Pallet::<T>::block_number();
if verify_rules { if verify_rules {
// Verify rule (3.) MinReceivedCertToBeAbleToIssueCert // only verify internal rules if asked
let issuer_idty_cert_meta = StorageIdtyCertMeta::<T>::get(issuer); Self::check_add_cert_internal(issuer, receiver, block_number)?;
ensure!(
issuer_idty_cert_meta.received_count
>= T::MinReceivedCertToBeAbleToIssueCert::get(),
Error::<T>::NotEnoughCertReceived
);
// Verify rule (4.) MaxByIssuer
ensure!(
issuer_idty_cert_meta.issued_count < T::MaxByIssuer::get(),
Error::<T>::IssuedTooManyCert
);
// Verify rule (5.) CertPeriod
ensure!(
block_number >= issuer_idty_cert_meta.next_issuable_on,
Error::<T>::NotRespectCertPeriod
);
}; };
Self::do_add_cert(block_number, issuer, receiver); Self::do_add_cert(block_number, issuer, receiver);
Ok(().into()) Ok(().into())
} }
/// perform cert addition or renewal /// perform cert addition or renewal
fn do_add_cert(block_number: T::BlockNumber, issuer: T::IdtyIndex, receiver: T::IdtyIndex) { fn do_add_cert(block_number: T::BlockNumber, issuer: T::IdtyIndex, receiver: T::IdtyIndex) {
// Write CertsRemovableOn // Write CertsRemovableOn
...@@ -416,6 +402,7 @@ pub mod pallet { ...@@ -416,6 +402,7 @@ pub mod pallet {
Self::deposit_event(Event::CertRenewed { issuer, receiver }); Self::deposit_event(Event::CertRenewed { issuer, receiver });
}; };
} }
/// remove the certifications due to expire on the given block /// remove the certifications due to expire on the given block
// (run at on_initialize step) // (run at on_initialize step)
fn prune_certifications(block_number: T::BlockNumber) -> Weight { fn prune_certifications(block_number: T::BlockNumber) -> Weight {
...@@ -430,6 +417,7 @@ pub mod pallet { ...@@ -430,6 +417,7 @@ pub mod pallet {
total_weight total_weight
} }
/// perform the certification removal /// perform the certification removal
/// if block number is given only remove cert if still set to expire at this block number /// if block number is given only remove cert if still set to expire at this block number
pub fn do_remove_cert( pub fn do_remove_cert(
...@@ -493,24 +481,19 @@ pub mod pallet { ...@@ -493,24 +481,19 @@ pub mod pallet {
} }
/// check cert allowed /// check cert allowed
// first internal checks // 1. no self cert
// then external checks // 2. issuer received cert count
fn check_cert_allowed( // 3. issuer max emitted cert
caller_key: T::AccountId, // 4. issuer cert period
fn check_add_cert_internal(
issuer: T::IdtyIndex, issuer: T::IdtyIndex,
receiver: T::IdtyIndex, receiver: T::IdtyIndex,
block_number: T::BlockNumber, block_number: T::BlockNumber,
) -> DispatchResult { ) -> DispatchResult {
// --- first internal checks
// 1. Forbid self cert // 1. Forbid self cert
ensure!(issuer != receiver, Error::<T>::CannotCertifySelf); ensure!(issuer != receiver, Error::<T>::CannotCertifySelf);
// 2. Verify caller ownership // 2. Verify rule MinReceivedCertToBeAbleToIssueCert
let issuer_owner_key =
T::OwnerKeyOf::convert(issuer).ok_or(Error::<T>::IssuerNotFound)?;
ensure!(issuer_owner_key == caller_key, DispatchError::BadOrigin);
// 3. Verify rule MinReceivedCertToBeAbleToIssueCert
// (this number can differ from the one necessary to be member) // (this number can differ from the one necessary to be member)
let issuer_idty_cert_meta = <StorageIdtyCertMeta<T>>::get(issuer); let issuer_idty_cert_meta = <StorageIdtyCertMeta<T>>::get(issuer);
ensure!( ensure!(
...@@ -519,18 +502,32 @@ pub mod pallet { ...@@ -519,18 +502,32 @@ pub mod pallet {
Error::<T>::NotEnoughCertReceived Error::<T>::NotEnoughCertReceived
); );
// 4. Verify rule MaxByIssuer // 3. Verify rule MaxByIssuer
ensure!( ensure!(
issuer_idty_cert_meta.issued_count < T::MaxByIssuer::get(), issuer_idty_cert_meta.issued_count < T::MaxByIssuer::get(),
Error::<T>::IssuedTooManyCert Error::<T>::IssuedTooManyCert
); );
// 5. Verify rule CertPeriod // 4. Verify rule CertPeriod
ensure!( ensure!(
block_number >= issuer_idty_cert_meta.next_issuable_on, block_number >= issuer_idty_cert_meta.next_issuable_on,
Error::<T>::NotRespectCertPeriod Error::<T>::NotRespectCertPeriod
); );
Ok(())
}
/// check cert allowed
// first internal checks
// then external checks
fn check_add_cert(
issuer: T::IdtyIndex,
receiver: T::IdtyIndex,
block_number: T::BlockNumber,
) -> DispatchResult {
// internal checks
Self::check_add_cert_internal(issuer, receiver, block_number)?;
// --- then external checks // --- then external checks
// - issuer is member // - issuer is member
// - receiver is confirmed // - receiver is confirmed
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment