Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Bunn/SwiftHole
Swift API for PiHole
https://github.com/Bunn/SwiftHole
Last synced: 3 months ago
JSON representation
Swift API for PiHole
- Host: GitHub
- URL: https://github.com/Bunn/SwiftHole
- Owner: Bunn
- License: bsd-2-clause
- Created: 2020-04-25T15:35:42.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-04-18T19:38:07.000Z (over 1 year ago)
- Last Synced: 2024-04-20T17:01:07.700Z (7 months ago)
- Language: Swift
- Size: 37.1 KB
- Stars: 22
- Watchers: 4
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SwiftHole
A Swift library to connect to your Pi-hole## Installation
You can follow [Apple's documentation](https://developer.apple.com/documentation/xcode/adding_package_dependencies_to_your_app) on how to install a SPM into your project## Authentication Token
Some methods like `fetchSummary` do not require authentication to work, but to interact with the Pi-hole server, for example, with `disablePiHole` or `enablePiHole` authentication is necessary.There are two different ways to get your authentication token:
- /etc/pihole/setupVars.conf under WEBPASSWORD
- WebUI -> Settings -> API -> Show API Token## Examples
- Getting Pi-hole summary:
```swift
SwiftHole(host: "192.168.1.123").fetchSummary { result in
switch result {
case .success(let summary):
print("Status \(summary.status)")
case .failure(let error):
print("Error \(error)")
}
}
```- Disable Pi-hole for 5 seconds:
```swift
SwiftHole.init(host: "192.168.1.123", apiToken: "klaatubaradanikto")
.disablePiHole(seconds: 5) { result in
switch result {
case .success:
print("disabled")
case .failure(let error):
print("Error \(error)")
}
}
```- Enable Pi-hole:
```swift
SwiftHole.init(host: "192.168.1.123", apiToken: "klaatubaradanikto")
.enablePiHole { result in
switch result {
case .success:
print("enabled")
case .failure(let error):
print("Error \(error)")
}
}
```## Interface
SwiftHole has the following public interface:
```swift
public var timeoutInterval: TimeInterval { get set }
public init(host: String, port: Int? = nil, apiToken: String? = nil, timeoutInterval: TimeInterval = 30, secure: Bool = false)
public func fetchSummary(completion: @escaping (Result) -> ())
public func enablePiHole(_ completion: @escaping (Result) -> ())
public func disablePiHole(seconds: Int = 0, completion: @escaping (Result) -> ())
public func fetchList(_ listType: ListType, completion: @escaping (Result<[ListItem], SwiftHoleError>) -> ())
public func fetchHistoricalQueries(completion: @escaping (Result<[DNSRequest], SwiftHoleError>) -> ())
public func add(domain: String, to list: ListType, completion: @escaping (Result) -> ())
public func remove(domain: String, from list: ListType, completion: @escaping (Result) -> ())
```