Added missing javadoc comments and made minor changes for issues found

during code inspection.
This commit is contained in:
Juan Carlos Luciani
2006-12-21 12:20:39 +00:00
parent 43009ada4f
commit 919bb85125
43 changed files with 1193 additions and 742 deletions

View File

@@ -92,7 +92,7 @@ The ATS base settings are configured in the svc.settings file under the conf fol
The following is an example svc.settings file: The following is an example svc.settings file:
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<SessionTokenLifetime>43200</SessionTokenLifetime> <SessionTokenLifetime>43200</SessionTokenLifetime>
<LifetimeShorter>10</LifetimeShorter> <LifetimeShorter>10</LifetimeShorter>
@@ -179,7 +179,7 @@ realms.
The following is an example auth.policy file: The following is an example auth.policy file:
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<auth_policy> <auth_policy>
<auth_source> <auth_source>
<realm>CorpTree</realm> <realm>CorpTree</realm>
@@ -222,7 +222,7 @@ tokens issued to authenticate to the service.
The following is an example authtoken.settings file: The following is an example authtoken.settings file:
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<TokenLifetime>3600</TokenLifetime> <TokenLifetime>3600</TokenLifetime>
<LifetimeShorter>10</LifetimeShorter> <LifetimeShorter>10</LifetimeShorter>
@@ -253,7 +253,7 @@ embedded in authentication tokens.
The following is an example identoken.settings file: The following is an example identoken.settings file:
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<Attributes>sn,groupMembership,guid</Attributes> <Attributes>sn,groupMembership,guid</Attributes>
<EncryptAttributes>false</EncryptAttributes> <EncryptAttributes>false</EncryptAttributes>
@@ -303,7 +303,7 @@ implementing the mechanism.
The following is an example mechanism.settings file for the Krb5Authentication The following is an example mechanism.settings file for the Krb5Authentication
mechanism: mechanism:
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<ClassName>com.novell.casa.authtoksvc.Krb5Authenticate</ClassName> <ClassName>com.novell.casa.authtoksvc.Krb5Authenticate</ClassName>
<RelativeClassPath>WEB-INF/classes</RelativeClassPath> <RelativeClassPath>WEB-INF/classes</RelativeClassPath>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<auth_policy> <auth_policy>
<auth_source> <auth_source>
<realm>CorpTree</realm> <realm>CorpTree</realm>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<ClassName>com.novell.casa.authtoksvc.Krb5Authenticate</ClassName> <ClassName>com.novell.casa.authtoksvc.Krb5Authenticate</ClassName>
<RelativeClassPath>WEB-INF/classes</RelativeClassPath> <RelativeClassPath>WEB-INF/classes</RelativeClassPath>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<ClassName>com.novell.casa.authtoksvc.PwdAuthenticate</ClassName> <ClassName>com.novell.casa.authtoksvc.PwdAuthenticate</ClassName>
<RelativeClassPath>WEB-INF/classes</RelativeClassPath> <RelativeClassPath>WEB-INF/classes</RelativeClassPath>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<TokenLifetime>3600</TokenLifetime> <TokenLifetime>3600</TokenLifetime>
</settings> </settings>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<auth_policy> <auth_policy>
<auth_source> <auth_source>
<realm>CorpTree</realm> <realm>CorpTree</realm>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<TokenLifetime>3600</TokenLifetime> <TokenLifetime>3600</TokenLifetime>
</settings> </settings>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<EncryptAttributes>false</EncryptAttributes> <EncryptAttributes>false</EncryptAttributes>
<Attributes>sn,groupMembership</Attributes> <Attributes>sn,groupMembership</Attributes>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<EncryptAttributes>false</EncryptAttributes> <EncryptAttributes>false</EncryptAttributes>
<Attributes>sn</Attributes> <Attributes>sn</Attributes>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<IAConfigFile>/home/jluciani/jakarta-tomcat-5.0.28/webapps/CasaAuthTokenSvc/WEB-INF/conf/iaRealms.xml</IAConfigFile> <IAConfigFile>/home/jluciani/jakarta-tomcat-5.0.28/webapps/CasaAuthTokenSvc/WEB-INF/conf/iaRealms.xml</IAConfigFile>
<SessionTokenLifetime>43200</SessionTokenLifetime> <SessionTokenLifetime>43200</SessionTokenLifetime>

View File

@@ -34,11 +34,11 @@ import org.xml.sax.helpers.XMLReaderFactory;
/** /**
* AuthMechConfig Class. * AuthMechConfig Class.
* * <p>
* This class obtains and maintains authentication token configuration. * This class obtains and maintains authentication token configuration.
* *
*/ */
public class AuthMechConfig public final class AuthMechConfig
{ {
// Well known authentication token configuration settings // Well known authentication token configuration settings
public final static String ClassName = "ClassName"; public final static String ClassName = "ClassName";
@@ -47,14 +47,14 @@ public class AuthMechConfig
public final static String Krb5ServicePrincipalName = "ServicePrincipalName"; public final static String Krb5ServicePrincipalName = "ServicePrincipalName";
// Default configuration values // Default configuration values
private String m_defaultKrb5ServicePrincipalNameValue = "host"; private final String m_defaultKrb5ServicePrincipalNameValue = "host";
private Map m_mechSettingsMap; private final Map<String,String> m_mechSettingsMap;
/* /**
* Class for handling parsing events. * Class for handling parsing events.
*/ */
private class SAXHandler extends org.xml.sax.helpers.DefaultHandler private static final class SAXHandler extends org.xml.sax.helpers.DefaultHandler
{ {
private final static int AWAITING_ROOT_ELEMENT_START = 0; private final static int AWAITING_ROOT_ELEMENT_START = 0;
private final static int AWAITING_SETTING_ELEMENT_START = 1; private final static int AWAITING_SETTING_ELEMENT_START = 1;
@@ -64,14 +64,16 @@ public class AuthMechConfig
private final static String m_rootElementName = "settings"; private final static String m_rootElementName = "settings";
private Map m_keyMap; private final Map<String,String> m_keyMap;
private int m_state; private int m_state;
private String m_currentKey; private String m_currentKey;
/* /**
* Constructor * Constructor.
*
* @param keyMap Key/Value map.
*/ */
public SAXHandler(Map keyMap) public SAXHandler(Map<String,String> keyMap)
{ {
super(); super();
@@ -80,8 +82,10 @@ public class AuthMechConfig
m_state = AWAITING_ROOT_ELEMENT_START; m_state = AWAITING_ROOT_ELEMENT_START;
} }
/* /**
* endDocument() implementation. * endDocument() implementation.
*
* @throws SAXException
*/ */
public void endDocument () throws SAXException public void endDocument () throws SAXException
{ {
@@ -93,8 +97,14 @@ public class AuthMechConfig
} }
} }
/* /**
* startElement() implementation. * startElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @param atts Attributes.
* @throws SAXException
*/ */
public void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException public void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException
{ {
@@ -129,8 +139,13 @@ public class AuthMechConfig
} }
} }
/* /**
* endElement() immplementation. * endElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @throws SAXException
*/ */
public void endElement (String uri, String name, String qName) throws SAXException public void endElement (String uri, String name, String qName) throws SAXException
{ {
@@ -163,8 +178,13 @@ public class AuthMechConfig
} }
} }
/* /**
* character() implementation. * character() implementation.
*
* @param ch Characters with element data.
* @param start Start position in the character array.
* @param length Number of characters to use in the array.
* @throws SAXException
*/ */
public void characters (char ch[], int start, int length) throws SAXException public void characters (char ch[], int start, int length) throws SAXException
{ {
@@ -180,26 +200,29 @@ public class AuthMechConfig
} }
} }
/* /**
* Constructor which sets default configuration values. * Constructor which sets default configuration values.
*/ */
public AuthMechConfig() throws Exception public AuthMechConfig()
{ {
System.err.println("AuthMechConfig()- Default"); System.err.println("AuthMechConfig()- Default");
// Create a map to keep track of the token settings // Create a map to keep track of the token settings
m_mechSettingsMap = new HashMap(); m_mechSettingsMap = new HashMap<String, String>();
} }
/* /**
* Constructor. * Constructor.
*
* @param mechSettingsFileName Name of mechanism's settings file.
* @throws Exception
*/ */
public AuthMechConfig(String mechSettingsFileName) throws Exception public AuthMechConfig(String mechSettingsFileName) throws Exception
{ {
System.err.println("AuthMechConfig()-"); System.err.println("AuthMechConfig()-");
// Create a map to keep track of the token settings // Create a map to keep track of the token settings
m_mechSettingsMap = new HashMap(); m_mechSettingsMap = new HashMap<String, String>();
try try
{ {
@@ -240,13 +263,16 @@ public class AuthMechConfig
} }
} }
/* /**
* Returns the value associated with the specified setting. * Returns the value associated with the specified setting.
*
* @param settingName Name of the setting.
* @return Value of the specified setting.
*/ */
public String getSetting(String settingName) throws Exception public final String getSetting(String settingName)
{ {
// Try to find the setting in our map // Try to find the setting in our map
String value = (String) m_mechSettingsMap.get(settingName); String value = m_mechSettingsMap.get(settingName);
if (value == null) if (value == null)
{ {

View File

@@ -24,30 +24,40 @@
package com.novell.casa.authtoksvc; package com.novell.casa.authtoksvc;
/* /**
* AuthMechanism Interface. * AuthMechanism Interface.
* * <p>
* This is the interface implemented by Authentication Mechanisms. * This is the interface implemented by Authentication Mechanisms.
* * <p>
* Please note that Authentication Machanisms must also implement the * Please note that Authentication Machanisms must also implement the
* Serializable interface. * Serializable interface.
* *
*/ */
public interface AuthMechanism public interface AuthMechanism
{ {
/* /**
* Initialize the authentication mechanism. * Initialize the authentication mechanism.
*
* @param svcConfig Service configuration object.
* @param mechConfig Mechanism configuration object.
* @throws Exception
*/ */
void init(SvcConfig svcConfig, AuthMechConfig mechConfig) throws Exception; void init(SvcConfig svcConfig, AuthMechConfig mechConfig) throws Exception;
/* /**
* Process authenticate request. If successful, return the Id of the * Process authenticate request. If successful, return the Id of the
* authenticated identity. * authenticated identity.
*
* @param authReqMsg Authentication request message.
* @return Id of the authenticated entity.
* @throws Exception
*/ */
String invoke(AuthReqMsg authReqMsg) throws Exception; String invoke(AuthReqMsg authReqMsg) throws Exception;
/* /**
* Return the mechanism id. * Return the mechanism id.
*
* @return Mechanism id.
*/ */
String getId(); String getId();
} }

View File

@@ -34,14 +34,13 @@ import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer; import org.apache.xml.serialize.XMLSerializer;
import java.io.*; import java.io.*;
import java.util.Formatter;
/** /**
* *
* Class for the creation and editing of auth.policy files. * Class for the creation and editing of auth.policy files.
* *
**/ */
public class AuthPolicyEditor public final class AuthPolicyEditor
{ {
private static final String usage = private static final String usage =
"usage: AuthPolicyEditor -op [-entry realm:mechanismName[:mechanismInfo]] [-refentry realm:mechanismName] -file policyFilePath\n\n" + "usage: AuthPolicyEditor -op [-entry realm:mechanismName[:mechanismInfo]] [-refentry realm:mechanismName] -file policyFilePath\n\n" +
@@ -75,10 +74,10 @@ public class AuthPolicyEditor
/** /**
* Returns the formal mechanism name if well known * Returns the formal mechanism name if well known.
* *
* @param mechName Name of mechanism. * @param mechName Name of mechanism.
* @return Mechanism formal name. * @return Mechanism formal name.
*/ */
private static String mechFormalName(String mechName) private static String mechFormalName(String mechName)
{ {
@@ -113,7 +112,7 @@ public class AuthPolicyEditor
// Remove text nodes // Remove text nodes
Element root = doc.getDocumentElement(); Element root = doc.getDocumentElement();
Node child; Node child;
Node next = (Node) root.getFirstChild(); Node next = root.getFirstChild();
while ((child = next) != null) while ((child = next) != null)
{ {
next = child.getNextSibling(); next = child.getNextSibling();
@@ -190,7 +189,7 @@ public class AuthPolicyEditor
} }
/** /**
* Gets a starting policy document * Gets a starting policy document.
* *
* @return Starting policy document. * @return Starting policy document.
*/ */
@@ -361,7 +360,7 @@ public class AuthPolicyEditor
Element firstEntry = null; Element firstEntry = null;
Node child; Node child;
Node next = (Node) root.getFirstChild(); Node next = root.getFirstChild();
while ((child = next) != null) while ((child = next) != null)
{ {
next = child.getNextSibling(); next = child.getNextSibling();
@@ -525,7 +524,7 @@ public class AuthPolicyEditor
} }
curr_auth_source_node.getNextSibling(); curr_auth_source_node.getNextSibling();
Element nextEntry = null; Element nextEntry = null;
next = (Node) curr_auth_source_node.getNextSibling();; next = curr_auth_source_node.getNextSibling();
while ((child = next) != null) while ((child = next) != null)
{ {
next = child.getNextSibling(); next = child.getNextSibling();
@@ -639,9 +638,9 @@ public class AuthPolicyEditor
} }
/** /**
* Applications Entry Point * Applications Entry Point.
* *
* @param args * @param args Arguments.
*/ */
public static void main(String[] args) public static void main(String[] args)
{ {

View File

@@ -34,30 +34,30 @@ import org.xml.sax.helpers.XMLReaderFactory;
/** /**
* AuthReqMsg Class. * AuthReqMsg Class.
* * <p>
* This class deals with the message sent by Casa Client when requesting * This class deals with the message sent by Casa Client when requesting
* that an entity be authenticated. The format of the message is as * that an entity be authenticated. The format of the message is as
* follows: * follows:
* * <p>
* <?xml version="1.0" encoding="ISO-8859-1"?> * <?xml version="1.0" encoding="UTF-8"?>
* <auth_req> * <auth_req>
* <realm>realm value</realm> * <realm>realm value</realm>
* <mechanism>mechanism id</mechanism> * <mechanism>mechanism id</mechanism>
* <auth_mech_token>mechanism token data</auth_mech_token> * <auth_mech_token>mechanism token data</auth_mech_token>
* </auth_req> * </auth_req>
* *
*/ */
public class AuthReqMsg public final class AuthReqMsg
{ {
protected String m_realm = null; protected String m_realm = null;
protected String m_authMechToken = null; protected String m_authMechToken = null;
protected String m_authMechanism = null; protected String m_authMechanism = null;
/* /**
* Class for handling Authentication Request parsing events. * Class for handling Authentication Request parsing events.
*/ */
private class SAXHandler extends org.xml.sax.helpers.DefaultHandler private final class SAXHandler extends org.xml.sax.helpers.DefaultHandler
{ {
private final static int AWAITING_ROOT_ELEMENT_START = 0; private final static int AWAITING_ROOT_ELEMENT_START = 0;
private final static int AWAITING_ROOT_ELEMENT_END = 1; private final static int AWAITING_ROOT_ELEMENT_END = 1;
@@ -72,11 +72,13 @@ public class AuthReqMsg
private final static int AWAITING_AUTH_MECH_TOKEN_DATA = 10; private final static int AWAITING_AUTH_MECH_TOKEN_DATA = 10;
private final static int DONE_PARSING = 11; private final static int DONE_PARSING = 11;
private AuthReqMsg m_authReqMsg; private final AuthReqMsg m_authReqMsg;
private int m_state; private int m_state;
/* /**
* Constructor * Constructor.
*
* @param authReqMsg Authentication request message object.
*/ */
public SAXHandler (AuthReqMsg authReqMsg) public SAXHandler (AuthReqMsg authReqMsg)
{ {
@@ -87,10 +89,12 @@ public class AuthReqMsg
m_state = AWAITING_ROOT_ELEMENT_START; m_state = AWAITING_ROOT_ELEMENT_START;
} }
/* /**
* endDocument() implementation. * endDocument() implementation.
*
* @throws SAXException
*/ */
public void endDocument () throws SAXException public final void endDocument () throws SAXException
{ {
// Verify that we obtained all of the required elements // Verify that we obtained all of the required elements
if (m_state != DONE_PARSING) if (m_state != DONE_PARSING)
@@ -100,10 +104,16 @@ public class AuthReqMsg
} }
} }
/* /**
* startElement() implementation. * startElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @param atts Attributes.
* @throws SAXException
*/ */
public void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException public final void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -170,10 +180,15 @@ public class AuthReqMsg
} }
} }
/* /**
* endElement() immplementation. * endElement() immplementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @throws SAXException
*/ */
public void endElement (String uri, String name, String qName) throws SAXException public final void endElement (String uri, String name, String qName) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -240,10 +255,15 @@ public class AuthReqMsg
} }
} }
/* /**
* character() implementation. * character() implementation.
*
* @param ch Characters with element data.
* @param start Start position in the character array.
* @param length Number of characters to use in the array.
* @throws SAXException
*/ */
public void characters (char ch[], int start, int length) throws SAXException public final void characters (char ch[], int start, int length) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -294,8 +314,11 @@ public class AuthReqMsg
} }
} }
/* /**
* Constructor * Constructor.
*
* @param inStream Input stream with authentication request data.
* @throws Exception
*/ */
public AuthReqMsg (InputStream inStream) throws Exception public AuthReqMsg (InputStream inStream) throws Exception
{ {
@@ -317,26 +340,32 @@ public class AuthReqMsg
} }
} }
/* /**
* Method to get the authentication realm. * Method to get the authentication realm.
*
* @return Authentication realm name.
*/ */
public String getRealm() throws Exception public String getRealm()
{ {
return m_realm; return m_realm;
} }
/* /**
* Method to get the authentication mechanism token. * Method to get the authentication mechanism token.
*
* @return Authentication mechanism token.
*/ */
public String getAuthMechToken() throws Exception public String getAuthMechToken()
{ {
return m_authMechToken; return m_authMechToken;
} }
/* /**
* Method to get the authentication mechanism id. * Method to get the authentication mechanism id.
*
* @return Id of authentication mechanism targeted.
*/ */
public String getMechanismId() throws Exception public String getMechanismId()
{ {
return m_authMechanism; return m_authMechanism;
} }

View File

