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 XPC
|
||||||
import SecretAgentKit
|
import SecretAgentKit
|
||||||
|
import OSLog
|
||||||
|
|
||||||
|
private let logger = Logger(subsystem: "com.maxgoedjen.secretive.secretagent.AgentRequestParser", category: "Parser")
|
||||||
|
|
||||||
func handleRequest(_ request: XPCListener.IncomingSessionRequest) -> XPCListener.IncomingSessionRequest.Decision {
|
func handleRequest(_ request: XPCListener.IncomingSessionRequest) -> XPCListener.IncomingSessionRequest.Decision {
|
||||||
request.accept { message in
|
logger.log("Parser received inbound request")
|
||||||
return try? SSHAgentInputParser().parse(data: message)
|
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 {
|
} else {
|
||||||
_ = try XPCListener(service: "com.maxgoedjen.Secretive.AgentRequestParser", incomingSessionHandler: handleRequest(_:))
|
_ = try XPCListener(service: "com.maxgoedjen.Secretive.AgentRequestParser", incomingSessionHandler: handleRequest(_:))
|
||||||
}
|
}
|
||||||
|
logger.log("Parser initialized")
|
||||||
dispatchMain()
|
dispatchMain()
|
||||||
} catch {
|
} 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.
|
/// - Returns: An OpenSSH formatted Data payload containing the signed data response.
|
||||||
func sign(data: Data, keyBlob: Data, provenance: SigningRequestProvenance) async throws -> Data {
|
func sign(data: Data, keyBlob: Data, provenance: SigningRequestProvenance) async throws -> Data {
|
||||||
guard let (secret, store) = await secret(matching: keyBlob) else {
|
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()
|
throw NoMatchingKeyError()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +35,13 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||||||
logger.debug("SecretAgent finished launching")
|
logger.debug("SecretAgent finished launching")
|
||||||
Task {
|
Task {
|
||||||
let inputParser = try XPCAgentInputParser()
|
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 {
|
for await session in socketController.sessions {
|
||||||
Task {
|
Task {
|
||||||
do {
|
do {
|
||||||
|
@ -4,13 +4,15 @@ import SecretAgentKit
|
|||||||
public final class XPCAgentInputParser: SSHAgentInputParserProtocol {
|
public final class XPCAgentInputParser: SSHAgentInputParserProtocol {
|
||||||
|
|
||||||
private let session: XPCSession
|
private let session: XPCSession
|
||||||
|
private let queue = DispatchQueue(label: "com.maxgoedjen.Secretive.AgentRequestParser", qos: .userInteractive)
|
||||||
|
|
||||||
public init() throws {
|
public init() throws {
|
||||||
if #available(macOS 26.0, *) {
|
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 {
|
} 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 {
|
public func parse(data: Data) async throws -> SSHAgent.Request {
|
||||||
|
Loading…
Reference in New Issue
Block a user