diff flys-client/src/main/java/org/dive4elements/river/client/server/auth/plain/Authenticator.java @ 5834:f507086aa94b

Repaired internal references.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 12:31:32 +0200
parents flys-client/src/main/java/de/intevation/flys/client/server/auth/plain/Authenticator.java@2e12518ff5b4
children 821a02bbfb4e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-client/src/main/java/org/dive4elements/river/client/server/auth/plain/Authenticator.java	Thu Apr 25 12:31:32 2013 +0200
@@ -0,0 +1,134 @@
+package de.intevation.flys.client.server.auth.plain;
+
+import de.intevation.flys.client.server.auth.AuthenticationException;
+import de.intevation.flys.client.server.auth.DefaultUser;
+import de.intevation.flys.client.server.auth.User;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+
+import de.intevation.flys.client.server.features.Features;
+
+/**
+ * Authenticator that uses a local file as user backend.
+ */
+public class Authenticator
+implements   de.intevation.flys.client.server.auth.Authenticator
+{
+    private static final Logger log =
+        Logger.getLogger(Authenticator.class);
+
+    public static class Authentication
+    implements          de.intevation.flys.client.server.auth.Authentication
+    {
+        protected String       user;
+        protected String       password;
+        protected List<String> roles;
+        protected Features     features;
+
+        public Authentication(
+            String       user,
+            String       password,
+            List<String> roles,
+            Features features
+        ) {
+            this.user     = user;
+            this.password = password;
+            this.roles    = roles;
+            this.features = features;
+        }
+
+        @Override
+        public boolean isSuccess() {
+            return user != null;
+        }
+
+        @Override
+        public User getUser() {
+            return isSuccess()
+                ? new DefaultUser(user, password, false, roles, this.features.getFeatures(roles))
+                : null;
+        }
+    } // class Authentication
+
+    public Authenticator() {
+    }
+
+    private static File credentialsFile() {
+        String env = System.getenv("FLYS_USER_FILE");
+        if (env == null) {
+            env = System.getProperty(
+                "flys.user.file",
+                System.getProperty("user.home", ".")
+                + System.getProperty("file.separator")
+                + "flys_user_file");
+        }
+        log.debug("Using credentials file " + env);
+        return new File(env);
+
+    }
+
+    @Override
+    public de.intevation.flys.client.server.auth.Authentication auth(
+        String username,
+        String password,
+        String encoding,
+        Features features
+    )
+    throws AuthenticationException, IOException
+    {
+        File file = credentialsFile();
+        if (!file.canRead() || !file.isFile()) {
+            log.error("cannot find user file '" + file + "'");
+            return new Authentication(null, null, new ArrayList<String>(0), features);
+        }
+
+        BufferedReader reader =
+            new BufferedReader(
+            new FileReader(file));
+        try {
+            String line;
+            while ((line = reader.readLine()) != null) {
+                if ((line = line.trim()).length() == 0
+                || line.startsWith("#")) {
+                    continue;
+                }
+
+                String[] parts = line.split("\\s+");
+                if (parts.length < 2) {
+                    continue;
+                }
+
+                if (parts[0].equals(username)) {
+                    log.debug("user '" + username + "' found.");
+                    if (parts[1].equals(password)) {
+                        List<String> roles =
+                            new ArrayList<String>(parts.length - 2);
+
+                        for (int i = 2; i < parts.length; i++) {
+                            roles.add(parts[i]);
+                        }
+
+                        log.debug("success");
+                        return new Authentication(username, password, roles, features);
+                    }
+                    // Stop: user found, wrong password
+                    break;
+                }
+            }
+        }
+        finally {
+            reader.close();
+        }
+        log.debug("failed");
+        return null;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org