Files

84 lines
2.5 KiB
Swift

import Foundation
public struct Connection: Codable, Hashable, Equatable {
public let id: String
public let inbound: String
public let inboundType: String
public let ipVersion: Int32
public let network: String
public let source: String
public let destination: String
public let domain: String
public let displayDestination: String
public let protocolName: String
public let user: String
public let fromOutbound: String
public let createdAt: Date
public let closedAt: Date?
public var upload: Int64
public var download: Int64
public var uploadTotal: Int64
public var downloadTotal: Int64
public let rule: String
public let outbound: String
public let outboundType: String
public let chain: [String]
public func hash(into hasher: inout Hasher) {
hasher.combine(id)
hasher.combine(upload)
hasher.combine(download)
hasher.combine(uploadTotal)
hasher.combine(downloadTotal)
hasher.combine(closedAt)
}
public static func == (lhs: Connection, rhs: Connection) -> Bool {
lhs.id == rhs.id &&
lhs.upload == rhs.upload &&
lhs.download == rhs.download &&
lhs.uploadTotal == rhs.uploadTotal &&
lhs.downloadTotal == rhs.downloadTotal &&
lhs.closedAt == rhs.closedAt
}
func performSearch(_ content: String) -> Bool {
for item in content.components(separatedBy: " ") {
let itemSep = item.components(separatedBy: ":")
if itemSep.count == 2 {
if !performSearchType(type: itemSep[0], value: itemSep[1]) {
return false
}
continue
}
if !performSearchPlain(item) {
return false
}
}
return true
}
private func performSearchPlain(_ content: String) -> Bool {
destination.contains(content) ||
domain.contains(content)
}
private func performSearchType(type: String, value: String) -> Bool {
switch type {
// TODO: impl more
case "network":
return network == value
case "inbound":
return inbound.contains(value)
case "inbound.type":
return inboundType == value
case "source":
return source.contains(value)
case "destination":
return destination.contains(value)
default:
return false
}
}
}