Redact request paths in error reporter
This commit is contained in:
parent
2444783edf
commit
7da139be4d
|
@ -106,7 +106,7 @@ public class Client {
|
|||
|
||||
func createURLRequest<Result>(request: Request<Result>) -> URLRequest? {
|
||||
guard var components = URLComponents(url: baseURL, resolvingAgainstBaseURL: true) else { return nil }
|
||||
components.path = request.path
|
||||
components.path = request.endpoint.path
|
||||
components.queryItems = request.queryParameters.isEmpty ? nil : request.queryParameters.queryItems
|
||||
guard let url = components.url else { return nil }
|
||||
var urlRequest = URLRequest(url: url, timeoutInterval: timeoutInterval)
|
||||
|
@ -166,7 +166,7 @@ public class Client {
|
|||
if let url = wellKnown.links.first(where: { $0.rel == "http://nodeinfo.diaspora.software/ns/schema/2.0" }),
|
||||
let components = URLComponents(string: url.href),
|
||||
components.host == self.baseURL.host {
|
||||
let nodeInfo = Request<NodeInfo>(method: .get, path: components.path)
|
||||
let nodeInfo = Request<NodeInfo>(method: .get, path: Endpoint(stringLiteral: components.path))
|
||||
self.run(nodeInfo, completion: completion)
|
||||
}
|
||||
}
|
||||
|
@ -397,12 +397,12 @@ public class Client {
|
|||
extension Client {
|
||||
public struct Error: LocalizedError {
|
||||
public let requestMethod: Method
|
||||
public let requestPath: String
|
||||
public let requestEndpoint: Endpoint
|
||||
public let type: ErrorType
|
||||
|
||||
init<ResultType: Decodable>(request: Request<ResultType>, type: ErrorType) {
|
||||
self.requestMethod = request.method
|
||||
self.requestPath = request.path
|
||||
self.requestEndpoint = request.endpoint
|
||||
self.type = type
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ public enum Timeline {
|
|||
}
|
||||
|
||||
extension Timeline {
|
||||
var endpoint: String {
|
||||
var endpoint: Endpoint {
|
||||
switch self {
|
||||
case .home:
|
||||
return "/api/v1/timelines/home"
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
//
|
||||
// Endpoint.swift
|
||||
// Pachyderm
|
||||
//
|
||||
// Created by Shadowfacts on 3/29/22.
|
||||
// Copyright © 2022 Shadowfacts. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
public struct Endpoint: ExpressibleByStringInterpolation, CustomStringConvertible {
|
||||
let components: [Component]
|
||||
|
||||
public init(stringLiteral value: StringLiteralType) {
|
||||
self.components = [.literal(value)]
|
||||
}
|
||||
|
||||
public init(stringInterpolation: StringInterpolation) {
|
||||
self.components = stringInterpolation.components
|
||||
}
|
||||
|
||||
var path: String {
|
||||
components.map {
|
||||
switch $0 {
|
||||
case .literal(let s), .interpolated(let s):
|
||||
return s
|
||||
}
|
||||
}.joined(separator: "")
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
components.map {
|
||||
switch $0 {
|
||||
case .literal(let s):
|
||||
return s
|
||||
case .interpolated(_):
|
||||
return "<redacted>"
|
||||
}
|
||||
}.joined(separator: "")
|
||||
}
|
||||
|
||||
public struct StringInterpolation: StringInterpolationProtocol {
|
||||
var components = [Component]()
|
||||
|
||||
public init(literalCapacity: Int, interpolationCount: Int) {
|
||||
}
|
||||
|
||||
public mutating func appendLiteral(_ literal: StringLiteralType) {
|
||||
components.append(.literal(literal))
|
||||
}
|
||||
|
||||
public mutating func appendInterpolation(_ value: String) {
|
||||
components.append(.interpolated(value))
|
||||
}
|
||||
}
|
||||
|
||||
enum Component {
|
||||
case literal(String)
|
||||
case interpolated(String)
|
||||
}
|
||||
|
||||
}
|
|
@ -10,13 +10,13 @@ import Foundation
|
|||
|
||||
public struct Request<ResultType: Decodable> {
|
||||
let method: Method
|
||||
let path: String
|
||||
let endpoint: Endpoint
|
||||
let body: Body
|
||||
var queryParameters: [Parameter]
|
||||
|
||||
init(method: Method, path: String, body: Body = EmptyBody(), queryParameters: [Parameter] = []) {
|
||||
init(method: Method, path: Endpoint, body: Body = EmptyBody(), queryParameters: [Parameter] = []) {
|
||||
self.method = method
|
||||
self.path = path
|
||||
self.endpoint = path
|
||||
self.body = body
|
||||
self.queryParameters = queryParameters
|
||||
}
|
||||
|
|
|
@ -70,6 +70,7 @@
|
|||
D6109A0F21459B6900432DC2 /* Pagination.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6109A0E21459B6900432DC2 /* Pagination.swift */; };
|
||||
D6109A11214607D500432DC2 /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6109A10214607D500432DC2 /* Timeline.swift */; };
|
||||
D6114E0927F3EA3D0080E273 /* CrashReporterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6114E0827F3EA3D0080E273 /* CrashReporterViewController.swift */; };
|
||||
D6114E0B27F3F6EA0080E273 /* Endpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6114E0A27F3F6EA0080E273 /* Endpoint.swift */; };
|
||||
D611C2CF232DC61100C86A49 /* HashtagTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D611C2CD232DC61100C86A49 /* HashtagTableViewCell.swift */; };
|
||||
D611C2D0232DC61100C86A49 /* HashtagTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D611C2CE232DC61100C86A49 /* HashtagTableViewCell.xib */; };
|
||||
D61AC1D3232E928600C54D2D /* InstanceSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = D61AC1D2232E928600C54D2D /* InstanceSelector.swift */; };
|
||||
|
@ -482,6 +483,7 @@
|
|||
D6109A0E21459B6900432DC2 /* Pagination.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pagination.swift; sourceTree = "<group>"; };
|
||||
D6109A10214607D500432DC2 /* Timeline.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Timeline.swift; sourceTree = "<group>"; };
|
||||
D6114E0827F3EA3D0080E273 /* CrashReporterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashReporterViewController.swift; sourceTree = "<group>"; };
|
||||
D6114E0A27F3F6EA0080E273 /* Endpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Endpoint.swift; sourceTree = "<group>"; };
|
||||
D611C2CD232DC61100C86A49 /* HashtagTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagTableViewCell.swift; sourceTree = "<group>"; };
|
||||
D611C2CE232DC61100C86A49 /* HashtagTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HashtagTableViewCell.xib; sourceTree = "<group>"; };
|
||||
D61AC1D2232E928600C54D2D /* InstanceSelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstanceSelector.swift; sourceTree = "<group>"; };
|
||||
|
@ -874,6 +876,7 @@
|
|||
D61099D12144B2E600432DC2 /* Body.swift */,
|
||||
D61099D32144B32E00432DC2 /* Parameter.swift */,
|
||||
D61099D52144B4B200432DC2 /* FormAttachment.swift */,
|
||||
D6114E0A27F3F6EA0080E273 /* Endpoint.swift */,
|
||||
);
|
||||
path = Request;
|
||||
sourceTree = "<group>";
|
||||
|
@ -2073,6 +2076,7 @@
|
|||
D61099DC2144BDBF00432DC2 /* Response.swift in Sources */,
|
||||
D61099F72145693500432DC2 /* PushSubscription.swift in Sources */,
|
||||
D61099F5214568C300432DC2 /* Notification.swift in Sources */,
|
||||
D6114E0B27F3F6EA0080E273 /* Endpoint.swift in Sources */,
|
||||
D61099EF214566C000432DC2 /* Instance.swift in Sources */,
|
||||
D61099D22144B2E600432DC2 /* Body.swift in Sources */,
|
||||
D623A53F2635F6910095BD04 /* Poll.swift in Sources */,
|
||||
|
|
|
@ -45,7 +45,7 @@ extension ToastConfiguration {
|
|||
toast.dismissToast(animated: true)
|
||||
let text = """
|
||||
\(title):
|
||||
\(error.requestMethod.name) \(error.requestPath)
|
||||
\(error.requestMethod.name) \(error.requestEndpoint)
|
||||
|
||||
\(error.type)
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue