blob: b41078ecf7b55fd874376dd8cd1718b5a2d323ca [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package flex.messaging.security;
import java.security.Principal;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import oracle.security.jazn.realm.Realm;
import oracle.security.jazn.realm.RealmRole;
import oracle.security.jazn.realm.RealmUser;
/**
* An Oracle specific implementation of java.security.Principal.
*
*
*/
public class OracleUser implements Principal
{
private LoginContext context;
private Subject subject;
public OracleUser(LoginContext context) throws LoginException
{
this.context = context;
context.logout();
context.login();
this.subject = context.getSubject();
}
public void logout() throws LoginException
{
context.logout();
}
private Principal userPrincipal()
{
Set possibleUsers = subject.getPrincipals(RealmUser.class);
return (Principal) possibleUsers.iterator().next();
}
public boolean isMemberOf(List roleNames)
{
boolean result = false;
Set possibleUsers = subject.getPrincipals(RealmRole.class);
Iterator itr = possibleUsers.iterator();
while (itr.hasNext())
{
RealmRole role = (RealmRole) itr.next();
Realm realm = role.getRealm();
String realmFullName = realm.getFullName();
String roleSimpleName = role.getName();
if ((realmFullName.length() > 0) &&
roleSimpleName.startsWith(realmFullName))
{
// Format is "<realm full name>\<role name>"
roleSimpleName = roleSimpleName.substring
(realmFullName.length() + 1);
}
if (roleNames.contains(roleSimpleName))
{
result = true;
break;
}
}
return result;
}
public boolean equals(Object object)
{
boolean result = false;
if (object == this)
{
result = true;
}
else if (object instanceof OracleUser)
{
OracleUser other = (OracleUser) object;
result = this.subject.equals(other.subject);
}
return result;
}
public String getName()
{
return userPrincipal().getName();
}
public int hashCode()
{
return this.subject.hashCode();
}
public String toString()
{
return this.subject.toString();
}
}