@@ -30,83 +30,90 @@ package com.novell.casa.authtoksvc;
* This class deals with the message sent to the CASA Client as a * This class deals with the message sent to the CASA Client as a
* response to an authentication request. The format of the message is * response to an authentication request. The format of the message is
* as follows when the response includes a session token: * as follows when the response includes a session token:
* * <p>
* <?xml version="1.0" encoding="ISO-8859-1"?> * <?xml version="1.0" encoding="UTF-8"?>
* <auth_resp> * <auth_resp>
* <status><description>OK</description>200</status> * <status><description>OK</description>200</status>
* <session_token><lifetime>lifetime value</lifetime>session token data</session_token> * <session_token><lifetime>lifetime value</lifetime>session token data</session_token>
* </auth_resp> * </auth_resp>
* * <p>
* The format of the message is as follows when the response does not * The format of the message is as follows when the response does not
* include a session token. * include a session token.
* * <p>
* <?xml version="1.0" encoding="ISO-8859-1"?> * <?xml version="1.0" encoding="UTF-8"?>
* <auth_resp> * <auth_resp>
* <status><description>status description</description>status code</status> * <status><description>status description</description>status code</status>
* </auth_resp> * </auth_resp>
* * <p>
* Plase note that the protocol utilizes the status codes defined * Plase note that the protocol utilizes the status codes defined
* in the HTTP 1.1 Specification. * in the HTTP 1.1 Specification.
* *
*/ */
public class AuthRespMsg public final class AuthRespMsg
{ {
String m_msg; final String m_msg;
/* /**
* Constructor for a msg that does not include the session token. * Constructor for a msg that does not include the session token.
*
* @param statusDescription Description of the status code.
* @param statusCode Status code.
*/ */
public AuthRespMsg ( public AuthRespMsg (String statusDescription, String statusCode)
String statusDescription,
String statusCode) throws Exception
{ {
// Get a StringBuffer to help us with the construction of the message // Get a StringBuffer to help us with the construction of the message
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
// Start building the message // Start building the message
sb.append(ProtoDefs.xmlDeclaration + "\r\n"); sb.append(ProtoDefs.xmlDeclaration); sb.append("\r\n");
sb.append("<" + ProtoDefs.authResponseElementName + ">" + "\r\n"); sb.append("<"); sb.append(ProtoDefs.authResponseElementName); sb.append(">\r\n");
sb.append("<" + ProtoDefs.statusElementName + ">" sb.append("<"); sb.append(ProtoDefs.statusElementName); sb.append(">");
+ "<" + ProtoDefs.descriptionElementName + ">" + statusDescription + "</" + ProtoDefs.descriptionElementName + ">" sb.append("<"); sb.append(ProtoDefs.descriptionElementName); sb.append(">"); sb.append(statusDescription); sb.append("</"); sb.append(ProtoDefs.descriptionElementName); sb.append(">");
+ statusCode + "</" + ProtoDefs.statusElementName + ">" + "\r\n"); sb.append(statusCode); sb.append("</"); sb.append(ProtoDefs.statusElementName); sb.append(">\r\n");
sb.append("</" + ProtoDefs.authResponseElementName + ">" + "\r\n"); sb.append("</"); sb.append(ProtoDefs.authResponseElementName); sb.append(">\r\n");
// The message has now been built, save it. // The message has now been built, save it.
m_msg = sb.toString(); m_msg = sb.toString();
} }
/* /**
* Constructor for a msg that includes the session token. * Constructor for a msg that includes the session token.
*
* @param statusDescription Status code description.
* @param statusCode Status code.
* @param sessionToken Session token string.
* @param sessionTokenLifetime Lifetime of the session token.
*/ */
public AuthRespMsg ( public AuthRespMsg (String statusDescription,
String statusDescription, String statusCode,
String statusCode, String sessionToken,
String sessionToken, String sessionTokenLifetime)
String sessionTokenLifetime) throws Exception
{ {
// Get a StringBuffer to help us with the construction of the message // Get a StringBuffer to help us with the construction of the message
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
// Start building the message // Start building the message
sb.append(ProtoDefs.xmlDeclaration + "\r\n"); sb.append(ProtoDefs.xmlDeclaration); sb.append("\r\n");
sb.append("<" + ProtoDefs.authResponseElementName + ">" + "\r\n"); sb.append("<"); sb.append(ProtoDefs.authResponseElementName); sb.append(">\r\n");
sb.append("<" + ProtoDefs.statusElementName + ">" sb.append("<"); sb.append(ProtoDefs.statusElementName); sb.append(">");
+ "<" + ProtoDefs.descriptionElementName + ">" + ProtoDefs.httpOkStatusMsg + "</" + ProtoDefs.descriptionElementName + ">" sb.append("<"); sb.append(ProtoDefs.descriptionElementName); sb.append(">"); sb.append(ProtoDefs.httpOkStatusMsg); sb.append("</"); sb.append(ProtoDefs.descriptionElementName); sb.append(">");
+ ProtoDefs.httpOkStatusCode + "</" + ProtoDefs.statusElementName + ">" + "\r\n"); sb.append(ProtoDefs.httpOkStatusCode); sb.append("</"); sb.append(ProtoDefs.statusElementName); sb.append(">\r\n");
sb.append("<" + ProtoDefs.sessionTokenElementName + ">" sb.append("<"); sb.append(ProtoDefs.sessionTokenElementName); sb.append(">");
+ "<" + ProtoDefs.lifetimeElementName + ">" + sessionTokenLifetime + "</" + ProtoDefs.lifetimeElementName + ">" sb.append("<"); sb.append(ProtoDefs.lifetimeElementName); sb.append(">"); sb.append(sessionTokenLifetime); sb.append("</"); sb.append(ProtoDefs.lifetimeElementName); sb.append(">");
+ sessionToken + "</" + ProtoDefs.sessionTokenElementName + ">" + "\r\n"); sb.append(sessionToken); sb.append("</"); sb.append(ProtoDefs.sessionTokenElementName); sb.append(">\r\n");
sb.append("</" + ProtoDefs.authResponseElementName + ">" + "\r\n"); sb.append("</"); sb.append(ProtoDefs.authResponseElementName); sb.append(">\r\n");
// The message has now been built, save it. // The message has now been built, save it.
m_msg = sb.toString(); m_msg = sb.toString();
} }
/* /**
* Returns a string containing the AuthRespMsg. * Returns a string containing the AuthRespMsg.
*
* @return Authentication response message string.
*/ */
public String toString() public final String toString()
{ {
return m_msg; return m_msg;
} }

View File

@@ -41,20 +41,20 @@ import java.io.*;
//import org.apache.axis.utils.XMLUtils; //import org.apache.axis.utils.XMLUtils;
/* /**
* AuthToken Class. * AuthToken Class.
* * <p>
* This class constructs authentication tokens that clients can present * This class constructs authentication tokens that clients can present
* to services for authentication. The authentication token consists of * to services for authentication. The authentication token consists of
* a SOAP message secured with WSSecurity with the appropriate elements signed * a SOAP message secured with WSSecurity with the appropriate elements signed
* and with a timestamp. The body of the SOAP message is as follows: * and with a timestamp. The body of the SOAP message is as follows:
* * <p>
* <auth_token> * <auth_token>
* <ident_token><type>Identity Token type</type>identity token data</ident_token> * <ident_token><type>Identity Token type</type>identity token data</ident_token>
* </auth_token> * </auth_token>
* *
*/ */
public class AuthToken public final class AuthToken
{ {
private String m_token; private String m_token;
private String m_lifetime = ""; private String m_lifetime = "";
@@ -75,8 +75,16 @@ public class AuthToken
static final private MessageContext axisMsgContext = new MessageContext(new AxisClient(new NullProvider())); static final private MessageContext axisMsgContext = new MessageContext(new AxisClient(new NullProvider()));
/* /**
* Constructor. * Constructor.
*
* @param identityId Id of the authenticated identity.
* @param realm Realm where the identity id is valid.
* @param targetService Name of the targeted service.
* @param targetHost Host where the targeted service resides.
* @param svcConfig Service configuration object.
* @param enabledSvcsConfig Enabled services configuration object.
* @throws Exception
*/ */
public AuthToken(String identityId, public AuthToken(String identityId,
String realm, String realm,
@@ -137,9 +145,13 @@ public class AuthToken
} }
} }
/* /**
* Constructor given an authentication token string. The constructor * Constructor given an authentication token string. The constructor
* validates the token as part of its processing. * validates the token as part of its processing.
*
* @param token Authentication token string.
* @param encodedToken Indication of whether or not the token is Base64 encoded.
* @throws Exception
*/ */
public AuthToken(String token, public AuthToken(String token,
boolean encodedToken) throws Exception boolean encodedToken) throws Exception
@@ -202,20 +214,20 @@ public class AuthToken
} }
/** /**
* Get AuthToken SOAP Message * Get AuthToken SOAP Message.
* *
* @param identityToken String containing the identity token that should be part of the message * @param identityToken String containing the identity token that should be part of the message.
* @param identityTokenType String containing the identity token type * @param identityTokenType String containing the identity token type.
* @param lifetime Lifetime that should be specified in the message timestamp (seconds) * @param lifetime Lifetime that should be specified in the message timestamp (seconds).
* @param svcConfig Service configuration object * @param svcConfig Service configuration object.
* @param includeCert True if the message should include the Public Certificate * @param includeCert True if the message should include the Public Certificate.
* @return <code>Message<code> AuthToken message, null if the method fails. * @return AuthToken message, null if the method fails.
*/ */
private Message getMessage(String identityToken, private static Message getMessage(String identityToken,
String identityTokenType, String identityTokenType,
int lifetime, int lifetime,
SvcConfig svcConfig, SvcConfig svcConfig,
boolean includeCert) boolean includeCert)
{ {
Message secureMessage; Message secureMessage;
@@ -260,21 +272,26 @@ public class AuthToken
return secureMessage; return secureMessage;
} }
/* /**
* Returns a string containing the Base64 encode token. * Returns a string containing the Base64 encode token.
*
* @return Authentication token string.
*/ */
public String toString() public final String toString()
{ {
return Base64Coder.encode(m_token); return Base64Coder.encode(m_token);
} }
/* /**
* Returns the lifetime of the token. * Returns the lifetime of the token.
* * <p>
* Note: It is only valid to execute this procedure if its called on an object * Note: It is only valid to execute this procedure if its called on an object
* instantiated via the constructor which takes a lifetime parameter. * instantiated via the constructor which takes a lifetime parameter.
*
* @return Authentication token lifetime.
* @throws Exception
*/ */
public String getLifetime() throws Exception public final String getLifetime() throws Exception
{ {
// Throw exeption if the lifetime parameter is not set // Throw exeption if the lifetime parameter is not set
if (m_lifetime.length() == 0) if (m_lifetime.length() == 0)
@@ -286,28 +303,35 @@ public class AuthToken
return Integer.toString(Integer.valueOf(m_lifetime).intValue() - Integer.valueOf(m_lifetimeShorter).intValue()); return Integer.toString(Integer.valueOf(m_lifetime).intValue() - Integer.valueOf(m_lifetimeShorter).intValue());
} }
/* /**
* Returns the identity token. * Returns the identity token.
*
* @return Identity token string.
*/ */
public String getIdentityToken() public final String getIdentityToken()
{ {
return m_identityToken; return m_identityToken;
} }
/* /**
* Returns the identity token type. * Returns the identity token type.
*
* @return Identity token type.
*/ */
public String getIdentityTokenType() public final String getIdentityTokenType()
{ {
return m_identityTokenType; return m_identityTokenType;
} }
/* /**
* Validates an authentication token. If successful it * Validates an authentication token. If successful it
* returns a string containing the identity token associated * returns a string containing the identity token associated
* with the authentication token; otherwise it returns NULL; * with the authentication token; otherwise it returns NULL;
* * <p>
* Note, the routine assumes that the token is not encoded. * Note, the routine assumes that the token is not encoded.
*
* @param authTokenString Authentication token string.
* @return Identity token string.
*/ */
public static String validate(String authTokenString) public static String validate(String authTokenString)
{ {

View File

@@ -34,11 +34,11 @@ import org.xml.sax.helpers.XMLReaderFactory;
/** /**
* AuthTokenConfig Class. * AuthTokenConfig Class.
* * <p>
* This class obtains and maintains authentication token configuration. * This class obtains and maintains authentication token configuration.
* *
*/ */
public class AuthTokenConfig public final class AuthTokenConfig
{ {
// Well known authentication token configuration settings // Well known authentication token configuration settings
public final static String TokenLifetime = "TokenLifetime"; public final static String TokenLifetime = "TokenLifetime";
@@ -46,16 +46,16 @@ public class AuthTokenConfig
public final static String IdentityTokenType = "IdentityTokenType"; public final static String IdentityTokenType = "IdentityTokenType";
// Default configuration values // Default configuration values
private String m_defaultTokenLifetimeValue = "3600"; // Seconds private final String m_defaultTokenLifetimeValue = "3600"; // Seconds
private String m_defaultLifetimeShorterValue = "5"; // Seconds private final String m_defaultLifetimeShorterValue = "5"; // Seconds
private String m_defaultIdentityTokenTypeValue = "CasaIdentityToken"; private final String m_defaultIdentityTokenTypeValue = "CasaIdentityToken";
private Map m_tokenSettingsMap; private final Map<String,String> m_tokenSettingsMap;
/* /**
* Class for handling parsing events. * Class for handling parsing events.
*/ */
private class SAXHandler extends org.xml.sax.helpers.DefaultHandler private static final class SAXHandler extends org.xml.sax.helpers.DefaultHandler
{ {
private final static int AWAITING_ROOT_ELEMENT_START = 0; private final static int AWAITING_ROOT_ELEMENT_START = 0;
private final static int AWAITING_SETTING_ELEMENT_START = 1; private final static int AWAITING_SETTING_ELEMENT_START = 1;
@@ -65,14 +65,16 @@ public class AuthTokenConfig
private final static String m_rootElementName = "settings"; private final static String m_rootElementName = "settings";
private Map m_keyMap; private final Map<String,String> m_keyMap;
private int m_state; private int m_state;
private String m_currentKey; private String m_currentKey;
/* /**
* Constructor * Constructor.
*
* @param keyMap Key/Value pair map.
*/ */
public SAXHandler(Map keyMap) public SAXHandler(Map<String,String> keyMap)
{ {
super(); super();
@@ -81,8 +83,10 @@ public class AuthTokenConfig
m_state = AWAITING_ROOT_ELEMENT_START; m_state = AWAITING_ROOT_ELEMENT_START;
} }
/* /**
* endDocument() implementation. * endDocument() implementation.
*
* @throws SAXException
*/ */
public void endDocument () throws SAXException public void endDocument () throws SAXException
{ {
@@ -94,8 +98,14 @@ public class AuthTokenConfig
} }
} }
/* /**
* startElement() implementation. * startElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @param atts Attributes.
* @throws SAXException
*/ */
public void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException public void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException
{ {
@@ -130,8 +140,13 @@ public class AuthTokenConfig
} }
} }
/* /**
* endElement() immplementation. * endElement() immplementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @throws SAXException
*/ */
public void endElement (String uri, String name, String qName) throws SAXException public void endElement (String uri, String name, String qName) throws SAXException
{ {
@@ -164,8 +179,13 @@ public class AuthTokenConfig
} }
} }
/* /**
* character() implementation. * character() implementation.
*
* @param ch Characters with element data.
* @param start Start position in the character array.
* @param length Number of characters to use in the array.
* @throws SAXException
*/ */
public void characters (char ch[], int start, int length) throws SAXException public void characters (char ch[], int start, int length) throws SAXException
{ {
@@ -181,15 +201,15 @@ public class AuthTokenConfig
} }
} }
/* /**
* Constructor which sets default configuration values. * Constructor which sets default configuration values.
*/ */
public AuthTokenConfig() throws Exception public AuthTokenConfig()
{ {
System.err.println("AuthTokenConfig()- Default"); System.err.println("AuthTokenConfig()- Default");
// Create a map to keep track of the token settings // Create a map to keep track of the token settings
m_tokenSettingsMap = new HashMap(); m_tokenSettingsMap = new HashMap<String, String>();
// Set the default settings in our map // Set the default settings in our map
m_tokenSettingsMap.put(TokenLifetime, m_defaultTokenLifetimeValue); m_tokenSettingsMap.put(TokenLifetime, m_defaultTokenLifetimeValue);
@@ -197,15 +217,18 @@ public class AuthTokenConfig
m_tokenSettingsMap.put(IdentityTokenType, m_defaultIdentityTokenTypeValue); m_tokenSettingsMap.put(IdentityTokenType, m_defaultIdentityTokenTypeValue);
} }
/* /**
* Constructor. * Constructor.
*
* @param authTokenSettingsFileName Name of the authentication token settings file.
* @throws Exception
*/ */
public AuthTokenConfig(String authTokenSettingsFileName) throws Exception public AuthTokenConfig(String authTokenSettingsFileName) throws Exception
{ {
System.err.println("AuthTokenConfig()-"); System.err.println("AuthTokenConfig()-");
// Create a map to keep track of the token settings // Create a map to keep track of the token settings
m_tokenSettingsMap = new HashMap(); m_tokenSettingsMap = new HashMap<String, String>();
try try
{ {
@@ -246,13 +269,16 @@ public class AuthTokenConfig
} }
} }
/* /**
* Returns the value associated with the specified setting. * Returns the value associated with the specified setting.
*
* @param settingName Name of the setting.
* @return Value of the specified setting.
*/ */
public String getSetting(String settingName) throws Exception public final String getSetting(String settingName)
{ {
// Try to find the setting in our map // Try to find the setting in our map
String value = (String) m_tokenSettingsMap.get(settingName); String value = m_tokenSettingsMap.get(settingName);
if (value == null) if (value == null)
{ {
System.err.println("AuthTokenConfig.getSetting()- Did not find setting " + settingName); System.err.println("AuthTokenConfig.getSetting()- Did not find setting " + settingName);

View File

@@ -28,8 +28,8 @@ package com.novell.casa.authtoksvc;
* *
* Class for the creation and editing of authtoken.settings files. * Class for the creation and editing of authtoken.settings files.
* *
**/ */
public class AuthTokenSettingsEditor implements IVerifySetting public final class AuthTokenSettingsEditor implements IVerifySetting
{ {
private static final String usage = private static final String usage =
"usage: AuthTokenSettingsEditor -op [settingName [settingValue]] -file settingsFilePath\n\n" + "usage: AuthTokenSettingsEditor -op [settingName [settingValue]] -file settingsFilePath\n\n" +
@@ -130,9 +130,9 @@ public class AuthTokenSettingsEditor implements IVerifySetting
} }
/** /**
* Applications Entry Point * Applications Entry Point.
* *
* @param args * @param args Arguments.
*/ */
public static void main(String[] args) public static void main(String[] args)
{ {

View File

@@ -39,32 +39,36 @@ import java.net.URLClassLoader;
/** /**
* Authenticate Class. * Authenticate Class.
* * <p>
* This class processes authentication requests. * This class processes authentication requests.
* *
*/ */
public class Authenticate implements RpcMethod public final class Authenticate implements RpcMethod
{ {
private static final String m_mechanismSettingsFileName = "mechanism.settings"; private static final String m_mechanismSettingsFileName = "mechanism.settings";
private Map m_authMechanismMap; private final Map<String,AuthMechanism> m_authMechanismMap;
private SvcConfig m_svcConfig; private SvcConfig m_svcConfig;
private EnabledSvcsConfig m_enabledSvcsConfig; private EnabledSvcsConfig m_enabledSvcsConfig;
/* /**
* Constructor * Constructor.
*/ */
public Authenticate() throws Exception public Authenticate()
{ {
// Create a map to keep track of the authentication mechanisms // Create a map to keep track of the authentication mechanisms
m_authMechanismMap = new HashMap(); m_authMechanismMap = new HashMap<String, AuthMechanism>();
} }
/* /**
* Initialize the Rpc method. * Initialize the Rpc method.
*
* @param svcConfig Service configuration object.
* @param enabledSvcsConfig Enabled services configuration object.
* @throws Exception
*/ */
public void init(SvcConfig svcConfig, EnabledSvcsConfig enabledSvcsConfig) throws Exception public final void init(SvcConfig svcConfig, EnabledSvcsConfig enabledSvcsConfig) throws Exception
{ {
m_svcConfig = svcConfig; m_svcConfig = svcConfig;
m_enabledSvcsConfig = enabledSvcsConfig; m_enabledSvcsConfig = enabledSvcsConfig;
@@ -120,7 +124,7 @@ public class Authenticate implements RpcMethod
ClassLoader customClassLoader = new URLClassLoader(urls); ClassLoader customClassLoader = new URLClassLoader(urls);
// Load the mech class using our custom loader // Load the mech class using our custom loader
Class mechClass = customClassLoader.loadClass(mechClassName); Class<?> mechClass = customClassLoader.loadClass(mechClassName);
FileOutputStream fos = new FileOutputStream(svcConfig.getSetting(SvcConfig.AppRootPath) + "tmp"); FileOutputStream fos = new FileOutputStream(svcConfig.getSetting(SvcConfig.AppRootPath) + "tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos); ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(mechClass); oos.writeObject(mechClass);
@@ -128,7 +132,7 @@ public class Authenticate implements RpcMethod
fos.close(); fos.close();
FileInputStream fis = new FileInputStream(svcConfig.getSetting(SvcConfig.AppRootPath) + "tmp"); FileInputStream fis = new FileInputStream(svcConfig.getSetting(SvcConfig.AppRootPath) + "tmp");
ObjectInputStream ois = new ObjectInputStream(fis); ObjectInputStream ois = new ObjectInputStream(fis);
mechClass = (Class) ois.readObject(); mechClass = (Class<?>) ois.readObject();
ois.close(); ois.close();
fis.close(); fis.close();
@@ -174,7 +178,7 @@ public class Authenticate implements RpcMethod
ClassLoader customClassLoader = new URLClassLoader(urls); ClassLoader customClassLoader = new URLClassLoader(urls);
// Load the mech class using our custom loader // Load the mech class using our custom loader
Class mechClass = customClassLoader.loadClass(mechClassName); Class<?> mechClass = customClassLoader.loadClass(mechClassName);
FileOutputStream fos = new FileOutputStream(svcConfig.getSetting(SvcConfig.AppRootPath) + "tmp"); FileOutputStream fos = new FileOutputStream(svcConfig.getSetting(SvcConfig.AppRootPath) + "tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos); ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(mechClass); oos.writeObject(mechClass);
@@ -182,7 +186,7 @@ public class Authenticate implements RpcMethod
fos.close(); fos.close();
FileInputStream fis = new FileInputStream(svcConfig.getSetting(SvcConfig.AppRootPath) + "tmp"); FileInputStream fis = new FileInputStream(svcConfig.getSetting(SvcConfig.AppRootPath) + "tmp");
ObjectInputStream ois = new ObjectInputStream(fis); ObjectInputStream ois = new ObjectInputStream(fis);
mechClass = (Class) ois.readObject(); mechClass = (Class<?>) ois.readObject();
ois.close(); ois.close();
fis.close(); fis.close();
@@ -254,10 +258,13 @@ public class Authenticate implements RpcMethod
} }
} }
/* /**
* Process Rpc. * Process Rpc.
*
* @param inStream Input data stream (Request data).
* @param out Output data print writter (Reply data).
*/ */
public void invoke(InputStream inStream, PrintWriter out) throws IOException public final void invoke(InputStream inStream, PrintWriter out)
{ {
try try
{ {
@@ -267,7 +274,7 @@ public class Authenticate implements RpcMethod
AuthReqMsg authReqMsg = new AuthReqMsg(inStream); AuthReqMsg authReqMsg = new AuthReqMsg(inStream);
// Get the necessary authentication mechanism // Get the necessary authentication mechanism
AuthMechanism authMechanism = (AuthMechanism) m_authMechanismMap.get(authReqMsg.getMechanismId()); AuthMechanism authMechanism = m_authMechanismMap.get(authReqMsg.getMechanismId());
if (authMechanism != null) if (authMechanism != null)
{ {
// Invoke the mechanism to authenticate the entity // Invoke the mechanism to authenticate the entity
@@ -331,10 +338,12 @@ public class Authenticate implements RpcMethod
} }
} }
/* /**
* Return the method id. * Return the method id.
*
* @return Method id.
*/ */
public String getId() public final String getId()
{ {
return "Authenticate"; return "Authenticate";
} }

View File

@@ -20,19 +20,22 @@
package com.novell.casa.authtoksvc; package com.novell.casa.authtoksvc;
public class Base64Coder { /**
* Base64Coder class.
*/
public final class Base64Coder {
// Mapping table from 6-bit nibbles to Base64 characters. // Mapping table from 6-bit nibbles to Base64 characters.
private static char[] map1 = new char[64]; private static final char[] map1 = new char[64];
static { static {
int i=0; int i=0;
for (char c='A'; c<='Z'; c++) map1[i++] = c; for (char c='A'; c<='Z'; c++) map1[i++] = c;
for (char c='a'; c<='z'; c++) map1[i++] = c; for (char c='a'; c<='z'; c++) map1[i++] = c;
for (char c='0'; c<='9'; c++) map1[i++] = c; for (char c='0'; c<='9'; c++) map1[i++] = c;
map1[i++] = '+'; map1[i++] = '/'; } map1[i++] = '+'; map1[i] = '/'; }
// Mapping table from Base64 characters to 6-bit nibbles. // Mapping table from Base64 characters to 6-bit nibbles.
private static byte[] map2 = new byte[128]; private static final byte[] map2 = new byte[128];
static { static {
for (int i=0; i<map2.length; i++) map2[i] = -1; for (int i=0; i<map2.length; i++) map2[i] = -1;
for (int i=0; i<64; i++) map2[map1[i]] = (byte)i; } for (int i=0; i<64; i++) map2[map1[i]] = (byte)i; }
@@ -40,8 +43,8 @@ private static byte[] map2 = new byte[128];
/** /**
* Encodes a string into Base64 format. * Encodes a string into Base64 format.
* No blanks or line breaks are inserted. * No blanks or line breaks are inserted.
* @param s a String to be encoded. * @param s String to be encoded.
* @return A String with the Base64 encoded data. * @return String with the Base64 encoded data.
*/ */
public static String encode (String s) { public static String encode (String s) {
return new String(encode(s.getBytes())); } return new String(encode(s.getBytes())); }
@@ -49,8 +52,8 @@ public static String encode (String s) {
/** /**
* Encodes a byte array into Base64 format. * Encodes a byte array into Base64 format.
* No blanks or line breaks are inserted. * No blanks or line breaks are inserted.
* @param in an array containing the data bytes to be encoded. * @param in Array containing the data bytes to be encoded.
* @return A character array with the Base64 encoded data. * @return A character array with the Base64 encoded data.
*/ */
public static char[] encode (byte[] in) { public static char[] encode (byte[] in) {
int iLen = in.length; int iLen = in.length;

View File

@@ -25,9 +25,7 @@
package com.novell.casa.authtoksvc; package com.novell.casa.authtoksvc;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.util.HashSet;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Set;
import javax.naming.Context; import javax.naming.Context;
import javax.naming.NamingEnumeration; import javax.naming.NamingEnumeration;
@@ -44,35 +42,34 @@ import org.xml.sax.helpers.XMLReaderFactory;
import org.bandit.ia.IAContext; import org.bandit.ia.IAContext;
import org.bandit.util.config.Realm; import org.bandit.util.config.Realm;
/* /**
* CasaIdentityToken Class. * CasaIdentityToken Class.
* * <p>
* This class constructs Casa Identity tokens. * This class constructs Casa Identity tokens.
* * <p>
* A Casa Identity Token is a simple XML Document * A Casa Identity Token is a simple XML Document
* with information about an identity in the form * with information about an identity in the form
* of: * of:
* * <p>
* <?xml version="1.0" encoding="ISO-8859-1"?> * <?xml version="1.0" encoding="UTF-8"?>
* <casa_ident_tok> * <casa_ident_tok>
* <id>identity id</id> * <id>identity id</id>
* <source_name>identity data source name</source_name> * <source_name>identity data source name</source_name>
* <source_url>identity data source url</source_url> * <source_url>identity data source url</source_url>
* <target_service>target service name</target_service> * <target_service>target service name</target_service>
* <target_host>target host name</target_host> * <target_host>target host name</target_host>
* <attributes> * <attributes>
* <attribute name>attribute value</attribute name> * <attribute name>attribute value</attribute name>
* <attribute2 name>attribute2 value</attribute name> * <attribute2 name>attribute2 value</attribute name>
* ... * ...
* </attributes> * </attributes>
* </casa_ident_tok> * </casa_ident_tok>
* * <p>
* * Attribute/values pairs. The attribute names
* attribute/values pairs. The attribute names
* being the XML elements of the documents. * being the XML elements of the documents.
* *
*/ */
public class CasaIdentityToken implements IdentityToken public final class CasaIdentityToken implements IdentityToken
{ {
/* /*
* XML Element Name Constants for the documents exchanged between the * XML Element Name Constants for the documents exchanged between the
@@ -86,7 +83,7 @@ public class CasaIdentityToken implements IdentityToken
private final static String targetHostElementName = "target_host"; private final static String targetHostElementName = "target_host";
private final static String attributesElementName = "attributes"; private final static String attributesElementName = "attributes";
private IdenTokenConfig m_idenTokenConfig; private final IdenTokenConfig m_idenTokenConfig;
private String m_identityId = null; private String m_identityId = null;
private String m_sourceName = null; private String m_sourceName = null;
@@ -96,10 +93,10 @@ public class CasaIdentityToken implements IdentityToken
private String m_token = null; private String m_token = null;
private javax.naming.directory.Attributes m_attributes = null; private javax.naming.directory.Attributes m_attributes = null;
/* /**
* Class for handling Authentication Request parsing events. * Class for handling Authentication Request parsing events.
*/ */
private class SAXHandler extends org.xml.sax.helpers.DefaultHandler private final class SAXHandler extends org.xml.sax.helpers.DefaultHandler
{ {
private final static int AWAITING_ROOT_ELEMENT_START = 0; private final static int AWAITING_ROOT_ELEMENT_START = 0;
private final static int AWAITING_ROOT_ELEMENT_END = 1; private final static int AWAITING_ROOT_ELEMENT_END = 1;
@@ -125,13 +122,15 @@ public class CasaIdentityToken implements IdentityToken
private final static int AWAITING_BINARY_ATTRIBUTE_DATA = 21; private final static int AWAITING_BINARY_ATTRIBUTE_DATA = 21;
private final static int DONE_PARSING = 22; private final static int DONE_PARSING = 22;
private CasaIdentityToken m_casaIdentToken; private final CasaIdentityToken m_casaIdentToken;
private int m_state; private int m_state;
private String m_currAttribute; private String m_currAttribute;
private boolean m_encryptedAttrs; private boolean m_encryptedAttrs;
/* /**
* Constructor * Constructor.
*
* @param casaIdentityToken Casa Identity Token object.
*/ */
public SAXHandler (CasaIdentityToken casaIdentityToken) public SAXHandler (CasaIdentityToken casaIdentityToken)
{ {
@@ -142,10 +141,12 @@ public class CasaIdentityToken implements IdentityToken
m_state = AWAITING_ROOT_ELEMENT_START; m_state = AWAITING_ROOT_ELEMENT_START;
} }
/* /**
* endDocument() implementation. * endDocument() implementation.
*
* @throws SAXException
*/ */
public void endDocument () throws SAXException public final void endDocument () throws SAXException
{ {
// Verify that we obtained all of the required elements // Verify that we obtained all of the required elements
if (m_state != DONE_PARSING) if (m_state != DONE_PARSING)
@@ -155,11 +156,16 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
*
* startElement() implementation. * startElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @param atts Attributes.
* @throws SAXException
*/ */
public void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException public final void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -289,10 +295,15 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
* endElement() immplementation. * endElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @throws SAXException
*/ */
public void endElement (String uri, String name, String qName) throws SAXException public final void endElement (String uri, String name, String qName) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -407,10 +418,15 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
* character() implementation. * character() implementation.
*
* @param ch Characters with element data.
* @param start Start position in the character array.
* @param length Number of characters to use in the array.
* @throws SAXException
*/ */
public void characters (char ch[], int start, int length) throws SAXException public final void characters (char ch[], int start, int length) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -510,8 +526,10 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
* Constructor. * Constructor.
*
* @param idenTokenConfig Identity token configuration object.
*/ */
public CasaIdentityToken (IdenTokenConfig idenTokenConfig) public CasaIdentityToken (IdenTokenConfig idenTokenConfig)
{ {
@@ -521,7 +539,7 @@ public class CasaIdentityToken implements IdentityToken
m_idenTokenConfig = idenTokenConfig; m_idenTokenConfig = idenTokenConfig;
} }
/* /**
* Constructor. * Constructor.
*/ */
public CasaIdentityToken () public CasaIdentityToken ()
@@ -532,14 +550,21 @@ public class CasaIdentityToken implements IdentityToken
m_idenTokenConfig = null; m_idenTokenConfig = null;
} }
/* /**
* Initialize with parameters. * Initialize with parameters.
*
* @param identityId Identity identifier.
* @param sourceName Name of the realm where the identityId is valid.
* @param targetService Name of service being targeted.
* @param targetHost Host where the targeted service resides.
* @param svcConfig Service configuration object.
* @throws Exception
*/ */
public void initialize (String identityId, public final void initialize (String identityId,
String sourceName, String sourceName,
String targetService, String targetService,
String targetHost, String targetHost,
SvcConfig svcConfig) throws Exception SvcConfig svcConfig) throws Exception
{ {
// Save input parameters // Save input parameters
m_identityId = identityId; m_identityId = identityId;
@@ -561,14 +586,14 @@ public class CasaIdentityToken implements IdentityToken
// Setup a string buffer for building the IdentityToken, notice for now // Setup a string buffer for building the IdentityToken, notice for now
// we are not going to wrap the identity token. // we are not going to wrap the identity token.
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
sb.append(ProtoDefs.xmlDeclaration + "\r\n"); sb.append(ProtoDefs.xmlDeclaration); sb.append("\r\n");
sb.append("<" + casaIdentTokElementName + ">" + "\r\n"); sb.append("<"); sb.append(casaIdentTokElementName); sb.append(">"); sb.append("\r\n");
sb.append("<" + idElementName + ">" + identityId + "</" + idElementName + ">\r\n"); sb.append("<"); sb.append(idElementName); sb.append(">"); sb.append(identityId); sb.append("</"); sb.append(idElementName); sb.append(">\r\n");
sb.append("<" + sourceNameElementName + ">" + sourceName + "</" + sourceNameElementName + ">\r\n"); sb.append("<"); sb.append(sourceNameElementName); sb.append(">"); sb.append(sourceName); sb.append("</"); sb.append(sourceNameElementName); sb.append(">\r\n");
sb.append("<" + sourceUrlElementName + ">" + m_sourceUrl + "</" + sourceUrlElementName + ">\r\n"); sb.append("<"); sb.append(sourceUrlElementName); sb.append(">"); sb.append(m_sourceUrl); sb.append("</"); sb.append(sourceUrlElementName); sb.append(">\r\n");
sb.append("<" + targetServiceElementName + ">" + m_service + "</" + targetServiceElementName + ">\r\n"); sb.append("<"); sb.append(targetServiceElementName); sb.append(">"); sb.append(m_service); sb.append("</"); sb.append(targetServiceElementName); sb.append(">\r\n");
sb.append("<" + targetHostElementName + ">" + m_host + "</" + targetHostElementName + ">\r\n"); sb.append("<"); sb.append(targetHostElementName); sb.append(">"); sb.append(m_host); sb.append("</"); sb.append(targetHostElementName); sb.append(">\r\n");
sb.append("<" + attributesElementName + ">" + "\r\n"); sb.append("<"); sb.append(attributesElementName); sb.append(">\r\n");
// Get the necessary attributes of the specified services in the identity token // Get the necessary attributes of the specified services in the identity token
String[] attributesNeeded = m_idenTokenConfig.getAttributes(); String[] attributesNeeded = m_idenTokenConfig.getAttributes();
@@ -580,7 +605,7 @@ public class CasaIdentityToken implements IdentityToken
{ {
javax.naming.directory.Attribute attr = (javax.naming.directory.Attribute) ae.next(); javax.naming.directory.Attribute attr = (javax.naming.directory.Attribute) ae.next();
NamingEnumeration enumeration = attr.getAll(); NamingEnumeration<?> enumeration = attr.getAll();
while (enumeration.hasMore()) while (enumeration.hasMore())
{ {
Object attrValue = enumeration.next(); Object attrValue = enumeration.next();
@@ -600,13 +625,13 @@ public class CasaIdentityToken implements IdentityToken
if (attrValue instanceof byte[]) if (attrValue instanceof byte[])
{ {
// The attribute value is of type byte[], we need to encode it. // The attribute value is of type byte[], we need to encode it.
sb.append("<" + attr.getID() + " type=\"binary\" encoding=\"base64\">" + new String(Base64Coder.encode((byte[]) attrValue)) + "</" + attr.getID() + ">" + "\r\n"); sb.append("<"); sb.append(attr.getID()); sb.append(" type=\"binary\" encoding=\"base64\">"); sb.append(new String(Base64Coder.encode((byte[]) attrValue))); sb.append("</"); sb.append(attr.getID()); sb.append(">\r\n");
System.err.println("Attribute " + attr.getID() + "included as " + new String(Base64Coder.encode((byte[]) attrValue))); System.err.println("Attribute " + attr.getID() + "included as " + new String(Base64Coder.encode((byte[]) attrValue)));
} }
else else
{ {
// Assume the attribute value is of type String // Assume the attribute value is of type String
sb.append("<" + attr.getID() + ">" + (String) attrValue + "</" + attr.getID() + ">" + "\r\n"); sb.append("<"); sb.append(attr.getID()); sb.append(">"); sb.append(attrValue); sb.append("</"); sb.append(attr.getID()); sb.append(">\r\n");
} }
} }
} }
@@ -628,10 +653,13 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
* Initialize the token object with an ecoded token string. * Initialize the token object with an ecoded token string.
*
* @param encodedToken Encoded identity token string.
* @throws Exception
*/ */
public void initialize (String encodedToken) throws Exception public final void initialize (String encodedToken) throws Exception
{ {
// Save copy of the token // Save copy of the token
m_token = Base64Coder.decode(encodedToken); m_token = Base64Coder.decode(encodedToken);
@@ -658,13 +686,16 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
* Returns encoded token string. * Returns encoded token string.
* * <p>
* IMPORTANT: The token string can not contain the substring "]]>" * IMPORTANT: The token string can not contain the substring "]]>"
* within it. * within it.
*
* @return Encoded identity token string.
* @throws Exception
*/ */
public String getEncodedToken () throws Exception public final String getEncodedToken () throws Exception
{ {
if (m_token != null) if (m_token != null)
{ {
@@ -677,19 +708,25 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
* Returns a string containing our type of identity token provider. * Returns a string containing our type of identity token provider.
*
* @return Identity token provider type.
* @throws Exception
*/ */
public String getProviderType () throws Exception public final String getProviderType () throws Exception
{ {
// tbd - Change to a GUID // tbd - Change to a GUID
return "CasaIdentityToken"; return "CasaIdentityToken";
} }
/* /**
* Returns a string containing the identity id. * Returns a string containing the identity id.
*
* @return Identity identifier.
* @throws Exception
*/ */
public String getIdentityId () throws Exception public final String getIdentityId () throws Exception
{ {
if (m_identityId != null) if (m_identityId != null)
return m_identityId; return m_identityId;
@@ -700,11 +737,14 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
* Returns a string containing the name associated with the * Returns a string containing the name associated with the
* identity source. * identity source.
*
* @return Name of the authentication realm.
* @throws Exception
*/ */
public String getSourceName () throws Exception public final String getSourceName () throws Exception
{ {
if (m_sourceName != null) if (m_sourceName != null)
return m_sourceName; return m_sourceName;
@@ -715,11 +755,14 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
* Returns a string containing the url associated with the * Returns a string containing the url associated with the
* identity source. * identity source.
*
* @return Url of the identity data source.
* @throws Exception
*/ */
public String getSourceUrl () throws Exception public final String getSourceUrl () throws Exception
{ {
if (m_sourceUrl != null) if (m_sourceUrl != null)
return m_sourceUrl; return m_sourceUrl;
@@ -730,10 +773,13 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
* Returns a string containing the name of the targeted service. * Returns a string containing the name of the targeted service.
*
* @return Name of the targeted service.
* @throws Exception
*/ */
public String getTargetService () throws Exception public final String getTargetService () throws Exception
{ {
if (m_service != null) if (m_service != null)
return m_service; return m_service;
@@ -744,11 +790,14 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
* Returns a string containig the name of the host where the * Returns a string containig the name of the host where the
* targeted service resides. * targeted service resides.
*
* @return Name of the host where the targeted service resides.
* @throws Exception
*/ */
public String getTargetHost () throws Exception public final String getTargetHost () throws Exception
{ {
if (m_host != null) if (m_host != null)
return m_host; return m_host;
@@ -759,10 +808,13 @@ public class CasaIdentityToken implements IdentityToken
} }
} }
/* /**
* Returns the attributes of the identity. * Returns the attributes of the identity.
*
* @return Identity attributes.
* @throws Exception
*/ */
public javax.naming.directory.Attributes getAttributes () throws Exception public final javax.naming.directory.Attributes getAttributes () throws Exception
{ {
if (m_attributes != null) if (m_attributes != null)
return m_attributes; return m_attributes;

View File

@@ -29,18 +29,18 @@ import java.util.*;
/** /**
* EnabledSvcsConfig Class. * EnabledSvcsConfig Class.
* * <p>
* This class obtains and maintains configuration and policy information about * This class obtains and maintains configuration and policy information about
* the services enabled to use Authentication Tokens. * the services enabled to use Authentication Tokens.
* *
*/ */
public class EnabledSvcsConfig public final class EnabledSvcsConfig
{ {
private static final String m_authPolicyFileName = "auth.policy"; private static final String m_authPolicyFileName = "auth.policy";
private static final String m_authTokenSettingsFileName = "authtoken.settings"; private static final String m_authTokenSettingsFileName = "authtoken.settings";
private static final String m_idenTokenSettingsFileName = "identoken.settings"; private static final String m_idenTokenSettingsFileName = "identoken.settings";
private boolean m_enabledSvcsOnly; private final boolean m_enabledSvcsOnly;
// Default auth policy, authtoken, and identtoken configs. // Default auth policy, authtoken, and identtoken configs.
byte[] m_defaultAuthPolicyData = null; byte[] m_defaultAuthPolicyData = null;
@@ -48,23 +48,27 @@ public class EnabledSvcsConfig
IdenTokenConfig m_defaultIdenTokenConfig = null; IdenTokenConfig m_defaultIdenTokenConfig = null;
private Map m_hostsMap; private final Map<String,Map<Object, SvcConfigEntry>> m_hostsMap;
/** /**
* SvcConfigEntry Class. * SvcConfigEntry Class.
* * <p>
* This class is used to maintain the configuration and policy associated with an * This class is used to maintain the configuration and policy associated with an
* enabled service. * enabled service.
* *
*/ */
private class SvcConfigEntry private static final class SvcConfigEntry
{ {
protected byte[] m_authPolicyFileData; protected final byte[] m_authPolicyFileData;
protected AuthTokenConfig m_authTokenConfig; protected final AuthTokenConfig m_authTokenConfig;
protected IdenTokenConfig m_idenTokenConfig; protected final IdenTokenConfig m_idenTokenConfig;
/* /**
* Constructor. * Constructor.
*
* @param authPolicyFileData Authentication policy file data.
* @param authTokenConfig Authentication token configuration object.
* @param idenTokenConfig Identity token configuration object.
*/ */
public SvcConfigEntry(byte[] authPolicyFileData, public SvcConfigEntry(byte[] authPolicyFileData,
AuthTokenConfig authTokenConfig, AuthTokenConfig authTokenConfig,
@@ -76,8 +80,13 @@ public class EnabledSvcsConfig
} }
} }
/* /**
* Constructor. * Constructor.
*
* @param svcConfigPath Path to the service configuration folder.
* @param enabledSvcsOnly True if configured to only provide authentication for
* configured services.
* @throws Exception
*/ */
public EnabledSvcsConfig(String svcConfigPath, public EnabledSvcsConfig(String svcConfigPath,
boolean enabledSvcsOnly) throws Exception boolean enabledSvcsOnly) throws Exception
@@ -88,14 +97,9 @@ public class EnabledSvcsConfig
// Remember the enabledSvcsOnly setting // Remember the enabledSvcsOnly setting
m_enabledSvcsOnly = enabledSvcsOnly; m_enabledSvcsOnly = enabledSvcsOnly;
// Initialize the default auth policy, authtoken, and identtoken configs.
byte[] defaultAuthPolicyData = null;
AuthTokenConfig defaultAuthTokenConfig = null;
IdenTokenConfig defaultIdenTokenConfig = null;
// Create a map to keep track of the enabled services and their configuration // Create a map to keep track of the enabled services and their configuration
// for each configured host. // for each configured host.
m_hostsMap = new HashMap(); m_hostsMap = new HashMap<String, Map<Object, SvcConfigEntry>>();
// Get access to the configuration folder for the service // Get access to the configuration folder for the service
File configFolder = new File(svcConfigPath); File configFolder = new File(svcConfigPath);
@@ -176,7 +180,7 @@ public class EnabledSvcsConfig
if (hostFolderObjs != null) if (hostFolderObjs != null)
{ {
// Create a Map object to hold the service configurations for this host // Create a Map object to hold the service configurations for this host
Map enabledSvcsConfigMap = new HashMap(); Map<Object, SvcConfigEntry> enabledSvcsConfigMap = new HashMap<Object, SvcConfigEntry>();
for (int ii = 0; ii < hostFolderObjs.length; ii++) for (int ii = 0; ii < hostFolderObjs.length; ii++)
{ {
@@ -295,11 +299,15 @@ public class EnabledSvcsConfig
} }
} }
/* /**
* Returns true if the specified service has been enabled to use authentication * Returns true if the specified service has been enabled to use authentication
* tokens. * tokens.
*
* @param hostName Name of host where the service resides.
* @param serviceName Name of the service.
* @return True if the service is enabled.
*/ */
public boolean svcEnabled(String hostName, String serviceName) public final boolean svcEnabled(String hostName, String serviceName)
{ {
// Always return try if m_enabledSvcsOnly is configured "false" else // Always return try if m_enabledSvcsOnly is configured "false" else
// check the enabled svcs configuration. // check the enabled svcs configuration.
@@ -311,7 +319,7 @@ public class EnabledSvcsConfig
{ {
// First try to obtain the Map of enabled services for the host // First try to obtain the Map of enabled services for the host
// tbd - Should we make this case insensitive? // tbd - Should we make this case insensitive?
Map enabledSvcsConfigMap = (Map) m_hostsMap.get(hostName); Map<Object, SvcConfigEntry> enabledSvcsConfigMap = m_hostsMap.get(hostName);
if (enabledSvcsConfigMap != null) if (enabledSvcsConfigMap != null)
{ {
return enabledSvcsConfigMap.containsKey(serviceName); return enabledSvcsConfigMap.containsKey(serviceName);
@@ -323,21 +331,25 @@ public class EnabledSvcsConfig
} }
} }
/* /**
* Returns the data associated with the authentication policy file * Returns the data associated with the authentication policy file
* associated with the specified service. * associated with the specified service.
*
* @param hostName Name of host where the service resides.
* @param serviceName Name of the service.
* @return Authentication policy data for the service.
*/ */
public byte[] getAuthPolicyFileDataForSvc(String hostName, String serviceName) public final byte[] getAuthPolicyFileDataForSvc(String hostName, String serviceName)
{ {
byte[] authPolicyData = null; byte[] authPolicyData = null;
// First try to obtain the Map of enabled services for the host // First try to obtain the Map of enabled services for the host
// tbd - Should we make this case insensitive? // tbd - Should we make this case insensitive?
Map enabledSvcsConfigMap = (Map) m_hostsMap.get(hostName); Map<Object, SvcConfigEntry> enabledSvcsConfigMap = m_hostsMap.get(hostName);
if (enabledSvcsConfigMap != null) if (enabledSvcsConfigMap != null)
{ {
// Retrieve SvcConfigEntry for the service from the map for the host // Retrieve SvcConfigEntry for the service from the map for the host
SvcConfigEntry svcConfigEntry = (SvcConfigEntry) enabledSvcsConfigMap.get(serviceName); SvcConfigEntry svcConfigEntry = enabledSvcsConfigMap.get(serviceName);
if (svcConfigEntry != null) if (svcConfigEntry != null)
{ {
authPolicyData = svcConfigEntry.m_authPolicyFileData; authPolicyData = svcConfigEntry.m_authPolicyFileData;
@@ -356,21 +368,25 @@ public class EnabledSvcsConfig
return authPolicyData; return authPolicyData;
} }
/* /**
* Returns the authentication token configuration associated with the * Returns the authentication token configuration associated with the
* specified service. * specified service.
*
* @param hostName Name of host where the service resides.
* @param serviceName Name of the service.
* @return Authentication token configuration object for the service.
*/ */
public AuthTokenConfig getAuthTokenConfig(String hostName, String serviceName) public final AuthTokenConfig getAuthTokenConfig(String hostName, String serviceName)
{ {
AuthTokenConfig authTokenConfig = null; AuthTokenConfig authTokenConfig = null;
// First try to obtain the Map of enabled services for the host // First try to obtain the Map of enabled services for the host
// tbd - Should we make this case insensitive? // tbd - Should we make this case insensitive?
Map enabledSvcsConfigMap = (Map) m_hostsMap.get(hostName); Map<Object, SvcConfigEntry> enabledSvcsConfigMap = m_hostsMap.get(hostName);
if (enabledSvcsConfigMap != null) if (enabledSvcsConfigMap != null)
{ {
// Retrieve SvcConfigEntry for the service from the map for the host // Retrieve SvcConfigEntry for the service from the map for the host
SvcConfigEntry svcConfigEntry = (SvcConfigEntry) enabledSvcsConfigMap.get(serviceName); SvcConfigEntry svcConfigEntry = enabledSvcsConfigMap.get(serviceName);
if (svcConfigEntry != null) if (svcConfigEntry != null)
{ {
authTokenConfig = svcConfigEntry.m_authTokenConfig; authTokenConfig = svcConfigEntry.m_authTokenConfig;
@@ -388,21 +404,25 @@ public class EnabledSvcsConfig
return authTokenConfig; return authTokenConfig;
} }
/* /**
* Returns the identity token configuration associated with the * Returns the identity token configuration associated with the
* specified service. * specified service.
*
* @param hostName Name of host where the service resides.
* @param serviceName Name of the service.
* @return Identity token configuration object for the specified service.
*/ */
public IdenTokenConfig getIdenTokenConfig(String hostName, String serviceName) public final IdenTokenConfig getIdenTokenConfig(String hostName, String serviceName)
{ {
IdenTokenConfig idenTokenConfig = null; IdenTokenConfig idenTokenConfig = null;
// First try to obtain the Map of enabled services for the host // First try to obtain the Map of enabled services for the host
// tbd - Should we make this case insensitive? // tbd - Should we make this case insensitive?
Map enabledSvcsConfigMap = (Map) m_hostsMap.get(hostName); Map<Object, SvcConfigEntry> enabledSvcsConfigMap = m_hostsMap.get(hostName);
if (enabledSvcsConfigMap != null) if (enabledSvcsConfigMap != null)
{ {
// Retrieve SvcConfigEntry for the service from the map for the host // Retrieve SvcConfigEntry for the service from the map for the host
SvcConfigEntry svcConfigEntry = (SvcConfigEntry) enabledSvcsConfigMap.get(serviceName); SvcConfigEntry svcConfigEntry = enabledSvcsConfigMap.get(serviceName);
if (svcConfigEntry != null) if (svcConfigEntry != null)
{ {
idenTokenConfig = svcConfigEntry.m_idenTokenConfig; idenTokenConfig = svcConfigEntry.m_idenTokenConfig;

View File

@@ -26,30 +26,33 @@ package com.novell.casa.authtoksvc;
import java.io.*; import java.io.*;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.*;
/** /**
* GetAuthPolicy Class. * GetAuthPolicy Class.
* * <p>
* This class processes get authentication policy requests for a particular * This class processes get authentication policy requests for a particular
* service. * service.
* *
*/ */
public class GetAuthPolicy implements RpcMethod public final class GetAuthPolicy implements RpcMethod
{ {
private SvcConfig m_svcConfig; private SvcConfig m_svcConfig;
private EnabledSvcsConfig m_enabledSvcsConfig; private EnabledSvcsConfig m_enabledSvcsConfig;
/* /**
* Constructor. * Constructor.
*/ */
public GetAuthPolicy() throws Exception public GetAuthPolicy()
{ {
// Nothing to do at this time // Nothing to do at this time
} }
/* /**
* Initialize the Rpc method. * Initialize the Rpc method.
*
* @param svcConfig Service configuration object.
* @param enabledSvcsConfig Enabled services configuration object.
* @throws Exception
*/ */
public void init(SvcConfig svcConfig, EnabledSvcsConfig enabledSvcsConfig) throws Exception public void init(SvcConfig svcConfig, EnabledSvcsConfig enabledSvcsConfig) throws Exception
{ {
@@ -57,8 +60,12 @@ public class GetAuthPolicy implements RpcMethod
m_enabledSvcsConfig = enabledSvcsConfig; m_enabledSvcsConfig = enabledSvcsConfig;
} }
/* /**
* Process Rpc. * Process Rpc.
*
* @param inStream Input stream with request.
* @param out Ouput print writer for reply.
* @throws IOException
*/ */
public void invoke(InputStream inStream, PrintWriter out) throws IOException public void invoke(InputStream inStream, PrintWriter out) throws IOException
{ {
@@ -122,8 +129,10 @@ public class GetAuthPolicy implements RpcMethod
} }
} }
/* /**
* Return the method id. * Return the method id.
*
* @return Method id.
*/ */
public String getId() public String getId()
{ {

View File

@@ -33,19 +33,19 @@ import org.xml.sax.helpers.XMLReaderFactory;
/** /**
* GetAuthPolicyReqMsg Class. * GetAuthPolicyReqMsg Class.
* * <p>
* This class deals with the message sent by Casa Client when requesting * This class deals with the message sent by Casa Client when requesting
* authenication policy to authenticate an entity to a particular service. * authenication policy to authenticate an entity to a particular service.
* The format of the the message is as follows: * The format of the the message is as follows:
* * <p>
* <?xml version="1.0" encoding="ISO-8859-1"?> * <?xml version="1.0" encoding="UTF-8"?>
* <get_auth_policy_req> * <get_auth_policy_req>
* <service>service name</service> * <service>service name</service>
* <host>host name</host> * <host>host name</host>
* </get_auth_policy_req> * </get_auth_policy_req>
* *
*/ */
public class GetAuthPolicyReqMsg public final class GetAuthPolicyReqMsg
{ {
protected String m_serviceName = null; protected String m_serviceName = null;
@@ -54,7 +54,7 @@ public class GetAuthPolicyReqMsg
/* /*
* Class for handling GetAuthPolicyReq msg parsing events. * Class for handling GetAuthPolicyReq msg parsing events.
*/ */
private class SAXHandler extends org.xml.sax.helpers.DefaultHandler private final class SAXHandler extends org.xml.sax.helpers.DefaultHandler
{ {
private final static int AWAITING_ROOT_ELEMENT_START = 0; private final static int AWAITING_ROOT_ELEMENT_START = 0;
private final static int AWAITING_ROOT_ELEMENT_END = 1; private final static int AWAITING_ROOT_ELEMENT_END = 1;
@@ -66,25 +66,29 @@ public class GetAuthPolicyReqMsg
private final static int AWAITING_HOST_DATA = 7; private final static int AWAITING_HOST_DATA = 7;
private final static int DONE_PARSING = 8; private final static int DONE_PARSING = 8;
private GetAuthPolicyReqMsg m_GetAuthPolicyReqMsg; private final GetAuthPolicyReqMsg m_GetAuthPolicyReqMsg;
private int m_state; private int m_state;
/* /**
* Constructor * Constructor.
*
* @param getAuthPolicyReqMsg Get authentication policy request message object.
*/ */
public SAXHandler (GetAuthPolicyReqMsg GetAuthPolicyReqMsg) public SAXHandler (GetAuthPolicyReqMsg getAuthPolicyReqMsg)
{ {
super(); super();
// Initialize our members // Initialize our members
m_GetAuthPolicyReqMsg = GetAuthPolicyReqMsg; m_GetAuthPolicyReqMsg = getAuthPolicyReqMsg;
m_state = AWAITING_ROOT_ELEMENT_START; m_state = AWAITING_ROOT_ELEMENT_START;
} }
/* /**
* endDocument() implementation. * endDocument() implementation.
*
* @throws SAXException
*/ */
public void endDocument () throws SAXException public final void endDocument () throws SAXException
{ {
// Verify that we obtained all of the required elements // Verify that we obtained all of the required elements
if (m_state != DONE_PARSING) if (m_state != DONE_PARSING)
@@ -96,8 +100,14 @@ public class GetAuthPolicyReqMsg
/* /*
* startElement() implementation. * startElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @param atts Attributes.
* @throws SAXException
*/ */
public void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException public final void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -151,10 +161,15 @@ public class GetAuthPolicyReqMsg
} }
} }
/* /**
* endElement() immplementation. * endElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @throws SAXException
*/ */
public void endElement (String uri, String name, String qName) throws SAXException public final void endElement (String uri, String name, String qName) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -207,10 +222,15 @@ public class GetAuthPolicyReqMsg
} }
} }
/* /**
* character() implementation. * character() implementation.
*
* @param ch Characters with element data.
* @param start Start position in the character array.
* @param length Number of characters to use in the array.
* @throws SAXException
*/ */
public void characters (char ch[], int start, int length) throws SAXException public final void characters (char ch[], int start, int length) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -248,8 +268,11 @@ public class GetAuthPolicyReqMsg
} }
} }
/* /**
* Constructor * Constructor.
*
* @param inStream Input stream with get authentication policy request message.
* @throws Exception
*/ */
public GetAuthPolicyReqMsg (InputStream inStream) throws Exception public GetAuthPolicyReqMsg (InputStream inStream) throws Exception
{ {
@@ -271,18 +294,22 @@ public class GetAuthPolicyReqMsg
} }
} }
/* /**
* Method to get the service name. * Method to get the service name.
*
* @return Service name.
*/ */
public String getServiceName() throws Exception public String getServiceName()
{ {
return m_serviceName; return m_serviceName;
} }
/* /**
* Method to get the host name. * Method to get the host name.
*
* @return Host name.
*/ */
public String getHostName() throws Exception public String getHostName()
{ {
return m_hostName; return m_hostName;
} }

View File

@@ -26,83 +26,90 @@ package com.novell.casa.authtoksvc;
/** /**
* GetAuthPolicyRespMsg Class. * GetAuthPolicyRespMsg Class.
* * <p>
* This class deals with the message sent to the Casa Client as a * This class deals with the message sent to the Casa Client as a
* response to a get authentication token request. The format of * response to a get authentication token request. The format of
* the message is as follows when the response includes an * the message is as follows when the response includes an
* authentication token: * authentication token:
* * <p>
* <?xml version="1.0" encoding="ISO-8859-1"?> * <?xml version="1.0" encoding="UTF-8"?>
* <get_auth_policy_resp> * <get_auth_policy_resp>
* <status><description>OK</description>200</status> * <status><description>OK</description>200</status>
* <auth_policy>authentication policy data</auth_policy> * <auth_policy>authentication policy data</auth_policy>
* </get_auth_policy_resp> * </get_auth_policy_resp>
* * <p>
* The format of the message is as follows when the response does not * The format of the message is as follows when the response does not
* include an authentication token. * include an authentication token.
* * <p>
* <?xml version="1.0" encoding="ISO-8859-1"?> * <?xml version="1.0" encoding="UTF-8"?>
* <get_auth_policy_resp> * <get_auth_policy_resp>
* <status><description>status description</description>status code</status> * <status><description>status description</description>status code</status>
* </get_auth_policy_resp> * </get_auth_policy_resp>
* * <p>
* Plase note that the protocol utilizes the status codes defined * Plase note that the protocol utilizes the status codes defined
* in the HTTP 1.1 Specification. * in the HTTP 1.1 Specification.
* *
*/ */
public class GetAuthPolicyRespMsg public final class GetAuthPolicyRespMsg
{ {
String m_msg; final String m_msg;
/* /**
* Constructor for a msg that does not include the authentication policy. * Constructor for a msg that does not include the authentication policy.
*
* @param statusDescription Status code description.
* @param statusCode Status code.
*/ */
public GetAuthPolicyRespMsg ( public GetAuthPolicyRespMsg (String statusDescription,
String statusDescription, String statusCode)
String statusCode) throws Exception
{ {
// Get a StringBuffer to help us with the construction of the message // Get a StringBuffer to help us with the construction of the message
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
// Start building the message // Start building the message
sb.append(ProtoDefs.xmlDeclaration + "\r\n"); sb.append(ProtoDefs.xmlDeclaration); sb.append("\r\n");
sb.append("<" + ProtoDefs.getAuthPolicyResponseElementName + ">" + "\r\n"); sb.append("<"); sb.append(ProtoDefs.getAuthPolicyResponseElementName); sb.append(">\r\n");
sb.append("<" + ProtoDefs.statusElementName + ">" sb.append("<"); sb.append(ProtoDefs.statusElementName); sb.append(">");
+ "<" + ProtoDefs.descriptionElementName + ">" + statusDescription + "</" + ProtoDefs.descriptionElementName + ">" sb.append("<"); sb.append(ProtoDefs.descriptionElementName); sb.append(">"); sb.append(statusDescription); sb.append("</"); sb.append(ProtoDefs.descriptionElementName); sb.append(">");
+ statusCode + "</" + ProtoDefs.statusElementName + ">" + "\r\n"); sb.append(statusCode); sb.append("</"); sb.append(ProtoDefs.statusElementName); sb.append(">\r\n");
sb.append("</" + ProtoDefs.getAuthPolicyResponseElementName + ">" + "\r\n"); sb.append("</"); sb.append(ProtoDefs.getAuthPolicyResponseElementName); sb.append(">\r\n");
// The message has now been built, save it. // The message has now been built, save it.
m_msg = sb.toString(); m_msg = sb.toString();
} }
/* /**
* Constructor for a msg that includes the authentication policy. * Constructor for a msg that includes the authentication policy.
*
* @param statusDescription Status code description.
* @param statusCode Status code.
* @param authPolicy Authentication policy data.
*/ */
public GetAuthPolicyRespMsg ( public GetAuthPolicyRespMsg (String statusDescription,
String statusDescription, String statusCode,
String statusCode, String authPolicy)
String authPolicy) throws Exception
{ {
// Get a StringBuffer to help us with the construction of the message // Get a StringBuffer to help us with the construction of the message
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
// Start building the message // Start building the message
sb.append(ProtoDefs.xmlDeclaration + "\r\n"); sb.append(ProtoDefs.xmlDeclaration); sb.append("\r\n");
sb.append("<" + ProtoDefs.getAuthPolicyResponseElementName + ">" + "\r\n"); sb.append("<"); sb.append(ProtoDefs.getAuthPolicyResponseElementName); sb.append(">\r\n");
sb.append("<" + ProtoDefs.statusElementName + ">" sb.append("<"); sb.append(ProtoDefs.statusElementName); sb.append(">");
+ "<" + ProtoDefs.descriptionElementName + ">" + ProtoDefs.httpOkStatusMsg + "</" + ProtoDefs.descriptionElementName + ">" sb.append("<"); sb.append(ProtoDefs.descriptionElementName); sb.append(">"); sb.append(ProtoDefs.httpOkStatusMsg); sb.append("</"); sb.append(ProtoDefs.descriptionElementName); sb.append(">");
+ ProtoDefs.httpOkStatusCode + "</" + ProtoDefs.statusElementName + ">" + "\r\n"); sb.append(ProtoDefs.httpOkStatusCode); sb.append("</"); sb.append(ProtoDefs.statusElementName); sb.append(">\r\n");
sb.append("<" + ProtoDefs.authPolicyElementName + ">" + authPolicy + "</" + ProtoDefs.authPolicyElementName + ">" + "\r\n"); sb.append("<"); sb.append(ProtoDefs.authPolicyElementName); sb.append(">"); sb.append(authPolicy); sb.append("</"); sb.append(ProtoDefs.authPolicyElementName); sb.append(">\r\n");
sb.append("</" + ProtoDefs.getAuthPolicyResponseElementName + ">" + "\r\n"); sb.append("</"); sb.append(ProtoDefs.getAuthPolicyResponseElementName); sb.append(">\r\n");
// The message has now been built, save it. // The message has now been built, save it.
m_msg = sb.toString(); m_msg = sb.toString();
} }
/* /**
* Returns a string containing the GetAuthPolicyRespMsg. * Returns a string containing the GetAuthPolicyRespMsg.
*
* @return Get authentication policy response message string.
*/ */
public String toString() public String toString()
{ {

View File

@@ -33,30 +33,30 @@ import org.xml.sax.helpers.XMLReaderFactory;
/** /**
* GetAuthTokReqMsg Class. * GetAuthTokReqMsg Class.
* * <p>
* This class deals with the message sent by Casa Client when requesting * This class deals with the message sent by Casa Client when requesting
* a token to authenticate an entity to a particular service. The format of * a token to authenticate an entity to a particular service. The format of
* the message is as follows: * the message is as follows:
* * <p>
* <?xml version="1.0" encoding="ISO-8859-1"?> * <?xml version="1.0" encoding="UTF-8"?>
* <get_auth_token_req> * <get_auth_token_req>
* <service>service name</service> * <service>service name</service>
* <host>host name</host> * <host>host name</host>
* <session_token>session token data</session_token> * <session_token>session token data</session_token>
* </get_auth_token_req> * </get_auth_token_req>
* * <p>
*/ */
public class GetAuthTokReqMsg public final class GetAuthTokReqMsg
{ {
protected String m_serviceName = null; protected String m_serviceName = null;
protected String m_hostName = null; protected String m_hostName = null;
protected String m_sessionToken = null; protected String m_sessionToken = null;
/* /**
* Class for handling GetAuthTokReq msg parsing events. * Class for handling GetAuthTokReq msg parsing events.
*/ */
private class SAXHandler extends org.xml.sax.helpers.DefaultHandler private final class SAXHandler extends org.xml.sax.helpers.DefaultHandler
{ {
private final static int AWAITING_ROOT_ELEMENT_START = 0; private final static int AWAITING_ROOT_ELEMENT_START = 0;
private final static int AWAITING_ROOT_ELEMENT_END = 1; private final static int AWAITING_ROOT_ELEMENT_END = 1;
@@ -71,25 +71,29 @@ public class GetAuthTokReqMsg
private final static int AWAITING_SESSION_TOKEN_DATA = 10; private final static int AWAITING_SESSION_TOKEN_DATA = 10;
private final static int DONE_PARSING = 11; private final static int DONE_PARSING = 11;
private GetAuthTokReqMsg m_GetAuthTokReqMsg; private final GetAuthTokReqMsg m_GetAuthTokReqMsg;
private int m_state; private int m_state;
/* /**
* Constructor * Constructor.
*
* @param getAuthTokReqMsg Get authentication token request message object.
*/ */
public SAXHandler (GetAuthTokReqMsg GetAuthTokReqMsg) public SAXHandler (GetAuthTokReqMsg getAuthTokReqMsg)
{ {
super(); super();
// Initialize our members // Initialize our members
m_GetAuthTokReqMsg = GetAuthTokReqMsg; m_GetAuthTokReqMsg = getAuthTokReqMsg;
m_state = AWAITING_ROOT_ELEMENT_START; m_state = AWAITING_ROOT_ELEMENT_START;
} }
/* /**
* endDocument() implementation. * endDocument() implementation.
*
* @throws SAXException
*/ */
public void endDocument () throws SAXException public final void endDocument () throws SAXException
{ {
// Verify that we obtained all of the required elements // Verify that we obtained all of the required elements
if (m_state != DONE_PARSING) if (m_state != DONE_PARSING)
@@ -99,10 +103,16 @@ public class GetAuthTokReqMsg
} }
} }
/* /**
* startElement() implementation. * startElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @param atts Attributes.
* @throws SAXException
*/ */
public void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException public final void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -170,10 +180,15 @@ public class GetAuthTokReqMsg
} }
} }
/* /**
* endElement() immplementation. * endElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @throws SAXException
*/ */
public void endElement (String uri, String name, String qName) throws SAXException public final void endElement (String uri, String name, String qName) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -240,10 +255,15 @@ public class GetAuthTokReqMsg
} }
} }
/* /**
* character() implementation. * character() implementation.
*
* @param ch Characters with element data.
* @param start Start position in the character array.
* @param length Number of characters to use in the array.
* @throws SAXException
*/ */
public void characters (char ch[], int start, int length) throws SAXException public final void characters (char ch[], int start, int length) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -294,8 +314,11 @@ public class GetAuthTokReqMsg
} }
} }
/* /**
* Constructor * Constructor.
*
* @param inStream Input stream with get authentication token request message.
* @throws Exception
*/ */
public GetAuthTokReqMsg (InputStream inStream) throws Exception public GetAuthTokReqMsg (InputStream inStream) throws Exception
{ {
@@ -317,26 +340,32 @@ public class GetAuthTokReqMsg
} }
} }
/* /**
* Method to get the service name. * Method to get the service name.
*
* @return Service name.
*/ */
public String getServiceName() throws Exception public String getServiceName()
{ {
return m_serviceName; return m_serviceName;
} }
/* /**
* Method to get the host name. * Method to get the host name.
*
* @return Host name.
*/ */
public String getHostName() throws Exception public String getHostName()
{ {
return m_hostName; return m_hostName;
} }
/* /**
* Method to get the session token. * Method to get the session token.
*
* @return Session token string.
*/ */
public String getSessionToken() throws Exception public String getSessionToken()
{ {
return m_sessionToken; return m_sessionToken;
} }

View File

@@ -26,86 +26,94 @@ package com.novell.casa.authtoksvc;
/** /**
* GetAuthTokRespMsg Class. * GetAuthTokRespMsg Class.
* * <p>
* This class deals with the message sent to the Casa Client as a * This class deals with the message sent to the Casa Client as a
* response to a get authentication token request. The format of * response to a get authentication token request. The format of
* the message is as follows when the response includes an * the message is as follows when the response includes an
* authentication token: * authentication token:
* * <p>
* <?xml version="1.0" encoding="ISO-8859-1"?> * <?xml version="1.0" encoding="UTF-8"?>
* <get_auth_tok_resp> * <get_auth_tok_resp>
* <status><description>OK</description>200</status> * <status><description>OK</description>200</status>
* <auth_token><lifetime>lifetime value</lifetime>authentication token data</auth_token> * <auth_token><lifetime>lifetime value</lifetime>authentication token data</auth_token>
* </get_auth_tok_resp> * </get_auth_tok_resp>
* * <p>
* The format of the message is as follows when the response does not * The format of the message is as follows when the response does not
* include an authentication token. * include an authentication token.
* * <p>
* <?xml version="1.0" encoding="ISO-8859-1"?> * <?xml version="1.0" encoding="UTF-8"?>
* <get_auth_tok_resp> * <get_auth_tok_resp>
* <status><description>status description</description>status code</status> * <status><description>status description</description>status code</status>
* </get_auth_tok_resp> * </get_auth_tok_resp>
* * <p>
* Plase note that the protocol utilizes the status codes defined * Plase note that the protocol utilizes the status codes defined
* in the HTTP 1.1 Specification. * in the HTTP 1.1 Specification.
* *
*/ */
public class GetAuthTokRespMsg public final class GetAuthTokRespMsg
{ {
String m_msg; final String m_msg;
/* /**
* Constructor for a msg that does not include the authentication token. * Constructor for a msg that does not include the authentication token.
*
* @param statusDescription Status code description.
* @param statusCode Status code.
*/ */
public GetAuthTokRespMsg ( public GetAuthTokRespMsg (String statusDescription,
String statusDescription, String statusCode)
String statusCode) throws Exception
{ {
// Get a StringBuffer to help us with the construction of the message // Get a StringBuffer to help us with the construction of the message
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
// Start building the message // Start building the message
sb.append(ProtoDefs.xmlDeclaration + "\r\n"); sb.append(ProtoDefs.xmlDeclaration); sb.append("\r\n");
sb.append("<" + ProtoDefs.getAuthTokResponseElementName + ">" + "\r\n"); sb.append("<"); sb.append(ProtoDefs.getAuthTokResponseElementName); sb.append(">\r\n");
sb.append("<" + ProtoDefs.statusElementName + ">" sb.append("<"); sb.append(ProtoDefs.statusElementName); sb.append(">");
+ "<" + ProtoDefs.descriptionElementName + ">" + statusDescription + "</" + ProtoDefs.descriptionElementName + ">" sb.append("<"); sb.append(ProtoDefs.descriptionElementName); sb.append(">"); sb.append(statusDescription); sb.append("</"); sb.append(ProtoDefs.descriptionElementName); sb.append(">");
+ statusCode + "</" + ProtoDefs.statusElementName + ">" + "\r\n"); sb.append(statusCode); sb.append("</"); sb.append(ProtoDefs.statusElementName); sb.append(">\r\n");
sb.append("</" + ProtoDefs.getAuthTokResponseElementName + ">" + "\r\n"); sb.append("</"); sb.append(ProtoDefs.getAuthTokResponseElementName); sb.append(">\r\n");
// The message has now been built, save it. // The message has now been built, save it.
m_msg = sb.toString(); m_msg = sb.toString();
} }
/* /**
* Constructor for a msg that includes the authentication token. * Constructor for a msg that includes the authentication token.
*
* @param statusDescription Status code description.
* @param statusCode Status code.
* @param authToken Authentication token string.
* @param authTokenLifetime Authentication token lifetime.
*/ */
public GetAuthTokRespMsg ( public GetAuthTokRespMsg (String statusDescription,
String statusDescription, String statusCode,
String statusCode, String authToken,
String authToken, String authTokenLifetime)
String authTokenLifetime) throws Exception
{ {
// Get a StringBuffer to help us with the construction of the message // Get a StringBuffer to help us with the construction of the message
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
// Start building the message // Start building the message
sb.append(ProtoDefs.xmlDeclaration + "\r\n"); sb.append(ProtoDefs.xmlDeclaration); sb.append("\r\n");
sb.append("<" + ProtoDefs.getAuthTokResponseElementName + ">" + "\r\n"); sb.append("<"); sb.append(ProtoDefs.getAuthTokResponseElementName); sb.append(">\r\n");
sb.append("<" + ProtoDefs.statusElementName + ">" sb.append("<"); sb.append(ProtoDefs.statusElementName); sb.append(">");
+ "<" + ProtoDefs.descriptionElementName + ">" + ProtoDefs.httpOkStatusMsg + "</" + ProtoDefs.descriptionElementName + ">" sb.append("<"); sb.append(ProtoDefs.descriptionElementName); sb.append(">"); sb.append(ProtoDefs.httpOkStatusMsg); sb.append("</"); sb.append(ProtoDefs.descriptionElementName); sb.append(">");
+ ProtoDefs.httpOkStatusCode + "</" + ProtoDefs.statusElementName + ">" + "\r\n"); sb.append(ProtoDefs.httpOkStatusCode); sb.append("</"); sb.append(ProtoDefs.statusElementName); sb.append(">\r\n");
sb.append("<" + ProtoDefs.authTokenElementName + ">" sb.append("<"); sb.append(ProtoDefs.authTokenElementName); sb.append(">");
+ "<" + ProtoDefs.lifetimeElementName + ">" + authTokenLifetime + "</" + ProtoDefs.lifetimeElementName + ">" sb.append("<"); sb.append(ProtoDefs.lifetimeElementName); sb.append(">"); sb.append(authTokenLifetime); sb.append("</"); sb.append(ProtoDefs.lifetimeElementName); sb.append(">");
+ authToken + "</" + ProtoDefs.authTokenElementName + ">" + "\r\n"); sb.append(authToken); sb.append("</"); sb.append(ProtoDefs.authTokenElementName); sb.append(">\r\n");
sb.append("</" + ProtoDefs.getAuthTokResponseElementName + ">" + "\r\n"); sb.append("</"); sb.append(ProtoDefs.getAuthTokResponseElementName); sb.append(">\r\n");
// The message has now been built, save it. // The message has now been built, save it.
m_msg = sb.toString(); m_msg = sb.toString();
} }
/* /**
* Returns a string containing the GetAuthTokRespMsg. * Returns a string containing the GetAuthTokRespMsg.
*
* @return Get authentication token response message string.
*/ */
public String toString() public String toString()
{ {

View File

@@ -30,37 +30,45 @@ import java.io.PrintWriter;
/** /**
* GetAuthToken Class. * GetAuthToken Class.
* * <p>
* This class processes requests for tokens to authenticate an entity * This class processes requests for tokens to authenticate an entity
* to a particular service. * to a particular service.
* *
*/ */
public class GetAuthToken implements RpcMethod public final class GetAuthToken implements RpcMethod
{ {
private SvcConfig m_svcConfig; private SvcConfig m_svcConfig;
private EnabledSvcsConfig m_enabledSvcsConfig; private EnabledSvcsConfig m_enabledSvcsConfig;
/* /**
* Constructor. * Constructor.
*/ */
public GetAuthToken() throws Exception public GetAuthToken()
{ {
// Nothing to do at this time // Nothing to do at this time
} }
/* /**
* Initialize the Rpc method. * Initialize the Rpc method.
*
* @param svcConfig Service configuration object.
* @param enabledSvcsConfig Enabled services configuration object.
* @throws Exception
*/ */
public void init(SvcConfig svcConfig, EnabledSvcsConfig enabledSvcsConfig) throws Exception public final void init(SvcConfig svcConfig, EnabledSvcsConfig enabledSvcsConfig) throws Exception
{ {
m_svcConfig = svcConfig; m_svcConfig = svcConfig;
m_enabledSvcsConfig = enabledSvcsConfig; m_enabledSvcsConfig = enabledSvcsConfig;
} }
/* /**
* Process Rpc. * Process Rpc.
*
* @param inStream Input stream with request.
* @param out Ouput print writer for reply.
* @throws IOException
*/ */
public void invoke(InputStream inStream, PrintWriter out) throws IOException public final void invoke(InputStream inStream, PrintWriter out) throws IOException
{ {
try try
{ {
@@ -136,10 +144,12 @@ public class GetAuthToken implements RpcMethod
} }
} }
/* /**
* Return the method id. * Return the method id.
*
* @return Method id.
*/ */
public String getId() public final String getId()
{ {
return "GetAuthToken"; return "GetAuthToken";
} }

View File

@@ -34,27 +34,27 @@ import org.xml.sax.helpers.XMLReaderFactory;
/** /**
* IdenTokenConfig Class. * IdenTokenConfig Class.
* * <p>
* This class obtains and maintains identity token configuration. * This class obtains and maintains identity token configuration.
* *
*/ */
public class IdenTokenConfig public final class IdenTokenConfig
{ {
// Well known identity token configuration settings // Well known identity token configuration settings
public final static String EncryptAttributes = "EncryptAttributes"; public final static String EncryptAttributes = "EncryptAttributes";
public final static String Attributes = "Attributes"; public final static String Attributes = "Attributes";
// Default configuration values // Default configuration values
private String m_defaultEncryptAttributesValue = "false"; private final String m_defaultEncryptAttributesValue = "false";
private String m_defaultAttributesValue = "sn"; private final String m_defaultAttributesValue = "sn";
private Map m_tokenSettingsMap; private final Map<String,String> m_tokenSettingsMap;
private String[] m_identityAttributes; private String[] m_identityAttributes;
/* /**
* Class for handling parsing events. * Class for handling parsing events.
*/ */
private class SAXHandler extends org.xml.sax.helpers.DefaultHandler private static final class SAXHandler extends org.xml.sax.helpers.DefaultHandler
{ {
private final static int AWAITING_ROOT_ELEMENT_START = 0; private final static int AWAITING_ROOT_ELEMENT_START = 0;
private final static int AWAITING_SETTING_ELEMENT_START = 1; private final static int AWAITING_SETTING_ELEMENT_START = 1;
@@ -64,14 +64,16 @@ public class IdenTokenConfig
private final static String m_rootElementName = "settings"; private final static String m_rootElementName = "settings";
private Map m_keyMap; private final Map<String,String> m_keyMap;
private int m_state; private int m_state;
private String m_currentKey; private String m_currentKey;
/* /**
* Constructor * Constructor.
*
* @param keyMap Key/Value map.
*/ */
public SAXHandler(Map keyMap) public SAXHandler(Map<String,String> keyMap)
{ {
super(); super();
@@ -80,10 +82,12 @@ public class IdenTokenConfig
m_state = AWAITING_ROOT_ELEMENT_START; m_state = AWAITING_ROOT_ELEMENT_START;
} }
/* /**
* endDocument() implementation. * endDocument() implementation.
*
* @throws SAXException
*/ */
public void endDocument () throws SAXException public final void endDocument () throws SAXException
{ {
// Verify that we are not in an invalid state // Verify that we are not in an invalid state
if (m_state != DONE_PARSING) if (m_state != DONE_PARSING)
@@ -93,10 +97,16 @@ public class IdenTokenConfig
} }
} }
/* /**
* startElement() implementation. * startElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @param atts Attributes.
* @throws SAXException
*/ */
public void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException public final void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -129,10 +139,15 @@ public class IdenTokenConfig
} }
} }
/* /**
* endElement() immplementation. * endElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @throws SAXException
*/ */
public void endElement (String uri, String name, String qName) throws SAXException public final void endElement (String uri, String name, String qName) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -163,10 +178,15 @@ public class IdenTokenConfig
} }
} }
/* /**
* character() implementation. * character() implementation.
*
* @param ch Characters with element data.
* @param start Start position in the character array.
* @param length Number of characters to use in the array.
* @throws SAXException
*/ */
public void characters (char ch[], int start, int length) throws SAXException public final void characters (char ch[], int start, int length) throws SAXException
{ {
// Consume the data if in the right state // Consume the data if in the right state
if (m_state == AWAITING_SETTING_ELEMENT_DATA) if (m_state == AWAITING_SETTING_ELEMENT_DATA)
@@ -181,29 +201,32 @@ public class IdenTokenConfig
} }
} }
/* /**
* Constructor which sets default configuration values. * Constructor which sets default configuration values.
*/ */
public IdenTokenConfig() throws Exception public IdenTokenConfig()
{ {
System.err.println("IdenTokenConfig()- Default"); System.err.println("IdenTokenConfig()- Default");
// Create a map to keep track of the token settings // Create a map to keep track of the token settings
m_tokenSettingsMap = new HashMap(); m_tokenSettingsMap = new HashMap<String, String>();
// Set the default settings in our map // Set the default settings in our map
m_tokenSettingsMap.put(Attributes, m_defaultAttributesValue); m_tokenSettingsMap.put(Attributes, m_defaultAttributesValue);
} }
/* /**
* Constructor. * Constructor.
*
* @param idenTokenSettingsFileName Name of identity token settings file.
* @throws Exception
*/ */
public IdenTokenConfig(String idenTokenSettingsFileName) throws Exception public IdenTokenConfig(String idenTokenSettingsFileName) throws Exception
{ {
System.err.println("IdenTokenConfig()-"); System.err.println("IdenTokenConfig()-");
// Create a map to keep track of the token settings // Create a map to keep track of the token settings
m_tokenSettingsMap = new HashMap(); m_tokenSettingsMap = new HashMap<String, String>();
try try
{ {
@@ -228,7 +251,7 @@ public class IdenTokenConfig
System.err.println("IdenTokenConfig()- Attributes not configured, defaulting them."); System.err.println("IdenTokenConfig()- Attributes not configured, defaulting them.");
m_tokenSettingsMap.put(Attributes, m_defaultAttributesValue); m_tokenSettingsMap.put(Attributes, m_defaultAttributesValue);
} }
String attributes = (String) m_tokenSettingsMap.get(Attributes); String attributes = m_tokenSettingsMap.get(Attributes);
m_identityAttributes = attributes.split(","); m_identityAttributes = attributes.split(",");
} }
catch (SAXException e) catch (SAXException e)
@@ -253,13 +276,16 @@ public class IdenTokenConfig
} }
} }
/* /**
* Returns the value associated with the specified setting. * Returns the value associated with the specified setting.
*
* @param settingName Name of the setting.
* @return Value of the specified setting.
*/ */
public String getSetting(String settingName) throws Exception public final String getSetting(String settingName)
{ {
// Try to find the setting in our map // Try to find the setting in our map
String value = (String) m_tokenSettingsMap.get(settingName); String value = m_tokenSettingsMap.get(settingName);
if (value == null) if (value == null)
{ {
System.err.println("IdenTokenConfig.getSetting()- Did not find setting " + settingName); System.err.println("IdenTokenConfig.getSetting()- Did not find setting " + settingName);
@@ -284,10 +310,12 @@ public class IdenTokenConfig
return value; return value;
} }
/* /**
* Returns the identity attributes that must be included in the token. * Returns the identity attributes that must be included in the token.
*
* @return Identity Attributes.
*/ */
public String[] getAttributes() throws Exception public final String[] getAttributes()
{ {
return m_identityAttributes; return m_identityAttributes;
} }

View File

@@ -28,8 +28,8 @@ package com.novell.casa.authtoksvc;
* *
* Class for the creation and editing of identtoken.settings files. * Class for the creation and editing of identtoken.settings files.
* *
**/ */
public class IdenTokenSettingsEditor implements IVerifySetting public final class IdenTokenSettingsEditor implements IVerifySetting
{ {
private static final String usage = private static final String usage =
"usage: IdenTokenSettingsEditor -op [settingName [settingValue]] -file settingsFilePath\n\n" + "usage: IdenTokenSettingsEditor -op [settingName [settingValue]] -file settingsFilePath\n\n" +
@@ -103,9 +103,9 @@ public class IdenTokenSettingsEditor implements IVerifySetting
/** /**
* Applications Entry Point * Applications Entry Point.
* *
* @param args * @param args Arguments.
*/ */
public static void main(String[] args) public static void main(String[] args)
{ {

View File

@@ -24,15 +24,22 @@
package com.novell.casa.authtoksvc; package com.novell.casa.authtoksvc;
/* /**
* IdentityToken Interface. * IdentityToken Interface.
* * <p>
* This is the interface implemented by Identity Token Providers. * This is the interface implemented by Identity Token Providers.
*/ */
public interface IdentityToken public interface IdentityToken
{ {
/* /**
* Initialize the token with parameters. * Initialize the token with parameters.
*
* @param identityId Identity identifier.
* @param sourceName Name of the realm where the identityId is valid.
* @param targetService Name of service being targeted.
* @param targetHost Host where the targeted service resides.
* @param svcConfig Service configuration object.
* @throws Exception
*/ */
void initialize(String identityId, void initialize(String identityId,
String sourceName, String sourceName,
@@ -40,54 +47,81 @@ public interface IdentityToken
String targetHost, String targetHost,
SvcConfig svcConfig) throws Exception; SvcConfig svcConfig) throws Exception;
/* /**
* Initialize the token object with encoded token string. * Initialize the token object with encoded token string.
*
* @param encodedToken Encoded identity token string.
* @throws Exception
*/ */
void initialize(String encodedToken) throws Exception; void initialize(String encodedToken) throws Exception;
/* /**
* Returns encoded token string. * Returns encoded token string.
* *
* IMPORTANT: The token string can not contain the substring "]]>" * IMPORTANT: The token string can not contain the substring "]]>"
* within it. * within it.
*
* @return Encoded identity token string.
* @throws Exception
*/ */
String getEncodedToken() throws Exception; String getEncodedToken() throws Exception;
/* /**
* Returns a string containing the identity token provider type. * Returns a string containing the identity token provider type.
*
* @return Identity token provider type.
* @throws Exception
*/ */
String getProviderType() throws Exception; String getProviderType() throws Exception;
/* /**
* Returns a string containing the identity id. * Returns a string containing the identity id.
*
* @return Identity identifier.
* @throws Exception
*/ */
String getIdentityId() throws Exception; String getIdentityId() throws Exception;
/* /**
* Returns a string containing the name associated with the * Returns a string containing the name associated with the
* identity source. * identity source.
*
* @return Name of the authentication realm.
* @throws Exception
*/ */
String getSourceName() throws Exception; String getSourceName() throws Exception;
/* /**
* Returns a string containing the url associated with the * Returns a string containing the url associated with the
* identity source. * identity source.
*
* @return Url of the identity data source.
* @throws Exception
*/ */
String getSourceUrl() throws Exception; String getSourceUrl() throws Exception;
/* /**
* Returns a string containing the name of the targeted service. * Returns a string containing the name of the targeted service.
*
* @return Name of the targeted service.
* @throws Exception
*/ */
String getTargetService() throws Exception; String getTargetService() throws Exception;
/* /**
* Returns a string containig the name of the host where the * Returns a string containig the name of the host where the
* targeted service resides. * targeted service resides.
*
* @return Name of the host where the targeted service resides.
* @throws Exception
*/ */
String getTargetHost() throws Exception; String getTargetHost() throws Exception;
/* /**
* Returns the attributes of the identity. * Returns the attributes of the identity.
*
* @return Identity attributes.
* @throws Exception
*/ */
javax.naming.directory.Attributes getAttributes() throws Exception; javax.naming.directory.Attributes getAttributes() throws Exception;
} }

View File

@@ -25,17 +25,11 @@
package com.novell.casa.authtoksvc; package com.novell.casa.authtoksvc;
import java.io.Serializable; import java.io.Serializable;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Hashtable; import java.util.Hashtable;
import javax.naming.Context; import javax.naming.Context;
import javax.naming.NamingEnumeration; import javax.naming.NamingEnumeration;
import javax.naming.NamingException; import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext; import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext; import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchResult; import javax.naming.directory.SearchResult;
@@ -53,13 +47,13 @@ import org.bandit.util.config.Realm;
/** /**
* Krb5Authenticate Class. * Krb5Authenticate Class.
* * <p>
* This class implementes an authentication mechanism for * This class implementes an authentication mechanism for
* the processing of authentication requests utilizing a * the processing of authentication requests utilizing a
* Kerberos5 token. * Kerberos5 token.
* *
*/ */
public class Krb5Authenticate implements AuthMechanism, Serializable public final class Krb5Authenticate implements AuthMechanism, Serializable
{ {
private SvcConfig m_svcConfig; private SvcConfig m_svcConfig;
private AuthMechConfig m_mechConfig; private AuthMechConfig m_mechConfig;
@@ -72,17 +66,23 @@ public class Krb5Authenticate implements AuthMechanism, Serializable
protected GSSName m_svcName; protected GSSName m_svcName;
protected GSSCredential m_credential; protected GSSCredential m_credential;
/* /**
* Krb5 Token Class. * Krb5 Token Class.
*/ */
private class Krb5Token private final class Krb5Token
{ {
private String m_principalName = ""; private String m_principalName = "";
/* /**
* Constructor.
* <p>
* The format of the Krb5 token is as follows: * The format of the Krb5 token is as follows:
* * <p>
* Base64.encode(GSS-API Token data)); * Base64.encode(GSS-API Token data));
*
* @param encodedToken Base64 encoded GSS-API token.
* @param parent Associated Krb5Authenticate object.
* @throws Exception
*/ */
public Krb5Token(String encodedToken, Krb5Authenticate parent) throws Exception public Krb5Token(String encodedToken, Krb5Authenticate parent) throws Exception
{ {
@@ -112,8 +112,10 @@ public class Krb5Authenticate implements AuthMechanism, Serializable
} }
} }
/* /**
* Returns the name of the authenticated principal * Returns the name of the authenticated principal.
*
* @return Principal name.
*/ */
public String getPrincipalName() public String getPrincipalName()
{ {
@@ -121,18 +123,22 @@ public class Krb5Authenticate implements AuthMechanism, Serializable
} }
} }
/* /**
* Constructor * Constructor.
*/ */
public Krb5Authenticate() throws Exception public Krb5Authenticate()
{ {
// Nothing to do at this time // Nothing to do at this time
} }
/* /**
* Initialize the mechanism. * Initialize the mechanism.
*
* @param svcConfig Service configuration object.
* @param mechConfig Authentication mechanism configuration object.
* @throws Exception
*/ */
public void init(SvcConfig svcConfig, AuthMechConfig mechConfig) throws Exception public final void init(SvcConfig svcConfig, AuthMechConfig mechConfig) throws Exception
{ {
m_svcConfig = svcConfig; m_svcConfig = svcConfig;
m_mechConfig = mechConfig; m_mechConfig = mechConfig;
@@ -178,10 +184,14 @@ public class Krb5Authenticate implements AuthMechanism, Serializable
} }
} }
/* /**
* invoke() implementation. * invoke() implementation.
*
* @param authReqMsg Authentication request message.
* @return Id of the authenticated entity.
* @throws Exception
*/ */
public String invoke(AuthReqMsg authReqMsg) throws Exception public final String invoke(AuthReqMsg authReqMsg) throws Exception
{ {
String identId = null; String identId = null;
@@ -216,7 +226,7 @@ public class Krb5Authenticate implements AuthMechanism, Serializable
} }
// Perform the search // Perform the search
NamingEnumeration answer = ctx.search(searchContext, NamingEnumeration<SearchResult> answer = ctx.search(searchContext,
"(krbPrincipalName={0})", "(krbPrincipalName={0})",
new String[] {krb5Token.getPrincipalName()}, new String[] {krb5Token.getPrincipalName()},
controls); controls);
@@ -225,7 +235,7 @@ public class Krb5Authenticate implements AuthMechanism, Serializable
if (answer.hasMore()) if (answer.hasMore())
{ {
// The search succeeded, set the identity id. // The search succeeded, set the identity id.
SearchResult sr = (SearchResult)answer.next(); SearchResult sr = answer.next();
if (searchContext.equals("")) if (searchContext.equals(""))
{ {
identId = sr.getNameInNamespace(); identId = sr.getNameInNamespace();
@@ -254,10 +264,12 @@ public class Krb5Authenticate implements AuthMechanism, Serializable
return identId; return identId;
} }
/* /**
* Return the mechanism id. * Return the mechanism id.
*
* @return Mechanism id.
*/ */
public String getId() public final String getId()
{ {
return "Krb5Authenticate"; return "Krb5Authenticate";
} }

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<description>This is the authentication mechanism for the Krb5Authenticate scheme. The Krb5Authenticate scheme authenticates entities using Kerberos-V tokens.</description> <description>This is the authentication mechanism for the Krb5Authenticate scheme. The Krb5Authenticate scheme authenticates entities using Kerberos-V tokens.</description>
<ClassName>com.novell.casa.authtoksvc.Krb5Authenticate</ClassName> <ClassName>com.novell.casa.authtoksvc.Krb5Authenticate</ClassName>

View File

@@ -24,20 +24,20 @@
package com.novell.casa.authtoksvc; package com.novell.casa.authtoksvc;
/* /**
* ProDefs Class. * ProDefs Class.
* * <p>
* This class contains constants utilized in the Casa Client/Server * This class contains constants utilized in the Casa Client/Server
* protocol. * protocol.
* *
*/ */
public class ProtoDefs public final class ProtoDefs
{ {
/* /*
* XML Declaration used in the Casa Client/Server protocol * XML Declaration used in the Casa Client/Server protocol
*/ */
public final static String xmlDeclaration = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"; public final static String xmlDeclaration = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
/* /*
* XML Element Name Constants for the documents exchanged between the * XML Element Name Constants for the documents exchanged between the
@@ -67,11 +67,6 @@ public class ProtoDefs
public final static String mechanismElementName = "mechanism"; public final static String mechanismElementName = "mechanism";
public final static String mechanismInfoElementName = "mechanism_info"; public final static String mechanismInfoElementName = "mechanism_info";
/*
* Configurable operating parameters
*/
public String sessionTokenLifetime = "360";
/* /*
* HTTP Status Codes and Messages * HTTP Status Codes and Messages
*/ */

View File

@@ -27,18 +27,13 @@ package com.novell.casa.authtoksvc;
import java.io.Serializable; import java.io.Serializable;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringReader; import java.io.StringReader;
import java.util.Hashtable; import java.util.Hashtable;
import javax.naming.Context; import javax.naming.Context;
import javax.naming.NamingEnumeration; import javax.naming.NamingEnumeration;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.InitialDirContext; import javax.naming.directory.InitialDirContext;
import javax.naming.directory.DirContext; import javax.naming.directory.DirContext;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchResult; import javax.naming.directory.SearchResult;
import javax.naming.directory.SearchControls; import javax.naming.directory.SearchControls;
import javax.naming.NamingException; import javax.naming.NamingException;
@@ -49,29 +44,34 @@ import org.bandit.util.config.Realm;
/** /**
* PwdAuthenticate Class. * PwdAuthenticate Class.
* * <p>
* This class implementes an authentication mechanism for * This class implementes an authentication mechanism for
* the processing of authentication requests utilizing a * the processing of authentication requests utilizing a
* username/password token. * username/password token.
* *
*/ */
public class PwdAuthenticate implements AuthMechanism, Serializable public final class PwdAuthenticate implements AuthMechanism, Serializable
{ {
private SvcConfig m_svcConfig; private SvcConfig m_svcConfig;
private AuthMechConfig m_mechConfig; private AuthMechConfig m_mechConfig;
/* /**
* Password Token Class. * Password Token Class.
*/ */
private class PwToken private static final class PwToken
{ {
private String m_username = ""; private String m_username = "";
private String m_password = ""; private String m_password = "";
/* /**
* Constructor.
* <p>
* The format of the Pw token is as follows: * The format of the Pw token is as follows:
* * <p>
* Base64.encode(new String("username\r\n" + "password\r\n")); * Base64.encode(new String("username\r\n" + "password\r\n"));
*
* @param encodedToken Base64 encoded password token.
* @throws IOException
*/ */
public PwToken(String encodedToken) throws IOException public PwToken(String encodedToken) throws IOException
{ {
@@ -87,44 +87,56 @@ public class PwdAuthenticate implements AuthMechanism, Serializable
m_password = tokenReader.readLine(); m_password = tokenReader.readLine();
} }
/* /**
* Returns the username * Returns the username.
*
* @return Username.
*/ */
public String getUsername() public final String getUsername()
{ {
return m_username; return m_username;
} }
/* /**
* Returns the password * Returns the password.
*
* @return password.
*/ */
public String getPassword() public final String getPassword()
{ {
return m_password; return m_password;
} }
} }
/* /**
* Constructor * Constructor.
*/ */
public PwdAuthenticate() throws Exception public PwdAuthenticate()
{ {
// Nothing to do at this time // Nothing to do at this time
} }
/* /**
* Initialize the mechanism. * Initialize the mechanism.
*
* @param svcConfig Service configuration object.
* @param mechConfig Authentication mechanism configuration object.
* @throws Exception
*/ */
public void init(SvcConfig svcConfig, AuthMechConfig mechConfig) throws Exception public final void init(SvcConfig svcConfig, AuthMechConfig mechConfig) throws Exception
{ {
m_svcConfig = svcConfig; m_svcConfig = svcConfig;
m_mechConfig = mechConfig; m_mechConfig = mechConfig;
} }
/* /**
* invoke() implementation. * invoke() implementation.
*
* @param authReqMsg Authentication request message.
* @return Id of the authenticated entity.
* @throws Exception
*/ */
public String invoke(AuthReqMsg authReqMsg) throws Exception public final String invoke(AuthReqMsg authReqMsg) throws Exception
{ {
String identId = null; String identId = null;
@@ -159,7 +171,7 @@ public class PwdAuthenticate implements AuthMechanism, Serializable
} }
// Perform the search // Perform the search
NamingEnumeration answer = ctx.search(searchContext, NamingEnumeration<SearchResult> answer = ctx.search(searchContext,
"(cn={0})", "(cn={0})",
new String[] {pwToken.getUsername()}, new String[] {pwToken.getUsername()},
controls); controls);
@@ -171,7 +183,7 @@ public class PwdAuthenticate implements AuthMechanism, Serializable
// Enumerate through the users returned checking the password // Enumerate through the users returned checking the password
while (answer.hasMore()) while (answer.hasMore())
{ {
SearchResult sr = (SearchResult)answer.next(); SearchResult sr = answer.next();
// Open a directory context for the user as a way of verifying its password // Open a directory context for the user as a way of verifying its password
try try
@@ -224,10 +236,12 @@ public class PwdAuthenticate implements AuthMechanism, Serializable
return identId; return identId;
} }
/* /**
* Return the mechanism id. * Return the mechanism id.
*
* @return Mechanism id.
*/ */
public String getId() public final String getId()
{ {
return "PwdAuthenticate"; return "PwdAuthenticate";
} }

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<settings> <settings>
<description>This is the authentication mechanism for the PwdAuthenticate scheme. The PwdAuthenticate scheme authenticates entities using username/password tokens.</description> <description>This is the authentication mechanism for the PwdAuthenticate scheme. The PwdAuthenticate scheme authenticates entities using username/password tokens.</description>
<ClassName>com.novell.casa.authtoksvc.PwdAuthenticate</ClassName> <ClassName>com.novell.casa.authtoksvc.PwdAuthenticate</ClassName>

View File

@@ -31,18 +31,17 @@ import java.io.PrintWriter;
import javax.servlet.*; import javax.servlet.*;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
/** /**
* Rpc Servlet Class. * Rpc Servlet Class.
* * <p>
* This class processes Rpcs to the Authentication Token Service. * This class processes Rpcs to the Authentication Token Service.
* *
*/ */
public class Rpc extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet public final class Rpc extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet
{ {
private static final long serialVersionUID = -8264027868130334613L; private static final long serialVersionUID = -8264027868130334613L;
@@ -54,42 +53,44 @@ public class Rpc extends javax.servlet.http.HttpServlet implements javax.servlet
protected ReconfigureThread m_reconfigureThread = null; protected ReconfigureThread m_reconfigureThread = null;
protected int m_reconfigureInterval; // seconds protected int m_reconfigureInterval; // seconds
private Map m_methodsMap; private Map<String,RpcMethod> m_methodsMap;
/* /**
* Reconfigure Thread Class. * Reconfigure Thread Class.
* * <p>
* This class implements a runnable thread that reconfigures an Rpc Servlet instance. * This class implements a runnable thread that reconfigures an Rpc Servlet instance.
* *
*/ */
private class ReconfigureThread implements Runnable private final class ReconfigureThread implements Runnable
{ {
private Rpc m_rpc; private final Rpc m_rpc;
private Thread m_thread; private boolean m_run = true;
/* /**
* Constructor. * Constructor.
*
* @param rpc Rpc object.
*/ */
public ReconfigureThread (Rpc rpc) public ReconfigureThread (Rpc rpc)
{ {
m_rpc = rpc; m_rpc = rpc;
m_thread = new Thread(this); Thread thread = new Thread(this);
m_thread.start(); thread.start();
} }
/* /**
* run() implementation. * run() implementation.
*/ */
public void run () public final void run ()
{ {
System.err.println("ReconfigureThread.run()- Running"); System.err.println("ReconfigureThread.run()- Running");
while (true) while (m_run)
{ {
// Sleep an ammount equal the reconfigure interval for the Rpc // Sleep an ammount equal the reconfigure interval for the Rpc
try try
{ {
m_thread.sleep(m_rpc.m_reconfigureInterval * 1000); Thread.sleep(m_rpc.m_reconfigureInterval * 1000);
} }
catch (InterruptedException e) { /* nothing to do */ } catch (InterruptedException e) { /* nothing to do */ }
@@ -112,16 +113,16 @@ public class Rpc extends javax.servlet.http.HttpServlet implements javax.servlet
} }
} }
/* /**
* stop() implementation. * stop() implementation.
*/ */
public void stop () public final void stop ()
{ {
m_thread.stop(); m_run = false;
} }
} }
/* /**
* Constructor. * Constructor.
*/ */
public Rpc () public Rpc ()
@@ -129,8 +130,10 @@ public class Rpc extends javax.servlet.http.HttpServlet implements javax.servlet
super(); super();
} }
/* /**
* configureServlet() implementation. * configureServlet() implementation.
*
* @throws Exception
*/ */
protected void configureServlet () throws Exception protected void configureServlet () throws Exception
{ {
@@ -152,7 +155,7 @@ public class Rpc extends javax.servlet.http.HttpServlet implements javax.servlet
EnabledSvcsConfig enabledSvcsConfig = new EnabledSvcsConfig(m_configFolderPath, m_enabledSvcsOnly); EnabledSvcsConfig enabledSvcsConfig = new EnabledSvcsConfig(m_configFolderPath, m_enabledSvcsOnly);
// Create a map to keep track of the Rpc methods // Create a map to keep track of the Rpc methods
Map methodsMap = new HashMap(); Map<String,RpcMethod> methodsMap = new HashMap<String, RpcMethod>();
// Instantiate the Rpc Methods // Instantiate the Rpc Methods
RpcMethod getAuthPolicy = new GetAuthPolicy(); RpcMethod getAuthPolicy = new GetAuthPolicy();
@@ -171,8 +174,11 @@ public class Rpc extends javax.servlet.http.HttpServlet implements javax.servlet
m_methodsMap = methodsMap; m_methodsMap = methodsMap;
} }
/* /**
* init() implementation. * init() implementation.
*
* @param config Servlet configuration object.
* @throws ServletException
*/ */
public void init (ServletConfig config) throws ServletException public void init (ServletConfig config) throws ServletException
{ {
@@ -224,7 +230,7 @@ public class Rpc extends javax.servlet.http.HttpServlet implements javax.servlet
} }
} }
/* /**
* destroy() implementation. * destroy() implementation.
*/ */
public void destroy () public void destroy ()
@@ -240,16 +246,26 @@ public class Rpc extends javax.servlet.http.HttpServlet implements javax.servlet
} }
} }
/* /**
* doGet() implementation. * doGet() implementation.
*
* @param request Http servlet request object.
* @param response Http servlet response object.
* @throws ServletException
* @throws IOException
*/ */
protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{ {
doPost(request, response); doPost(request, response);
} }
/* /**
* doPost() implementation. * doPost() implementation.
*
* @param request Http servlet request object.
* @param response Http servlet response object.
* @throws ServletException
* @throws IOException
*/ */
protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{ {
@@ -266,7 +282,7 @@ public class Rpc extends javax.servlet.http.HttpServlet implements javax.servlet
if (requestedMethod != null) if (requestedMethod != null)
{ {
// Get the necessary method // Get the necessary method
RpcMethod method = (RpcMethod) m_methodsMap.get(requestedMethod); RpcMethod method = m_methodsMap.get(requestedMethod);
if (method != null) if (method != null)
{ {
// Invoke the method to process the Rpc // Invoke the method to process the Rpc
@@ -276,21 +292,21 @@ public class Rpc extends javax.servlet.http.HttpServlet implements javax.servlet
{ {
// Unsupported method // Unsupported method
System.err.println("Rpc.doPost()- Unsupported method"); System.err.println("Rpc.doPost()- Unsupported method");
response.sendError(response.SC_BAD_REQUEST); response.sendError(HttpServletResponse.SC_BAD_REQUEST);
} }
} }
else else
{ {
// Missing method parameter // Missing method parameter
System.err.println("Rpc.doPost()- Missing method parameter"); System.err.println("Rpc.doPost()- Missing method parameter");
response.sendError(response.SC_BAD_REQUEST); response.sendError(HttpServletResponse.SC_BAD_REQUEST);
} }
} }
catch (Exception e) catch (Exception e)
{ {
// tbd // tbd
System.err.println("Rpc.doPost()- Exception caught: " + e.toString()); System.err.println("Rpc.doPost()- Exception caught: " + e.toString());
response.sendError(response.SC_INTERNAL_SERVER_ERROR); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} }
// Done sending out the reply // Done sending out the reply

View File

@@ -26,28 +26,37 @@ package com.novell.casa.authtoksvc;
import java.io.*; import java.io.*;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.*;
/* /**
* RpcMethod Interface. * RpcMethod Interface.
* * <p>
* This is the interface implemented by Rpc Methods. * This is the interface implemented by Rpc Methods.
*/ */
public interface RpcMethod public interface RpcMethod
{ {
/* /**
* Initialize the Rpc method. * Initialize the Rpc method.
*
* @param svcConfig Service configuration object.
* @param enabledSvcsConfig Enabled services configuration object.
* @throws Exception
*/ */
void init(SvcConfig svcConfig, EnabledSvcsConfig enabledSvcsConfig) throws Exception; void init(SvcConfig svcConfig, EnabledSvcsConfig enabledSvcsConfig) throws Exception;
/* /**
* Process Rpc. * Process Rpc.
*
* @param inStream Input stream with request.
* @param out Ouput print writer for reply.
* @throws IOException
*/ */
void invoke(InputStream inStream, PrintWriter out) throws IOException; void invoke(InputStream inStream, PrintWriter out) throws IOException;
/* /**
* Return the method id. * Return the method id.
*
* @return Method id.
*/ */
String getId(); String getId();
} }

View File

@@ -37,27 +37,27 @@ import org.apache.axis.message.MessageElement;
import javax.xml.namespace.QName; import javax.xml.namespace.QName;
import java.io.*; import java.io.*;
/* /**
* SessionToken class. * SessionToken class.
* * <p>
* This class constructs sessions tokens that clients can present to an ATS * This class constructs sessions tokens that clients can present to an ATS
* to prove that an entity has been authenticated to a particular realm. * to prove that an entity has been authenticated to a particular realm.
* The session token consists of a SOAP message secured with WSSecurity * The session token consists of a SOAP message secured with WSSecurity
* with the appropriate elements signed and with a timestamp. The body of * with the appropriate elements signed and with a timestamp. The body of
* the SOAP message is as follows: * the SOAP message is as follows:
* * <p>
* <session_token> * <session_token>
* <realm>realm value</realm> * <realm>realm value</realm>
* <ident_id>identity id value</ident_id> * <ident_id>identity id value</ident_id>
* </session_token> * </session_token>
* *
*/ */
public class SessionToken public final class SessionToken
{ {
private String m_id = null; private String m_id = null;
private String m_realm = null; private String m_realm = null;
private String m_token; private final String m_token;
static final String sessionTokenSoapMsg = static final String sessionTokenSoapMsg =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
@@ -73,8 +73,14 @@ public class SessionToken
static final private MessageContext axisMsgContext = new MessageContext(new AxisClient(new NullProvider())); static final private MessageContext axisMsgContext = new MessageContext(new AxisClient(new NullProvider()));
/* /**
* Constructor * Constructor.
*
* @param id Id of the authenticated identity.
* @param realm Realm where the identity id is valid.
* @param lifetime Token lifetime.
* @param svcConfig Service configuration object.
* @throws Exception
*/ */
public SessionToken(String id, public SessionToken(String id,
String realm, String realm,
@@ -98,9 +104,12 @@ public class SessionToken
outStream.close(); outStream.close();
} }
/* /**
* Constructor given a session token string. The constructor * Constructor given a session token string. The constructor
* validates the token as part of its processing. * validates the token as part of its processing.
*
* @param token Session token string.
* @throws Exception
*/ */
public SessionToken(String token) throws Exception public SessionToken(String token) throws Exception
{ {
@@ -150,18 +159,18 @@ public class SessionToken
} }
/** /**
* Get SessionToken SOAP Message * Get SessionToken SOAP Message.
* *
* @param realm String containing the identity token that should be part of the message * @param realm String containing the identity token that should be part of the message.
* @param identityId String containing the identity token type * @param identityId String containing the identity token type.
* @param lifetime Lifetime that should be specified in the message timestamp (seconds) * @param lifetime Lifetime that should be specified in the message timestamp (seconds).
* @param svcConfig Service Config object * @param svcConfig Service Config object.
* @return <code>Message<code> SessionToken message, null if the method fails. * @return SessionToken message, null if the method fails.
*/ */
private Message getMessage(String realm, private static Message getMessage(String realm,
String identityId, String identityId,
int lifetime, int lifetime,
SvcConfig svcConfig) SvcConfig svcConfig)
{ {
Message secureMessage; Message secureMessage;
@@ -206,26 +215,32 @@ public class SessionToken
return secureMessage; return secureMessage;
} }
/* /**
* Returns a string containing the session token. * Returns a string containing the session token.
*
* @return Session token string.
*/ */
public String toString() public String toString()
{ {
return Base64Coder.encode(m_token); return Base64Coder.encode(m_token);
} }
/* /**
* Method to get the Identity Id * Method to get the Identity Id.
*
* @return Identity id.
*/ */
public String getIdentId() throws Exception public String getIdentId()
{ {
return m_id; return m_id;
} }
/* /**
* Method to get the Identity Repository Reference (Realm). * Method to get the Identity Repository Reference (Realm).
*
* @return realm
*/ */
public String getRealm() throws Exception public String getRealm()
{ {
return m_realm; return m_realm;
} }

View File

@@ -41,8 +41,8 @@ import java.io.FileInputStream;
* *
* Class for the creation and editing of settings files. * Class for the creation and editing of settings files.
* *
**/ */
public class SettingsFileUtil public final class SettingsFileUtil
{ {
/** /**
* Gets document for the specified settings file. * Gets document for the specified settings file.
@@ -52,7 +52,7 @@ public class SettingsFileUtil
*/ */
private static Document getSettingsFileDoc(String filePath) private static Document getSettingsFileDoc(String filePath)
{ {
Document doc = null; Document doc;
try try
{ {
@@ -92,7 +92,7 @@ public class SettingsFileUtil
} }
/** /**
* Gets a starting settings document * Gets a starting settings document.
* *
* @param settings String with starting settings document. * @param settings String with starting settings document.
* @return Starting settings document. * @return Starting settings document.
@@ -203,9 +203,10 @@ public class SettingsFileUtil
/** /**
* Gets value of the specified setting in the specified settings file. * Gets value of the specified setting in the specified settings file.
* *
* @param filePath Path to the settings file. * @param filePath Path to the settings file.
* @param setting Name of the setting being queried. * @param setting Name of the setting being queried.
* @return True if the operation is successfully performed. * @param settingVerifier Setting verifier object.
* @return True if the operation is successfully performed.
*/ */
public static boolean performGetOperation(String filePath, public static boolean performGetOperation(String filePath,
String setting, String setting,
@@ -251,15 +252,16 @@ public class SettingsFileUtil
/** /**
* Sets the specified setting in the specified settings file. * Sets the specified setting in the specified settings file.
* *
* @param filePath Path to the settings file. * @param filePath Path to the settings file.
* @param setting`` Name of the setting to be set. * @param setting`` Name of the setting to be set.
* @param value Value to be assigned to the setting. * @param value Value to be assigned to the setting.
* @return True if the operation is successfully performed. * @param settingVerifier Setting verifier object.
* @return True if the operation is successfully performed.
*/ */
public static boolean performSetOperation(String filePath, public static boolean performSetOperation(String filePath,
String setting, String setting,
String value, String value,
IVerifySetting settingVerifier) IVerifySetting settingVerifier)
{ {
boolean opPerformed = false; boolean opPerformed = false;
@@ -275,7 +277,7 @@ public class SettingsFileUtil
// we find the one specified. // we find the one specified.
Element root = doc.getDocumentElement(); Element root = doc.getDocumentElement();
Node child; Node child;
Node next = (Node) root.getFirstChild(); Node next = root.getFirstChild();
boolean settingFound = false; boolean settingFound = false;
while ((child = next) != null while ((child = next) != null
&& settingFound == false) && settingFound == false)
@@ -308,7 +310,7 @@ public class SettingsFileUtil
try try
{ {
// Remove text nodes // Remove text nodes
next = (Node) root.getFirstChild(); next = root.getFirstChild();
while ((child = next) != null) while ((child = next) != null)
{ {
next = child.getNextSibling(); next = child.getNextSibling();
@@ -346,13 +348,14 @@ public class SettingsFileUtil
/** /**
* Remove specified setting from the specified settings file. * Remove specified setting from the specified settings file.
* *
* @param filePath Path to the settings file. * @param filePath Path to the settings file.
* @param setting Name of the setting to be removed. * @param setting Name of the setting to be removed.
* @return True if the operation is successfully performed. * @param settingVerifier Setting verifier object.
* @return True if the operation is successfully performed.
*/ */
public static boolean performRemoveOperation(String filePath, public static boolean performRemoveOperation(String filePath,
String setting, String setting,
IVerifySetting settingVerifier) IVerifySetting settingVerifier)
{ {
boolean opPerformed = false; boolean opPerformed = false;
@@ -367,7 +370,7 @@ public class SettingsFileUtil
// we find the one specified. // we find the one specified.
Element root = doc.getDocumentElement(); Element root = doc.getDocumentElement();
Node child; Node child;
Node next = (Node) root.getFirstChild(); Node next = root.getFirstChild();
boolean settingFound = false; boolean settingFound = false;
while ((child = next) != null while ((child = next) != null
&& settingFound == false) && settingFound == false)
@@ -384,7 +387,7 @@ public class SettingsFileUtil
try try
{ {
// Remove text nodes // Remove text nodes
next = (Node) root.getFirstChild(); next = root.getFirstChild();
while ((child = next) != null) while ((child = next) != null)
{ {
next = child.getNextSibling(); next = child.getNextSibling();

View File

@@ -34,11 +34,11 @@ import org.xml.sax.helpers.XMLReaderFactory;
/** /**
* SvcConfig Class. * SvcConfig Class.
* * <p>
* This class obtains and maintains the service configuration. * This class obtains and maintains the service configuration.
* *
*/ */
public class SvcConfig public final class SvcConfig
{ {
// Well known service configuration settings // Well known service configuration settings
// //
@@ -64,12 +64,12 @@ public class SvcConfig
public final static String DefaultSigningKeyPasswordValue = "secret"; public final static String DefaultSigningKeyPasswordValue = "secret";
private static final String m_svcSettingsFileName = "svc.settings"; private static final String m_svcSettingsFileName = "svc.settings";
private Map m_svcSettingsMap; private final Map<String,String> m_svcSettingsMap;
/* /**
* Class for handling Authentication Request parsing events. * Class for handling Authentication Request parsing events.
*/ */
private class SAXHandler extends org.xml.sax.helpers.DefaultHandler private static final class SAXHandler extends org.xml.sax.helpers.DefaultHandler
{ {
private final static int AWAITING_ROOT_ELEMENT_START = 0; private final static int AWAITING_ROOT_ELEMENT_START = 0;
private final static int AWAITING_SETTING_ELEMENT_START = 1; private final static int AWAITING_SETTING_ELEMENT_START = 1;
@@ -79,14 +79,16 @@ public class SvcConfig
private final static String m_rootElementName = "settings"; private final static String m_rootElementName = "settings";
private Map m_keyMap; private final Map<String,String> m_keyMap;
private int m_state; private int m_state;
private String m_currentKey; private String m_currentKey;
/* /**
* Constructor * Constructor.
*
* @param keyMap Key/Value map.
*/ */
public SAXHandler(Map keyMap) public SAXHandler(Map<String,String> keyMap)
{ {
super(); super();
@@ -95,10 +97,12 @@ public class SvcConfig
m_state = AWAITING_ROOT_ELEMENT_START; m_state = AWAITING_ROOT_ELEMENT_START;
} }
/* /**
* endDocument() implementation. * endDocument() implementation.
*
* @throws SAXException
*/ */
public void endDocument () throws SAXException public final void endDocument () throws SAXException
{ {
// Verify that we are not in an invalid state // Verify that we are not in an invalid state
if (m_state != DONE_PARSING) if (m_state != DONE_PARSING)
@@ -108,10 +112,16 @@ public class SvcConfig
} }
} }
/* /**
* startElement() implementation. * startElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @param atts Attributes.
* @throws SAXException
*/ */
public void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException public final void startElement (String uri, String name, String qName, org.xml.sax.Attributes atts) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -144,10 +154,15 @@ public class SvcConfig
} }
} }
/* /**
* endElement() immplementation. * endElement() implementation.
*
* @param uri Uri.
* @param name Local name.
* @param qName Qualified name.
* @throws SAXException
*/ */
public void endElement (String uri, String name, String qName) throws SAXException public final void endElement (String uri, String name, String qName) throws SAXException
{ {
// Proceed based on our state // Proceed based on our state
switch (m_state) switch (m_state)
@@ -178,10 +193,15 @@ public class SvcConfig
} }
} }
/* /**
* character() implementation. * character() implementation.
*
* @param ch Characters with element data.
* @param start Start position in the character array.
* @param length Number of characters to use in the array.
* @throws SAXException
*/ */
public void characters (char ch[], int start, int length) throws SAXException public final void characters (char ch[], int start, int length) throws SAXException
{ {
// Consume the data if in the right state // Consume the data if in the right state
if (m_state == AWAITING_SETTING_ELEMENT_DATA) if (m_state == AWAITING_SETTING_ELEMENT_DATA)
@@ -195,8 +215,12 @@ public class SvcConfig
} }
} }
/* /**
* Constructor. * Constructor.
*
* @param appRootPath Path to application root.
* @param svcConfigPath Path to the service configuration.
* @throws Exception
*/ */
public SvcConfig(String appRootPath, String svcConfigPath) throws Exception public SvcConfig(String appRootPath, String svcConfigPath) throws Exception
{ {
@@ -205,7 +229,7 @@ public class SvcConfig
System.err.println("SvcConfig()- SvcConfigPath = " + svcConfigPath); System.err.println("SvcConfig()- SvcConfigPath = " + svcConfigPath);
// Create a map to keep track of the service settings // Create a map to keep track of the service settings
m_svcSettingsMap = new HashMap(); m_svcSettingsMap = new HashMap<String, String>();
try try
{ {
@@ -246,13 +270,17 @@ public class SvcConfig
} }
} }
/* /**
* Returns the value associated with the specified setting. * Returns the value associated with the specified setting.
*
* @param settingName Name of the setting.
* @return Value of the specified setting.
* @throws Exception
*/ */
public String getSetting(String settingName) throws Exception public final String getSetting(String settingName) throws Exception
{ {
// Try to find the setting in our map // Try to find the setting in our map
String value = (String) m_svcSettingsMap.get(settingName); String value = m_svcSettingsMap.get(settingName);
if (value == null) if (value == null)
{ {
System.err.println("SvcConfig.getSetting()- Did not find setting " + settingName); System.err.println("SvcConfig.getSetting()- Did not find setting " + settingName);

View File

@@ -30,8 +30,8 @@ import java.io.File;
* *
* Class for the creation and editing of svc.settings files. * Class for the creation and editing of svc.settings files.
* *
**/ */
public class SvcSettingsEditor implements IVerifySetting public final class SvcSettingsEditor implements IVerifySetting
{ {
private static final String usage = private static final String usage =
"usage: SvcSettingsEditor -op [settingName [settingValue]] -file settingsFilePath\n\n" + "usage: SvcSettingsEditor -op [settingName [settingValue]] -file settingsFilePath\n\n" +
@@ -66,7 +66,7 @@ public class SvcSettingsEditor implements IVerifySetting
* @param setting The name of the setting being checked. * @param setting The name of the setting being checked.
* @return True if the specified setting is valid. * @return True if the specified setting is valid.
*/ */
public boolean validSetting(String setting) public final boolean validSetting(String setting)
{ {
boolean result = false; boolean result = false;
@@ -96,8 +96,8 @@ public class SvcSettingsEditor implements IVerifySetting
* @param value The value of the specified setting. * @param value The value of the specified setting.
* @return The formal name of the setting if found to be valid. * @return The formal name of the setting if found to be valid.
*/ */
public String validSettingNameAndValue(String setting, public final String validSettingNameAndValue(String setting,
String value) String value)
{ {
String validSetting = null; String validSetting = null;
@@ -182,7 +182,7 @@ public class SvcSettingsEditor implements IVerifySetting
/** /**
* Applications Entry Point * Applications Entry Point
* *
* @param args * @param args Argument.
*/ */
public static void main(String[] args) public static void main(String[] args)
{ {

View File

@@ -44,15 +44,15 @@ import java.util.Set;
import java.util.Vector; import java.util.Vector;
/* /**
* WSSecurity Class. * WSSecurity Class.
* * <p>
* This class provides static methods for securing and verifying SOAP messages. SOAP messages * This class provides static methods for securing and verifying SOAP messages. SOAP messages
* are secured by adding a timestamp and signing the appropriate elements using methods and * are secured by adding a timestamp and signing the appropriate elements using methods and
* headers defined by WS* specifications. * headers defined by WS* specifications.
* *
*/ */
public class WSSecurity public final class WSSecurity
{ {
static final private WSSecurityEngine secEngine = new WSSecurityEngine(); static final private WSSecurityEngine secEngine = new WSSecurityEngine();
static final private Crypto crypto = CryptoFactory.getInstance(); static final private Crypto crypto = CryptoFactory.getInstance();
@@ -60,6 +60,9 @@ public class WSSecurity
/** /**
* Creates a SOAP message from a document. * Creates a SOAP message from a document.
* *
* @param doc Message document.
* @return SOAP message.
* @throws Exception
*/ */
private static Message toSOAPMessage(Document doc) throws Exception private static Message toSOAPMessage(Document doc) throws Exception
{ {
@@ -70,34 +73,33 @@ public class WSSecurity
return (org.apache.axis.Message) factory.createMessage(null, in); return (org.apache.axis.Message) factory.createMessage(null, in);
} }
/*** /**
* Returns the first element that containes an Id with value * Returns the first element that containes an Id with value
* <code>uri</code> and <code>namespace</code>. * uri and namespace.
* <p/> * <p>
*
* Copyright Note: The code for this function was copied from file * Copyright Note: The code for this function was copied from file
* WSSecurityUtil.java from package org.apache.ws.security.util. * WSSecurityUtil.java from package org.apache.ws.security.util.
* The Copyright notice on this file is as follows: * The Copyright notice on this file is as follows:
* * <p>
* Copyright 2003-2006 The Apache Software Foundation, or their licensors, as * Copyright 2003-2006 The Apache Software Foundation, or their licensors, as
* appropriate. * appropriate.
* * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* * <p>
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* * <p>
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
* *
* @param startNode Where to start the search * @param startNode Where to start the search.
* @param value Value of the Id attribute * @param value Value of the Id attribute.
* @param namespace Namespace URI of the Id * @param namespace Namespace URI of the Id.
* @return The found element or <code>null</code> * @return The found element or null.
*/ */
private static Element findElementById(Node startNode, private static Element findElementById(Node startNode,
String value, String value,
@@ -155,9 +157,9 @@ public class WSSecurity
/** /**
* Verifies SOAP envelope timestamp and signatures. * Verifies SOAP envelope timestamp and signatures.
* *
* @param envelope SOAP envelope with timestamp * @param envelope SOAP envelope with timestamp
* @return <code>boolean</code> True if verification succeeds * @return True if verification succeeds.
* @throws Exception on error * @throws Exception
*/ */
public static boolean verifyMessage(SOAPEnvelope envelope) throws Exception public static boolean verifyMessage(SOAPEnvelope envelope) throws Exception
{ {
@@ -231,12 +233,12 @@ public class WSSecurity
/** /**
* Add timestamp and sign SOAP message in compliance with WS-Security. * Add timestamp and sign SOAP message in compliance with WS-Security.
* *
* @param envelope String containing a SOAP envelope * @param envelope String containing a SOAP envelope
* @param timeToLive Value to set the timestamp timeToLive parameter in seconds * @param timeToLive Value to set the timestamp timeToLive parameter in seconds
* @param svcConfig Service Config object * @param svcConfig Service Config object
* @param includeCert True if the message should include the Public Certificate * @param includeCert True if the message should include the Public Certificate
* @return <code>Message</code> Signed and timestamped SOAP message * @return Signed and timestamped SOAP message
* @throws Exception on error * @throws Exception
*/ */
public static Message secureSOAPEnvelope(SOAPEnvelope envelope, public static Message secureSOAPEnvelope(SOAPEnvelope envelope,
int timeToLive, int timeToLive,