Skip to content

Commit 38f622f

Browse files
committed
Added HTTP dependency
1 parent dc2db91 commit 38f622f

17 files changed

+233
-220
lines changed

Package.resolved

Lines changed: 23 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.swift

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,11 @@ let package = Package(
3939
.package(
4040
url: "https://github.com/uraimo/SwiftyGPIO.git",
4141
branch: "master"
42-
)
42+
),
43+
.package(
44+
url: "https://github.com/PureSwift/HTTP.git",
45+
branch: "master"
46+
),
4347
],
4448
targets: [
4549
.executableTarget(
@@ -75,6 +79,7 @@ let package = Package(
7579
condition: .when(platforms: [.linux])
7680
),
7781
"CoreLockGATTServer",
82+
//"CoreLockWebServer",
7883
"SwiftyGPIO"
7984
]
8085
),
@@ -87,16 +92,28 @@ let package = Package(
8792
name: "Bluetooth",
8893
package: "Bluetooth"
8994
),
95+
"HTTP"
9096
]
9197
),
9298
.target(
9399
name: "CoreLockGATTServer",
94100
dependencies: ["CoreLock"]
95-
),
101+
),/*
102+
.target(
103+
name: "CoreLockWebServer",
104+
dependencies: [
105+
"CoreLock",
106+
"HTTP"
107+
]
108+
),*/
96109
.testTarget(
97110
name: "CoreLockTests",
98111
dependencies: ["CoreLock"]
99-
)
112+
),/*
113+
.testTarget(
114+
name: "CoreLockGATTServerTests",
115+
dependencies: ["CoreLockGATTServer"]
116+
)*/
100117
]
101118
)
102119

@@ -114,4 +131,5 @@ package.targets[0].dependencies.append(
114131
condition: .when(platforms: [.linux])
115132
)
116133
)
134+
//package.targets.first(where: { $0.name == "CoreLockWebServer" })?.dependencies.append("NetService")
117135
#endif

Sources/CoreLock/Crypto/Authentication.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import Foundation
99

