Skip to content

Commit

Permalink
Merge pull request #100 from gertrude-app/ios-app
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredh159 authored Oct 8, 2024
2 parents 3eff51e + 2439236 commit 451baff
Show file tree
Hide file tree
Showing 37 changed files with 2,007 additions and 0 deletions.
6 changes: 6 additions & 0 deletions iosapp/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
lib-ios/.build
/Packages
xcuserdata/
DerivedData/
**/.swiftpm
*.pbxuser
25 changes: 25 additions & 0 deletions iosapp/controller/FilterControlProvider.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import NetworkExtension
import os.log

class FilterControlProvider: NEFilterControlProvider {

override func startFilter(completionHandler: @escaping (Error?) -> Void) {
os_log("[G•] start filter (control)")
completionHandler(nil)
}

override func stopFilter(
with reason: NEProviderStopReason,
completionHandler: @escaping () -> Void
) {
os_log("[G•] stop filter (control) reason: %{public}s", String(describing: reason))
completionHandler()
}

override func handleNewFlow(
_ flow: NEFilterFlow,
completionHandler: @escaping (NEFilterControlVerdict) -> Void
) {
completionHandler(.allow(withUpdateRules: false))
}
}
13 changes: 13 additions & 0 deletions iosapp/controller/Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.networkextension.filter-control</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).FilterControlProvider</string>
</dict>
</dict>
</plist>
14 changes: 14 additions & 0 deletions iosapp/controller/controller.entitlements
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.networking.networkextension</key>
<array>
<string>content-filter-provider</string>
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.gertrude-skunk.ios-poc</string>
</array>
</dict>
</plist>
45 changes: 45 additions & 0 deletions iosapp/filter/FilterDataProvider.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import Filter
import NetworkExtension
import os.log

class FilterDataProvider: NEFilterDataProvider {
override func startFilter(completionHandler: @escaping (Error?) -> Void) {
os_log("[G•] start filter (data)")
completionHandler(nil)
}

override func stopFilter(
with reason: NEProviderStopReason,
completionHandler: @escaping () -> Void
) {
os_log("[G•] stop filter (data) reason: %{public}s", String(describing: reason))
completionHandler()
}

override func handleNewFlow(_ flow: NEFilterFlow) -> NEFilterNewFlowVerdict {
var hostname: String?
var url: String?
let sourceId: String? = flow.sourceAppIdentifier
if let browserFlow = flow as? NEFilterBrowserFlow {
url = browserFlow.url?.absoluteString
os_log("[G•] handle new BROWSER flow (data) : %{public}s", String(describing: browserFlow))
} else if let socketFlow = flow as? NEFilterSocketFlow {
hostname = socketFlow.remoteHostname
os_log("[G•] handle new SOCKET flow (data) : %{public}s", String(describing: socketFlow))
} else {
os_log(
"[G•] flow is NEITHER subclass (unreachable?) id: %{public}s",
String(describing: flow.identifier)
)
}
let shouldAllow = decideFlow(hostname: hostname, url: url, sourceId: sourceId)
os_log(
"[G•] decision: %{public}s, hostname: %{public}s, url: %{public}s, sourceId: %{public}s",
shouldAllow ? "ALLOW" : "DROP",
hostname ?? "(nil)",
url ?? "(nil)",
sourceId ?? "(nil)"
)
return shouldAllow ? .allow() : .drop()
}
}
13 changes: 13 additions & 0 deletions iosapp/filter/Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.networkextension.filter-data</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).FilterDataProvider</string>
</dict>
</dict>
</plist>
14 changes: 14 additions & 0 deletions iosapp/filter/filter.entitlements
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.networking.networkextension</key>
<array>
<string>content-filter-provider</string>
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.gertrude-skunk.ios-poc</string>
</array>
</dict>
</plist>
Loading

0 comments on commit 451baff

Please sign in to comment.