54 lines
1.7 KiB
Swift
54 lines
1.7 KiB
Swift
//
|
|
// Swiftfin is subject to the terms of the Mozilla Public
|
|
// License, v2.0. If a copy of the MPL was not distributed with this
|
|
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
|
|
//
|
|
// Copyright (c) 2025 Jellyfin & Jellyfin Contributors
|
|
//
|
|
|
|
import CoreStore
|
|
import Factory
|
|
import Foundation
|
|
import KeychainSwift
|
|
|
|
extension SwiftfinStore {
|
|
enum Mappings {}
|
|
}
|
|
|
|
extension SwiftfinStore.Mappings {
|
|
|
|
// MARK: User V1 to V2
|
|
|
|
// V1 users had access token stored in Core Data.
|
|
// Move to the Keychain.
|
|
|
|
static let userV1_V2 = {
|
|
CustomSchemaMappingProvider(
|
|
from: "V1",
|
|
to: "V2",
|
|
entityMappings: [
|
|
.transformEntity(
|
|
sourceEntity: "User",
|
|
destinationEntity: "User",
|
|
transformer: { sourceObject, createDestinationObject in
|
|
|
|
// move access token to Keychain
|
|
if let id = sourceObject["id"] as? String, let accessToken = sourceObject["accessToken"] as? String {
|
|
Container.shared.keychainService().set(accessToken, forKey: "\(id)-accessToken")
|
|
} else {
|
|
fatalError("wtf")
|
|
}
|
|
|
|
let destinationObject = createDestinationObject()
|
|
destinationObject.enumerateAttributes { attribute, sourceAttribute in
|
|
if let sourceAttribute {
|
|
destinationObject[attribute] = sourceObject[attribute]
|
|
}
|
|
}
|
|
}
|
|
),
|
|
]
|
|
)
|
|
}()
|
|
}
|