10-
public struct Authentication: Equatable, Codable {
10+
public struct Authentication: Equatable, Hashable, Codable {
1111

1212
public let message: AuthenticationMessage
1313

@@ -26,7 +26,7 @@ public struct Authentication: Equatable, Codable {
2626
}
2727

2828
/// HMAC Message
29-
public struct AuthenticationMessage: Equatable, Codable {
29+
public struct AuthenticationMessage: Equatable, Hashable, Codable {
3030

3131
public let date: Date
3232

Sources/CoreLock/Crypto/EncryptedData.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import Foundation
99
import TLVCoding
1010

11-
public struct EncryptedData: Equatable, Codable {
11+
public struct EncryptedData: Equatable, Hashable, Codable {
1212

1313
/// HMAC signature, signed by secret.
1414
public let authentication: Authentication

Sources/CoreLock/Networking/CreateNewKeyRequest.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
//
88

99
import Foundation
10-
1110
#if canImport(FoundationNetworking)
1211
import FoundationNetworking
1312
#endif
14-
/*
15-
public struct CreateNewKeyNetServiceRequest: Equatable {
13+
import HTTP
14+
15+
public struct CreateNewKeyNetServiceRequest: Equatable, Hashable {
1616

1717
/// Lock server
1818
public let server: URL
@@ -21,7 +21,7 @@ public struct CreateNewKeyNetServiceRequest: Equatable {
2121
public let authorization: LockNetService.Authorization
2222

2323
/// Encrypted request
24-
public let encryptedData: LockNetService.EncryptedData
24+
public let encryptedData: Data
2525
}
2626

2727
// MARK: - URL Request
@@ -30,18 +30,18 @@ public extension CreateNewKeyNetServiceRequest {
3030

3131
func urlRequest(encoder: JSONEncoder = JSONEncoder()) -> URLRequest {
3232

33-
// http://localhost:8080/keys
33+
// http://localhost:8080/key
3434
let url = server.appendingPathComponent("key")
3535
var urlRequest = URLRequest(url: url)
36-
urlRequest.addValue(authorization.header, forHTTPHeaderField: LockNetService.Authorization.headerField)
36+
urlRequest.addValue(authorization.header, forHTTPHeaderField: HTTPHeader.authorization.rawValue)
3737
urlRequest.httpMethod = "POST"
3838
urlRequest.httpBody = try! encoder.encode(encryptedData)
3939
return urlRequest
4040
}
4141
}
4242

4343
// MARK: - Encryption
44-
44+
/*
4545
public extension CreateNewKeyNetServiceRequest {
4646

4747
init(server: URL,
@@ -55,7 +55,7 @@ public extension CreateNewKeyNetServiceRequest {
5555
self.encryptedData = try .init(encrypt: data, with: key.secret)
5656
}
5757

58-
static func decrypt(_ encryptedData: LockNetService.EncryptedData,
58+
static func decrypt(_ encryptedData: Data,
5959
with key: KeyData,
6060
decoder: JSONDecoder = JSONDecoder()) throws -> CreateNewKeyRequest {
6161

Sources/CoreLock/Networking/DeleteKeyRequest.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
//
88

99
import Foundation
10-
1110
#if canImport(FoundationNetworking)
1211
import FoundationNetworking
1312
#endif
14-
/*
15-
/// Lock Software Update HTTP Request
13+
import HTTP
14+
15+
/// Delete Key HTTP Request
1616
public struct DeleteKeyRequest: Equatable {
1717

1818
/// Lock server
@@ -39,12 +39,12 @@ public extension DeleteKeyRequest {
3939
.appendingPathComponent(type.stringValue)
4040
.appendingPathComponent(key.uuidString)
4141
var urlRequest = URLRequest(url: url)
42-
urlRequest.addValue(authorization.header, forHTTPHeaderField: LockNetService.Authorization.headerField)
42+
urlRequest.addValue(authorization.header, forHTTPHeaderField: HTTPHeader.authorization.rawValue)
4343
urlRequest.httpMethod = "DELETE"
4444
return urlRequest
4545
}
4646
}
47-
47+
/*
4848
// MARK: - Client
4949

5050
public extension LockNetService.Client {

Sources/CoreLock/Networking/EventsRequest.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
//
88

99
import Foundation
10-
1110
#if canImport(FoundationNetworking)
1211
import FoundationNetworking
1312
#endif
14-
/*
13+
import HTTP
14+
1515
public struct EventsNetServiceRequest: Equatable {
1616

1717
/// Lock server
@@ -37,7 +37,7 @@ public extension EventsNetServiceRequest {
3737
guard let url = urlComponents.url
3838
else { fatalError() }
3939
var urlRequest = URLRequest(url: url)
40-
urlRequest.addValue(authorization.header, forHTTPHeaderField: LockNetService.Authorization.headerField)
40+
urlRequest.addValue(authorization.header, forHTTPHeaderField: HTTPHeader.authorization.rawValue)
4141
urlRequest.httpMethod = "GET"
4242
return urlRequest
4343
}
@@ -117,7 +117,7 @@ internal extension Sequence where Self.Element == URLQueryItem {
117117
}
118118

119119
// MARK: - Client
120-
120+
/*
121121
public extension LockNetService.Client {
122122

123123
/// Retreive a list of events on device.

Sources/CoreLock/Networking/KeysRequest.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
//
88

99
import Foundation
10-
1110
#if canImport(FoundationNetworking)
1211
import FoundationNetworking
1312
#endif
14-
/*
13+
import HTTP
14+
1515
public struct KeysNetServiceRequest: Equatable {
1616

1717
/// Lock server
@@ -30,11 +30,11 @@ public extension KeysNetServiceRequest {
3030
// http://localhost:8080/keys
3131
let url = server.appendingPathComponent("key")
3232
var urlRequest = URLRequest(url: url)
33-
urlRequest.addValue(authorization.header, forHTTPHeaderField: LockNetService.Authorization.headerField)
33+
urlRequest.addValue(authorization.header, forHTTPHeaderField: HTTPHeader.authorization.rawValue)
3434
return urlRequest
3535
}
3636
}
37-
37+
/*
3838
// MARK: - Client
3939

4040
public extension LockNetService.Client {

Sources/CoreLock/Networking/KeysResponse.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ import Foundation
1010
/*
1111
public struct KeysResponse: Equatable {
1212

13-
public let encryptedData: LockNetService.EncryptedData
13+
public let encryptedData: Data
1414
}
1515

1616
// MARK: - Codable
1717

1818
extension KeysResponse: Codable {
1919

2020
public init(from decoder: Decoder) throws {
21-
self.encryptedData = try LockNetService.EncryptedData(from: decoder)
21+
self.encryptedData = try Data(from: decoder)
2222
}
2323

2424
public func encode(to encoder: Encoder) throws {
@@ -39,7 +39,7 @@ public extension KeysResponse {
3939
}
4040

4141
func decrypt(using key: KeyData,
42-
decoder: JSONDecoder = JSONDecoder()) throws -> KeysList {
42+
decoder: JSONDecoder = JSONDecoder()) throws -> KeysList {
4343

4444
let data = try encryptedData.decrypt(using: key)
4545
return try decoder.decode(KeysList.self, from: data)

Sources/CoreLock/Networking/LockInformationRequest.swift

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
//
88

99
import Foundation
10-
1110
#if canImport(FoundationNetworking)
1211
import FoundationNetworking
1312
#endif
14-
/*
13+
import HTTP
14+
1515
/// Lock Information Web Request
16-
public struct LockInformationNetServiceRequest: Equatable {
16+
public struct LockInformationNetServiceRequest: Equatable, Hashable {
1717

1818
/// Lock server
1919
public let server: URL
@@ -22,32 +22,38 @@ public struct LockInformationNetServiceRequest: Equatable {
2222
public extension LockInformationNetServiceRequest {
2323

2424
func urlRequest() -> URLRequest {
25-
2625
// http://localhost:8080/info
2726
let url = server.appendingPathComponent("info")
2827
return URLRequest(url: url)
2928
}
3029
}
3130

31+
/*
3232
public extension LockNetService.Client {
3333

3434
/// Read the lock's information characteristic.
35-
func readInformation(for server: LockNetService,
36-
timeout: TimeInterval = LockNetService.defaultTimeout) throws -> LockNetService.LockInformation {
37-
38-
log?("Read information for \(server.url.absoluteString)")
39-
40-
let request = LockInformationNetServiceRequest(server: server.url).urlRequest()
41-
42-
let (httpResponse, data) = try urlSession.synchronousDataTask(with: request)
35+
func readInformation(
36+
for server: LockNetService,
37+
timeout: TimeInterval = LockNetService.defaultTimeout
38+
) async throws -> LockNetService.LockInformation {
4339

40+
}
41+
}
42+
43+
public extension HTTPClient {
44+
45+
/// Read the lock's information characteristic.
46+
func readInformation(
47+
for server: URL
48+
) async throws -> LockNetService.LockInformation {
49+
//log?("Read information for \(server.url.absoluteString)")
50+
let request = LockInformationNetServiceRequest(server: server).urlRequest()
51+
let (httpResponse, data) = try await self.data(for: request)
4452
guard httpResponse.statusCode == 200
4553
else { throw LockNetService.Error.statusCode(httpResponse.statusCode) }
46-
4754
guard let jsonData = data,
4855
let response = try? jsonDecoder.decode(LockNetService.LockInformation.self, from: jsonData)
4956
else { throw LockNetService.Error.invalidResponse }
50-
5157
return response
5258
}
5359
}

0 commit comments

Comments
 (0)