/**
* Copyright (C) 2014 KAIST
* @author Janggwan Im <limg00n@kaist.ac.kr>
*/
package org.fosstrak.ale.server.ac;
import org.apache.ws.security.WSSecurityException;
import org.apache.ws.security.handler.RequestData;
import org.apache.ws.security.message.token.UsernameToken;
import org.apache.ws.security.validate.Credential;
import org.apache.ws.security.validate.UsernameTokenValidator;
import org.fosstrak.ale.exception.SecurityException;
/**
* A custom UsernameToken Validator that wraps the default Validator in WSS4J and set a Subject
* on the context as well. It validates through Fosstrak RBAC.
*
* @author Janggwan Im
*/
public class CustomUTValidator extends UsernameTokenValidator {
public Credential validate(Credential credential, RequestData data) throws WSSecurityException {
// credential : credential to validate from client
// data : data provided from server (ServerPasswordCallback), meaningless
//Credential cred = super.validate(credential, data);
String userId = credential.getUsernametoken().getName();
String password = credential.getUsernametoken().getPassword();
ALEACImpl aleac = ALEACImpl.getInstance();
try {
if(aleac.login(userId, password)) {
return credential;
} else {
return null;
}
} catch (SecurityException e) {
throw new WSSecurityException(e.getMessage());
}
/*
UsernameToken ut = credential.getUsernametoken();
WSUsernameTokenPrincipalImpl principal =
new WSUsernameTokenPrincipalImpl(ut.getName(), ut.isHashed());
principal.setCreatedTime(ut.getCreated());
principal.setNonce(principal.getNonce());
principal.setPassword(ut.getPassword());
principal.setPasswordType(ut.getPasswordType());
Subject subject = new Subject();
subject.getPrincipals().add(principal);
if ("Alice".equals(ut.getName())) {
subject.getPrincipals().add(new SimpleGroup("manager", ut.getName()));
}
subject.getPrincipals().add(new SimpleGroup("worker", ut.getName()));
cred.setSubject(subject);
return cred;
*/
}
protected void verifyPlaintextPassword(UsernameToken usernameToken,
RequestData data) throws WSSecurityException {
}
}