// // SystemConfig.swift // sdlan // // Created by 安礼成 on 2024/6/3. // import Foundation struct SystemConfig { struct EnvConfig { let serverHost: String let stunAssistHost: String let tunBundleId: String let localizedDescription: String } enum Env: String { case dev = "dev" case prod = "prod" } static let env: Env = .dev // 版本设置 static let version: Int = 1 static let version_name = "1.1" static let build: Int = 123 // 渠道相关 static let channel = "appstore" static let envConfigs: [Env: EnvConfig] = [ .dev: EnvConfig( serverHost: "test.punchsky.com", stunAssistHost: "test.punchsky.com", tunBundleId: "com.jihe.punchnetmac.tun", localizedDescription: "punchnetmac-dev" ), .prod: EnvConfig( serverHost: "root.punchsky.com", stunAssistHost: "root.punchsky.com", tunBundleId: "com.jihe.punchnetmac.tun", localizedDescription: "punchnetmac" ) ] // 获取系统信息 static let systemInfo: String = { let version = ProcessInfo.processInfo.operatingSystemVersion return "macOS \(version.majorVersion).\(version.minorVersion)" }() static func getCurrentEnvConfig() -> EnvConfig { return envConfigs[Self.env]! } static func getOptions(networkId: UInt32, networkDomain: String, ip: String, maskLen: UInt8, accessToken: String, identityId: UInt32, hostname: String, acl: NetworkContext.ACL, exitNodeIp: String?) -> [String: NSObject] { let envConfig = getCurrentEnvConfig() let clientId = getClientId() let mac = getMacAddress() var options = [ "version": version as NSObject, "client_id": clientId as NSObject, "access_token": accessToken as NSObject, "identity_id": identityId as NSObject, "server_host": envConfig.serverHost as NSObject, "stun_assist_host": envConfig.stunAssistHost as NSObject, "hostname": hostname as NSObject, "env": Self.env.rawValue as NSObject, "acl": [ "tcp": acl.tcp as NSObject, "udp": acl.udp as NSObject ] as NSObject, "network_address": [ "network_id": networkId as NSObject, "ip": ip as NSObject, "mask_len": maskLen as NSObject, "mac": mac as NSObject, "network_domain": networkDomain as NSObject ] as NSObject ] if let exitNodeIp { options["exit_node_ip"] = exitNodeIp as NSObject } return options } public static func getClientId() -> String { let userDefaults = UserDefaults.standard if let uuid = userDefaults.value(forKey: "gClientId") as? String { return uuid } else { let uuid = UUID().uuidString.replacingOccurrences(of: "-", with: "").lowercased() userDefaults.setValue(uuid, forKey: "gClientId") return uuid } } // 获取mac地址 public static func getMacAddress() -> Data { let key = "gMacAddress2" let userDefaults = UserDefaults.standard if let mac = userDefaults.value(forKey: key) as? Data { return mac } else { let mac = generateMacAddress() userDefaults.setValue(mac, forKey: key) return mac } } public static func macAddressString(mac: Data, separator: String = ":") -> String { return mac.map { String(format: "%02X", $0) } .joined(separator: separator) } // 随机生成mac地址 private static func generateMacAddress() -> Data { var macAddress = [UInt8](repeating: 0, count: 6) for i in 0..<6 { macAddress[i] = UInt8.random(in: 0...255) } return Data(macAddress) } }