Skip to content

Commit bf7e6ad

Browse files
committed
Use NonBlockingFileIO for saveToken
1 parent ad56c9a commit bf7e6ad

3 files changed

Lines changed: 18 additions & 4 deletions

File tree

Sources/SotoCore/Credential/Login/LoginCredentialsProvider.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ public struct LoginCredentialsProvider: CredentialProvider {
197197
)
198198

199199
// Save updated token to disk
200-
try tokenFileManager.saveToken(updatedToken, to: tokenPath)
200+
try await tokenFileManager.saveToken(updatedToken, to: tokenPath, fileIO: fileIO)
201201

202202
// Return expiring credential
203203
return RotatingCredential(

Sources/SotoCore/Credential/Login/TokenFileManager.swift

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ struct TokenFileManager {
112112
)
113113
}
114114

115-
func saveToken(_ token: LoginToken, to path: String) throws {
115+
func saveToken(_ token: LoginToken, to path: String, fileIO: NonBlockingFileIO) async throws {
116116
// Parse ISO8601 date if we have expiresAt
117117
let expiresAtString: String
118118
if let expiresAt = token.expiresAt {
@@ -142,6 +142,20 @@ struct TokenFileManager {
142142
let encoder = JSONEncoder()
143143
encoder.outputFormatting = .prettyPrinted
144144
let data = try encoder.encode(tokenData)
145-
try data.write(to: URL(fileURLWithPath: path))
145+
146+
// Write using NonBlockingFileIO
147+
var buffer = ByteBufferAllocator().buffer(capacity: data.count)
148+
buffer.writeBytes(data)
149+
150+
// Delete file if it exists to ensure clean write
151+
try? FileManager.default.removeItem(atPath: path)
152+
153+
try await fileIO.withFileHandle(
154+
path: path,
155+
mode: .write,
156+
flags: .allowFileCreation(posixMode: 0o600)
157+
) { fileHandle in
158+
try await fileIO.write(fileHandle: fileHandle, buffer: buffer)
159+
}
146160
}
147161
}

Tests/SotoCoreTests/Credential/Login/TokenFileManagerTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ final class TokenFileManagerTests {
127127

128128
// Save updated token
129129
let newTokenPath = tempDirectory.appendingPathComponent("updated-token.json").path
130-
try manager.saveToken(updatedToken, to: newTokenPath)
130+
try await manager.saveToken(updatedToken, to: newTokenPath, fileIO: fileIO)
131131

132132
// Verify saved file
133133
let savedData = try Data(contentsOf: URL(fileURLWithPath: newTokenPath))

0 commit comments

Comments
 (0)