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 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 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