Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
ae2696b
Create migration test
macpie Oct 3, 2025
98f8b4f
Update tracker
macpie Oct 6, 2025
029dd39
Fix gateway DB calls
macpie Oct 6, 2025
6240c9d
Fix Clippy
macpie Oct 6, 2025
eb1498f
PR comments
macpie Oct 7, 2025
e0531af
Add some print to debug
macpie Oct 7, 2025
497e0e4
Fix timestamp check
macpie Oct 7, 2025
ca0c79f
Added new API for retrieving historical gateway info
connormck333 Oct 17, 2025
4dfc96c
Add v1 to historical gateway info protobuf
connormck333 Oct 17, 2025
e7def30
Refactored gateway service reducing code dupe
connormck333 Oct 17, 2025
bb64843
Changed proto branch
connormck333 Oct 22, 2025
bda0b40
Fixed formatting errors
connormck333 Oct 22, 2025
968b6be
Gateway historical info test assertions updated
connormck333 Oct 22, 2025
507a18d
Fixed formatting errors
connormck333 Oct 22, 2025
8c8f374
Fixed formatting errors
connormck333 Oct 22, 2025
9cdf3af
Increased sleep in historical info test
connormck333 Oct 22, 2025
7f6003d
Tests cleanup, removed println, changed assert! to assert_eq
connormck333 Oct 23, 2025
01376f0
Removed sleep from test
connormck333 Oct 23, 2025
5c7eb38
Updated gateway tracker test name & reduced test size
connormck333 Oct 23, 2025
7556b56
Removed println in tests
connormck333 Oct 23, 2025
f7bec6a
Add info_historical command to mobile_config_cli
connormck333 Oct 24, 2025
53078d0
Changed historical info to info_at_timestamp
connormck333 Oct 24, 2025
e83d7b8
Update mobile verifiers to use new info_at_timestamp API
connormck333 Oct 28, 2025
924d2d4
Revert "Update mobile verifiers to use new info_at_timestamp API"
connormck333 Oct 28, 2025
4d6cfa5
Update mobile verifiers to use new info_at_timestamp API
connormck333 Oct 28, 2025
2d144a0
Merged with main
connormck333 Nov 13, 2025
7b4d444
Update packet_verifier to use BucketClient
connormck333 Nov 13, 2025
321ab63
Add banning bucket settings
connormck333 Nov 13, 2025
5012432
Add query_timestamp to new ITs
connormck333 Nov 13, 2025
473f02e
Fix fmt
connormck333 Nov 13, 2025
c0f4257
Removed old settings & moved ban settings
connormck333 Nov 13, 2025
e22ac90
Fix fmt
connormck333 Nov 14, 2025
25c8eab
Resolved merge conflicts
connormck333 Nov 14, 2025
a52ad49
Moved bucket settings to individual fields
connormck333 Nov 17, 2025
2b43ff7
Remove unused file_store from settings
bbalser Nov 17, 2025
ac1d846
Update query time to receieved_timestamp
connormck333 Nov 17, 2025
d2bd535
Fix clippy & fmt
connormck333 Nov 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 30 additions & 30 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 15 additions & 10 deletions mobile_config/src/gateway/client.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use crate::client::{call_with_retry, ClientError, Settings};
use crate::gateway::service::info::{GatewayInfo, GatewayInfoStream};
use chrono::{DateTime, Utc};
use file_store_oracles::traits::MsgVerify;
use futures::stream::{self, StreamExt};
use helium_crypto::{Keypair, PublicKey, PublicKeyBinary, Sign};
Expand Down Expand Up @@ -49,6 +50,7 @@ pub trait GatewayInfoResolver: Clone + Send + Sync + 'static {
async fn resolve_gateway_info(
&self,
address: &PublicKeyBinary,
gateway_query_timestamp: &DateTime<Utc>,
) -> Result<Option<GatewayInfo>, ClientError>;

