#api #pi-hole #api-bindings

pi-hole-api

Library for interacting with the Pi Hole PHP API

9 releases

0.3.3 Aug 16, 2022
0.3.2 Aug 16, 2022
0.2.2 Aug 8, 2022
0.1.1 May 16, 2020

#1682 in Network programming

Download history 140/week @ 2024-02-19 21/week @ 2024-02-26 3/week @ 2024-03-04 4/week @ 2024-03-11 108/week @ 2024-04-01

113 downloads per month
Used in 2 crates

MIT license

41KB
891 lines

Pi Hole API

Rust library for interacting with the Pi Hole PHP API.

Example

Simple

use pi_hole_api::{PiHoleAPIConfig, UnauthenticatedPiHoleAPI};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let api = PiHoleAPIConfig::new("http://192.168.0.19".to_string());

    let status = api.get_summary();
    println!("{:?}", status);
    Ok(())
}

Authentication

use pi_hole_api::{AuthenticatedPiHoleAPI, PiHoleAPIConfigWithKey};

fn main() {
    // Replace the address and key with those of your Pi Hole
    let api = PiHoleAPIConfigWithKey::new(
        "http://192.168.0.100".to_string(),
        "0123456789abcedf0123456789abcedf0123456789abcedf0123456789abcedf".to_string(),
    );

    match api.get_queries_count() {
        Ok(status) => println!("Total number of queries: {:?}", status),
        Err(e) => panic!("Request failed, check your address and api key: {:?}", e),
    };
}

Limitations

  • Only Pi-Hole v5.0+ is supported due to changes in the return types of the API.
  • Currently removing domains from blacklists/whitelists via the API is broken and therefore isn't implemented. Resolved: PR

Testing

The docker-compose file creates a Pi-Hole instance. You will need the API key of the instance to run the test. Store the key in the environment variable PI_HOLE_API_TEST_API_KEY.

Environmental variables PI_HOLE_API_TEST_TARGET_HTTP_ADDRESS and PI_HOLE_API_TEST_TARGET_DNS_ADDRESS should contain the http address (e.g. http://localhost) and the DNS IP:Port pair (e.g. 127.0.0.1:53).

An envrc example with these variables is available in .envrc-example.

Once the environmental variables are configured the tests can be run with cargo test.

Dependencies

~6MB
~140K SLoC