This is an optimized version of the classify client endpoint in Normandy.
This is a normal Cargo project, so after cloning the repository, you can build and run it with
$ cargo build
$ cargo runThis project should run on the latest stable version of Rust. Unstable features are not allowed.
A GeoIP database will need to be provided. By default it is expected to be
found at ./GeoLite2-Country.mmdb.
Via environment variables:
DEBUG: Set to"true"to enable extra debugging options, such as a/debugendpoint that shows internal server state (default:"false").GEOIP_DB_PATH: path to GeoIP database (default:"./GeoLite2-Country.mmdb")HOST: host to bind to (default:"localhost")HUMAN_LOGS: set to"true"to use human readable logging (default: MozLog as JSON)METRICS_TARGET: The host and port to send statsd metrics to. May be a hostname like"metrics.example.com:8125"or an IP like"127.0.0.1:8125". Port is required. (default:"localhost:8125")LOG_LEVEL: minimum log level for slog, higher levels will be filtered out. Defaults towarning. Options:off, critical, error, warning, info, debug, tracePORT: port number to bind to (default:"8000")SENTRY_DSN: report errors to a Sentry instance (default:"")SENTRY_ENV: Sentry environment (default:"production")SENTRY_SAMPLE_RATE: Sentry sampling rate (default:1.0)TRUSTED_PROXY_LIST: A comma-separated list of CIDR ranges that trusted proxies will be in. Supports both IPv4 and IPv6.VERSION_FILE: path toversion.jsonfile (default:"./version.json")API_KEYS_FILE: path toapiKeys.jsonfile for/v1/countryendpoint (default:"./apiKeys.json")
Tests can be run with Cargo as well
$ cargo testLinting is handled via
Therapist. After installing it,
enable the git hooks using either therapist install or therapist install --fix. The --fix variant will automatically format your code upon commit.
The variant without --fix will simply show an error and ask you to reformat
the code using other means before committing. Therapist runs in CI.
The checks Therapist runs are:
- Rustfmt
- Clippy, using the
clippy::allpreset
Endpoints from the Mozilla Location Services project has been migrated to classify-client for continuity.
/v1/country- Requires an api key.- Downstream firefox builds can self select a key that matches this expression:
^firefox-downstream-\w{1,40}$ - The API key is required here just to have rough usage metrics and allow us to reach out to project maintainers if needed in the future.
- Downstream firefox builds can self select a key that matches this expression:
/v1/geolocate- Intentionally not routed to return a 404/v1/geosubmit- Static 403 response/v1/submit- Static 403 response/v2/geosubmit- Static 403 response