fix vpn
This commit is contained in:
parent
dc59e1870a
commit
92a05263bb
@ -85,33 +85,6 @@ public class SDLConfiguration {
|
|||||||
self.remoteDnsServer = remoteDnsServer
|
self.remoteDnsServer = remoteDnsServer
|
||||||
self.hostname = hostname
|
self.hostname = hostname
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 随机生成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)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解析配置文件
|
// 解析配置文件
|
||||||
@ -128,7 +101,7 @@ extension SDLConfiguration {
|
|||||||
let clientId = options["client_id"] as? String,
|
let clientId = options["client_id"] as? String,
|
||||||
let remoteDnsServer = options["remote_dns_server"] as? String,
|
let remoteDnsServer = options["remote_dns_server"] as? String,
|
||||||
let hostname = options["hostname"] as? String,
|
let hostname = options["hostname"] as? String,
|
||||||
let networkAddressDict = options["networkAddress"] as? [String: NSObject] else {
|
let networkAddressDict = options["network_address"] as? [String: NSObject] else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -26,23 +26,32 @@ struct SystemConfig {
|
|||||||
static let stunServers = "118.178.229.213:1265,1266;118.178.229.213:1265,1266"
|
static let stunServers = "118.178.229.213:1265,1266;118.178.229.213:1265,1266"
|
||||||
//static let stunServers = "127.0.0.1:1265,1266;127.0.0.1:1265,1266"
|
//static let stunServers = "127.0.0.1:1265,1266;127.0.0.1:1265,1266"
|
||||||
|
|
||||||
static func getOptions(networkCode: String, token: String, clientId: String, hostname: String, noticePort: Int) -> [String:NSObject]? {
|
static func getOptions(networkId: UInt32, networkDomain: String, ip: String, maskLen: UInt8, accessToken: String, hostname: String, noticePort: Int) -> [String: NSObject]? {
|
||||||
guard let superIp = DNSResolver.resolveAddrInfos(superHost).first else {
|
guard let superIp = DNSResolver.resolveAddrInfos(superHost).first else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let clientId = getClientId()
|
||||||
|
let mac = getMacAddress()
|
||||||
|
|
||||||
let options = [
|
let options = [
|
||||||
"version:": version as NSObject,
|
"version:": version as NSObject,
|
||||||
"installed_channel": installedChannel as NSObject,
|
"installed_channel": installedChannel as NSObject,
|
||||||
"client_id": clientId as NSObject,
|
"client_id": clientId as NSObject,
|
||||||
"network_code": networkCode as NSObject,
|
"access_token": accessToken as NSObject,
|
||||||
"token": token as NSObject,
|
|
||||||
"super_ip": superIp as NSObject,
|
"super_ip": superIp as NSObject,
|
||||||
"super_port": superPort as NSObject,
|
"super_port": superPort as NSObject,
|
||||||
"stun_servers": stunServers as NSObject,
|
"stun_servers": stunServers as NSObject,
|
||||||
"remote_dns_server": superIp as NSObject,
|
"remote_dns_server": superIp as NSObject,
|
||||||
"hostname": hostname as NSObject,
|
"hostname": hostname as NSObject,
|
||||||
"notice_port": noticePort as NSObject
|
"notice_port": noticePort 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
|
||||||
]
|
]
|
||||||
|
|
||||||
return options
|
return options
|
||||||
@ -60,4 +69,30 @@ struct SystemConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 随机生成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)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -269,10 +269,11 @@ struct IndexView: View {
|
|||||||
self.ipAddress = ""
|
self.ipAddress = ""
|
||||||
try await vpnManager.disableVpn()
|
try await vpnManager.disableVpn()
|
||||||
case .disconnected:
|
case .disconnected:
|
||||||
let clientId = SystemConfig.getClientId()
|
// let clientId = SystemConfig.getClientId()
|
||||||
NSLog("[IndexView] use token: \(self.token), network_code: \(networkCode)")
|
// NSLog("[IndexView] use token: \(self.token), network_code: \(networkCode)")
|
||||||
// token存在则优先使用token
|
// // token存在则优先使用token
|
||||||
try await vpnManager.enableVpn(options: SystemConfig.getOptions(networkCode: self.networkCode, token: self.token, clientId: clientId, hostname: self.hostname, noticePort: self.noticeServer.port)!)
|
// try await vpnManager.enableVpn(options: SystemConfig.getOptions(networkCode: self.networkCode, token: self.token, clientId: clientId, hostname: self.hostname, noticePort: self.noticeServer.port)!)
|
||||||
|
()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -181,34 +181,34 @@ struct LoginAccountView: View {
|
|||||||
|
|
||||||
// 执行登陆操作
|
// 执行登陆操作
|
||||||
private func doLogin() async {
|
private func doLogin() async {
|
||||||
let clientId = SystemConfig.getClientId()
|
// let clientId = SystemConfig.getClientId()
|
||||||
do {
|
// do {
|
||||||
let loginResult = try await SDLAPI.loginWithAccountAndPassword(clientId: clientId, username: self.username, password: self.password, as: LoginResult.self)
|
// let loginResult = try await SDLAPI.loginWithAccountAndPassword(clientId: clientId, username: self.username, password: self.password, as: LoginResult.self)
|
||||||
|
//
|
||||||
print(loginResult.accessToken)
|
// print(loginResult.accessToken)
|
||||||
|
//
|
||||||
// 保存信息到KeychainStore
|
// // 保存信息到KeychainStore
|
||||||
let store = KeychainStore.shared
|
// let store = KeychainStore.shared
|
||||||
if let tokenData = loginResult.accessToken.data(using: .utf8) {
|
// if let tokenData = loginResult.accessToken.data(using: .utf8) {
|
||||||
try store.save(tokenData, account: self.username)
|
// try store.save(tokenData, account: self.username)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
await MainActor.run {
|
// await MainActor.run {
|
||||||
self.userContext.isLogined = true
|
// self.userContext.isLogined = true
|
||||||
self.userContext.loginCredit = .accountAndPasword(account: username, password: password, networkId: loginResult.networkId)
|
// self.userContext.loginCredit = .accountAndPasword(account: username, password: password, networkId: loginResult.networkId)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
} catch let err as JSONRPCError {
|
// } catch let err as JSONRPCError {
|
||||||
await MainActor.run {
|
// await MainActor.run {
|
||||||
self.showAlert = true
|
// self.showAlert = true
|
||||||
self.errorMessage = err.message
|
// self.errorMessage = err.message
|
||||||
}
|
// }
|
||||||
} catch {
|
// } catch {
|
||||||
await MainActor.run {
|
// await MainActor.run {
|
||||||
self.showAlert = true
|
// self.showAlert = true
|
||||||
self.errorMessage = "内部错误,请稍后重试"
|
// self.errorMessage = "内部错误,请稍后重试"
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,9 @@ struct NetworkDisconnctedView: View {
|
|||||||
Color.clear
|
Color.clear
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
print("call me here")
|
Task {
|
||||||
|
try await startVpn()
|
||||||
|
}
|
||||||
} label: {
|
} label: {
|
||||||
Text("连接")
|
Text("连接")
|
||||||
.font(.system(size: 14, weight: .regular))
|
.font(.system(size: 14, weight: .regular))
|
||||||
@ -30,6 +32,22 @@ struct NetworkDisconnctedView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 执行登陆操作
|
||||||
|
private func startVpn() async throws {
|
||||||
|
let clientId = SystemConfig.getClientId()
|
||||||
|
|
||||||
|
let options = SystemConfig.getOptions(networkId: 8,
|
||||||
|
networkDomain: "punchnet.com",
|
||||||
|
ip: "10.211.179.1",
|
||||||
|
maskLen: 24,
|
||||||
|
accessToken: "accessToken1234",
|
||||||
|
hostname: "mysql",
|
||||||
|
noticePort: 123456)
|
||||||
|
// token存在则优先使用token
|
||||||
|
try await VPNManager.shared.enableVpn(options: options!)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//#Preview {
|
//#Preview {
|
||||||
|
|||||||
@ -45,7 +45,8 @@ struct punchnetApp: App {
|
|||||||
var body: some Scene {
|
var body: some Scene {
|
||||||
WindowGroup(id: "mainWindow") {
|
WindowGroup(id: "mainWindow") {
|
||||||
//IndexView(noticeServer: self.noticeServer)
|
//IndexView(noticeServer: self.noticeServer)
|
||||||
RootView()
|
//RootView()
|
||||||
|
NetworkDisconnctedView(state: NetworkState())
|
||||||
.onAppear {
|
.onAppear {
|
||||||
// 获取主屏幕的尺寸
|
// 获取主屏幕的尺寸
|
||||||
guard let screenFrame = NSScreen.main?.frame else { return }
|
guard let screenFrame = NSScreen.main?.frame else { return }
|
||||||
@ -104,10 +105,11 @@ struct punchnetApp: App {
|
|||||||
private func menuClick() {
|
private func menuClick() {
|
||||||
switch self.vpnManager.vpnStatus {
|
switch self.vpnManager.vpnStatus {
|
||||||
case .disconnected:
|
case .disconnected:
|
||||||
Task {
|
// Task {
|
||||||
let clientId = SystemConfig.getClientId()
|
// let clientId = SystemConfig.getClientId()
|
||||||
try await vpnManager.enableVpn(options: SystemConfig.getOptions(networkCode: self.networkCode, token: self.token, clientId: clientId, hostname: self.hostname, noticePort: self.noticeServer.port)!)
|
// try await vpnManager.enableVpn(options: SystemConfig.getOptions(networkCode: self.networkCode, token: self.token, clientId: clientId, hostname: self.hostname, noticePort: self.noticeServer.port)!)
|
||||||
}
|
// }
|
||||||
|
()
|
||||||
case .connected:
|
case .connected:
|
||||||
Task {
|
Task {
|
||||||
try await vpnManager.disableVpn()
|
try await vpnManager.disableVpn()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user