Merge branch 'DAO'
[proteocache.git] / server / compbio / controllers / UserController.java
index 513f5bb..3c922b2 100644 (file)
@@ -1,12 +1,15 @@
 package compbio.controllers;
 
-import java.security.Principal;
 import java.util.Date;
 import java.util.regex.Pattern;
 
+import javax.naming.directory.DirContext;
+
+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;
@@ -21,20 +24,39 @@ import compbio.proteocache.users.User;
 import compbio.proteocache.users.UserManager;
 import compbio.cassandra.CassandraUserManager;
 
+/**
+ * @author Alexander Sherstnev
+ * @author Natasha Sherstneva
+ * @version 1.0 Dec 2013
+ */
 @Controller
-public class UserController {
+public class UserController extends BasicController {
+
+       @Autowired
+       ContextSource contextSource;
 
-       // @Inject
        // 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) {
+       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) {
+               model.put("username", getPrincipalName());
+               /*
+                * 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";
+                */
+               return "support/Notimplemented";
+       }
+
        @RequestMapping(value = "/register/do", method = RequestMethod.POST)
        public String addUser(Model model, @ModelAttribute("user") User user, BindingResult bindingResult) {
 
@@ -72,7 +94,7 @@ public class UserController {
                }
 
                user.setRegistrationDate(new Date());
-               UserManager cm = new CassandraUserManager();
+               CassandraUserManager cm = new CassandraUserManager();
                try {
                        cm.addUser(user);
                } catch (DataIntegrityViolationException e) {
@@ -120,4 +142,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";
+       }
+
 }