package WSS4J;

import java.security.Key;

import javax.crypto.spec.SecretKeySpec;
import com.ibm.xml.dsig.util.Base64;

public class UserNamePasswordTextTokenWithReference extends SignatureToken
{
    private static String tokenWSUId = "";
    private static String userName = "";

    public UserNamePasswordTextTokenWithReference(
                String userName,
                String tokenWSUId,
                WSSMessage wssMessage
                ){

        super( tokenWSUId, userName, wssMessage );

        this.tokenWSUId = tokenWSUId;
        this.userName = userName;

    }

    public String getType()
    {
        return "UserNamePasswordTextTokenWithReference";
    }

    public String getXMLString()
    {
         String encodedKeyString = "";
         try{
             byte[] secretKeyBytes = key.getEncoded();
             encodedKeyString = new Base64().encode(secretKeyBytes);
         }catch( Exception e ) {
             System.out.println( 
             "Exception in UserNameTokenWithPasswordText's setSecret...." );
             e.printStackTrace();
         }

         return
         "\n<wsse:UsernameToken wsu:Id=\"" + tokenWSUId + "\"" + 
             "\nxmlns:wsu=\"http://schemas.xmlsoap.org/ws/2002/07/utility\"" +
             "\nxmlns:wsse=\"http://schemas.xmlsoap.org/ws/2003/06/secext\">" + 
             "\n<wsse:Username>" + userName + "</wsse:Username>" +  
             "\n<wsse:Password Type=\"#PasswordText\">" +
                "\n" + encodedKeyString +
             "\n</wsse:Password>" + 
         "\n</wsse:UsernameToken>";

    }

    public void setSecret(byte[] secretBytes)
    {
         try{
             key = (Key) new SecretKeySpec(secretBytes, "DESede");
         }catch( Exception e ) {
             System.out.println( 
             "Exception in UserNameTokenWithPasswordText's setSecret...." );
             e.printStackTrace();
         }
    }
}