You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ca...@apache.org on 2006/09/06 02:09:17 UTC
svn commit: r440537 -
/maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java
Author: carlos
Date: Tue Sep 5 17:09:16 2006
New Revision: 440537
URL: http://svn.apache.org/viewvc?view=rev&rev=440537
Log:
Add MavenUserDetailsService
Added:
maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java (with props)
Added: maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java?view=auto&rev=440537
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java (added)
+++ maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java Tue Sep 5 17:09:16 2006
@@ -0,0 +1,124 @@
+package org.apache.maven.user.acegi;
+
+/*
+ * Copyright 2005-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.acegisecurity.GrantedAuthority;
+import org.acegisecurity.GrantedAuthorityImpl;
+import org.acegisecurity.userdetails.UserDetails;
+import org.acegisecurity.userdetails.UserDetailsService;
+import org.acegisecurity.userdetails.UsernameNotFoundException;
+import org.apache.maven.user.model.Permission;
+import org.apache.maven.user.model.User;
+import org.apache.maven.user.model.UserManager;
+import org.springframework.dao.DataAccessException;
+
+/**
+ * Acegi {@link UserDetailsService} that loads user info from Maven {@link UserManager}.
+ *
+ * @plexus.component role="org.acegisecurity.userdetails.UserDetailsService" role-hint="maven"
+ *
+ * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
+ * @author Henry Isidro
+ * @version $Id$
+ */
+public class MavenUserDetailsService
+ implements UserDetailsService
+{
+ static final long MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
+
+ /**
+ * @plexus.requirement
+ */
+ private UserManager userManager;
+
+ /**
+ * @plexus.configuration default-value="60"
+ */
+ private int daysBeforeExpiration;
+
+ public UserDetails loadUserByUsername( String username )
+ throws UsernameNotFoundException, DataAccessException
+ {
+ User user = userManager.getUser( username );
+
+ if ( user == null )
+ {
+ throw new UsernameNotFoundException( "Could not find user: " + username );
+ }
+ return getUserDetails( user );
+ }
+
+ /**
+ * Convert a Maven user into an Acegi user
+ *
+ * @param user the continuum user loaded from DB
+ * @return the Acegi user
+ */
+ public UserDetails getUserDetails( User user )
+ {
+ List permissions = user.getGroup().getPermissions();
+
+ List grantedAuthorities = new ArrayList( permissions.size() + 1 );
+ Iterator it = permissions.iterator();
+ while ( it.hasNext() )
+ {
+ Permission permission = (Permission) it.next();
+ grantedAuthorities.add( new GrantedAuthorityImpl( "ROLE_" + permission.getName() ) );
+ }
+
+ if ( user.isGuest() )
+ {
+ // TODO externalize this String
+ grantedAuthorities.add( new GrantedAuthorityImpl( "ROLE_ANONYMOUS" ) );
+ }
+
+ GrantedAuthority[] grantedAuthoritiesAsArray = (GrantedAuthority[]) grantedAuthorities
+ .toArray( new GrantedAuthority[0] );
+
+ String username = user.getUsername();
+ String password = user.getEncodedPassword();
+ boolean enabled = true;
+ boolean accountNonExpired = true;
+
+ if ( user.getLastPasswordChange() != null && daysBeforeExpiration > 0 )
+ {
+ long lastPasswordChange = user.getLastPasswordChange().getTime();
+ long currentTime = new Date().getTime();
+ accountNonExpired = lastPasswordChange + daysBeforeExpiration * MILLISECONDS_PER_DAY > currentTime;
+ }
+
+ boolean credentialsNonExpired = true;
+ boolean accountNonLocked = true;
+
+ UserDetails userDetails = new org.acegisecurity.userdetails.User( username, password, enabled,
+ accountNonExpired, credentialsNonExpired,
+ accountNonLocked, grantedAuthoritiesAsArray );
+
+ return userDetails;
+ }
+
+ protected void setDaysBeforeExpiration( int daysBeforeExpiration )
+ {
+ this.daysBeforeExpiration = daysBeforeExpiration;
+ }
+}
Propchange: maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-user/maven-user-acegi/src/main/java/org/apache/maven/user/acegi/MavenUserDetailsService.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"