Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -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
40 changes: 40 additions & 0 deletions src/main/kotlin/com/wifiscanner/network/WiFiSecurityType.kt
Original file line number Diff line number Diff line change
@@ -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
}
}
}
Original file line number Diff line number Diff line change
@@ -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)
}
}