change position to revoke all session
This commit is contained in:
parent
be6394f6fb
commit
020aa8de5d
@ -128,6 +128,49 @@ final class SessionsService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func revoke(sessionId: UUID, completion: @escaping (Result<String, Error>) -> Void) {
|
||||||
|
client.request(
|
||||||
|
path: "/v1/auth/sessions/revoke/\(sessionId.uuidString)",
|
||||||
|
method: .post,
|
||||||
|
requiresAuth: true
|
||||||
|
) { [decoder] result in
|
||||||
|
switch result {
|
||||||
|
case .success(let response):
|
||||||
|
do {
|
||||||
|
let apiResponse = try decoder.decode(APIResponse<MessagePayload>.self, from: response.data)
|
||||||
|
guard apiResponse.status == "fine" else {
|
||||||
|
let message = apiResponse.detail ?? NSLocalizedString("Не удалось завершить сессию.", comment: "Sessions service revoke unexpected status")
|
||||||
|
completion(.failure(SessionsServiceError.unexpectedStatus(message)))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
completion(.success(apiResponse.data.message))
|
||||||
|
} catch {
|
||||||
|
let debugMessage = Self.describeDecodingError(error: error, data: response.data)
|
||||||
|
if AppConfig.DEBUG {
|
||||||
|
print("[SessionsService] decode revoke failed: \(debugMessage)")
|
||||||
|
}
|
||||||
|
completion(.failure(SessionsServiceError.decoding(debugDescription: debugMessage)))
|
||||||
|
}
|
||||||
|
case .failure(let error):
|
||||||
|
if case let NetworkError.server(_, data) = error,
|
||||||
|
let data,
|
||||||
|
let message = Self.errorMessage(from: data) {
|
||||||
|
completion(.failure(SessionsServiceError.unexpectedStatus(message)))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
completion(.failure(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func revoke(sessionId: UUID) async throws -> String {
|
||||||
|
try await withCheckedThrowingContinuation { continuation in
|
||||||
|
revoke(sessionId: sessionId) { result in
|
||||||
|
continuation.resume(with: result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static func decodeDate(from decoder: Decoder) throws -> Date {
|
private static func decodeDate(from decoder: Decoder) throws -> Date {
|
||||||
let container = try decoder.singleValueContainer()
|
let container = try decoder.singleValueContainer()
|
||||||
let string = try container.decode(String.self)
|
let string = try container.decode(String.self)
|
||||||
|
|||||||
@ -987,6 +987,9 @@
|
|||||||
"Не удалось завершить другие сессии." : {
|
"Не удалось завершить другие сессии." : {
|
||||||
"comment" : "Sessions service revoke-all unexpected status"
|
"comment" : "Sessions service revoke-all unexpected status"
|
||||||
},
|
},
|
||||||
|
"Не удалось завершить сессию." : {
|
||||||
|
"comment" : "Sessions service revoke unexpected status"
|
||||||
|
},
|
||||||
"Не удалось загрузить историю чата." : {
|
"Не удалось загрузить историю чата." : {
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|||||||
@ -51,16 +51,18 @@ struct ActiveSessionsView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !otherSessions.isEmpty{
|
||||||
|
Section {
|
||||||
|
revokeOtherSessionsButton
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if !otherSessions.isEmpty {
|
if !otherSessions.isEmpty {
|
||||||
Section(header: Text(String(format: NSLocalizedString("Другие устройства (%d)", comment: "Заголовок секции других устройств с количеством"), otherSessions.count))) {
|
Section(header: Text(String(format: NSLocalizedString("Другие устройства (%d)", comment: "Заголовок секции других устройств с количеством"), otherSessions.count))) {
|
||||||
ForEach(otherSessions) { session in
|
ForEach(otherSessions) { session in
|
||||||
sessionRow(for: session)
|
sessionRow(for: session)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Section {
|
|
||||||
revokeOtherSessionsButton
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user