Remove mobile-config from ingest - #1237
Merged
Merged
Conversation
Authorization now done with a static list of valid keys in settings,
similar to mobile-verifier and mobile-packet-verifier. mobile-config
served authorized keys from an admin-registered `registered_keys` table —
effectively static config — so ingest reads the same allow-list straight
from its settings instead of over gRPC.
The gate covers the four carrier-signed endpoints: hex usage stats,
radio usage stats (v1 + v2), and enabled carriers info. It was the only
mobile-config call ingest made, so the crate dependency is gone.
- SETTINGS:
- remove `config_client`
- add `carrier_authorized_keys`
Not providing authorized keys errors on boot.
Operators must copy the currently registered keys out of mobile-config
before it is shut down:
mobile-config-cli authorization list-keys --key-role carrier
macpie
approved these changes
Aug 18, 2026
michaeldjeffrey
approved these changes
Aug 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ingest was the last production service calling the mobile-config gRPC service, which we are close to shutting down.
The only call it made was a single
verify_authorized_key(pubkey, NetworkKeyRole::MobileCarrier)gate. mobile-config served those keys from an admin-registeredregistered_keystable — effectively static config — so ingest now reads the same allow-list straight from its settings, mirroring what #1228 did for mobile-verifier and therouting_keysallow-list mobile-packet-verifier already uses.The gate covers the four carrier-signed endpoints:
submit_hex_usage_stats_reportsubmit_radio_usage_stats_reportsubmit_radio_usage_stats_report_v2submit_enabled_carriers_infoSince that was the only usage, the
mobile-configcrate dependency is dropped entirely.helium-protostill supplies theNetworkKeyRoleenum.verify_known_carrier_keyis now synchronous — no gRPC round trip and no TTL cache on the hot path.New
ingest::authorizationmodule matchesmobile_verifier::authorization:AuthorizedKeysholding the carrier key set, a trait so tests can mock, and a rolematchthat authorizes onlyMobileCarrier.Settings
config_clientcarrier_authorized_keys— comma-separated b58 keysRequired in
mobilemode and ignored inchainmode. An empty or missing list errors on boot rather than silently rejecting every carrier report, same rule as mobile-verifier'sbanning_authorized_keysand mobile-packet-verifier'srouting_keys.Deploy note
The key list has to come out of mobile-config while it is still up:
Copy the
registered_keysfrom that output intocarrier_authorized_keysand drop the[config_client]block.Worth flagging:
registered_keyswas admin-mutable at runtime, so adding a carrier key was a CLI call. It is now a settings change plus a restart. Same tradeoff the verifiers already took, but ingest is the front door for carrier submissions, so a key rotation costs more here.Testing
cargo nextest run -p ingest— 17/17 pass.cargo clippy --workspace --all-targetsandcargo fmt --checkclean.Added
carrier_endpoints_reject_unauthorized_keys, which boots the server with a real emptyAuthorizedKeysand asserts all four gated endpoints reject. That needed asetup_mobile_with_verifiervariant in the test harness;setup_mobile()delegates to it with the existing permissive mock, so the other tests are untouched.Remaining mobile-config references
mobile_config_cliand the CI/ECR image build. The server also still exposes Gateway, Entity, SubDao, and Admin, which have no in-repo callers — any remaining consumers of those are external and would not show up in this repo.