2024-02-16 14:58:42 -05:00
|
|
|
// Login.swift
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
import ArgumentParser
|
|
|
|
import JellyfinAPI
|
|
|
|
|
|
|
|
extension Seanut {
|
|
|
|
struct LoginCommand: AsyncParsableCommand {
|
|
|
|
static var configuration = CommandConfiguration(
|
|
|
|
commandName: "login",
|
|
|
|
abstract: "Logs in as specified user to specified jellyfin server. caches access token for later invocations"
|
|
|
|
)
|
|
|
|
|
|
|
|
@OptionGroup var options: Seanut.CommonArguments
|
|
|
|
|
|
|
|
@Option(name: .shortAndLong, help: "username for the jellyfin server")
|
|
|
|
var username: String
|
|
|
|
|
|
|
|
@Option(name: .shortAndLong, help: "password for the jellyfin server")
|
|
|
|
var password: String?
|
|
|
|
|
|
|
|
mutating func run() async {
|
2024-02-16 15:59:31 -05:00
|
|
|
let seanutCacheFolder = FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent(".seanut/")
|
|
|
|
if !FileManager.default.fileExists(atPath: seanutCacheFolder.absoluteString) {
|
|
|
|
do {
|
|
|
|
try FileManager.default.createDirectory(at: seanutCacheFolder, withIntermediateDirectories: false)
|
|
|
|
} catch {
|
|
|
|
fatalError("could not create seanut token cache folder. quitting...")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-02-16 14:58:42 -05:00
|
|
|
let client = JellyfinClient(
|
|
|
|
configuration: Seanut.generateJellyfinConfiguration(url: options.domain.toURL()!)
|
|
|
|
)
|
|
|
|
|
|
|
|
await Seanut.getAccessToken(
|
|
|
|
client: client,
|
|
|
|
username: username,
|
|
|
|
password: password
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|