Fix problm with username
[proteocache.git] / server / compbio / controllers / UserController.java
index 94be377..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;
+       // 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) {
@@ -84,8 +106,8 @@ public class UserController {
                        subscribeToList(user.getEmail());
                }
                /*
-               Account.autoLogin(user, request, authenticationManager);
-               */
+                * Account.autoLogin(user, request, authenticationManager);
+                */
                return "redirect:/index";
        }
 
@@ -95,9 +117,9 @@ public class UserController {
                if (bindingResult.hasErrors()) {
                        return "Register";
                }
-               
+
                user.setRegistrationDate(new Date());
-               UserManager cm = new CassandraUserManager(); 
+               UserManager cm = new CassandraUserManager();
                try {
                        cm.addUser(user);
                } catch (DataIntegrityViolationException e) {
@@ -117,7 +139,32 @@ public class UserController {
                message.setTo("proteocache-discuss-subscribe@compbio.dundee.ac.uk");
                message.setSubject("ProteoCache mailing list subscription");
                message.setText("testing " + email);
-               //mailSender.send(message);
+               // 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";
        }
 
 }