mirror of
https://github.com/maxgoedjen/secretive.git
synced 2025-09-15 08:50:57 +00:00
.
This commit is contained in:
parent
30bb29d153
commit
11074999ad
@ -1,9 +1,21 @@
|
||||
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 {
|
||||
request.accept { message in
|
||||
return try? SSHAgentInputParser().parse(data: message)
|
||||
logger.log("Parser received inbound request")
|
||||
return request.accept { message in
|
||||
logger.log("Parser accepted inbound request")
|
||||
do {
|
||||
let result = try SSHAgentInputParser().parse(data: message)
|
||||
logger.log("Parser parsed message as type \(result.debugDescription)")
|
||||
return result
|
||||
} catch {
|
||||
logger.error("Parser failed with error \(error)")
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,7 +29,8 @@ do {
|
||||
} else {
|
||||
_ = try XPCListener(service: "com.maxgoedjen.Secretive.AgentRequestParser", incomingSessionHandler: handleRequest(_:))
|
||||
}
|
||||
logger.log("Parser initialized")
|
||||
dispatchMain()
|
||||
} catch {
|
||||
print("Failed to create listener, error: \(error)")
|
||||
logger.error("Failed to create parser, error: \(error)")
|
||||
}
|
||||
|
@ -93,7 +93,8 @@ extension Agent {
|
||||
/// - Returns: An OpenSSH formatted Data payload containing the signed data response.
|
||||
func sign(data: Data, keyBlob: Data, provenance: SigningRequestProvenance) async throws -> Data {
|
||||
guard let (secret, store) = await secret(matching: keyBlob) else {
|
||||
logger.debug("Agent did not have a key matching \(keyBlob as NSData)")
|
||||
let keyBlobHex = keyBlob.compactMap { ("0" + String($0, radix: 16, uppercase: false)).suffix(2) }.joined()
|
||||
logger.debug("Agent did not have a key matching \(keyBlobHex)")
|
||||
throw NoMatchingKeyError()
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,13 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
logger.debug("SecretAgent finished launching")
|
||||
Task {
|
||||
let inputParser = try XPCAgentInputParser()
|
||||
Task {
|
||||
try? await Task.sleep(for: .seconds(1))
|
||||
var len = (5 as UInt32).littleEndian
|
||||
var raw = SSHAgent.Request.requestIdentities.protocolID
|
||||
let data = Data(bytes: &len, count: MemoryLayout<UInt32>.size) + Data(bytes: &raw, count: MemoryLayout<UInt8>.size)
|
||||
print(try? await inputParser.parse(data: data))
|
||||
}
|
||||
for await session in socketController.sessions {
|
||||
Task {
|
||||
do {
|
||||
|
@ -4,13 +4,15 @@ import SecretAgentKit
|
||||
public final class XPCAgentInputParser: SSHAgentInputParserProtocol {
|
||||
|
||||
private let session: XPCSession
|
||||
private let queue = DispatchQueue(label: "com.maxgoedjen.Secretive.AgentRequestParser", qos: .userInteractive)
|
||||
|
||||
public init() throws {
|
||||
if #available(macOS 26.0, *) {
|
||||
session = try XPCSession(xpcService: "com.maxgoedjen.Secretive.AgentRequestParser", requirement: .isFromSameTeam())
|
||||
session = try XPCSession(xpcService: "com.maxgoedjen.Secretive.AgentRequestParser", targetQueue: queue, options: .inactive, requirement: .isFromSameTeam())
|
||||
} else {
|
||||
session = try XPCSession(xpcService: "com.maxgoedjen.Secretive.AgentRequestParser")
|
||||
session = try XPCSession(xpcService: "com.maxgoedjen.Secretive.AgentRequestParser", targetQueue: queue, options: .inactive)
|
||||
}
|
||||
try session.activate()
|
||||
}
|
||||
|
||||
public func parse(data: Data) async throws -> SSHAgent.Request {
|
||||
|
Loading…
Reference in New Issue
Block a user