JellyfinAPI authHeader trim issue clear

This commit is contained in:
PangMo5 2021-05-28 02:44:25 +09:00
parent 3b7778b3cf
commit 0424436114
4 changed files with 53 additions and 9 deletions

View File

@ -43,6 +43,7 @@
53FF7F2A263CF3F500585C35 /* LatestMediaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53FF7F29263CF3F500585C35 /* LatestMediaView.swift */; }; 53FF7F2A263CF3F500585C35 /* LatestMediaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53FF7F29263CF3F500585C35 /* LatestMediaView.swift */; };
6213388E265F777C00A81A2A /* LibraryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6213388D265F777C00A81A2A /* LibraryViewModel.swift */; }; 6213388E265F777C00A81A2A /* LibraryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6213388D265F777C00A81A2A /* LibraryViewModel.swift */; };
62133890265F83A900A81A2A /* LibraryListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6213388F265F83A900A81A2A /* LibraryListView.swift */; }; 62133890265F83A900A81A2A /* LibraryListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6213388F265F83A900A81A2A /* LibraryListView.swift */; };
621338932660107500A81A2A /* String++.swift in Sources */ = {isa = PBXBuildFile; fileRef = 621338922660107500A81A2A /* String++.swift */; };
6273DD43265F4195009C1D0B /* Moya in Frameworks */ = {isa = PBXBuildFile; productRef = 6273DD42265F4195009C1D0B /* Moya */; }; 6273DD43265F4195009C1D0B /* Moya in Frameworks */ = {isa = PBXBuildFile; productRef = 6273DD42265F4195009C1D0B /* Moya */; };
6273DD45265F4195009C1D0B /* CombineMoya in Frameworks */ = {isa = PBXBuildFile; productRef = 6273DD44265F4195009C1D0B /* CombineMoya */; }; 6273DD45265F4195009C1D0B /* CombineMoya in Frameworks */ = {isa = PBXBuildFile; productRef = 6273DD44265F4195009C1D0B /* CombineMoya */; };
6273DD48265F41B3009C1D0B /* JellyfinAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6273DD47265F41B3009C1D0B /* JellyfinAPI.swift */; }; 6273DD48265F41B3009C1D0B /* JellyfinAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6273DD47265F41B3009C1D0B /* JellyfinAPI.swift */; };
@ -108,6 +109,7 @@
53FF7F29263CF3F500585C35 /* LatestMediaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LatestMediaView.swift; sourceTree = "<group>"; }; 53FF7F29263CF3F500585C35 /* LatestMediaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LatestMediaView.swift; sourceTree = "<group>"; };
6213388D265F777C00A81A2A /* LibraryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibraryViewModel.swift; sourceTree = "<group>"; }; 6213388D265F777C00A81A2A /* LibraryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibraryViewModel.swift; sourceTree = "<group>"; };
6213388F265F83A900A81A2A /* LibraryListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibraryListView.swift; sourceTree = "<group>"; }; 6213388F265F83A900A81A2A /* LibraryListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibraryListView.swift; sourceTree = "<group>"; };
621338922660107500A81A2A /* String++.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String++.swift"; sourceTree = "<group>"; };
6273DD47265F41B3009C1D0B /* JellyfinAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JellyfinAPI.swift; sourceTree = "<group>"; }; 6273DD47265F41B3009C1D0B /* JellyfinAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JellyfinAPI.swift; sourceTree = "<group>"; };
6273DD4D265F47B2009C1D0B /* LibrarySearchViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibrarySearchViewModel.swift; sourceTree = "<group>"; }; 6273DD4D265F47B2009C1D0B /* LibrarySearchViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibrarySearchViewModel.swift; sourceTree = "<group>"; };
AE8C3153265D60BF008AA076 /* SettingsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsModel.swift; sourceTree = "<group>"; }; AE8C3153265D60BF008AA076 /* SettingsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsModel.swift; sourceTree = "<group>"; };
@ -156,6 +158,7 @@
5377CBF3263B596A003A4E83 /* JellyfinPlayer */ = { 5377CBF3263B596A003A4E83 /* JellyfinPlayer */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
621338912660106C00A81A2A /* Extensions */,
6273DD4A265F4794009C1D0B /* Domains */, 6273DD4A265F4794009C1D0B /* Domains */,
6273DD46265F419B009C1D0B /* APIs */, 6273DD46265F419B009C1D0B /* APIs */,
AE8C3157265D6F5E008AA076 /* Resources */, AE8C3157265D6F5E008AA076 /* Resources */,
@ -223,6 +226,14 @@
path = ViewModels; path = ViewModels;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
621338912660106C00A81A2A /* Extensions */ = {
isa = PBXGroup;
children = (
621338922660107500A81A2A /* String++.swift */,
);
path = Extensions;
sourceTree = "<group>";
};
6273DD46265F419B009C1D0B /* APIs */ = { 6273DD46265F419B009C1D0B /* APIs */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -385,6 +396,7 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
621338932660107500A81A2A /* String++.swift in Sources */,
53FF7F2A263CF3F500585C35 /* LatestMediaView.swift in Sources */, 53FF7F2A263CF3F500585C35 /* LatestMediaView.swift in Sources */,
5377CBFE263B596B003A4E83 /* PersistenceController.swift in Sources */, 5377CBFE263B596B003A4E83 /* PersistenceController.swift in Sources */,
5389276E263C25100035E14B /* ContinueWatchingView.swift in Sources */, 5389276E263C25100035E14B /* ContinueWatchingView.swift in Sources */,

View File

@ -67,7 +67,7 @@ extension Filter {
parameters["ImageTypeLimit"] = imageTypeLimit parameters["ImageTypeLimit"] = imageTypeLimit
parameters["IncludeItemTypes"] = itemTypes.map(\.rawValue).joined(separator: ",") parameters["IncludeItemTypes"] = itemTypes.map(\.rawValue).joined(separator: ",")
parameters["ParentId"] = parentID parameters["ParentId"] = parentID
parameters["Recursive"] = recursive.description parameters["Recursive"] = recursive
parameters["SortBy"] = sort?.rawValue parameters["SortBy"] = sort?.rawValue
parameters["SortOrder"] = asc?.rawValue parameters["SortOrder"] = asc?.rawValue
parameters["Genres"] = genres.joined(separator: ",") parameters["Genres"] = genres.joined(separator: ",")
@ -83,6 +83,7 @@ enum JellyfinAPI {
} }
extension JellyfinAPI: TargetType { extension JellyfinAPI: TargetType {
var baseURL: URL { var baseURL: URL {
switch self { switch self {
case let .items(global, _, _), case let .items(global, _, _),
@ -117,12 +118,12 @@ extension JellyfinAPI: TargetType {
parameters["searchTerm"] = searchQuery parameters["searchTerm"] = searchQuery
parameters["StartIndex"] = (page - 1) * 100 parameters["StartIndex"] = (page - 1) * 100
parameters["Limit"] = 100 parameters["Limit"] = 100
return .requestParameters(parameters: parameters, encoding: URLEncoding.default) return .requestParameters(parameters: parameters, encoding: URLEncoding.jellyfin)
case let .items(_, filter, page): case let .items(_, filter, page):
var parameters = filter.toParamters var parameters = filter.toParamters
parameters["StartIndex"] = (page - 1) * 100 parameters["StartIndex"] = (page - 1) * 100
parameters["Limit"] = 100 parameters["Limit"] = 100
return .requestParameters(parameters: parameters, encoding: URLEncoding.default) return .requestParameters(parameters: parameters, encoding: URLEncoding.jellyfin)
} }
} }
@ -130,11 +131,18 @@ extension JellyfinAPI: TargetType {
switch self { switch self {
case let .items(global, _, _), case let .items(global, _, _),
let .search(global, _, _, _): let .search(global, _, _, _):
return [ var headers = [String: String]()
"X-Emby-Authorization": global.authHeader, headers["Content-Type"] = "application/json"
"Content-Type": "application/json", headers["Accept"] = "application/json"
"Accept": "application/json" headers["X-Emby-Authorization"] = global.authHeader
] return headers
} }
} }
} }
extension URLEncoding {
static var jellyfin: URLEncoding {
URLEncoding(destination: .methodDependent, arrayEncoding: .noBrackets, boolEncoding: .literal)
}
}

View File

@ -80,7 +80,13 @@ struct ContentView: View {
} }
let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String; let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String;
globalData.authHeader = "MediaBrowser Client=\"SwiftFin\", Device=\"\(UIDevice.current.name)\", DeviceId=\"\(globalData.user?.device_uuid ?? "")\", Version=\"\(appVersion ?? "0.0.1")\", Token=\"\(globalData.authToken)\""; var header = "MediaBrowser "
header.append("Client=\"SwiftFin\",")
header.append("Device=\"\(UIDevice.current.name.removeRegexMatches(pattern: "[^\\w\\s]"))\",")
header.append("DeviceId=\"\(globalData.user?.device_uuid ?? "")\",")
header.append("Version=\"\(appVersion ?? "0.0.1")\",")
header.append("Token=\"\(globalData.authToken)\"")
globalData.authHeader = header
let request = RestRequest(method: .get, url: (globalData.server?.baseURI ?? "") + "/Users/Me") let request = RestRequest(method: .get, url: (globalData.server?.baseURI ?? "") + "/Users/Me")
request.headerParameters["X-Emby-Authorization"] = globalData.authHeader request.headerParameters["X-Emby-Authorization"] = globalData.authHeader

View File

@ -0,0 +1,18 @@
//
// String++.swift
// JellyfinPlayer
//
// Created by PangMo5 on 2021/05/28.
//
import Foundation
extension String {
func removeRegexMatches(pattern: String, replaceWith: String = "") -> String {
do {
let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
let range = NSRange(location: 0, length: count)
return regex.stringByReplacingMatches(in: self, options: [], range: range, withTemplate: replaceWith)
} catch { return self }
}
}