1 package fr.ifremer.quadrige3.synchro.server.application;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import fr.ifremer.quadrige3.synchro.server.config.SynchroServerConfiguration;
27 import fr.ifremer.quadrige3.synchro.server.security.QuadrigeGrantedAuthority;
28 import fr.ifremer.quadrige3.synchro.server.security.SecurityContextHelper;
29 import fr.ifremer.quadrige3.synchro.server.service.ServiceLocator;
30 import org.apache.commons.logging.Log;
31 import org.apache.commons.logging.LogFactory;
32 import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
33 import org.apache.wicket.authroles.authorization.strategies.role.Roles;
34 import org.apache.wicket.request.Request;
35 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
36 import org.springframework.security.core.Authentication;
37 import org.springframework.security.core.AuthenticationException;
38 import org.springframework.security.core.GrantedAuthority;
39 import org.springframework.security.core.context.SecurityContextHolder;
40
41 import java.io.File;
42
43 public class WebSession extends AuthenticatedWebSession {
44
45 private static final long serialVersionUID = 1L;
46 private final Log log = LogFactory.getLog(getClass());
47
48 private File importOutputFile;
49
50 public WebSession(Request request) {
51 super(request);
52 bind();
53 this.importOutputFile = null;
54 }
55
56 @Override
57 public Roles getRoles() {
58 Roles roles = new Roles();
59 getRolesIfSignedIn(roles);
60 return roles;
61 }
62
63 private void getRolesIfSignedIn(Roles roles) {
64 if (isUserAuthenticated() || SecurityContextHelper.isAuthenticateNotAnonymous()) {
65 Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
66 for (GrantedAuthority authority : authentication.getAuthorities()) {
67 roles.add(authority.getAuthority());
68 }
69 }
70 }
71
72 public boolean isUserAuthenticated() {
73 return getUserId() > 0;
74 }
75
76 public boolean isUserAdmin() {
77 return getRoles().hasRole(QuadrigeGrantedAuthority.ROLE_ADMIN.name());
78 }
79
80 public final int getUserId() {
81 return SecurityContextHelper.getPrincipalUserId();
82 }
83
84 public void setImportOutputFile(File importOutputFile) {
85 this.importOutputFile = importOutputFile;
86 }
87
88 public File getImportOutputFile() {
89 return importOutputFile;
90 }
91
92
93
94 protected SynchroServerConfiguration getConfiguration() {
95 return ((Application) getApplication()).getConfiguration();
96 }
97
98
99 @Override
100 public boolean authenticate(String username, String password) throws AuthenticationException {
101 ServiceLocator serviceLocator = ServiceLocator.instance();
102 boolean authenticated;
103 try {
104 Authentication authentication = serviceLocator.getAuthenticationManager().authenticate(new UsernamePasswordAuthenticationToken(username, password));
105 SecurityContextHolder.getContext().setAuthentication(authentication);
106 authenticated = authentication.isAuthenticated();
107 } catch (AuthenticationException e) {
108 String errorMessage = String.format("Authentication failed for user '%s' with error : %s", username, e.getLocalizedMessage());
109 if (log.isDebugEnabled()) {
110 log.warn(errorMessage, e);
111 }
112 else {
113 log.warn(errorMessage, e);
114 }
115 throw e;
116 }
117 return authenticated;
118 }
119 }