]> git.argeo.org Git - lgpl/argeo-commons.git/blob - security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/OsJcrAuthenticationProvider.java
Add remember me capabilities to RAP
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.core / src / main / java / org / argeo / security / jcr / OsJcrAuthenticationProvider.java
1 package org.argeo.security.jcr;
2
3 import javax.jcr.Node;
4 import javax.jcr.Repository;
5 import javax.jcr.RepositoryException;
6 import javax.jcr.Session;
7
8 import org.argeo.ArgeoException;
9 import org.argeo.jcr.JcrUtils;
10 import org.argeo.security.OsAuthenticationToken;
11 import org.argeo.security.core.OsAuthenticationProvider;
12 import org.springframework.security.Authentication;
13 import org.springframework.security.AuthenticationException;
14
15 /** Relies on OS to authenticate and additionaly setup JCR */
16 public class OsJcrAuthenticationProvider extends OsAuthenticationProvider {
17 private Repository repository;
18 private String securityWorkspace = "security";
19 private Session securitySession;
20
21 public void init() {
22 try {
23 securitySession = repository.login(securityWorkspace);
24 } catch (RepositoryException e) {
25 throw new ArgeoException("Cannot initialize", e);
26 }
27 }
28
29 public void destroy() {
30 JcrUtils.logoutQuietly(securitySession);
31 }
32
33 public Authentication authenticate(Authentication authentication)
34 throws AuthenticationException {
35 final OsAuthenticationToken authen = (OsAuthenticationToken) super
36 .authenticate(authentication);
37 try {
38 // WARNING: at this stage we assume that the java properties
39 // will have the same value
40 String username = System.getProperty("user.name");
41 Node userProfile = JcrUtils.createUserProfileIfNeeded(
42 securitySession, username);
43
44 JcrUserDetails.checkAccountStatus(userProfile);
45 // user details
46 JcrUserDetails userDetails = new JcrUserDetails(userProfile, authen
47 .getCredentials().toString(), getBaseAuthorities());
48 authen.setDetails(userDetails);
49 } catch (RepositoryException e) {
50 JcrUtils.discardQuietly(securitySession);
51 throw new ArgeoException(
52 "Unexpected exception when synchronizing OS and JCR security ",
53 e);
54 } finally {
55 JcrUtils.logoutQuietly(securitySession);
56 }
57 return authen;
58 }
59
60 public void setSecurityWorkspace(String securityWorkspace) {
61 this.securityWorkspace = securityWorkspace;
62 }
63
64 public void setRepository(Repository repository) {
65 this.repository = repository;
66 }
67 }