Skip to content

Commit 2b66653

Browse files
committed
feat (fix) - MpesaSecurity implementation officially handled by mpesa_derive macro
1 parent 9640cd6 commit 2b66653

File tree

2 files changed

+3
-26
lines changed

2 files changed

+3
-26
lines changed

mpesa_core/src/client.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ use super::services::{
33
AccountBalanceBuilder, B2bBuilder, B2cBuilder, C2bRegisterBuilder, C2bSimulateBuilder,
44
};
55
use crate::services::MpesaExpressRequestBuilder;
6-
use crate::MpesaError;
6+
use crate::MpesaSecurity;
7+
use mpesa_derive::*;
78
use reqwest::blocking::Client;
89
use serde_json::Value;
910
use std::cell::RefCell;
@@ -12,7 +13,7 @@ use std::cell::RefCell;
1213
pub type MpesaResult<T> = Result<T, MpesaError>;
1314

1415
/// Mpesa client that will facilitate communication with the Safaricom API
15-
#[derive(Debug)]
16+
#[derive(Debug, MpesaSecurity)]
1617
pub struct Mpesa {
1718
client_key: String,
1819
client_secret: String,

mpesa_core/src/mpesa_security.rs

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
use crate::client::MpesaResult;
2-
use crate::Mpesa;
3-
use base64::encode;
4-
use openssl::rsa::Padding;
5-
use openssl::x509::X509;
62

73
/// Trait responsible for implementation of security configs for Mpesa
84
pub trait MpesaSecurity {
@@ -15,23 +11,3 @@ pub trait MpesaSecurity {
1511
/// Returns `EncryptionError` variant of `MpesaError`
1612
fn gen_security_credentials(&self) -> MpesaResult<String>;
1713
}
18-
19-
impl MpesaSecurity for Mpesa {
20-
fn gen_security_credentials(&self) -> MpesaResult<String> {
21-
let pem = self.environment().get_certificate().as_bytes();
22-
let cert = X509::from_pem(pem)?;
23-
// getting the public and rsa keys
24-
let pub_key = cert.public_key()?;
25-
let rsa_key = pub_key.rsa()?;
26-
// configuring the buffer
27-
let buf_len = pub_key.size();
28-
let mut buffer = vec![0; buf_len];
29-
30-
rsa_key.public_encrypt(
31-
self.initiator_password().as_bytes(),
32-
&mut buffer,
33-
Padding::PKCS1,
34-
)?;
35-
Ok(encode(buffer))
36-
}
37-
}

0 commit comments

Comments
 (0)