From 2417384e2186df9d407f7b1786bd912221a922de Mon Sep 17 00:00:00 2001 From: relayrelayrelay Date: Wed, 25 Jun 2025 14:52:26 +0000 Subject: [PATCH 1/4] Start draft PR From 093bde87ddc3b0726a7a6bedb4b463b4c0d0bbc5 Mon Sep 17 00:00:00 2001 From: relayrelayrelay Date: Wed, 25 Jun 2025 14:53:05 +0000 Subject: [PATCH 2/4] Add WiFi security type detection utility --- .../wifiscanner/network/WiFiSecurityType.kt | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/main/kotlin/com/wifiscanner/network/WiFiSecurityType.kt diff --git a/src/main/kotlin/com/wifiscanner/network/WiFiSecurityType.kt b/src/main/kotlin/com/wifiscanner/network/WiFiSecurityType.kt new file mode 100644 index 0000000..f0a7a54 --- /dev/null +++ b/src/main/kotlin/com/wifiscanner/network/WiFiSecurityType.kt @@ -0,0 +1,40 @@ +package com.wifiscanner.network + +/** + * Represents different WiFi security types + */ +enum class WiFiSecurityType { + OPEN, // No security + WEP, // Wired Equivalent Privacy (deprecated) + WPA, // Wi-Fi Protected Access + WPA2, // Wi-Fi Protected Access 2 + WPA3, // Wi-Fi Protected Access 3 + UNKNOWN // Unable to determine security type +} + +/** + * Utility class for detecting WiFi network security types + */ +object WiFiSecurityDetector { + /** + * Detects the security type of a WiFi network based on its capabilities + * @param capabilities The capabilities string from WiFi scan results + * @return Detected WiFiSecurityType + */ + fun detectSecurityType(capabilities: String?): WiFiSecurityType { + if (capabilities.isNullOrBlank()) { + return WiFiSecurityType.UNKNOWN + } + + val uppercaseCapabilities = capabilities.uppercase() + + return when { + uppercaseCapabilities.contains("[WPA3]") -> WiFiSecurityType.WPA3 + uppercaseCapabilities.contains("[WPA2]") -> WiFiSecurityType.WPA2 + uppercaseCapabilities.contains("[WPA]") -> WiFiSecurityType.WPA + uppercaseCapabilities.contains("[WEP]") -> WiFiSecurityType.WEP + uppercaseCapabilities.contains("[ESS]") -> WiFiSecurityType.OPEN + else -> WiFiSecurityType.UNKNOWN + } + } +} \ No newline at end of file From e5c7306d857565ad64574b7d3419f97cfc85b40d Mon Sep 17 00:00:00 2001 From: relayrelayrelay Date: Wed, 25 Jun 2025 14:53:21 +0000 Subject: [PATCH 3/4] Add tests for WiFi security type detection --- .../network/WiFiSecurityDetectorTest.kt | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/test/kotlin/com/wifiscanner/network/WiFiSecurityDetectorTest.kt diff --git a/src/test/kotlin/com/wifiscanner/network/WiFiSecurityDetectorTest.kt b/src/test/kotlin/com/wifiscanner/network/WiFiSecurityDetectorTest.kt new file mode 100644 index 0000000..1bb1850 --- /dev/null +++ b/src/test/kotlin/com/wifiscanner/network/WiFiSecurityDetectorTest.kt @@ -0,0 +1,63 @@ +package com.wifiscanner.network + +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.Test + +class WiFiSecurityDetectorTest { + + @Test + fun `detect WPA3 security type`() { + val capabilities = "[WPA3-PSK-CCMP]" + val securityType = WiFiSecurityDetector.detectSecurityType(capabilities) + assertEquals(WiFiSecurityType.WPA3, securityType) + } + + @Test + fun `detect WPA2 security type`() { + val capabilities = "[WPA2-PSK-CCMP]" + val securityType = WiFiSecurityDetector.detectSecurityType(capabilities) + assertEquals(WiFiSecurityType.WPA2, securityType) + } + + @Test + fun `detect WPA security type`() { + val capabilities = "[WPA-PSK-TKIP]" + val securityType = WiFiSecurityDetector.detectSecurityType(capabilities) + assertEquals(WiFiSecurityType.WPA, securityType) + } + + @Test + fun `detect WEP security type`() { + val capabilities = "[WEP]" + val securityType = WiFiSecurityDetector.detectSecurityType(capabilities) + assertEquals(WiFiSecurityType.WEP, securityType) + } + + @Test + fun `detect open network security type`() { + val capabilities = "[ESS]" + val securityType = WiFiSecurityDetector.detectSecurityType(capabilities) + assertEquals(WiFiSecurityType.OPEN, securityType) + } + + @Test + fun `detect unknown security type`() { + val capabilities = "[CUSTOM]" + val securityType = WiFiSecurityDetector.detectSecurityType(capabilities) + assertEquals(WiFiSecurityType.UNKNOWN, securityType) + } + + @Test + fun `handle null capabilities`() { + val capabilities = null + val securityType = WiFiSecurityDetector.detectSecurityType(capabilities) + assertEquals(WiFiSecurityType.UNKNOWN, securityType) + } + + @Test + fun `handle empty capabilities`() { + val capabilities = "" + val securityType = WiFiSecurityDetector.detectSecurityType(capabilities) + assertEquals(WiFiSecurityType.UNKNOWN, securityType) + } +} \ No newline at end of file From 3b122aa187df7960fbe7c9fca443e4d3e07e1c09 Mon Sep 17 00:00:00 2001 From: relayrelayrelay Date: Wed, 25 Jun 2025 14:53:31 +0000 Subject: [PATCH 4/4] Add comprehensive .gitignore file --- .gitignore | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c0b7b52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# Android Studio +*.iml +.gradle/ +build/ +.idea/ +local.properties + +# Compiled class files +*.class + +# Log files +*.log + +# Virtual machine crash logs +hs_err_pid* + +# macOS +.DS_Store + +# Dependency directories +node_modules/ + +# Generated files +bin/ +gen/ +out/ + +# Environment files +.env + +# Kotlin build output +target/ + +# Temporary files +*.tmp +*.bak \ No newline at end of file