summaryrefslogtreecommitdiff
path: root/ZeroTier One
diff options
context:
space:
mode:
authorGrant Limberg <glimberg@gmail.com>2016-06-30 21:24:45 -0700
committerGrant Limberg <glimberg@gmail.com>2016-06-30 21:24:45 -0700
commita156fec25ade8629a9fe880cd34fb8011d58080e (patch)
treea6611e1515b5deb0cd5c2bdff1443144b7cb5326 /ZeroTier One
parentfe725f999547c7fd525d84f7f06fcf56992dae38 (diff)
downloadinfinitytier-a156fec25ade8629a9fe880cd34fb8011d58080e.tar.gz
infinitytier-a156fec25ade8629a9fe880cd34fb8011d58080e.zip
put node ID into the main menu.
Clicking on the menu item copies the node ID into the clipboard.
Diffstat (limited to 'ZeroTier One')
-rw-r--r--ZeroTier One/AppDelegate.swift26
-rw-r--r--ZeroTier One/NetworkMonitor.swift9
-rw-r--r--ZeroTier One/NodeStatus.swift59
-rw-r--r--ZeroTier One/ServiceCom.swift34
4 files changed, 126 insertions, 2 deletions
diff --git a/ZeroTier One/AppDelegate.swift b/ZeroTier One/AppDelegate.swift
index 887bab56..584b54ae 100644
--- a/ZeroTier One/AppDelegate.swift
+++ b/ZeroTier One/AppDelegate.swift
@@ -27,7 +27,12 @@ class AppDelegate: NSObject, NSApplicationDelegate {
var networks = [Network]()
+ var status: NodeStatus? = nil
+
+ var pasteboard = NSPasteboard.generalPasteboard()
+
func applicationDidFinishLaunching(aNotification: NSNotification) {
+ pasteboard.declareTypes([NSPasteboardTypeString], owner: nil)
let defaults = NSUserDefaults.standardUserDefaults()
let defaultsDict = ["firstRun": true]
@@ -47,10 +52,9 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}
-
-
let nc = NSNotificationCenter.defaultCenter()
nc.addObserver(self, selector: #selector(onNetworkListUpdated(_:)), name: networkUpdateKey, object: nil)
+ nc.addObserver(self, selector: #selector(onNodeStatusUpdated(_:)), name: statusUpdateKey, object: nil)
statusItem.image = NSImage(named: "MenuBarIconMac")
@@ -161,9 +165,21 @@ class AppDelegate: NSObject, NSApplicationDelegate {
buildMenu()
}
+ func onNodeStatusUpdated(note: NSNotification) {
+ let status = note.userInfo!["status"] as! NodeStatus
+ self.status = status
+
+ buildMenu()
+ }
+
func buildMenu() {
let menu = NSMenu()
+ if let s = self.status {
+ menu.addItem(NSMenuItem(title: "Node ID: \(s.address)", action: #selector(AppDelegate.copyNodeID), keyEquivalent: ""))
+ menu.addItem(NSMenuItem.separatorItem())
+ }
+
menu.addItem(NSMenuItem(title: "Network Details...", action: #selector(AppDelegate.showNetworks), keyEquivalent: "n"))
menu.addItem(NSMenuItem(title: "Join Network...", action: #selector(AppDelegate.joinNetwork), keyEquivalent: "j"))
menu.addItem(NSMenuItem.separatorItem())
@@ -224,5 +240,11 @@ class AppDelegate: NSObject, NSApplicationDelegate {
ServiceCom.joinNetwork(id)
}
}
+
+ func copyNodeID() {
+ if let s = self.status {
+ pasteboard.setString(s.address, forType: NSPasteboardTypeString)
+ }
+ }
}
diff --git a/ZeroTier One/NetworkMonitor.swift b/ZeroTier One/NetworkMonitor.swift
index c81ac47d..2071fbbb 100644
--- a/ZeroTier One/NetworkMonitor.swift
+++ b/ZeroTier One/NetworkMonitor.swift
@@ -9,6 +9,7 @@
import Cocoa
let networkUpdateKey = "com.zerotier.one.network-list"
+let statusUpdateKey = "com.zerotier.one.status"
class NetworkMonitor: NSObject {
@@ -58,6 +59,14 @@ class NetworkMonitor: NSObject {
self.internal_updateNetworkInfo()
}
}
+
+ ServiceCom.getNodeStatus() { nodeStatus -> Void in
+ NSOperationQueue.mainQueue().addOperationWithBlock() { () -> Void in
+ let nc = NSNotificationCenter.defaultCenter()
+
+ nc.postNotificationName(statusUpdateKey, object: nil, userInfo: ["status": nodeStatus])
+ }
+ }
}
func deleteSavedNetwork(nwid: String) {
diff --git a/ZeroTier One/NodeStatus.swift b/ZeroTier One/NodeStatus.swift
new file mode 100644
index 00000000..e2ba0820
--- /dev/null
+++ b/ZeroTier One/NodeStatus.swift
@@ -0,0 +1,59 @@
+//
+// NodeStatus.swift
+// ZeroTier One
+//
+// Created by Grant Limberg on 6/30/16.
+// Copyright © 2016 ZeroTier, Inc. All rights reserved.
+//
+
+import Cocoa
+
+class NodeStatus: NSObject {
+ var address: String = ""
+ var publicIdentity: String = ""
+ var online: Bool = false
+ var tcpFallbackActive: Bool = false
+ var versionMajor: Int = 0
+ var versionMinor: Int = 0
+ var versionRev: Int = 0
+ var version: String = ""
+ var clock: UInt64 = 0
+
+ init(jsonData: [String: AnyObject]) {
+ if let a = jsonData["address"] as? String {
+ self.address = a
+ }
+
+ if let p = jsonData["publicIdentity"] as? String {
+ self.publicIdentity = p
+ }
+
+ if let o = jsonData["online"] as? NSNumber {
+ self.online = o.boolValue
+ }
+
+ if let t = jsonData["tcpFallbackActive"] as? NSNumber {
+ self.tcpFallbackActive = t.boolValue
+ }
+
+ if let v = jsonData["versionMajor"] as? NSNumber {
+ self.versionMajor = v.integerValue
+ }
+
+ if let v = jsonData["versionMinor"] as? NSNumber {
+ self.versionMinor = v.integerValue
+ }
+
+ if let v = jsonData["versionRev"] as? NSNumber {
+ self.versionRev = v.integerValue
+ }
+
+ if let v = jsonData["version"] as? String {
+ self.version = v
+ }
+
+ if let c = jsonData["version"] as? NSNumber {
+ self.clock = c.unsignedLongLongValue
+ }
+ }
+}
diff --git a/ZeroTier One/ServiceCom.swift b/ZeroTier One/ServiceCom.swift
index 2a98ec36..6ebf0986 100644
--- a/ZeroTier One/ServiceCom.swift
+++ b/ZeroTier One/ServiceCom.swift
@@ -118,6 +118,40 @@ class ServiceCom: NSObject {
}
}
+ static func getNodeStatus(completionHandler: (NodeStatus -> Void)) {
+ let urlString = baseURL + "/status?auth=\(ServiceCom.getKey())"
+
+ if let u = NSURL(string: urlString) {
+ let request = NSMutableURLRequest(URL: u)
+ let session = NSURLSession.sharedSession()
+ let task = session.dataTaskWithRequest(request) { (data, response, error) in
+ if error != nil{
+ NSLog("\(error)")
+ return
+ }
+
+ let httpResponse = response as! NSHTTPURLResponse
+ let status = httpResponse.statusCode
+
+ if status == 200 {
+ do {
+ let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) as! [String: AnyObject]
+
+ let status = NodeStatus(jsonData: json)
+
+ completionHandler(status)
+ }
+ catch {
+ }
+ }
+ }
+
+ task.resume()
+ }
+ else {
+ NSLog("bad URL")
+ }
+ }
static func joinNetwork(network: String, allowManaged: Bool = true, allowGlobal: Bool = false, allowDefault: Bool = false) {
let urlString = baseURL + "/network/\(network)?auth=\(ServiceCom.getKey())"