sascha@2959: package de.intevation.flys.client.server.auth.plain; sascha@2959: sascha@2959: import de.intevation.flys.client.server.auth.AuthenticationException; sascha@2959: import de.intevation.flys.client.server.auth.DefaultUser; sascha@2959: import de.intevation.flys.client.server.auth.User; sascha@2959: sascha@2959: import java.io.BufferedReader; sascha@2959: import java.io.File; sascha@2959: import java.io.FileReader; sascha@2959: import java.io.IOException; sascha@2959: sascha@2959: public class Authenticator sascha@2959: implements de.intevation.flys.client.server.auth.Authenticator sascha@2959: { sascha@2959: public static class Authentication sascha@2959: implements de.intevation.flys.client.server.auth.Authentication sascha@2959: { sascha@2959: protected String user; sascha@2959: protected String password; sascha@2959: sascha@2959: public Authentication(String user, String password) { sascha@2959: this.user = user; sascha@2959: this.password = password; sascha@2959: } sascha@2959: sascha@2959: @Override sascha@2959: public boolean isSuccess() { sascha@2959: return user != null; sascha@2959: } sascha@2959: sascha@2959: @Override sascha@2959: public User getUser() { sascha@2959: return isSuccess() sascha@2959: ? new DefaultUser(user, password, false) sascha@2959: : null; sascha@2959: } sascha@2959: } // class Authentication sascha@2959: sascha@2959: public Authenticator() { sascha@2959: } sascha@2959: sascha@2959: private static File credentialsFile() { sascha@2959: String env = System.getenv("FLYS_USER_FILE"); sascha@2959: if (env == null) { sascha@2959: env = System.getProperty( sascha@2959: "flys.user.file", sascha@2959: System.getProperty("user.home", ".") sascha@2959: + System.getProperty("file.separator") sascha@2959: + "flys_user_file"); sascha@2959: } sascha@2959: return new File(env); sascha@2959: sascha@2959: } sascha@2959: sascha@2959: @Override sascha@2959: public de.intevation.flys.client.server.auth.Authentication auth( sascha@2959: String username, sascha@2959: String password, sascha@2959: String encoding sascha@2959: ) sascha@2959: throws AuthenticationException, IOException sascha@2959: { sascha@2959: File file = credentialsFile(); sascha@2959: if (!file.canRead() || !file.isFile()) { sascha@2959: return new Authentication(null, null); sascha@2959: } sascha@2959: sascha@2959: BufferedReader reader = sascha@2959: new BufferedReader( sascha@2959: new FileReader(file)); sascha@2959: try { sascha@2959: String line; sascha@2959: while ((line = reader.readLine()) != null) { sascha@2959: if ((line = line.trim()).length() == 0 sascha@2959: || line.startsWith("#")) { sascha@2959: continue; sascha@2959: } sascha@2959: String [] parts = line.split("\\s+"); sascha@2959: // TODO: role? sascha@2959: if (parts.length < 2) { sascha@2959: continue; sascha@2959: } sascha@2959: if (parts[0].equals(username)) { sascha@2959: if (parts[1].equals(password)) { sascha@2959: return new Authentication(username, password); sascha@2959: } sascha@2959: // Stop: user found, wrong password sascha@2959: break; sascha@2959: } sascha@2959: } sascha@2959: } sascha@2959: finally { sascha@2959: reader.close(); sascha@2959: } sascha@2959: return new Authentication(null, null); sascha@2959: } sascha@2959: } sascha@2959: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :