mirror of
https://github.com/maxgoedjen/secretive.git
synced 2025-09-15 17:00:57 +00:00
56 lines
1.7 KiB
Swift
56 lines
1.7 KiB
Swift
import XPC
|
|
import SecretAgentKit
|
|
import OSLog
|
|
|
|
private let logger = Logger(subsystem: "com.maxgoedjen.secretive.secretagent.AgentRequestParser", category: "Parser")
|
|
|
|
func handleRequest(_ request: XPCListener.IncomingSessionRequest) -> XPCListener.IncomingSessionRequest.Decision {
|
|
logger.log("Parser received inbound request")
|
|
return request.accept { xpcMessage in
|
|
xpcMessage.handoffReply(to: .global(qos: .userInteractive)) {
|
|
logger.log("Parser accepted inbound request")
|
|
handle(with: xpcMessage)
|
|
}
|
|
}
|
|
}
|
|
|
|
func handle(with xpcMessage: XPCReceivedMessage) {
|
|
do {
|
|
let parser = SSHAgentInputParser()
|
|
let result = try parser.parse(data: xpcMessage.wrappedDecode())
|
|
logger.log("Parser parsed message as type \(result.debugDescription)")
|
|
xpcMessage.reply(result)
|
|
} catch {
|
|
logger.error("Parser failed with error \(error)")
|
|
xpcMessage.reply(error)
|
|
}
|
|
}
|
|
|
|
extension XPCReceivedMessage {
|
|
|
|
func wrappedDecode() throws(SSHAgentInputParser.AgentParsingError) -> Data {
|
|
do {
|
|
return try decode(as: Data.self)
|
|
} catch {
|
|
throw SSHAgentInputParser.AgentParsingError.invalidData
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
do {
|
|
if #available(macOS 26.0, *) {
|
|
_ = try XPCListener(
|
|
service: "com.maxgoedjen.Secretive.AgentRequestParser",
|
|
requirement: .isFromSameTeam(),
|
|
incomingSessionHandler: handleRequest(_:)
|
|
)
|
|
} else {
|
|
_ = try XPCListener(service: "com.maxgoedjen.Secretive.AgentRequestParser", incomingSessionHandler: handleRequest(_:))
|
|
}
|
|
logger.log("Parser initialized")
|
|
dispatchMain()
|
|
} catch {
|
|
logger.error("Failed to create parser, error: \(error)")
|
|
}
|