async fn stream_gateways_info(
Expand All @@ -62,27 +64,30 @@ impl GatewayInfoResolver for GatewayClient {
async fn resolve_gateway_info(
&self,
address: &PublicKeyBinary,
gateway_query_timestamp: &DateTime<Utc>,
) -> Result<Option<GatewayInfo>, ClientError> {
if let Some(cached_response) = self.cache.get(address).await {
return Ok(cached_response.value().clone());
}

let mut request = mobile_config::GatewayInfoReqV1 {
let mut request = mobile_config::GatewayInfoAtTimestampReqV1 {
address: address.clone().into(),
signer: self.signing_key.public_key().into(),
signature: vec![],
query_time: gateway_query_timestamp.clone().timestamp() as u64,
};
request.signature = self.signing_key.sign(&request.encode_to_vec())?;
tracing::debug!(pubkey = address.to_string(), "fetching gateway info");
let response = match call_with_retry!(self.client.clone().info_v2(request.clone())) {
Ok(info_res) => {
let response = info_res.into_inner();
response.verify(&self.config_pubkey)?;
response.info.map(GatewayInfo::try_from).transpose()?
}
Err(status) if status.code() == tonic::Code::NotFound => None,
Err(status) => Err(status)?,
};
let response =
match call_with_retry!(self.client.clone().info_at_timestamp(request.clone())) {
Ok(info_res) => {
let response = info_res.into_inner();
response.verify(&self.config_pubkey)?;
response.info.map(GatewayInfo::try_from).transpose()?
}
Err(status) if status.code() == tonic::Code::NotFound => None,
Err(status) => Err(status)?,
};

self.cache
.insert(address.clone(), response.clone(), self.cache_ttl)
Expand Down
5 changes: 4 additions & 1 deletion mobile_packet_verifier/src/accumulate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,10 @@ async fn verify_report(
return Ok(ReportStatus::Banned);
}

if !mobile_config.is_gateway_known(gw_pub_key).await {
if !mobile_config
.is_gateway_known(gw_pub_key, &report.received_timestamp)
.await
{
return Ok(ReportStatus::InvalidGatewayKey);
}

Expand Down
5 changes: 2 additions & 3 deletions mobile_packet_verifier/src/banning/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ pub const BAN_CLEANUP_DAYS: i64 = 7;
#[derive(Debug, Deserialize, Serialize)]
pub struct BanSettings {
/// Where do we look in s3 for ban files
pub input_bucket: String,
pub input_bucket: file_store::BucketSettings,
/// How often to purge expired bans
#[serde(with = "humantime_serde", default = "default_purge_interval")]
pub purge_interval: Duration,
Expand All @@ -40,12 +40,11 @@ fn default_ingest_start_after() -> DateTime<Utc> {

pub async fn create_managed_task(
pool: PgPool,
client: file_store::Client,
settings: &BanSettings,
) -> anyhow::Result<impl ManagedTask> {
let (ban_report_rx, ban_report_server) = file_source::continuous_source()
.state(pool.clone())
.file_store(client, settings.input_bucket.clone())
.bucket_client(settings.input_bucket.connect().await)
.lookback_start_after(settings.start_after)
.prefix(FileType::VerifiedMobileBanReport.to_string())
.create()
Expand Down
8 changes: 3 additions & 5 deletions mobile_packet_verifier/src/daemon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,9 +156,8 @@ impl Cmd {
None
};

let file_store_client = settings.file_store.connect().await;
let (file_upload, file_upload_server) =
file_upload::FileUpload::new(file_store_client.clone(), settings.output_bucket.clone())
file_upload::FileUpload::from_bucket_client(settings.output_bucket.connect().await)
.await;

let (valid_sessions, valid_sessions_server) = ValidDataTransferSession::file_sink(
Expand Down Expand Up @@ -189,7 +188,7 @@ impl Cmd {

let (reports, reports_server) = file_source::continuous_source()
.state(pool.clone())
.file_store(file_store_client.clone(), settings.ingest_bucket.clone())
.bucket_client(settings.ingest_bucket.connect().await)
.prefix(FileType::DataTransferSessionIngestReport.to_string())
.lookback_start_after(settings.start_after)
.create()
Expand All @@ -207,8 +206,7 @@ impl Cmd {
);

let event_id_purger = EventIdPurger::from_settings(pool.clone(), settings);
let banning =
banning::create_managed_task(pool, file_store_client, &settings.banning).await?;
let banning = banning::create_managed_task(pool, &settings.banning).await?;

TaskManager::builder()
.add_task(file_upload_server)
Expand Down
Loading
Loading