Add LDAP authentication and enabling Spring logging
[proteocache.git] / server / compbio / controllers / UserController.java
index 513f5bb..a00bd15 100644 (file)
@@ -1,12 +1,17 @@
 package compbio.controllers;
 
-import java.security.Principal;
 import java.util.Date;
 import java.util.regex.Pattern;
 
+import javax.naming.directory.DirContext;
+
+import org.springframework.ldap.core.LdapTemplate;
+import org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.mail.SimpleMailMessage;
-import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.security.ldap.LdapUtils;
+import org.springframework.ldap.core.ContextSource;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
@@ -24,17 +29,31 @@ import compbio.cassandra.CassandraUserManager;
 @Controller
 public class UserController {
 
-       // @Inject
+       @Autowired
+       ContextSource contextSource;
+
        // JavaMailSender mailSender;
        private final Pattern EMAIL = Pattern.compile("[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");
 
-       @RequestMapping(value = "/register/query", method = RequestMethod.GET)
-       public String printPublicHome(ModelMap model) {
+       @RequestMapping(value = "/register/query", method = RequestMethod.POST)
+       public String RegisterForm(ModelMap model) {
                User user = new User();
                model.addAttribute(user);
                return "Register";
        }
 
+       @RequestMapping(value = "/register/edit/query", method = RequestMethod.GET)
+       public String AccountForm(ModelMap model) {
+               User user = new User();
+               user.setFullName("Sasha Sherstnev");
+               user.setEmail("admin@admin.com");
+               user.setOrganisation("UoD");
+               user.setPosition("cleaner");
+               user.setUpdateByEmail(true);
+               model.addAttribute("u", user);
+               return "Edit";
+       }
+
        @RequestMapping(value = "/register/do", method = RequestMethod.POST)
        public String addUser(Model model, @ModelAttribute("user") User user, BindingResult bindingResult) {
 
@@ -120,4 +139,29 @@ public class UserController {
                // mailSender.send(message);
        }
 
+       private boolean authenticate(String userDn, String credentials) {
+               DirContext ctx = null;
+               try {
+                       ctx = contextSource.getContext(userDn, credentials);
+                       return true;
+               } catch (Exception e) {
+                       // Context creation failed - authentication did not succeed
+                       System.out.println("LDAP Login failed");
+                       return false;
+               } finally {
+                       // It is imperative that the created DirContext instance is always
+                       // closed
+                       LdapUtils.closeContext(ctx);
+               }
+       }
+
+       @RequestMapping(value = "/ldaplogindo", method = RequestMethod.POST)
+       public String LDAPlogin(Model model, @RequestParam("j_username") String username, @RequestParam("j_password") String credentials) {
+               System.out.println("Try to authenticate with LDAP: username: " + username + ", credentials: " + credentials);
+               if (authenticate(username, credentials)) {
+                       return "/home";
+               }
+               return "/public";
+       }
+
 }