package com.rackspace.saml; import java.io.ByteArrayOutputStream; import java.util.Arrays; import java.util.HashMap; import java.util.List; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.GnuParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Options; import org.joda.time.DateTime; import org.opensaml.saml2.core.Response; import org.opensaml.saml2.core.impl.ResponseMarshaller; import org.opensaml.xml.util.XMLHelper; import org.w3c.dom.Element; public class Main { public static void main(String[] args) { try { HashMap<String, List<String>> attributes = new HashMap<String, List<String>>(); String issuer = null; String subject = null; String privateKey = null; String publicKey = null; Integer samlAssertionExpirationDays = null; Options options = new Options(); options.addOption("issuer", true, "Issuer for saml assertion"); options.addOption("subject", true, "Subject of saml assertion"); options.addOption("email", true, "Email associated with the subject"); options.addOption("domain", true, "Domain attribute"); options.addOption("roles", true, "Comma separated list of roles"); options.addOption("publicKey", true, "Location of public key to decrypt assertion"); options.addOption("privateKey", true, "Location or private key use to sign assertion"); options.addOption("samlAssertionExpirationDays", true, "How long before assertion is no longer valid. Can be negative."); CommandLineParser parser = new GnuParser(); CommandLine cmd = parser.parse(options, args); if (args.length == 0) { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp( "saml-util-1.0", options, true); System.exit(1); } issuer = cmd.getOptionValue("issuer"); subject = cmd.getOptionValue("subject"); privateKey = cmd.getOptionValue("privateKey"); publicKey = cmd.getOptionValue("publicKey"); samlAssertionExpirationDays = cmd.getOptionValue("samlAssertionExpirationDays") != null ? Integer.valueOf(cmd.getOptionValue("samlAssertionExpirationDays")) : null; if (cmd.getOptionValue("domain") != null) attributes.put("domain", Arrays.asList(cmd.getOptionValue("domain"))); if (cmd.getOptionValue("roles") != null) attributes.put("roles", Arrays.asList(cmd.getOptionValue("roles").split(","))); if (cmd.getOptionValue("email") != null) attributes.put("email", Arrays.asList(cmd.getOptionValue("email"))); SamlAssertionProducer producer = new SamlAssertionProducer(); producer.setPrivateKeyLocation(privateKey); producer.setPublicKeyLocation(publicKey); Response responseInitial = producer.createSAMLResponse(subject, new DateTime(), "password", attributes, issuer, samlAssertionExpirationDays); ResponseMarshaller marshaller = new ResponseMarshaller(); Element element = marshaller.marshall(responseInitial); ByteArrayOutputStream baos = new ByteArrayOutputStream(); XMLHelper.writeNode(element, baos); String responseStr = new String(baos.toByteArray()); System.out.println(responseStr); } catch (Throwable t) { t.printStackTrace(); } } }