43a41da82451fea753879b57b3516131aadddfac
[controller.git] / opendaylight / security / src / main / java / org / opendaylight / controller / security / ControllerCustomRealm.java
1 package org.opendaylight.controller.security;
2
3 import java.security.Principal;
4 import java.util.List;
5
6 import org.apache.catalina.realm.GenericPrincipal;
7 import org.apache.catalina.realm.RealmBase;
8 import org.opendaylight.controller.sal.authorization.AuthResultEnum;
9 import org.opendaylight.controller.sal.utils.ServiceHelper;
10 import org.opendaylight.controller.usermanager.IUserManager;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13
14 public class ControllerCustomRealm  extends RealmBase {
15
16     private static final String name = "ControllerCustomRealm";
17
18     private static final Logger logger = LoggerFactory
19             .getLogger(ControllerCustomRealm.class);
20
21     @Override
22     protected String getName() {
23         return name;
24     }
25
26     @Override
27     protected String getPassword(String username) {
28         IUserManager userManager = (IUserManager) ServiceHelper
29                 .getGlobalInstance(IUserManager.class, this);
30         if (userManager != null) {
31             return userManager.getPassword(username);
32         } else
33             throw new RuntimeException("User Manager reference is null");
34     }
35
36     @Override
37     protected Principal getPrincipal(String username) {
38         IUserManager userManager = (IUserManager) ServiceHelper
39                 .getGlobalInstance(IUserManager.class, this);
40         if (userManager != null) {
41             final List<String> roles = userManager.getUserRoles(username);
42             return new GenericPrincipal(username, getPassword(username), roles);
43         } else
44             throw new RuntimeException("User Manager reference is null");
45
46     }
47
48     @Override
49     public Principal authenticate(String username, String credentials) {
50
51         IUserManager userManager = (IUserManager) ServiceHelper
52                 .getGlobalInstance(IUserManager.class, this);
53         if (userManager != null) {
54             AuthResultEnum result = userManager.authenticate(username,
55                     credentials);
56             if (result.equals(AuthResultEnum.AUTHOR_PASS)
57                     || result.equals(AuthResultEnum.AUTH_ACCEPT_LOC)
58                     || result.equals(AuthResultEnum.AUTH_ACCEPT)) {
59                 return this.getPrincipal(username);
60             } else {
61                 logger.error("Authentication failed for user " + username);
62                 return null;
63             }
64         } else
65             throw new RuntimeException("User Manager reference is null");
66     }
67
68 }