Clover Coverage Report - KS Security 1.2-M2-SNAPSHOT (Aggregated)
Coverage timestamp: Fri Apr 22 2011 04:51:09 EST
../../../../../img/srcFileCovDistChart0.png 6% of files have more coverage
35   126   12   8.75
12   73   0.34   4
4     3  
1    
 
  KSRiceDefaultUserDetailsService       Line # 37 35 0% 12 51 0% 0.0
 
No Tests
 
1    /**
2    * Copyright 2010 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10    * software distributed under the License is distributed on an "AS IS"
11    * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12    * or implied. See the License for the specific language governing
13    * permissions and limitations under the License.
14    */
15   
16    package org.kuali.student.security.spring;
17   
18    import org.kuali.rice.core.config.Config;
19    import org.kuali.rice.core.config.ConfigContext;
20    import org.kuali.rice.kim.bo.entity.dto.KimPrincipalInfo;
21    import org.kuali.rice.kim.service.IdentityService;
22    import org.kuali.student.common.util.security.UserWithId;
23    import org.springframework.security.GrantedAuthority;
24    import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
25    import org.springframework.security.userdetails.User;
26    import org.springframework.security.userdetails.UserDetails;
27    import org.springframework.security.userdetails.UserDetailsService;
28    import org.springframework.security.userdetails.UsernameNotFoundException;
29    import org.springframework.security.util.AuthorityUtils;
30   
31    /**
32    * This is a description of what this class does.
33    *
34    * @author Kuali Student Team
35    *
36    */
 
37    public class KSRiceDefaultUserDetailsService implements UserDetailsService{
38   
39    private UserWithId ksuser = null;
40    private String password = "";
41   
42    private boolean enabled = true;
43    private boolean nonlocked = true;
44   
45    private IdentityService identityService = null;
46   
47    // Spring Security requires roles to have a prefix of ROLE_ ,
48    // look in org.springframework.security.vote.RoleVoter to change.
49    private GrantedAuthority[] authorities =
50    AuthorityUtils.commaSeparatedStringToAuthorityArray("ROLE_KS_ADMIN, ROLE_KS_USER");
51   
 
52  0 toggle public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
53  0 if(username==null || username.equals("")){
54  0 throw new UsernameNotFoundException("Username cannot be null or empty");
55    }
56   
57  0 Config config = ConfigContext.getCurrentContextConfig();
58  0 String ksIgnoreRiceLogin = config.getProperty("ks.ignore.rice.login");
59   
60    // if property was not set in a config file then
61    // it will be null and it falls through to the identityService code.
62  0 if(Boolean.valueOf(ksIgnoreRiceLogin) == true){
63  0 return new User(username, password, enabled, true, true, nonlocked, authorities);
64    }
65   
66  0 KimPrincipalInfo kimPrincipalInfo = null;
67  0 kimPrincipalInfo = identityService.getPrincipalByPrincipalName(username);
68   
69  0 String userId;
70  0 if (null != kimPrincipalInfo) {
71  0 username = kimPrincipalInfo.getPrincipalName();
72  0 userId = kimPrincipalInfo.getPrincipalId();
73    } else {
74    // When a UsernameNotFoundException is thrown, spring security will proceed to the next AuthenticationProvider on the list.
75    // When Rice is running and username is not found in KIM, we want authentication to stop and allow the user to enter the correct username.
76    // to do this we need to throw a AccountStatusException and not UsernameNotFoundException.
77  0 throw new KimUserNotFoundException("Invalid username or password");
78    }
79  0 ksuser = new UserWithId(username, password, enabled, true, true, nonlocked, authorities);
80  0 ksuser.setUserId(userId);
81  0 return ksuser;
82    }
83   
 
84  0 toggle public UserDetails loadUserByUsernameAndToken(String username, UsernamePasswordAuthenticationToken authentication) throws UsernameNotFoundException {
85  0 if(username==null || username.equals("")){
86  0 throw new UsernameNotFoundException("Username cannot be null or empty");
87    }
88   
89  0 Config config = ConfigContext.getCurrentContextConfig();
90  0 String ksIgnoreRiceLogin = config.getProperty("ks.ignore.rice.login");
91   
92    // if property was not set in a config file then
93    // it will be null and it falls through to the identityService code.
94  0 if(Boolean.valueOf(ksIgnoreRiceLogin) == true){
95  0 return null;
96    }
97   
98  0 password = (String)authentication.getCredentials();
99   
100  0 KimPrincipalInfo kimPrincipalInfo = null;
101   
102  0 kimPrincipalInfo = identityService.getPrincipalByPrincipalNameAndPassword(username, password);
103  0 String userId;
104  0 if (null != kimPrincipalInfo) {
105  0 username = kimPrincipalInfo.getPrincipalName();
106  0 userId = kimPrincipalInfo.getPrincipalId();
107    } else {
108    // When a UsernameNotFoundException is thrown, spring security will proceed to the next AuthenticationProvider on the list.
109    // When Rice is running and username is not found in KIM, we want authentication to stop and allow the user to enter the correct username.
110    // to do this we need to throw a AccountStatusException and not UsernameNotFoundException.
111    //System.out.println("kimPrincipalInfo is null ");
112  0 throw new KimUserNotFoundException("Invalid username or password");
113    }
114  0 ksuser = new UserWithId(username, password, enabled, true, true, nonlocked, authorities);
115  0 ksuser.setUserId(userId);
116  0 return ksuser;
117    }
118   
 
119  0 toggle public void setAuthorities(String[] roles) {
120  0 this.authorities = AuthorityUtils.stringArrayToAuthorityArray(roles);
121    }
122   
 
123  0 toggle public void setIdentityService(IdentityService identityService) {
124  0 this.identityService = identityService;
125    }
126    }