Allow adding unvalidated config.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
1407090f94
commit
db7b24dd02
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||||
<device id="retina4_7" orientation="portrait">
|
<device id="retina4_7" orientation="portrait">
|
||||||
<adaptation id="fullscreen"/>
|
<adaptation id="fullscreen"/>
|
||||||
</device>
|
</device>
|
||||||
|
@ -118,6 +118,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="06N-KU-LSv" eventType="editingChanged" id="Ike-ou-qa9"/>
|
||||||
<outlet property="delegate" destination="06N-KU-LSv" id="TuA-ac-TIy"/>
|
<outlet property="delegate" destination="06N-KU-LSv" id="TuA-ac-TIy"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -141,6 +142,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="06N-KU-LSv" eventType="editingChanged" id="CQd-My-M7G"/>
|
||||||
<outlet property="delegate" destination="06N-KU-LSv" id="7YF-mU-HZT"/>
|
<outlet property="delegate" destination="06N-KU-LSv" id="7YF-mU-HZT"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -167,6 +169,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="06N-KU-LSv" eventType="editingChanged" id="d2c-NL-e1I"/>
|
||||||
<outlet property="delegate" destination="06N-KU-LSv" id="apT-gO-mcr"/>
|
<outlet property="delegate" destination="06N-KU-LSv" id="apT-gO-mcr"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -190,6 +193,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="06N-KU-LSv" eventType="editingChanged" id="Vtr-4A-l3g"/>
|
||||||
<outlet property="delegate" destination="06N-KU-LSv" id="CUZ-nd-ETQ"/>
|
<outlet property="delegate" destination="06N-KU-LSv" id="CUZ-nd-ETQ"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -210,6 +214,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="06N-KU-LSv" eventType="editingChanged" id="z45-u7-zCB"/>
|
||||||
<outlet property="delegate" destination="06N-KU-LSv" id="YZ0-LC-PjW"/>
|
<outlet property="delegate" destination="06N-KU-LSv" id="YZ0-LC-PjW"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -235,6 +240,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="06N-KU-LSv" eventType="editingChanged" id="8gN-mk-GtN"/>
|
||||||
<outlet property="delegate" destination="06N-KU-LSv" id="YjV-8W-z5Q"/>
|
<outlet property="delegate" destination="06N-KU-LSv" id="YjV-8W-z5Q"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -255,6 +261,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="06N-KU-LSv" eventType="editingChanged" id="fgZ-LJ-ksN"/>
|
||||||
<outlet property="delegate" destination="06N-KU-LSv" id="F1E-lK-AsD"/>
|
<outlet property="delegate" destination="06N-KU-LSv" id="F1E-lK-AsD"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -277,6 +284,15 @@
|
||||||
<constraint firstItem="DIe-hK-tf6" firstAttribute="leading" secondItem="CSX-Am-ix0" secondAttribute="leadingMargin" id="sab-5q-2rU"/>
|
<constraint firstItem="DIe-hK-tf6" firstAttribute="leading" secondItem="CSX-Am-ix0" secondAttribute="leadingMargin" id="sab-5q-2rU"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
|
<connections>
|
||||||
|
<outlet property="addressesField" destination="Oh8-qT-kJL" id="8aV-2T-PxV"/>
|
||||||
|
<outlet property="dnsField" destination="ByK-wW-6Q4" id="gZ4-7d-AHM"/>
|
||||||
|
<outlet property="listenPortField" destination="CSv-At-WVr" id="xnx-xz-pqS"/>
|
||||||
|
<outlet property="mtuField" destination="myM-B2-sjT" id="ppo-pV-tMl"/>
|
||||||
|
<outlet property="nameField" destination="6y9-eJ-8fF" id="PKk-lj-jK9"/>
|
||||||
|
<outlet property="privateKeyField" destination="hYd-0L-nnY" id="JLS-5M-E3T"/>
|
||||||
|
<outlet property="publicKeyField" destination="aXZ-aL-pFu" id="Vdo-km-hgS"/>
|
||||||
|
</connections>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="AddPeerTableViewCell" rowHeight="60" id="RyR-s5-lBV" customClass="AddPeerTableViewCell" customModule="WireGuard" customModuleProvider="target">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="AddPeerTableViewCell" rowHeight="60" id="RyR-s5-lBV" customClass="AddPeerTableViewCell" customModule="WireGuard" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="396" width="375" height="60"/>
|
<rect key="frame" x="0.0" y="396" width="375" height="60"/>
|
||||||
|
@ -347,6 +363,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="gzz-88-0IG" eventType="editingChanged" id="taX-Ji-pVu"/>
|
||||||
<outlet property="delegate" destination="gzz-88-0IG" id="bkQ-Nc-VH4"/>
|
<outlet property="delegate" destination="gzz-88-0IG" id="bkQ-Nc-VH4"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -367,6 +384,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="gzz-88-0IG" eventType="editingChanged" id="XeB-bW-Zog"/>
|
||||||
<outlet property="delegate" destination="gzz-88-0IG" id="oAu-VZ-2dn"/>
|
<outlet property="delegate" destination="gzz-88-0IG" id="oAu-VZ-2dn"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -387,6 +405,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="gzz-88-0IG" eventType="editingChanged" id="k1U-vW-Jom"/>
|
||||||
<outlet property="delegate" destination="gzz-88-0IG" id="DXo-0s-9sc"/>
|
<outlet property="delegate" destination="gzz-88-0IG" id="DXo-0s-9sc"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -410,6 +429,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="gzz-88-0IG" eventType="editingChanged" id="bjR-TZ-Sx8"/>
|
||||||
<outlet property="delegate" destination="gzz-88-0IG" id="PLB-sa-SBV"/>
|
<outlet property="delegate" destination="gzz-88-0IG" id="PLB-sa-SBV"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -430,6 +450,7 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
<textInputTraits key="textInputTraits"/>
|
<textInputTraits key="textInputTraits"/>
|
||||||
<connections>
|
<connections>
|
||||||
|
<action selector="textfieldDidChange:" destination="gzz-88-0IG" eventType="editingChanged" id="fQC-Pf-jUQ"/>
|
||||||
<outlet property="delegate" destination="gzz-88-0IG" id="sbH-Sb-rcW"/>
|
<outlet property="delegate" destination="gzz-88-0IG" id="sbH-Sb-rcW"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
@ -450,6 +471,13 @@
|
||||||
<constraint firstAttribute="bottomMargin" secondItem="NIK-2J-pTR" secondAttribute="bottom" id="rRD-SV-Wft"/>
|
<constraint firstAttribute="bottomMargin" secondItem="NIK-2J-pTR" secondAttribute="bottom" id="rRD-SV-Wft"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</tableViewCellContentView>
|
</tableViewCellContentView>
|
||||||
|
<connections>
|
||||||
|
<outlet property="allowedIpsField" destination="iiY-Tl-UcH" id="QQK-x0-C3T"/>
|
||||||
|
<outlet property="endpointField" destination="W88-H0-dFZ" id="l0A-57-I5p"/>
|
||||||
|
<outlet property="persistentKeepaliveField" destination="Q8w-jh-0ox" id="thE-f2-vzz"/>
|
||||||
|
<outlet property="preSharedKeyField" destination="wkY-3s-yTK" id="0Tn-cP-uXS"/>
|
||||||
|
<outlet property="publicKeyField" destination="RLw-0o-akQ" id="teS-po-0h2"/>
|
||||||
|
</connections>
|
||||||
</tableViewCell>
|
</tableViewCell>
|
||||||
</prototypes>
|
</prototypes>
|
||||||
<connections>
|
<connections>
|
||||||
|
|
|
@ -97,12 +97,10 @@ extension AppCoordinator: TunnelsTableViewControllerDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
func configure(tunnel: Tunnel, tunnelsTableViewController: TunnelsTableViewController) {
|
func configure(tunnel: Tunnel, tunnelsTableViewController: TunnelsTableViewController) {
|
||||||
// TODO implement
|
|
||||||
print("configure tunnel \(tunnel)")
|
print("configure tunnel \(tunnel)")
|
||||||
let editContext = persistentContainer.newBackgroundContext()
|
let editContext = persistentContainer.newBackgroundContext()
|
||||||
var backgroundTunnel: Tunnel?
|
var backgroundTunnel: Tunnel?
|
||||||
editContext.performAndWait {
|
editContext.performAndWait {
|
||||||
|
|
||||||
backgroundTunnel = editContext.object(with: tunnel.objectID) as? Tunnel
|
backgroundTunnel = editContext.object(with: tunnel.objectID) as? Tunnel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,8 +116,14 @@ extension AppCoordinator: TunnelsTableViewControllerDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
func delete(tunnel: Tunnel, tunnelsTableViewController: TunnelsTableViewController) {
|
func delete(tunnel: Tunnel, tunnelsTableViewController: TunnelsTableViewController) {
|
||||||
// TODO implement
|
|
||||||
print("delete tunnel \(tunnel)")
|
print("delete tunnel \(tunnel)")
|
||||||
|
|
||||||
|
if let moc = tunnel.managedObjectContext {
|
||||||
|
moc.perform {
|
||||||
|
moc.delete(tunnel)
|
||||||
|
moc.saveContextToStore()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ extension Interface {
|
||||||
@NSManaged public var dns: String?
|
@NSManaged public var dns: String?
|
||||||
@NSManaged public var table: String?
|
@NSManaged public var table: String?
|
||||||
@NSManaged public var tunnel: Tunnel?
|
@NSManaged public var tunnel: Tunnel?
|
||||||
|
@NSManaged public var publicKey: String?
|
||||||
@NSManaged public var adresses: NSSet?
|
@NSManaged public var adresses: NSSet?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,14 +17,32 @@ extension Tunnel {
|
||||||
}
|
}
|
||||||
|
|
||||||
@NSManaged public var title: String?
|
@NSManaged public var title: String?
|
||||||
@NSManaged public var peers: NSSet?
|
|
||||||
@NSManaged public var interface: Interface?
|
@NSManaged public var interface: Interface?
|
||||||
|
@NSManaged public var peers: NSOrderedSet?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Generated accessors for peers
|
// MARK: Generated accessors for peers
|
||||||
extension Tunnel {
|
extension Tunnel {
|
||||||
|
|
||||||
|
@objc(insertObject:inPeersAtIndex:)
|
||||||
|
@NSManaged public func insertIntoPeers(_ value: Peer, at idx: Int)
|
||||||
|
|
||||||
|
@objc(removeObjectFromPeersAtIndex:)
|
||||||
|
@NSManaged public func removeFromPeers(at idx: Int)
|
||||||
|
|
||||||
|
@objc(insertPeers:atIndexes:)
|
||||||
|
@NSManaged public func insertIntoPeers(_ values: [Peer], at indexes: NSIndexSet)
|
||||||
|
|
||||||
|
@objc(removePeersAtIndexes:)
|
||||||
|
@NSManaged public func removeFromPeers(at indexes: NSIndexSet)
|
||||||
|
|
||||||
|
@objc(replaceObjectInPeersAtIndex:withObject:)
|
||||||
|
@NSManaged public func replacePeers(at idx: Int, with value: Peer)
|
||||||
|
|
||||||
|
@objc(replacePeersAtIndexes:withPeers:)
|
||||||
|
@NSManaged public func replacePeers(at indexes: NSIndexSet, with values: [Peer])
|
||||||
|
|
||||||
@objc(addPeersObject:)
|
@objc(addPeersObject:)
|
||||||
@NSManaged public func addToPeers(_ value: Peer)
|
@NSManaged public func addToPeers(_ value: Peer)
|
||||||
|
|
||||||
|
@ -32,9 +50,9 @@ extension Tunnel {
|
||||||
@NSManaged public func removeFromPeers(_ value: Peer)
|
@NSManaged public func removeFromPeers(_ value: Peer)
|
||||||
|
|
||||||
@objc(addPeers:)
|
@objc(addPeers:)
|
||||||
@NSManaged public func addToPeers(_ values: NSSet)
|
@NSManaged public func addToPeers(_ values: NSOrderedSet)
|
||||||
|
|
||||||
@objc(removePeers:)
|
@objc(removePeers:)
|
||||||
@NSManaged public func removeFromPeers(_ values: NSSet)
|
@NSManaged public func removeFromPeers(_ values: NSOrderedSet)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14133" systemVersion="17E202" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
|
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14135" systemVersion="17E202" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
|
||||||
<entity name="Address" representedClassName="Address" syncable="YES">
|
<entity name="Address" representedClassName="Address" syncable="YES">
|
||||||
<attribute name="address" optional="YES" attributeType="String" syncable="YES"/>
|
<attribute name="address" optional="YES" attributeType="String" syncable="YES"/>
|
||||||
<relationship name="interface" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Interface" inverseName="adresses" inverseEntity="Interface" syncable="YES"/>
|
<relationship name="interface" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Interface" inverseName="adresses" inverseEntity="Interface" syncable="YES"/>
|
||||||
|
@ -10,6 +10,7 @@
|
||||||
<attribute name="listenPort" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="YES" syncable="YES"/>
|
<attribute name="listenPort" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="YES" syncable="YES"/>
|
||||||
<attribute name="mtu" optional="YES" attributeType="Integer 32" defaultValueString="0" usesScalarValueType="YES" syncable="YES"/>
|
<attribute name="mtu" optional="YES" attributeType="Integer 32" defaultValueString="0" usesScalarValueType="YES" syncable="YES"/>
|
||||||
<attribute name="privateKey" attributeType="String" syncable="YES"/>
|
<attribute name="privateKey" attributeType="String" syncable="YES"/>
|
||||||
|
<attribute name="publicKey" attributeType="String" syncable="YES"/>
|
||||||
<attribute name="table" optional="YES" attributeType="String" syncable="YES"/>
|
<attribute name="table" optional="YES" attributeType="String" syncable="YES"/>
|
||||||
<relationship name="adresses" toMany="YES" deletionRule="Cascade" destinationEntity="Address" inverseName="interface" inverseEntity="Address" syncable="YES"/>
|
<relationship name="adresses" toMany="YES" deletionRule="Cascade" destinationEntity="Address" inverseName="interface" inverseEntity="Address" syncable="YES"/>
|
||||||
<relationship name="tunnel" maxCount="1" deletionRule="Nullify" destinationEntity="Tunnel" inverseName="interface" inverseEntity="Tunnel" syncable="YES"/>
|
<relationship name="tunnel" maxCount="1" deletionRule="Nullify" destinationEntity="Tunnel" inverseName="interface" inverseEntity="Tunnel" syncable="YES"/>
|
||||||
|
@ -25,11 +26,11 @@
|
||||||
<entity name="Tunnel" representedClassName="Tunnel" syncable="YES">
|
<entity name="Tunnel" representedClassName="Tunnel" syncable="YES">
|
||||||
<attribute name="title" optional="YES" attributeType="String" syncable="YES"/>
|
<attribute name="title" optional="YES" attributeType="String" syncable="YES"/>
|
||||||
<relationship name="interface" maxCount="1" deletionRule="Cascade" destinationEntity="Interface" inverseName="tunnel" inverseEntity="Interface" syncable="YES"/>
|
<relationship name="interface" maxCount="1" deletionRule="Cascade" destinationEntity="Interface" inverseName="tunnel" inverseEntity="Interface" syncable="YES"/>
|
||||||
<relationship name="peers" toMany="YES" deletionRule="Cascade" destinationEntity="Peer" inverseName="tunnel" inverseEntity="Peer" syncable="YES"/>
|
<relationship name="peers" toMany="YES" deletionRule="Cascade" ordered="YES" destinationEntity="Peer" inverseName="tunnel" inverseEntity="Peer" syncable="YES"/>
|
||||||
</entity>
|
</entity>
|
||||||
<elements>
|
<elements>
|
||||||
<element name="Address" positionX="-54" positionY="45" width="128" height="75"/>
|
<element name="Address" positionX="-54" positionY="45" width="128" height="75"/>
|
||||||
<element name="Interface" positionX="-54" positionY="-9" width="128" height="165"/>
|
<element name="Interface" positionX="-54" positionY="-9" width="128" height="180"/>
|
||||||
<element name="Peer" positionX="-36" positionY="9" width="128" height="135"/>
|
<element name="Peer" positionX="-36" positionY="9" width="128" height="135"/>
|
||||||
<element name="Tunnel" positionX="160" positionY="192" width="128" height="90"/>
|
<element name="Tunnel" positionX="160" positionY="192" width="128" height="90"/>
|
||||||
</elements>
|
</elements>
|
||||||
|
|
|
@ -61,9 +61,19 @@ class TunnelConfigurationTableViewController: UITableViewController {
|
||||||
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||||
switch indexPath.section {
|
switch indexPath.section {
|
||||||
case 0:
|
case 0:
|
||||||
return tableView.dequeueReusableCell(type: InterfaceTableViewCell.self, for: indexPath)
|
let cell = tableView.dequeueReusableCell(type: InterfaceTableViewCell.self, for: indexPath)
|
||||||
|
cell.model = tunnel.interface
|
||||||
|
return cell
|
||||||
case 1:
|
case 1:
|
||||||
return tableView.dequeueReusableCell(type: PeerTableViewCell.self, for: indexPath)
|
let cell = tableView.dequeueReusableCell(type: PeerTableViewCell.self, for: indexPath)
|
||||||
|
if let peer = tunnel.peers?.object(at: indexPath.row) as? Peer {
|
||||||
|
cell.peer = peer
|
||||||
|
} else {
|
||||||
|
let peer = Peer(context: tunnel.managedObjectContext!)
|
||||||
|
tunnel.addToPeers(peer)
|
||||||
|
cell.peer = peer
|
||||||
|
}
|
||||||
|
return cell
|
||||||
default:
|
default:
|
||||||
return tableView.dequeueReusableCell(type: AddPeerTableViewCell.self, for: indexPath)
|
return tableView.dequeueReusableCell(type: AddPeerTableViewCell.self, for: indexPath)
|
||||||
}
|
}
|
||||||
|
@ -104,12 +114,38 @@ class InterfaceTableViewCell: UITableViewCell {
|
||||||
}
|
}
|
||||||
|
|
||||||
extension InterfaceTableViewCell: UITextFieldDelegate {
|
extension InterfaceTableViewCell: UITextFieldDelegate {
|
||||||
func textFieldDidBeginEditing(_ textField: UITextField) {
|
@IBAction
|
||||||
print("\(textField) \(textField.text)")
|
func textfieldDidChange(_ sender: UITextField) {
|
||||||
|
let string = sender.text
|
||||||
|
print(string)
|
||||||
|
|
||||||
|
if sender == nameField {
|
||||||
|
model.tunnel?.title = string
|
||||||
|
} else if sender == privateKeyField {
|
||||||
|
model.privateKey = string
|
||||||
|
} else if sender == publicKeyField {
|
||||||
|
model.publicKey = string
|
||||||
|
} else if sender == addressesField {
|
||||||
|
let address = Address(context: model.managedObjectContext!)
|
||||||
|
address.address = string
|
||||||
|
model.adresses = NSSet(array: [address])
|
||||||
|
} else if sender == listenPortField {
|
||||||
|
if let string = string, let port = Int16(string) {
|
||||||
|
model.listenPort = port
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if sender == dnsField {
|
||||||
|
model.dns = string
|
||||||
|
} else if sender == mtuField {
|
||||||
|
if let string = string, let mtu = Int32(string) {
|
||||||
|
model.mtu = mtu
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
||||||
print("\(string)")
|
print("\(string)")
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,12 +162,29 @@ class PeerTableViewCell: UITableViewCell {
|
||||||
}
|
}
|
||||||
|
|
||||||
extension PeerTableViewCell: UITextFieldDelegate {
|
extension PeerTableViewCell: UITextFieldDelegate {
|
||||||
func textFieldDidBeginEditing(_ textField: UITextField) {
|
@IBAction
|
||||||
print("\(textField) \(textField.text)")
|
func textfieldDidChange(_ sender: UITextField) {
|
||||||
|
let string = sender.text
|
||||||
|
print(string)
|
||||||
|
|
||||||
|
if sender == publicKeyField {
|
||||||
|
peer.publicKey = string
|
||||||
|
} else if sender == preSharedKeyField {
|
||||||
|
peer.presharedKey = string
|
||||||
|
} else if sender == allowedIpsField {
|
||||||
|
peer.allowedIPs = string
|
||||||
|
} else if sender == endpointField {
|
||||||
|
peer.endpoint = string
|
||||||
|
} else if sender == persistentKeepaliveField {
|
||||||
|
if let string = string, let persistentKeepalive = Int16(string) {
|
||||||
|
peer.persistentKeepalive = persistentKeepalive
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
||||||
print("\(string)")
|
print("\(string)")
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue