Emcee
30 строк · 1.1 Кб
1import Foundation
2import QueueModels
3import RESTMethods
4import RESTInterfaces
5
6public protocol PayloadSignatureVerifyingRESTEndpoint: RESTEndpoint where PayloadType: SignedPayload {
7var expectedPayloadSignature: PayloadSignature { get }
8func handle(verifiedPayload: PayloadType) throws -> ResponseType
9}
10
11public struct PayloadSignatureMismatch: Error, CustomStringConvertible {
12public let expectedPayloadSignature: PayloadSignature
13public let actualPayloadSignature: PayloadSignature
14
15public var description: String {
16return "Payload has unexpected signature, expected: \(expectedPayloadSignature), actual: \(actualPayloadSignature)"
17}
18}
19
20public extension PayloadSignatureVerifyingRESTEndpoint {
21func handle(payload: PayloadType) throws -> ResponseType {
22guard expectedPayloadSignature == payload.payloadSignature else {
23throw PayloadSignatureMismatch(
24expectedPayloadSignature: expectedPayloadSignature,
25actualPayloadSignature: payload.payloadSignature
26)
27}
28return try handle(verifiedPayload: payload)
29}
30}
31
32