package com.netifera.platform.net.services.sniffing; import java.util.Map; import com.netifera.platform.net.services.credentials.Credential; import com.netifera.platform.net.services.credentials.Password; import com.netifera.platform.net.services.credentials.UsernameAndPassword; import com.netifera.platform.util.patternmatching.Regex; import com.netifera.platform.util.patternmatching.SessionPattern; public class RegexCredentialSniffer implements ICredentialSniffer { private final String[] serviceTypes; private final SessionPattern pattern; public RegexCredentialSniffer(String[] serviceTypes, Regex clientPattern, Regex serverPattern) { this.serviceTypes = serviceTypes.clone(); // FIXME do we really need to clone here? this.pattern = new SessionPattern(clientPattern, serverPattern); } public Credential sniff(String clientData, String serverData) { Map<String,String> result = pattern.match(clientData, serverData); if (result == null) return null; if (result.containsKey("password")) if (result.containsKey("username")) return new UsernameAndPassword(result.get("username"), result.get("password")); else return new Password(result.get("password")); // else // if (result.contains("username")) // return new Username(result.get("username")); return null; } public String[] getServiceTypes() { return serviceTypes; } }