NightscoutAPI.swift 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import Combine
  2. import CommonCrypto
  3. import Foundation
  4. struct NightscoutAPI {
  5. let url: URL
  6. let secret: String
  7. private let service = NetworkService()
  8. }
  9. extension NightscoutAPI {
  10. func checkConnection() -> AnyPublisher<Void, Error> {
  11. struct Check: Codable, Equatable {
  12. var eventType = "Note"
  13. var enteredBy = "feeaps-x://"
  14. var notes = "FreeAPS connected"
  15. }
  16. let check = Check()
  17. var request = URLRequest(url: url.appendingPathComponent("api/v1/treatments.json"))
  18. request.httpMethod = "POST"
  19. request.addValue("application/json", forHTTPHeaderField: "Content-Type")
  20. request.addValue(secret.sha1(), forHTTPHeaderField: "api-secret")
  21. request.httpBody = try! JSONEncoder().encode(check)
  22. return service.run(request)
  23. .map { _ in () }
  24. .eraseToAnyPublisher()
  25. }
  26. }
  27. private extension String {
  28. func sha1() -> String {
  29. let data = Data(utf8)
  30. var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
  31. data.withUnsafeBytes {
  32. _ = CC_SHA1($0.baseAddress, CC_LONG(data.count), &digest)
  33. }
  34. let hexBytes = digest.map { String(format: "%02hhx", $0) }
  35. return hexBytes.joined()
  36. }
  37. }