X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=server%2Fcompbio%2Fcontrollers%2FUserController.java;h=3c922b24fb13752d4efff40f675120ad50fb7633;hb=30cfdd67dc331a08ff192ae7b82d5a3ae3a8331b;hp=94be37740be9e4ab5aa161fe6c92622f1e9928b6;hpb=95f270e6b3ec72bd29b5ac6e09f803dbaa64380e;p=proteocache.git diff --git a/server/compbio/controllers/UserController.java b/server/compbio/controllers/UserController.java index 94be377..3c922b2 100644 --- a/server/compbio/controllers/UserController.java +++ b/server/compbio/controllers/UserController.java @@ -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"; } }