diff --git a/.gitignore b/.gitignore
index 8a623ac..102ee0d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,3 @@ xcuserdata
# Rust
target/
-
-# DS Store
-**/.DS_Store
diff --git a/Apple/App/App-macOS.entitlements b/Apple/App/App-macOS.entitlements
index 1c1e0ea..02ee960 100644
--- a/Apple/App/App-macOS.entitlements
+++ b/Apple/App/App-macOS.entitlements
@@ -8,7 +8,7 @@
com.apple.security.application-groups
- group.com.hackclub.burrow
+ $(APP_GROUP_IDENTIFIER)
diff --git a/Apple/App/Assets.xcassets/OnboardingBackground.imageset/Contents.json b/Apple/App/Assets.xcassets/OnboardingBackground.imageset/Contents.json
deleted file mode 100644
index dac90f3..0000000
--- a/Apple/App/Assets.xcassets/OnboardingBackground.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "filename" : "background.jpeg",
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Apple/App/Assets.xcassets/OnboardingBackground.imageset/background.jpeg b/Apple/App/Assets.xcassets/OnboardingBackground.imageset/background.jpeg
deleted file mode 100644
index dba511b..0000000
Binary files a/Apple/App/Assets.xcassets/OnboardingBackground.imageset/background.jpeg and /dev/null differ
diff --git a/Apple/App/BurrowApp.swift b/Apple/App/BurrowApp.swift
index 9689c35..50a7231 100644
--- a/Apple/App/BurrowApp.swift
+++ b/Apple/App/BurrowApp.swift
@@ -1,62 +1,17 @@
import NetworkExtension
import SwiftUI
-@available(macOS 13.0, *)
@main
@MainActor
struct BurrowApp: App {
- // To connect to the App Delegate
- @NSApplicationDelegateAdaptor(AppDelegate.self)
- var delegate
- var body: some Scene {
- WindowGroup(id: "onboarding", content: {
- OnboardingView().frame(width: 1000, height: 600.0).scaledToFill().fixedSize()
- }).windowStyle(.hiddenTitleBar).windowResizability(.contentSize)
- }
-}
-
-@available(macOS 13.0, *)
-@MainActor
-class AppDelegate: NSObject, NSApplicationDelegate {
static let tunnel = Tunnel { manager, proto in
proto.serverAddress = "hackclub.com"
manager.localizedDescription = "Burrow"
}
- // Verifies app status
- func checkFirstTime() {
- let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
- if launchedBefore {
- print("Not first launch.")
- closeApp()
- } else {
- print("First launch, setting UserDefault.")
- setVisited()
- }
- }
-
- var statusItem: NSStatusItem?
- var popOver = NSPopover()
- func applicationDidFinishLaunching(_ notification: Notification) {
- checkFirstTime()
- let menuView = MenuView(tunnel: AppDelegate.tunnel)
- // Creating apopOver
- popOver.behavior = .transient
- popOver.animates = true
- popOver.contentViewController = NSViewController()
- popOver.contentViewController?.view = NSHostingView(rootView: menuView)
- statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
- // Safe Check if status Button is Available or not...
- if let menuButton = statusItem?.button {
- let icon = "network.badge.shield.half.filled"
- menuButton.image = NSImage(systemSymbolName: icon, accessibilityDescription: nil)
- menuButton.action = #selector(menuButtonToggle)
- }
- }
- @objc func
- menuButtonToggle() {
- if let menuButton = statusItem?.button {
- self.popOver.show(relativeTo: menuButton.bounds, of: menuButton, preferredEdge: NSRectEdge.minY)
+ var body: some Scene {
+ WindowGroup {
+ TunnelView(tunnel: Self.tunnel)
}
}
}
diff --git a/Apple/App/Menu/MenuView.swift b/Apple/App/Menu/MenuView.swift
deleted file mode 100644
index 7db9d7c..0000000
--- a/Apple/App/Menu/MenuView.swift
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// MenuView.swift
-// App
-//
-// Created by Thomas Stubblefield on 5/13/23.
-//
-
-import SwiftUI
-
-struct MenuView: View {
- @State private var isToggled = false
- @ObservedObject var tunnel: Tunnel
-
- private func start() {
- do {
- try tunnel.start()
- } catch {
- print(error)
- }
- }
-
- private func stop() {
- tunnel.stop()
- }
-
- private func configure() {
- Task { try await tunnel.configure() }
- }
-
- var body: some View {
- VStack {
- HStack {
- Text("Burrow")
- .fontWeight(.bold)
-
- Spacer()
- Toggle("", isOn: $isToggled)
- .toggleStyle(SwitchToggleStyle(tint: .blue))
- .onChange(of: isToggled) { value in
- if value {
- start()
- } else {
- stop()
- }
- print("Toggle value: \(value)")
- }
- }
- Divider()
- switch tunnel.status {
- case .permissionRequired:
- VStack(alignment: .leading) {
- Text("Burrow requires additional permissions to function optimally on your machine. Please grant the necessary permissions to ensure smooth operation.")
- .font(.caption)
- .truncationMode(.tail)
-
- Button("Grant Permissions", action: configure)
- }
- default:
-
- Text("Burrow is equipped with the necessary permissions to operate seamlessly on your device.")
- .font(.caption)
- }
- }
- .frame(width: 250)
- .padding(16)
- .task { await tunnel.update() }
- }
-}
diff --git a/Apple/App/Menu/OnboardingView.swift b/Apple/App/Menu/OnboardingView.swift
deleted file mode 100644
index 48694fb..0000000
--- a/Apple/App/Menu/OnboardingView.swift
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// OnboardingView.swift
-// App
-//
-// Created by Juan Pablo Gutierrez on 25/05/23.
-//
-// Represents the onboarding screen
-
-import SwiftUI
-
-//Sets burrow visited status
-func setVisited() {
- UserDefaults.standard.set(true, forKey: "launchedBefore")
-}
-
-func closeApp() {
- setVisited()
- NSApp.windows.first?.close()
-}
-
-@available(macOS 13.0, *)
-struct OnboardingView: View {
- var body: some View {
- ZStack(alignment: .center) {
- Image("OnboardingBackground")
- .resizable(resizingMode: .stretch)
- .aspectRatio(contentMode: .fit)
- .scaledToFill()
- Color.black
- .opacity(0.6)
- .cornerRadius(15)
- .blur(radius: 0.2)
- .edgesIgnoringSafeArea(.all)
- .frame(width: 450, height: 300)
- VStack(alignment: .center) {
- Text("Welcome to burrow").font(.system(size: 24, weight: .bold, design: .rounded))
- Spacer().frame(height: /*@START_MENU_TOKEN@*/20.0/*@END_MENU_TOKEN@*/)
- Text("It is a best-in-class tool for burrowing through firewalls.").font(.system(size: 14))
- Spacer().frame(height: 10.0)
- Text("Built by teenagers at HackClub").font(.system(size: 14))
- Button(action: closeApp, label: {
- Text("Start burrowing")
- .font(
- .system(
- size : 14,
- weight: .regular,
- design: .rounded))
- .padding(.all, 30.0)
- .foregroundColor(.white)
- }).buttonBorderShape(.roundedRectangle).buttonStyle(.borderless)
- }.padding(20.0)
- }
- }
-}
diff --git a/Apple/App/Tunnel.swift b/Apple/App/Tunnel.swift
index e8bff22..ae185a4 100644
--- a/Apple/App/Tunnel.swift
+++ b/Apple/App/Tunnel.swift
@@ -92,7 +92,7 @@ class Tunnel: ObservableObject {
let proto = NETunnelProviderProtocol()
proto.providerBundleIdentifier = bundleIdentifier
configure(manager, proto)
-
+
manager.protocolConfiguration = proto
try await manager.save()
}
diff --git a/Apple/App/TunnelView.swift b/Apple/App/TunnelView.swift
index e3b9e28..6692a04 100644
--- a/Apple/App/TunnelView.swift
+++ b/Apple/App/TunnelView.swift
@@ -1,36 +1,35 @@
import SwiftUI
struct TunnelView: View {
-// @ObservedObject var tunnel: Tunnel
+ @ObservedObject var tunnel: Tunnel
var body: some View {
- EmptyView()
-// VStack {
-// Text(verbatim: tunnel.status.description)
-// switch tunnel.status {
-// case .connected:
-// Button("Disconnect", action: stop)
-// case .permissionRequired:
-// Button("Allow", action: configure)
-// case .disconnected:
-// Button("Start", action: start)
-// default:
-// EmptyView()
-// }
-// }
-// .task { await tunnel.update() }
-// .padding()
+ VStack {
+ Text(verbatim: tunnel.status.description)
+ switch tunnel.status {
+ case .connected:
+ Button("Disconnect", action: stop)
+ case .permissionRequired:
+ Button("Allow", action: configure)
+ case .disconnected:
+ Button("Start", action: start)
+ default:
+ EmptyView()
+ }
+ }
+ .task { await tunnel.update() }
+ .padding()
}
-// private func start() {
-// try? tunnel.start()
-// }
-//
-// private func stop() {
-// tunnel.stop()
-// }
-//
-// private func configure() {
-// Task { try await tunnel.configure() }
-// }
+ private func start() {
+ try? tunnel.start()
+ }
+
+ private func stop() {
+ tunnel.stop()
+ }
+
+ private func configure() {
+ Task { try await tunnel.configure() }
+ }
}
diff --git a/Apple/Burrow.xcodeproj/project.pbxproj b/Apple/Burrow.xcodeproj/project.pbxproj
index 40d3cc2..56b64e4 100644
--- a/Apple/Burrow.xcodeproj/project.pbxproj
+++ b/Apple/Burrow.xcodeproj/project.pbxproj
@@ -7,11 +7,10 @@
objects = {
/* Begin PBXBuildFile section */
- 43AA26D82A10004900F14CE6 /* MenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43AA26D72A10004900F14CE6 /* MenuView.swift */; };
- 91D80FC72A20615500952E28 /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D80FC62A20615500952E28 /* OnboardingView.swift */; };
D020F65829E4A697002790F6 /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D020F65729E4A697002790F6 /* PacketTunnelProvider.swift */; };
D020F65D29E4A697002790F6 /* BurrowNetworkExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D020F65329E4A697002790F6 /* BurrowNetworkExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
D05B9F7629E39EEC008CB1F9 /* BurrowApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05B9F7529E39EEC008CB1F9 /* BurrowApp.swift */; };
+ D05B9F7829E39EEC008CB1F9 /* TunnelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05B9F7729E39EEC008CB1F9 /* TunnelView.swift */; };
D05B9F7A29E39EED008CB1F9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D05B9F7929E39EED008CB1F9 /* Assets.xcassets */; };
D0BCC5FD2A086D4700AD070D /* NetworkExtension+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BCC5FC2A086D4700AD070D /* NetworkExtension+Async.swift */; };
D0BCC5FF2A086E1C00AD070D /* Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BCC5FE2A086E1C00AD070D /* Status.swift */; };
@@ -45,8 +44,6 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 43AA26D72A10004900F14CE6 /* MenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuView.swift; sourceTree = ""; };
- 91D80FC62A20615500952E28 /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = ""; wrapsLines = 0; };
D020F63D29E4A1FF002790F6 /* Identity.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Identity.xcconfig; sourceTree = ""; };
D020F64029E4A1FF002790F6 /* Compiler.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Compiler.xcconfig; sourceTree = ""; };
D020F64229E4A1FF002790F6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
@@ -63,6 +60,7 @@
D020F66929E4AA74002790F6 /* App-macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "App-macOS.entitlements"; sourceTree = ""; };
D05B9F7229E39EEC008CB1F9 /* Burrow.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Burrow.app; sourceTree = BUILT_PRODUCTS_DIR; };
D05B9F7529E39EEC008CB1F9 /* BurrowApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BurrowApp.swift; sourceTree = ""; };
+ D05B9F7729E39EEC008CB1F9 /* TunnelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelView.swift; sourceTree = ""; };
D05B9F7929E39EED008CB1F9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
D0B98FBF29FD8072004E7149 /* build-rust.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "build-rust.sh"; sourceTree = ""; };
D0B98FC629FDC5B5004E7149 /* Tunnel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tunnel.swift; sourceTree = ""; };
@@ -92,15 +90,6 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 43AA26D62A0FFFD000F14CE6 /* Menu */ = {
- isa = PBXGroup;
- children = (
- 43AA26D72A10004900F14CE6 /* MenuView.swift */,
- 91D80FC62A20615500952E28 /* OnboardingView.swift */,
- );
- path = Menu;
- sourceTree = "";
- };
D020F63C29E4A1FF002790F6 /* Configuration */ = {
isa = PBXGroup;
children = (
@@ -148,8 +137,8 @@
D05B9F7429E39EEC008CB1F9 /* App */ = {
isa = PBXGroup;
children = (
- 43AA26D62A0FFFD000F14CE6 /* Menu */,
D05B9F7529E39EEC008CB1F9 /* BurrowApp.swift */,
+ D05B9F7729E39EEC008CB1F9 /* TunnelView.swift */,
D0B98FC629FDC5B5004E7149 /* Tunnel.swift */,
D0BCC5FE2A086E1C00AD070D /* Status.swift */,
D0BCC5FC2A086D4700AD070D /* NetworkExtension+Async.swift */,
@@ -310,11 +299,10 @@
buildActionMask = 2147483647;
files = (
D0BCC6082A0981FE00AD070D /* Tunnel.swift in Sources */,
- 43AA26D82A10004900F14CE6 /* MenuView.swift in Sources */,
+ D05B9F7829E39EEC008CB1F9 /* TunnelView.swift in Sources */,
D0BCC5FF2A086E1C00AD070D /* Status.swift in Sources */,
D05B9F7629E39EEC008CB1F9 /* BurrowApp.swift in Sources */,
D0BCC5FD2A086D4700AD070D /* NetworkExtension+Async.swift in Sources */,
- 91D80FC72A20615500952E28 /* OnboardingView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -341,10 +329,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = D020F66229E4A6E5002790F6 /* NetworkExtension.xcconfig */;
buildSettings = {
- DEVELOPMENT_TEAM = P6PV2R9443;
- INFOPLIST_KEY_CFBundleDisplayName = Burrow;
- INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Hack Club";
- "PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = com.hackclub.burrow.network;
};
name = Debug;
};
@@ -352,10 +336,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = D020F66229E4A6E5002790F6 /* NetworkExtension.xcconfig */;
buildSettings = {
- DEVELOPMENT_TEAM = P6PV2R9443;
- INFOPLIST_KEY_CFBundleDisplayName = Burrow;
- INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Hack Club";
- "PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = com.hackclub.burrow.network;
};
name = Release;
};
@@ -377,10 +357,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = D020F64929E4A34B002790F6 /* App.xcconfig */;
buildSettings = {
- INFOPLIST_KEY_CFBundleDisplayName = Burrow;
- INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
- INFOPLIST_KEY_LSUIElement = YES;
- INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Hack Club";
};
name = Debug;
};
@@ -388,10 +364,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = D020F64929E4A34B002790F6 /* App.xcconfig */;
buildSettings = {
- INFOPLIST_KEY_CFBundleDisplayName = Burrow;
- INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
- INFOPLIST_KEY_LSUIElement = YES;
- INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Hack Club";
};
name = Release;
};
diff --git a/Apple/Configuration/Info.plist b/Apple/Configuration/Info.plist
index 0c67376..7632dad 100644
--- a/Apple/Configuration/Info.plist
+++ b/Apple/Configuration/Info.plist
@@ -1,5 +1,8 @@
-
+
+ CFBundleName
+ $(INFOPLIST_KEY_CFBundleDisplayName)
+
diff --git a/Apple/NetworkExtension/Info.plist b/Apple/NetworkExtension/Info.plist
index 3059459..e2cf604 100644
--- a/Apple/NetworkExtension/Info.plist
+++ b/Apple/NetworkExtension/Info.plist
@@ -2,6 +2,8 @@
+ CFBundleName
+ $(INFOPLIST_KEY_CFBundleDisplayName)
NSExtension
NSExtensionPointIdentifier
diff --git a/Apple/NetworkExtension/NetworkExtension-macOS.entitlements b/Apple/NetworkExtension/NetworkExtension-macOS.entitlements
index 1c1e0ea..02ee960 100644
--- a/Apple/NetworkExtension/NetworkExtension-macOS.entitlements
+++ b/Apple/NetworkExtension/NetworkExtension-macOS.entitlements
@@ -8,7 +8,7 @@
com.apple.security.application-groups
- group.com.hackclub.burrow
+ $(APP_GROUP_IDENTIFIER)