# gatekeeper-core
`gatekeeper-core` is a library for interfacing with gatekeeper NFC tags.
If you're interested in making a project using gatekeeper, you're free to
use this library, but you might prefer using
[`gatekeeper-members`](https://docs.rs/gatekeeper-members)
which adds support for validating tags against the gatekeeper server,
getting secrets from environment variables, and provides a higher-level
interface that should reduce boilerplate for most common usecases.
## Example
It's pretty easy to connect to a reader and find tags:
```rs
let mut gatekeeper_reader =
GatekeeperReader::new("pn532_uart:/dev/ttyUSB0".to_string(), realm)
.expect("Failed to open gatekeeper");
for tag in gatekeeper_reader.get_nearby_tags() {
if let Ok(association_id) = tag.authenticate() {
println!("Association ID for tag: {association_id}");
}
}
```
Check out the
[`examples`](https://github.com/ComputerScienceHouse/gatekeeper-core/tree/master/examples)
directory for a more comprehensive example.
## Dependencies
Make sure you have libfreefare and libnfc installed. Loads of distributions package these.
If you're having trouble, try building these versions locally, which are known to work well:
* [libfreefare-0.4.0](https://github.com/nfc-tools/libfreefare/releases/tag/libfreefare-0.4.0)
* [libnfc 1.8.0](https://github.com/nfc-tools/libnfc/releases/download/libnfc-1.8.0/libnfc-1.8.0.tar.bz2)