fix vpn
This commit is contained in:
parent
dc59e1870a
commit
92a05263bb
@ -85,33 +85,6 @@ public class SDLConfiguration {
|
||||
self.remoteDnsServer = remoteDnsServer
|
||||
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 remoteDnsServer = options["remote_dns_server"] 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
|
||||
}
|
||||
|
||||
|
||||
@ -26,23 +26,32 @@ struct SystemConfig {
|
||||
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 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 {
|
||||
return nil
|
||||
}
|
||||
|
||||
let clientId = getClientId()
|
||||
let mac = getMacAddress()
|
||||
|
||||
let options = [
|
||||
"version:": version as NSObject,
|
||||
"installed_channel": installedChannel as NSObject,
|
||||
"client_id": clientId as NSObject,
|
||||
"network_code": networkCode as NSObject,
|
||||
"token": token as NSObject,
|
||||
"access_token": accessToken as NSObject,
|
||||
"super_ip": superIp as NSObject,
|
||||
"super_port": superPort as NSObject,
|
||||
"stun_servers": stunServers as NSObject,
|
||||
"remote_dns_server": superIp 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
|
||||
@ -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 = ""
|
||||
try await vpnManager.disableVpn()
|
||||
case .disconnected:
|
||||
let clientId = SystemConfig.getClientId()
|
||||
NSLog("[IndexView] use token: \(self.token), network_code: \(networkCode)")
|
||||
// token存在则优先使用token
|
||||
try await vpnManager.enableVpn(options: SystemConfig.getOptions(networkCode: self.networkCode, token: self.token, clientId: clientId, hostname: self.hostname, noticePort: self.noticeServer.port)!)
|
||||
// let clientId = SystemConfig.getClientId()
|
||||
// NSLog("[IndexView] use token: \(self.token), network_code: \(networkCode)")
|
||||
// // token存在则优先使用token
|
||||
// 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 {
|
||||
let clientId = SystemConfig.getClientId()
|
||||
do {
|
||||
let loginResult = try await SDLAPI.loginWithAccountAndPassword(clientId: clientId, username: self.username, password: self.password, as: LoginResult.self)
|
||||
|
||||
print(loginResult.accessToken)
|
||||
|
||||
// 保存信息到KeychainStore
|
||||
let store = KeychainStore.shared
|
||||
if let tokenData = loginResult.accessToken.data(using: .utf8) {
|
||||
try store.save(tokenData, account: self.username)
|
||||
}
|
||||
|
||||
await MainActor.run {
|
||||
self.userContext.isLogined = true
|
||||
self.userContext.loginCredit = .accountAndPasword(account: username, password: password, networkId: loginResult.networkId)
|
||||
}
|
||||
|
||||
} catch let err as JSONRPCError {
|
||||
await MainActor.run {
|
||||
self.showAlert = true
|
||||
self.errorMessage = err.message
|
||||
}
|
||||
} catch {
|
||||
await MainActor.run {
|
||||
self.showAlert = true
|
||||
self.errorMessage = "内部错误,请稍后重试"
|
||||
}
|
||||
}
|
||||
// let clientId = SystemConfig.getClientId()
|
||||
// do {
|
||||
// let loginResult = try await SDLAPI.loginWithAccountAndPassword(clientId: clientId, username: self.username, password: self.password, as: LoginResult.self)
|
||||
//
|
||||
// print(loginResult.accessToken)
|
||||
//
|
||||
// // 保存信息到KeychainStore
|
||||
// let store = KeychainStore.shared
|
||||
// if let tokenData = loginResult.accessToken.data(using: .utf8) {
|
||||
// try store.save(tokenData, account: self.username)
|
||||
// }
|
||||
//
|
||||
// await MainActor.run {
|
||||
// self.userContext.isLogined = true
|
||||
// self.userContext.loginCredit = .accountAndPasword(account: username, password: password, networkId: loginResult.networkId)
|
||||
// }
|
||||
//
|
||||
// } catch let err as JSONRPCError {
|
||||
// await MainActor.run {
|
||||
// self.showAlert = true
|
||||
// self.errorMessage = err.message
|
||||
// }
|
||||
// } catch {
|
||||
// await MainActor.run {
|
||||
// self.showAlert = true
|
||||
// self.errorMessage = "内部错误,请稍后重试"
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -15,7 +15,9 @@ struct NetworkDisconnctedView: View {
|
||||
Color.clear
|
||||
|
||||
Button {
|
||||
print("call me here")
|
||||
Task {
|
||||
try await startVpn()
|
||||
}
|
||||
} label: {
|
||||
Text("连接")
|
||||
.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 {
|
||||
|
||||
@ -45,7 +45,8 @@ struct punchnetApp: App {
|
||||
var body: some Scene {
|
||||
WindowGroup(id: "mainWindow") {
|
||||
//IndexView(noticeServer: self.noticeServer)
|
||||
RootView()
|
||||
//RootView()
|
||||
NetworkDisconnctedView(state: NetworkState())
|
||||
.onAppear {
|
||||
// 获取主屏幕的尺寸
|
||||
guard let screenFrame = NSScreen.main?.frame else { return }
|
||||
@ -104,10 +105,11 @@ struct punchnetApp: App {
|
||||
private func menuClick() {
|
||||
switch self.vpnManager.vpnStatus {
|
||||
case .disconnected:
|
||||
Task {
|
||||
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)!)
|
||||
}
|
||||
// Task {
|
||||
// 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)!)
|
||||
// }
|
||||
()
|
||||
case .connected:
|
||||
Task {
|
||||
try await vpnManager.disableVpn()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user