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