This commit is contained in:
anlicheng 2026-01-28 21:42:16 +08:00
parent dc59e1870a
commit 92a05263bb
6 changed files with 99 additions and 70 deletions

View File

@ -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
} }

View File

@ -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)
}
} }

View File

@ -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)!)
()
} }
} }

View File

@ -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 = ""
} // }
} // }
} }
} }

View File

@ -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 {

View File

@ -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()