<?xml version="1.0" encoding="ISO-8859-1"?>
<OpenPTK xmlns='http://xml.netbeans.org/schema/openptk'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:schemaLocation='http://xml.netbeans.org/schema/openptk openptk.xsd'>
<!--
Notes: 1. To reference a Property value use the "%{property_name}"
syntax. The Property value is evaluated when the XML file is parsed
and processed. 2. To reference an Attribute value use the
"${attribute_name}" syntax. The Attribute value is evaluated at
run-time when the Property is used.
-->
<!--
Defaults: These Properties are made available for reference by other
Properties using the "%{property_name}" syntax. These Properties are
NOT automatically copied into any of the other Properties defined in
this file.
-->
<!--
Idm urls: http://localhost:8080/idm/servlet/rpcrouter2
http://localhost:28080/idm8/servlet/rpcrouter2
http://www.openptk.org/idm/servlet/rpcrouter2
http://www.openptk.org/idm/servlet/openspml2
-->
<Defaults>
<Properties>
<Property name="spml1.url" value="http://www.openptk.org/idm/servlet/rpcrouter2" />
<Property name="spml1.user.name" value="SPML-Proxy" />
<Property name="spml1.user.password.encrypted" value="EnespBAb/hMwNylyxlh0jw==" />
<Property name="spml2.url" value="http://www.openptk.org/idm/servlet/openspml2" />
<Property name="spml2.user.name" value="SPML-Proxy" />
<Property name="spml2.user.password.encrypted" value="EnespBAb/hMwNylyxlh0jw==" />
<Property name="jndi.url" value="ldap://localhost:1389" />
<!--Property name="jndi.user.name" value="uid=ldapadmin,ou=People,dc=openptk,dc=org" />
<Property name="jndi.user.password.encrypted" value="fJUAFjIMLNh/WiRBCBz3hw==" / -->
<Property name="jndi.user.name" value="cn=Directory Manager" />
<Property name="jndi.user.password.encrypted" value="EnespBAb/hMwNylyxlh0jw==" />
<Property name="jndi.basedn.employees" value="ou=people,ou=employees,dc=openptk,dc=org" />
<Property name="jndi.basedn.locations" value="ou=locations,ou=employees,dc=openptk,dc=org" />
<Property name="jndi.basedn.customers" value="ou=people,ou=customers,dc=openptk,dc=org" />
<Property name="jdbc.url" value="jdbc:mysql://localhost:3306/openptk" />
<Property name="jdbc.user.name" value="test" />
<Property name="jdbc.user.password.encrypted" value="EnespBAb/hMwNylyxlh0jw==" />
<Property name="jdbc.driver" value="com.mysql.jdbc.Driver" />
<Property name="timeout.read" value="10000" />
<Property name="timeout.write" value="10000" />
<Property name="debug.level" value="4" />
</Properties>
</Defaults>
<!--
Global: These Properties are for global configuration of the OpenPTK Server.
-->
<Global>
<Properties>
<Property name="auth.token.name.clientid" value="clientid" />
<Property name="auth.token.name.clientcred" value="clientcred" />
<Property name="auth.token.name.password" value="password" />
<Property name="auth.token.name.user" value="user" />
<Property name="auth.token.name.httpheader" value="openptkid" />
<Property name="http.session.cookie.uniqueid" value="OPENPTKSESSIONID" />
<Property name="http.session.cookie.httponly" value="true" />
<Property name="engine.session.ttl" value="1800000" />
<Property name="engine.session.cache.ttl" value="120000" />
<Property name="search.results.quantity" value="10" />
<Property name="search.contains.minchar" value="3" />
<Property name="search.attribute.default" value="firstname" />
<Property name="server.config.userid" value="openptkconfig" />
<Property name="server.config.password" value="password" />
<Property name="server.cookiepath" value="/" />
<Property name="server.defaultclient" value="anon" />
</Properties>
</Global>
<!--
Contexts: The Contexts section contains Properties (that will be
applied to each Context) One or more Context. A given Context contains
the following elements: - Properties that are unique to the Context
All of the "Contexts" level Properties will be copied into each
Context then the Context specific Properties will be added/overlayed.
- Query that will be applied to all of the Operations - Operations
that will be supported by a given Context. Each Operation will inherit
the Properties and Query (if exist) from the Context level. Operation
level Properties will be added/overlayed. The Query will be replaced.
Each Operation is required to have the following Properties: -
classname - AttrGroup
-->
<!--
Default Context: Person-SunIdm-SPML1 Person-SunIdm-JDBC
Person-OpenDS-JNDI Person-SunIdm-SPE Person-SunIdm-SPML2
-->
<Contexts>
<Properties>
<Property name="context.default" value="Employees-MySQL-JDBC" />
<Property name="context.classname" value="org.openptk.config.BasicContext" />
<Property name="security.encryption.id" value="PBEWithMD5AndDES" />
<Property name="logger" value="UnixLogFile" />
<Property name="audit" value="false" />
<Property name="timestamp" value="true" />
</Properties>
<Context id="Person-SunIdm-SPML1" enabled="false" definition="Person" connection="SunSPML1" association="SPML1">
<Properties>
<Property name="context.description" value="Person to Sun Identity Manager using SPML1" />
<Property name="operation.classname" value="org.openptk.spi.operations.SpmlSunOperations" />
<Property name="key" value="uniqueid" />
<Property name="objectclass" value="user" />
<Property name="timeout" value="%{timeout.write}" />
<Property name="search.default.order" value="lastname,firstname" />
<Property name="search.operators" value="AND,EQ" />
</Properties>
<Query type="AND">
<Query type="EQ" name="MemberObjectGroups" value="All People" />
<Query type="EQ" name="objectclass" value="user" />
</Query>
<Operations>
<Operation id="create" attrgroup="person-create" />
<Operation id="read" attrgroup="person-read">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
</Properties>
</Operation>
<Operation id="update" attrgroup="person-update" />
<Operation id="delete" attrgroup="person-delete" />
<Operation id="search" attrgroup="person-search">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
<Property name="sort" value="lastname,firstname" />
</Properties>
</Operation>
<Operation id="pwdchange" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
<Property name="extreq.oper.changepwd" value="changeUserPassword" />
<Property name="extreq.oper.resetpwd" value="resetUserPassword" />
<Property name="extreq.attr.uid.name" value="accountId" />
<Property name="extreq.attr.pwd.name" value="password" />
<Property name="extreq.attr.pwd.subject.attr" value="password" />
<Property name="extreq.attr.resources.key" value="accounts" />
<Property name="extreq.attr.resources.value" value="Lighthouse" />
</Properties>
</Operation>
<Operation id="pwdreset" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
<Property name="extreq.oper.changepwd" value="changeUserPassword" />
<Property name="extreq.oper.resetpwd" value="resetUserPassword" />
<Property name="extreq.attr.uid.name" value="accountId" />
<Property name="extreq.attr.pwd.name" value="password" />
<Property name="extreq.attr.pwd.subject.attr" value="password" />
<Property name="extreq.attr.resources.key" value="accounts" />
<Property name="extreq.attr.resources.value" value="Lighthouse" />
</Properties>
</Operation>
</Operations>
</Context>
<Context id="Person-SunIdm-SPML2" enabled="true" definition="Person" connection="SunSPML2" association="SPML2">
<Properties>
<Property name="context.description" value="Person to Sun Identity Manager using SPML2" />
<Property name="operation.classname" value="org.openptk.spi.operations.Spml2SunOperations" />
<Property name="key" value="uniqueid" />
<Property name="objectclass" value="spml2Person" />
<Property name="timeout" value="%{timeout.write}" />
</Properties>
<Query type="NULL" />
<Operations>
<Operation id="create" attrgroup="person-create" />
<Operation id="read" attrgroup="person-read">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
</Properties>
</Operation>
<Operation id="search" attrgroup="person-search">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
<Property name="sort" value="lastname,firstname" />
</Properties>
</Operation>
<Operation id="update" attrgroup="person-update" />
<Operation id="delete" attrgroup="person-delete" />
<Operation id="pwdchange" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
<Property name="extreq.oper.changepwd" value="changeUserPassword" />
<Property name="extreq.oper.resetpwd" value="resetUserPassword" />
<Property name="extreq.attr.uid.name" value="accountId" />
<Property name="extreq.attr.pwd.name" value="password" />
<Property name="extreq.attr.pwd.subject.attr" value="password" />
<Property name="extreq.attr.resources.key" value="accounts" />
<Property name="extreq.attr.resources.value" value="Lighthouse" />
</Properties>
</Operation>
<Operation id="pwdreset" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
<Property name="extreq.oper.changepwd" value="changeUserPassword" />
<Property name="extreq.oper.resetpwd" value="resetUserPassword" />
<Property name="extreq.attr.uid.name" value="accountId" />
<Property name="extreq.attr.pwd.name" value="password" />
<Property name="extreq.attr.pwd.subject.attr" value="password" />
<Property name="extreq.attr.resources.key" value="accounts" />
<Property name="extreq.attr.resources.value" value="Lighthouse" />
</Properties>
</Operation>
</Operations>
</Context>
<Context id="Authen-SunIdm-SPML" enabled="false" definition="Person" connection="SunSPML1" association="SPML1">
<Properties>
<Property name="context.description" value="Authentication: Forgotten Password" />
<Property name="operation.classname" value="org.openptk.spi.operations.SpmlSunOperations" />
<Property name="key" value="uniqueid" />
<Property name="objectclass" value="user" />
<Property name="timeout" value="%{timeout.read}" />
</Properties>
<Query type="AND">
<Query type="EQ" name="MemberObjectGroups" value="All People" />
<Query type="EQ" name="objectclass" value="user" />
</Query>
<Operations>
<Operation id="read" attrgroup="person-pwd" />
</Operations>
</Context>
<Context id="Person-SunIdm-SPE" enabled="false" definition="Person" connection="SunSPML1" association="SPE">
<Properties>
<Property name="context.description" value="Person to Sun Identity Manager using SPE" />
<Property name="operation.classname" value="org.openptk.spi.operations.SpeSpmlSunOperations" />
<Property name="key" value="uniqueid" />
<Property name="objectclass" value="speperson" />
<Property name="timeout" value="%{timeout.write}" />
<Property name="search.default.order" value="lastname,firstname" />
<Property name="search.operators" value="AND,EQ" />
</Properties>
<Query type="EQ" name="objectclass" value="speperson" />
<Operations>
<Operation id="create" attrgroup="person-create" />
<Operation id="read" attrgroup="person-read">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
</Properties>
</Operation>
<Operation id="update" attrgroup="person-update" />
<Operation id="delete" attrgroup="person-delete" />
<Operation id="search" attrgroup="person-search">
<Properties>
<Property name="AttrGroup" value="person-search" />
<Property name="timeout" value="%{timeout.read}" />
<Property name="sort" value="lastname,firstname" />
</Properties>
</Operation>
<Operation id="pwdchange" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
</Properties>
</Operation>
<Operation id="pwdreset" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
<Property name="reset.password.length" value="8" />
</Properties>
</Operation>
</Operations>
</Context>
<Context id="Employees-OpenDS-JNDI" enabled="true" definition="Person" connection="OpenDS" association="JNDI">
<Properties>
<Property name="context.description" value="Employees to OpenDS using JNDI" />
<Property name="operation.classname" value="org.openptk.spi.operations.JndiOperations" />
<Property name="key" value="uniqueid" />
<Property name="rdn" value="uid=${uniqueid}" />
<Property name="basedn" value="%{jndi.basedn.employees}" />
<Property name="objectclass" value="inetOrgPerson" />
<Property name="timeout" value="%{timeout.write}" />
<Property name="search.default.order" value="lastname,firstname,uniqueid" />
<Property name="search.operators" value="AND,OR,CONTAINS,EQ" />
</Properties>
<Model id="Employee">
<Relationships>
<Relationship id="location" context="Locations-OpenDS-JNDI"/>
<Relationship id="photo" context="Media-MySQL-JDBC"/>
</Relationships>
</Model>
<Query type="EQ" name="objectClass" value="inetOrgPerson" />
<Operations>
<Operation id="create" attrgroup="person-create" />
<Operation id="read" attrgroup="person-read">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
</Properties>
</Operation>
<Operation id="update" attrgroup="person-update" />
<Operation id="delete" attrgroup="person-delete" />
<Operation id="search" attrgroup="person-search">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
<Property name="sort" value="lastname,firstname" />
</Properties>
</Operation>
<Operation id="pwdchange" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
</Properties>
</Operation>
<Operation id="pwdreset" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
<Property name="reset.password.length" value="8" />
</Properties>
</Operation>
<Operation id="authenticate" attrgroup="person-pwd" />
</Operations>
</Context>
<Context id="Locations-OpenDS-JNDI" enabled="true" definition="Location" connection="OpenDS" association="JNDI-LOCATION">
<Properties>
<Property name="context.description" value="Locations to OpenDS using JNDI" />
<Property name="operation.classname" value="org.openptk.spi.operations.JndiOperations" />
<Property name="key" value="uniqueid" />
<Property name="rdn" value="ou=${uniqueid}" />
<Property name="basedn" value="%{jndi.basedn.locations}" />
<Property name="objectclass" value="organizationalunit" />
<Property name="timeout" value="%{timeout.write}" />
<Property name="search.default.order" value="uniqueid,city,state" />
<Property name="search.operators" value="AND,OR,CONTAINS,EQ" />
</Properties>
<Query type="EQ" name="objectClass" value="organizationalunit" />
<Operations>
<Operation id="create" attrgroup="location-create" />
<Operation id="read" attrgroup="location-read">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
</Properties>
</Operation>
<Operation id="update" attrgroup="location-update" />
<Operation id="delete" attrgroup="location-delete" />
<Operation id="search" attrgroup="location-search">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
<Property name="sort" value="state,city" />
</Properties>
</Operation>
</Operations>
</Context>
<Context id="Customers-OpenDS-JNDI" enabled="true" definition="Customer" connection="OpenDS" association="JNDI-CUSTOMER">
<Properties>
<Property name="context.description" value="Customers to OpenDS using JNDI" />
<Property name="operation.classname" value="org.openptk.spi.operations.JndiOperations" />
<Property name="key" value="uniqueid" />
<Property name="rdn" value="uid=${uniqueid}" />
<Property name="basedn" value="%{jndi.basedn.customers}" />
<Property name="objectclass" value="inetOrgPerson" />
<Property name="timeout" value="%{timeout.write}" />
<Property name="search.default.order" value="lastname,firstname,uniqueid" />
<Property name="search.operators" value="AND,OR,CONTAINS,EQ" />
</Properties>
<Query type="EQ" name="objectClass" value="inetOrgPerson" />
<Operations>
<Operation id="create" attrgroup="customer-create" />
<Operation id="read" attrgroup="customer-read">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
</Properties>
</Operation>
<Operation id="update" attrgroup="customer-update" />
<Operation id="delete" attrgroup="person-delete" />
<Operation id="search" attrgroup="person-search">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
<Property name="sort" value="lastname,firstname" />
</Properties>
</Operation>
<Operation id="pwdchange" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
</Properties>
</Operation>
<Operation id="pwdreset" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
<Property name="reset.password.length" value="8" />
</Properties>
</Operation>
<Operation id="authenticate" attrgroup="person-pwd" />
</Operations>
</Context>
<Context id="Employees-MySQL-JDBC" enabled="true" definition="Person" connection="MySQL" association="JDBC">
<Properties>
<Property name="context.description" value="Employees to MySQL using JDBC" />
<Property name="operation.classname" value="org.openptk.spi.operations.JdbcOperations" />
<Property name="connection.table" value="employees" />
<Property name="key" value="uniqueid" />
<Property name="timeout" value="%{timeout.write}" />
<Property name="search.default.order" value="lastname,firstname,uniqueid" />
<Property name="search.operators" value="AND,OR,CONTAINS,EQ" />
</Properties>
<Model id="Employee">
<Relationships>
<Relationship id="location" context="Locations-MySQL-JDBC"/>
<Relationship id="photo" context="Media-MySQL-JDBC"/>
</Relationships>
</Model>
<Query type="NULL" />
<Operations>
<Operation id="create" attrgroup="person-create" />
<Operation id="read" attrgroup="person-read">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
</Properties>
</Operation>
<Operation id="update" attrgroup="person-update" />
<Operation id="delete" attrgroup="person-delete" />
<Operation id="search" attrgroup="person-search">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
<Property name="sort" value="lastname" />
</Properties>
</Operation>
<Operation id="pwdchange" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
</Properties>
</Operation>
<Operation id="pwdreset" attrgroup="person-pwd">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
<Property name="reset.password.length" value="8" />
</Properties>
</Operation>
<Operation id="authenticate" attrgroup="person-pwd" />
</Operations>
</Context>
<Context id="Locations-MySQL-JDBC" enabled="true" definition="Location" connection="MySQL" association="JDBC-LOCATION">
<Properties>
<Property name="context.description" value="Locations to MySQL using JDBC" />
<Property name="operation.classname" value="org.openptk.spi.operations.JdbcOperations" />
<Property name="connection.table" value="locations" />
<Property name="key" value="uniqueid" />
<Property name="timeout" value="%{timeout.write}" />
<Property name="search.default.order" value="description,uniqueid" />
<Property name="search.operators" value="AND,OR,CONTAINS,EQ" />
</Properties>
<Query type="NULL" />
<Operations>
<Operation id="create" attrgroup="location-create" />
<Operation id="read" attrgroup="location-read">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
</Properties>
</Operation>
<Operation id="update" attrgroup="location-update" />
<Operation id="delete" attrgroup="location-delete" />
<Operation id="search" attrgroup="location-search">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
<Property name="sort" value="state,city" />
</Properties>
</Operation>
</Operations>
</Context>
<Context id="Media-MySQL-JDBC" enabled="true" definition="Media" connection="MySQL" association="JDBC-MEDIA">
<Properties>
<Property name="context.description" value="Media to MySQL using JDBC" />
<Property name="operation.classname" value="org.openptk.spi.operations.JdbcOperations" />
<Property name="connection.table" value="media" />
<Property name="key" value="uniqueid" />
<Property name="timeout" value="%{timeout.write}" />
<Property name="search.default.order" value="name,subject" />
<Property name="search.operators" value="AND,OR,CONTAINS,EQ" />
</Properties>
<Query type="NULL" />
<Operations>
<Operation id="create" attrgroup="media-create" />
<Operation id="read" attrgroup="media-read" />
<Operation id="update" attrgroup="media-update" />
<Operation id="delete" attrgroup="media-delete" />
<Operation id="search" attrgroup="media-search">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
<Property name="sort" value="name" />
</Properties>
</Operation>
</Operations>
</Context>
<Context id="Employees-Hybrid" enabled="false" definition="Person">
<Properties>
<Property name="context.description" value="Person to SPML (create,update,delete) and JNDI (read,search)" />
<Property name="timeout" value="%{timeout.write}" />
<Property name="search.default.order" value="lastname,firstname" />
<Property name="search.operators" value="AND,OR,EQ,CONTAINS" />
</Properties>
<Query type="NULL" />
<Operations>
<Operation id="create" attrgroup="person-create" connection="SunSPML1" association="SPML1">
<Properties>
<Property name="operation.classname" value="org.openptk.spi.operations.SpmlSunOperations" />
<Property name="key" value="uniqueid" />
<Property name="objectclass" value="user" />
</Properties>
<Query type="AND">
<Query type="EQ" name="MemberObjectGroups" value="All People" />
<Query type="EQ" name="objectclass" value="user" />
</Query>
</Operation>
<Operation id="read" attrgroup="person-read" connection="OpenDS" association="JNDI">
<Properties>
<Property name="operation.classname" value="org.openptk.spi.operations.JndiOperations" />
<Property name="key" value="uniqueid" />
<Property name="rdn" value="uid=${uniqueid}" />
<Property name="basedn" value="%{jndi.basedn.employees}" />
<Property name="objectclass" value="inetOrgPerson" />
<Property name="timeout" value="%{timeout.read}" />
</Properties>
<Query type="EQ" name="objectClass" value="inetOrgPerson" />
</Operation>
<Operation id="update" attrgroup="person-update" connection="SunSPML1" association="SPML1">
<Properties>
<Property name="operation.classname" value="org.openptk.spi.operations.SpmlSunOperations" />
<Property name="key" value="uniqueid" />
<Property name="objectclass" value="user" />
</Properties>
<Query type="AND">
<Query type="EQ" name="MemberObjectGroups" value="All People" />
<Query type="EQ" name="objectclass" value="user" />
</Query>
</Operation>
<Operation id="delete" attrgroup="person-delete" connection="SunSPML1" association="SPML1">
<Properties>
<Property name="operation.classname" value="org.openptk.spi.operations.SpmlSunOperations" />
<Property name="key" value="uniqueid" />
<Property name="objectclass" value="user" />
</Properties>
<Query type="AND">
<Query type="EQ" name="MemberObjectGroups" value="All People" />
<Query type="EQ" name="objectclass" value="user" />
</Query>
</Operation>
<Operation id="search" attrgroup="person-search" connection="OpenDS" association="JNDI">
<Properties>
<Property name="operation.classname" value="org.openptk.spi.operations.JndiOperations" />
<Property name="key" value="uniqueid" />
<Property name="rdn" value="uid=${uniqueid}" />
<Property name="basedn" value="%{jndi.basedn.employees}" />
<Property name="objectclass" value="inetOrgPerson" />
<Property name="timeout" value="%{timeout.read}" />
<Property name="sort" value="lastname,firstname" />
</Properties>
<Query type="EQ" name="objectClass" value="inetOrgPerson" />
</Operation>
</Operations>
</Context>
<Context id="Role-SunIdm-SPML1" enabled="false" definition="Role" connection="SunSPML1" association="SPML1-ROLE">
<Properties>
<Property name="context.description" value="Role to Sun Identity Manager using SPML" />
<Property name="operation.classname" value="org.openptk.spi.operations.SpmlSunOperations" />
<Property name="key" value="rolename" />
<Property name="objectclass" value="role" />
<Property name="timeout" value="%{timeout.write}" />
</Properties>
<Query type="EQ" name="objectclass" value="role" />
<Operations>
<Operation id="create" attrgroup="role-create" />
<Operation id="read" attrgroup="role-read">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
</Properties>
</Operation>
<Operation id="update" attrgroup="role-update" />
<Operation id="delete" attrgroup="role-delete">
<Properties>
<Property name="timeout" value="%{timeout.write}" />
</Properties>
</Operation>
<Operation id="search" attrgroup="role-search">
<Properties>
<Property name="timeout" value="%{timeout.read}" />
</Properties>
</Operation>
</Operations>
</Context>
</Contexts>
<!--
Attribute Groups define what attributes to use for a given Operation
Attributes must have been declared in the related Association
-->
<AttrGroups>
<AttrGroup id="person-create">
<Attributes>
<Attribute id="firstname" />
<Attribute id="lastname" />
<Attribute id="email" />
<Attribute id="fullname" />
<Attribute id="roles" />
<Attribute id="manager" />
<Attribute id="title" />
<Attribute id="telephone" />
<Attribute id="organization" />
<Attribute id="password" />
</Attributes>
</AttrGroup>
<AttrGroup id="person-read">
<Attributes>
<Attribute id="firstname" />
<Attribute id="lastname" />
<Attribute id="email" />
<Attribute id="fullname" />
<Attribute id="roles" />
<Attribute id="manager" />
<Attribute id="title" />
<Attribute id="telephone" />
<Attribute id="organization" />
<Attribute id="forgottenPasswordQuestions" />
<Attribute id="forgottenPasswordAnswers" />
<Attribute id="location" />
</Attributes>
</AttrGroup>
<AttrGroup id="person-update">
<Attributes>
<Attribute id="firstname" />
<Attribute id="lastname" />
<Attribute id="email" />
<Attribute id="fullname" />
<Attribute id="roles" />
<Attribute id="manager" />
<Attribute id="title" />
<Attribute id="telephone" />
<Attribute id="organization" />
<Attribute id="forgottenPasswordQuestions" />
<Attribute id="forgottenPasswordAnswers" />
<Attribute id="location" />
</Attributes>
</AttrGroup>
<AttrGroup id="person-delete" />
<AttrGroup id="person-search">
<Attributes>
<Attribute id="firstname" />
<Attribute id="lastname" />
<Attribute id="email" />
<Attribute id="fullname" />
<Attribute id="title" />
<Attribute id="lastcommafirst" />
<Attribute id="manager" />
</Attributes>
</AttrGroup>
<AttrGroup id="person-pwd">
<Attributes>
<Attribute id="password" />
</Attributes>
</AttrGroup>
<AttrGroup id="customer-create">
<Attributes>
<Attribute id="firstname" />
<Attribute id="lastname" />
<Attribute id="email" />
<Attribute id="fullname" />
<Attribute id="roles" />
<Attribute id="manager" />
<Attribute id="title" />
<Attribute id="telephone" />
<Attribute id="organization" />
<Attribute id="password" />
<Attribute id="street" />
<Attribute id="city" />
<Attribute id="state" />
<Attribute id="postalCode" />
</Attributes>
</AttrGroup>
<AttrGroup id="customer-read">
<Attributes>
<Attribute id="firstname" />
<Attribute id="lastname" />
<Attribute id="email" />
<Attribute id="fullname" />
<Attribute id="roles" />
<Attribute id="manager" />
<Attribute id="title" />
<Attribute id="telephone" />
<Attribute id="organization" />
<Attribute id="forgottenPasswordQuestions" />
<Attribute id="forgottenPasswordAnswers" />
<Attribute id="street" />
<Attribute id="city" />
<Attribute id="state" />
<Attribute id="postalCode" />
</Attributes>
</AttrGroup>
<AttrGroup id="customer-update">
<Attributes>
<Attribute id="firstname" />
<Attribute id="lastname" />
<Attribute id="email" />
<Attribute id="fullname" />
<Attribute id="roles" />
<Attribute id="manager" />
<Attribute id="title" />
<Attribute id="telephone" />
<Attribute id="organization" />
<Attribute id="forgottenPasswordQuestions" />
<Attribute id="forgottenPasswordAnswers" />
<Attribute id="street" />
<Attribute id="city" />
<Attribute id="state" />
<Attribute id="postalCode" />
</Attributes>
</AttrGroup>
<!--
<AttrGroup id="authen-forgot"> <Attributes> <Attribute
id="firstname"/> <Attribute id="lastname"/> <Attribute
id="forgottenPasswordQuestions"/> <Attribute
id="forgottenPasswordAnswers"/> <Attribute
id="forgottenPasswordData"/> </Attributes> </AttrGroup>
-->
<AttrGroup id="location-create">
<Attributes>
<Attribute id="description" />
<Attribute id="street" />
<Attribute id="city" />
<Attribute id="state" />
<Attribute id="postalCode" />
</Attributes>
</AttrGroup>
<AttrGroup id="location-read">
<Attributes>
<Attribute id="description" />
<Attribute id="street" />
<Attribute id="city" />
<Attribute id="state" />
<Attribute id="postalCode" />
</Attributes>
</AttrGroup>
<AttrGroup id="location-update">
<Attributes>
<Attribute id="description" />
<Attribute id="street" />
<Attribute id="city" />
<Attribute id="state" />
<Attribute id="postalCode" />
</Attributes>
</AttrGroup>
<AttrGroup id="location-delete" />
<AttrGroup id="location-search">
<Attributes>
<Attribute id="description" />
<Attribute id="city" />
<Attribute id="state" />
</Attributes>
</AttrGroup>
<AttrGroup id="media-create">
<Attributes>
<Attribute id="name" />
<Attribute id="type" />
<Attribute id="length" />
<Attribute id="modified" />
<Attribute id="contextid" />
<Attribute id="subjectid" />
<Attribute id="relationshipid" />
<Attribute id="digest" />
<Attribute id="data" />
</Attributes>
</AttrGroup>
<AttrGroup id="media-read">
<Attributes>
<Attribute id="name" />
<Attribute id="type" />
<Attribute id="length" />
<Attribute id="modified" />
<Attribute id="contextid" />
<Attribute id="subjectid" />
<Attribute id="relationshipid" />
<Attribute id="digest" />
<Attribute id="data" />
</Attributes>
</AttrGroup>
<AttrGroup id="media-update">
<Attributes>
<Attribute id="name" />
<Attribute id="type" />
<Attribute id="length" />
<Attribute id="modified" />
<Attribute id="contextid" />
<Attribute id="subjectid" />
<Attribute id="relationshipid" />
<Attribute id="digest" />
<Attribute id="data" />
</Attributes>
</AttrGroup>
<AttrGroup id="media-delete"/>
<AttrGroup id="media-search">
<Attributes>
<Attribute id="name" />
<Attribute id="contextid" />
<Attribute id="subjectid" />
<Attribute id="relationshipid" />
</Attributes>
</AttrGroup>
<AttrGroup id="role-create">
<Attributes>
<Attribute id="resources" />
<Attribute id="description" />
<Attribute id="owner" />
</Attributes>
</AttrGroup>
<AttrGroup id="role-read">
<Attributes>
<Attribute id="resources" />
<Attribute id="description" />
<Attribute id="owner" />
</Attributes>
</AttrGroup>
<AttrGroup id="role-update">
<Attributes>
<Attribute id="resources" />
<Attribute id="description" />
<Attribute id="owner" />
</Attributes>
</AttrGroup>
<AttrGroup id="role-delete" />
<AttrGroup id="role-search">
<Attributes>
<Attribute id="description" />
</Attributes>
</AttrGroup>
</AttrGroups>
<!--
Maps OpenPTK Framework Attribute names to Service Attribute names
Framework Attributes NOT listed in a given Association will be treated
as "pass through", their Framework Attribute name will be used for
their Service Attribute name. Declares the Atributes that are
available in a given "Service" All of the Attributes must be defined
in the "associated" Definition Association Attributes can
override/compliment "settings" from their Definition
-->
<Associations>
<Association id="SPML1">
<Attributes>
<Attribute id="uniqueid" servicename="uid" />
<Attribute id="firstname" servicename="gn" />
<Attribute id="lastname" servicename="sn" />
<Attribute id="fullname" servicename="cn" />
<Attribute id="lastcommafirst" />
<Attribute id="password" servicename="password" required="true" />
<Attribute id="email" />
<Attribute id="roles" />
<Attribute id="manager" />
<Attribute id="title" />
<Attribute id="telephone" />
<Attribute id="organization" />
<Attribute id="forgottenPasswordQuestions" />
<Attribute id="forgottenPasswordAnswers" />
<Attribute id="forgottenPasswordData" />
</Attributes>
</Association>
<Association id="SPML2">
<Attributes>
<Attribute id="uniqueid" servicename="accountId" />
<Attribute id="firstname" servicename="firstname" />
<Attribute id="lastname" servicename="lastname" />
<Attribute id="fullname" servicename="fullname" />
<Attribute id="lastcommafirst" />
<Attribute id="password" servicename="credentials" required="true" />
<Attribute id="email" servicename="emailAddress" />
<Attribute id="roles" />
<Attribute id="manager" />
<Attribute id="title" />
<Attribute id="telephone" />
<Attribute id="organization" />
<Attribute id="forgottenPasswordQuestions" />
<Attribute id="forgottenPasswordAnswers" />
<Attribute id="forgottenPasswordData" />
</Attributes>
</Association>
<Association id="SPE">
<Attributes>
<Attribute id="uniqueid" servicename="uid" />
<Attribute id="firstname" />
<Attribute id="lastname" />
<Attribute id="fullname" required="true" />
<Attribute id="email" />
<Attribute id="title" />
<Attribute id="telephone" />
<Attribute id="organization" />
<Attribute id="password" />
<Attribute id="lastcommafirst" />
<Attribute id="manager" />
<Attribute id="roles" />
<Attribute id="forgottenPasswordQuestions" />
<Attribute id="forgottenPasswordAnswers" />
<Attribute id="forgottenPasswordData" />
</Attributes>
</Association>
<Association id="JNDI">
<Attributes>
<Attribute id="uniqueid" servicename="uid" />
<Attribute id="firstname" servicename="givenName" />
<Attribute id="lastname" servicename="sn" />
<Attribute id="fullname" servicename="cn" required="true" />
<Attribute id="email" servicename="mail" />
<Attribute id="title" />
<Attribute id="telephone" servicename="telephoneNumber" />
<Attribute id="organization" servicename="departmentNumber" />
<Attribute id="password" servicename="userPassword" />
<Attribute id="manager">
<Functions>
<Function id="getUid" classname="org.openptk.definition.functions.SubString">
<Arguments>
<Argument name="after" type="literal" value="uid=" />
<Argument name="before" type="literal" value="," />
</Arguments>
<Operations>
<Operation type="read" />
<Operation type="search" />
</Operations>
</Function>
<Function id="buildDN" classname="org.openptk.definition.functions.ConcatStrings">
<Arguments>
<Argument name="prefix" type="literal" value="uid=" />
<Argument name="uid" type="attribute" value="manager" />
<Argument name="basedn" type="literal" value=",%{jndi.basedn.employees}" />
</Arguments>
<Operations>
<Operation type="create" />
<Operation type="update" />
<Operation type="search" mode="TOSERVICE" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="roles" servicename="businessCategory" />
<Attribute id="lastcommafirst" />
<Attribute id="forgottenPasswordQuestions">
<Functions>
<Function id="readPwdQuestions" classname="org.openptk.definition.functions.ForgottenPassword">
<Arguments>
<Argument name="data" type="attribute" value="forgottenPasswordData" />
<Argument name="questions" type="attribute" value="forgottenPasswordQuestions" />
<Argument name="answers" type="attribute" value="forgottenPasswordAnswers" />
<Argument name="innerdelimiter" type="literal" value="=" />
<Argument name="outerdelimiter" type="literal" value="+" />
<Argument name="default" type="literal" value="Mothers Maiden Name,City you were born,Last 4 digits of Frequent Flyer" />
</Arguments>
<Operations>
<Operation type="read" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="forgottenPasswordAnswers">
<Functions>
<Function id="updatePwdAnswers" classname="org.openptk.definition.functions.ForgottenPassword">
<Arguments>
<Argument name="data" type="attribute" value="forgottenPasswordData" />
<Argument name="questions" type="attribute" value="forgottenPasswordQuestions" />
<Argument name="answers" type="attribute" value="forgottenPasswordAnswers" />
<Argument name="innerdelimiter" type="literal" value="=" />
<Argument name="outerdelimiter" type="literal" value="+" />
<Argument name="minlength" type="literal" value="3" />
</Arguments>
<Operations>
<Operation type="read" />
<Operation type="update" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="forgottenPasswordData" servicename="destinationIndicator" />
<Attribute id="location" servicename="physicalDeliveryOfficeName" />
</Attributes>
</Association>
<Association id="JNDI-CUSTOMER">
<Attributes>
<Attribute id="uniqueid" servicename="uid" />
<Attribute id="firstname" servicename="givenName" />
<Attribute id="lastname" servicename="sn" />
<Attribute id="fullname" servicename="cn" required="true" />
<Attribute id="email" servicename="mail" />
<Attribute id="title" />
<Attribute id="telephone" servicename="telephoneNumber" />
<Attribute id="organization" servicename="departmentNumber" />
<Attribute id="password" servicename="userPassword" />
<Attribute id="manager">
<Functions>
<Function id="getUid" classname="org.openptk.definition.functions.SubString">
<Arguments>
<Argument name="after" type="literal" value="uid=" />
<Argument name="before" type="literal" value="," />
</Arguments>
<Operations>
<Operation type="read" />
<Operation type="search" />
</Operations>
</Function>
<Function id="buildDN" classname="org.openptk.definition.functions.ConcatStrings">
<Arguments>
<Argument name="prefix" type="literal" value="uid=" />
<Argument name="uid" type="attribute" value="manager" />
<Argument name="basedn" type="literal" value=",%{jndi.basedn.employees}" />
</Arguments>
<Operations>
<Operation type="create" />
<Operation type="update" />
<Operation type="search" mode="TOSERVICE" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="roles" servicename="businessCategory" />
<Attribute id="lastcommafirst" />
<Attribute id="forgottenPasswordQuestions">
<Functions>
<Function id="readPwdQuestions" classname="org.openptk.definition.functions.ForgottenPassword">
<Arguments>
<Argument name="data" type="attribute" value="forgottenPasswordData" />
<Argument name="questions" type="attribute" value="forgottenPasswordQuestions" />
<Argument name="answers" type="attribute" value="forgottenPasswordAnswers" />
<Argument name="innerdelimiter" type="literal" value="=" />
<Argument name="outerdelimiter" type="literal" value="+" />
<Argument name="default" type="literal" value="Mothers Maiden Name,City you were born,Last 4 digits of Frequent Flyer" />
</Arguments>
<Operations>
<Operation type="read" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="forgottenPasswordAnswers">
<Functions>
<Function id="updatePwdAnswers" classname="org.openptk.definition.functions.ForgottenPassword">
<Arguments>
<Argument name="data" type="attribute" value="forgottenPasswordData" />
<Argument name="questions" type="attribute" value="forgottenPasswordQuestions" />
<Argument name="answers" type="attribute" value="forgottenPasswordAnswers" />
<Argument name="innerdelimiter" type="literal" value="=" />
<Argument name="outerdelimiter" type="literal" value="+" />
<Argument name="minlength" type="literal" value="3" />
</Arguments>
<Operations>
<Operation type="read" />
<Operation type="update" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="forgottenPasswordData" servicename="destinationIndicator" />
<Attribute id="street" />
<Attribute id="city" servicename="l" />
<Attribute id="state" servicename="st" />
<Attribute id="postalCode" />
</Attributes>
</Association>
<Association id="JNDI-LOCATION">
<Attributes>
<Attribute id="uniqueid" servicename="ou" />
<Attribute id="description" servicename="description" />
<Attribute id="street" />
<Attribute id="city" servicename="postalAddress" />
<Attribute id="state" servicename="st" />
<Attribute id="postalCode" />
</Attributes>
</Association>
<Association id="JDBC">
<Attributes>
<Attribute id="uniqueid" servicename="id" />
<Attribute id="firstname" servicename="fname" />
<Attribute id="lastname" servicename="lname" />
<Attribute id="fullname" servicename="fullname" required="true" />
<Attribute id="password" />
<Attribute id="email" />
<Attribute id="title" />
<Attribute id="telephone" />
<Attribute id="manager" />
<Attribute id="roles" />
<Attribute id="organization" servicename="org" />
<Attribute id="location" />
<Attribute id="lastcommafirst" />
<Attribute id="forgottenPasswordQuestions" />
<Attribute id="forgottenPasswordAnswers" />
<Attribute id="forgottenPasswordData" servicename="forgotdata" />
</Attributes>
</Association>
<Association id="JDBC-LOCATION">
<Attributes>
<Attribute id="uniqueid" servicename="id" />
<Attribute id="description" />
<Attribute id="street" />
<Attribute id="city" />
<Attribute id="state" />
<Attribute id="postalCode" />
</Attributes>
</Association>
<Association id="JDBC-MEDIA">
<Attributes>
<Attribute id="uniqueid" servicename="uuid" />
<Attribute id="name" />
<Attribute id="type" />
<Attribute id="length" servicename="size"/>
<Attribute id="modified" />
<Attribute id="contextid" servicename="context"/>
<Attribute id="subjectid" servicename="subject"/>
<Attribute id="relationshipid" servicename="relationship"/>
<Attribute id="digest" />
<Attribute id="data" />
</Attributes>
</Association>
<Association id="SPML1-ROLE">
<Attributes>
<Attribute id="rolename" />
<Attribute id="description" />
<Attribute id="owner" />
</Attributes>
</Association>
</Associations>
<!--
These are related to the OpenPTK Subject Interface and it's API A
Definition contains Properties and Atttributes Each Attribute (within
a Definition) supports a number of "well known" Properties. Here are
the defaults: type = String multivalued = false required = false
encrypted = false access = public
-->
<Definitions>
<Definition id="Person">
<Properties>
<Property name="definition.classname" value="org.openptk.definition.BasicSubject" />
<Property name="definition.description" value="A generic employee,partner,consultant" />
<Property name="definition.password" value="password" />
<Property name="definition.role" value="Roles" />
</Properties>
<Attributes>
<Attribute id="uniqueid" required="true">
<Functions>
<Function id="FirstInitialLastName" useexisting="true" classname="org.openptk.definition.functions.FirstInitialLastname">
<Arguments>
<Argument name="first" type="attribute" value="firstname" />
<Argument name="last" type="attribute" value="lastname" />
<Argument name="maxlength" type="literal" value="8" />
</Arguments>
<Operations>
<Operation type="create" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="firstname" required="true" >
<Properties>
<Property name="widget.displayname" value="First Name" />
<Property name="widget.type" value="textfield" />
<Property name="widget.width" value="32" />
<Property name="value.min" value="2" />
<Property name="value.max" value="30" />
</Properties>
</Attribute>
<Attribute id="lastname" required="true" />
<Attribute id="title" />
<Attribute id="password" encrypted="true">
<Functions>
<Function id="Concat" useexisting="true" classname="org.openptk.definition.functions.ConcatStrings">
<Arguments>
<Argument name="initialPassword" type="literal" value="Passw0rd" />
</Arguments>
<Operations>
<Operation type="create" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="email" required="false">
<Functions>
<Function id="Concat" useexisting="true" classname="org.openptk.definition.functions.ConcatStrings">
<Arguments>
<Argument name="first" type="attribute" value="firstname" />
<Argument name="dot" type="literal" value="." />
<Argument name="last" type="attribute" value="lastname" />
<Argument name="at" type="literal" value="@" />
<Argument name="domainname" type="literal" value="openptk.org" />
</Arguments>
<Operations>
<Operation type="create" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="lastcommafirst" virtual="true">
<Functions>
<Function id="OutputLastFirst" classname="org.openptk.definition.functions.ConcatStrings">
<Arguments>
<Argument name="arg1" type="attribute" value="lastname" />
<Argument name="arg2" type="literal" value=", " />
<Argument name="arg3" type="attribute" value="firstname" />
</Arguments>
<Operations>
<Operation type="read" />
<Operation type="search" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="fullname" required="false">
<Functions>
<Function id="Concat" useexisting="true" classname="org.openptk.definition.functions.ConcatStrings">
<Arguments>
<Argument name="arg1" type="attribute" value="firstname" />
<Argument name="arg2" type="literal" value=" " />
<Argument name="arg3" type="attribute" value="lastname" />
</Arguments>
<Operations>
<Operation type="create" />
<Operation type="update" />
<Operation type="read" />
<Operation type="search" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="forgottenPasswordQuestions" multivalued="true" virtual="true">
<Functions>
<Function id="readPwdQuestions" classname="org.openptk.definition.functions.ForgottenPassword">
<Arguments>
<Argument name="data" type="attribute" value="forgottenPasswordData" />
<Argument name="questions" type="attribute" value="forgottenPasswordQuestions" />
<Argument name="answers" type="attribute" value="forgottenPasswordAnswers" />
<Argument name="innerdelimiter" type="literal" value="|" />
<Argument name="outerdelimiter" type="literal" value="^" />
<Argument name="default" type="literal" value="Mothers Maiden Name,City you were born,Last 4 digits of Frequent Flyer" />
</Arguments>
<Operations>
<Operation type="read" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="forgottenPasswordAnswers" multivalued="true" virtual="true" access="private">
<Functions>
<Function id="updatePwdAnswers" classname="org.openptk.definition.functions.ForgottenPassword">
<Arguments>
<Argument name="data" type="attribute" value="forgottenPasswordData" />
<Argument name="questions" type="attribute" value="forgottenPasswordQuestions" />
<Argument name="answers" type="attribute" value="forgottenPasswordAnswers" />
<Argument name="innerdelimiter" type="literal" value="|" />
<Argument name="outerdelimiter" type="literal" value="^" />
<Argument name="minlength" type="literal" value="3" />
</Arguments>
<Operations>
<Operation type="read" />
<Operation type="update" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="forgottenPasswordData" access="private" />
<Attribute id="roles" multivalued="true" />
<Attribute id="manager" />
<Attribute id="telephone" />
<Attribute id="organization" />
<Attribute id="objectclass" />
<Attribute id="location" />
</Attributes>
</Definition>
<Definition id="Customer">
<Properties>
<Property name="definition.classname" value="org.openptk.definition.BasicSubject" />
<Property name="definition.description" value="A generic customer" />
<Property name="definition.password" value="password" />
<Property name="definition.role" value="Roles" />
</Properties>
<Attributes>
<Attribute id="uniqueid" required="true">
<Functions>
<Function id="FirstInitialLastName" useexisting="true" classname="org.openptk.definition.functions.FirstInitialLastname">
<Arguments>
<Argument name="first" type="attribute" value="firstname" />
<Argument name="last" type="attribute" value="lastname" />
<Argument name="maxlength" type="literal" value="8" />
</Arguments>
<Operations>
<Operation type="create" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="firstname" required="true" >
<Properties>
<Property name="widget.displayname" value="First Name" />
<Property name="widget.type" value="textfield" />
<Property name="widget.width" value="32" />
<Property name="value.min" value="2" />
<Property name="value.max" value="30" />
</Properties>
</Attribute>
<Attribute id="lastname" required="true" />
<Attribute id="title" />
<Attribute id="password" encrypted="true">
<Functions>
<Function id="Concat" useexisting="true" classname="org.openptk.definition.functions.ConcatStrings">
<Arguments>
<Argument name="initialPassword" type="literal" value="Passw0rd" />
</Arguments>
<Operations>
<Operation type="create" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="email" required="false">
<Functions>
<Function id="Concat" useexisting="true" classname="org.openptk.definition.functions.ConcatStrings">
<Arguments>
<Argument name="first" type="attribute" value="firstname" />
<Argument name="dot" type="literal" value="." />
<Argument name="last" type="attribute" value="lastname" />
<Argument name="at" type="literal" value="@" />
<Argument name="domainname" type="literal" value="openptk.org" />
</Arguments>
<Operations>
<Operation type="create" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="lastcommafirst" virtual="true">
<Functions>
<Function id="OutputLastFirst" classname="org.openptk.definition.functions.ConcatStrings">
<Arguments>
<Argument name="arg1" type="attribute" value="lastname" />
<Argument name="arg2" type="literal" value=", " />
<Argument name="arg3" type="attribute" value="firstname" />
</Arguments>
<Operations>
<Operation type="read" />
<Operation type="search" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="fullname" required="false">
<Functions>
<Function id="Concat" useexisting="true" classname="org.openptk.definition.functions.ConcatStrings">
<Arguments>
<Argument name="arg1" type="attribute" value="firstname" />
<Argument name="arg2" type="literal" value=" " />
<Argument name="arg3" type="attribute" value="lastname" />
</Arguments>
<Operations>
<Operation type="create" />
<Operation type="update" />
<Operation type="read" />
<Operation type="search" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="forgottenPasswordQuestions" multivalued="true" virtual="true">
<Functions>
<Function id="readPwdQuestions" classname="org.openptk.definition.functions.ForgottenPassword">
<Arguments>
<Argument name="data" type="attribute" value="forgottenPasswordData" />
<Argument name="questions" type="attribute" value="forgottenPasswordQuestions" />
<Argument name="answers" type="attribute" value="forgottenPasswordAnswers" />
<Argument name="innerdelimiter" type="literal" value="|" />
<Argument name="outerdelimiter" type="literal" value="^" />
<Argument name="default" type="literal" value="Mothers Maiden Name,City you were born,Last 4 digits of Frequent Flyer" />
</Arguments>
<Operations>
<Operation type="read" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="forgottenPasswordAnswers" multivalued="true" virtual="true" access="private">
<Functions>
<Function id="updatePwdAnswers" classname="org.openptk.definition.functions.ForgottenPassword">
<Arguments>
<Argument name="data" type="attribute" value="forgottenPasswordData" />
<Argument name="questions" type="attribute" value="forgottenPasswordQuestions" />
<Argument name="answers" type="attribute" value="forgottenPasswordAnswers" />
<Argument name="innerdelimiter" type="literal" value="|" />
<Argument name="outerdelimiter" type="literal" value="^" />
<Argument name="minlength" type="literal" value="3" />
</Arguments>
<Operations>
<Operation type="read" />
<Operation type="update" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="forgottenPasswordData" access="private" />
<Attribute id="roles" multivalued="true" />
<Attribute id="manager" />
<Attribute id="telephone" />
<Attribute id="organization" />
<Attribute id="objectclass" />
<Attribute id="street" />
<Attribute id="city" />
<Attribute id="state" />
<Attribute id="postalCode" />
</Attributes>
</Definition>
<Definition id="Location">
<Properties>
<Property name="definition.classname" value="org.openptk.definition.BasicSubject" />
<Property name="definition.description" value="A location" />
</Properties>
<Attributes>
<Attribute id="uniqueid" required="true"/>
<Attribute id="description" />
<Attribute id="objectclass" />
<Attribute id="street" />
<Attribute id="city" />
<Attribute id="state" />
<Attribute id="postalCode" />
</Attributes>
</Definition>
<Definition id="Media">
<Properties>
<Property name="definition.classname" value="org.openptk.definition.BasicSubject" />
<Property name="definition.description" value="Media Repository" />
</Properties>
<Attributes>
<Attribute id="uniqueid" required="true">
<Functions>
<Function id="CtxSubRel" classname="org.openptk.definition.functions.ConcatStrings">
<Arguments>
<Argument name="arg1" type="attribute" value="contextid" />
<Argument name="arg2" type="literal" value="-" />
<Argument name="arg3" type="attribute" value="subjectid" />
<Argument name="arg4" type="literal" value="-" />
<Argument name="arg5" type="attribute" value="relationshipid" />
</Arguments>
<Operations>
<Operation type="create" />
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="name" />
<Attribute id="type" />
<Attribute id="length" required="true" type="integer"/>
<Attribute id="modified" required="true">
<Functions>
<Function id="DateTime" classname="org.openptk.definition.functions.DateTimeStamp">
<Operations>
<Operation type="create"/>
<Operation type="update"/>
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="contextid" />
<Attribute id="subjectid" />
<Attribute id="relationshipid" />
<Attribute id="digest" required="true" >
<Functions>
<Function id="Digest" classname="org.openptk.definition.functions.CalculateDigest">
<Arguments>
<Argument name="data" type="attribute" value="data" />
</Arguments>
<Operations>
<Operation type="create"/>
<Operation type="update"/>
</Operations>
</Function>
</Functions>
</Attribute>
<Attribute id="data" type="object" required="true" />
</Attributes>
</Definition>
<Definition id="Role">
<Properties>
<Property name="definition.classname" value="org.openptk.definition.BasicSubject" />
<Property name="definition.description" value="A business level role" />
</Properties>
<Attributes>
<Attribute id="rolename" required="true" />
<Attribute id="resources" />
<Attribute id="description" />
<Attribute id="owner" />
</Attributes>
</Definition>
</Definitions>
<!--
========== Connections === Connection Properties for a given Service
-->
<Connections>
<Properties>
<Property name="service.classname" value="org.openptk.spi.BasicService" />
</Properties>
<Connection id="SunSPML1">
<Properties>
<Property name="connection.description" value="Sun Identity Manager Lighthouse client (SPML1)" />
<Property name="url" value="%{spml1.url}" />
<Property name="user.name" value="%{spml1.user.name}" />
<Property name="user.password.encrypted" value="%{spml1.user.password.encrypted}" />
<Property name="spmlTrace" value="false" />
</Properties>
</Connection>
<Connection id="SunSPML2">
<Properties>
<Property name="connection.description" value="Sun Identity Manager Session Aware client (SPML2)" />
<Property name="url" value="%{spml2.url}" />
<Property name="user.name" value="%{spml2.user.name}" />
<Property name="user.password.encrypted" value="%{spml2.user.password.encrypted}" />
<Property name="spmlTrace" value="false" />
</Properties>
</Connection>
<Connection id="OpenDS">
<Properties>
<Property name="connection.description" value="OpenDS 1.0" />
<Property name="url" value="%{jndi.url}" />
<Property name="user.name" value="%{jndi.user.name}" />
<Property name="user.password.encrypted" value="%{jndi.user.password.encrypted}" />
</Properties>
</Connection>
<Connection id="MySQL">
<Properties>
<Property name="connection.description" value="MySQL 5.0.x" />
<Property name="url" value="%{jdbc.url}" />
<Property name="user.name" value="%{jdbc.user.name}" />
<Property name="user.password.encrypted" value="%{jdbc.user.password.encrypted}" />
<Property name="driver" value="%{jdbc.driver}" />
</Properties>
</Connection>
</Connections>
<!--
The Loggers for recording audit and debug information
-->
<Loggers>
<Logger id="UnixLogFile">
<Properties>
<Property name="logger.classname" value="org.openptk.logging.AtomicLogger" />
<Property name="file" value="/var/tmp/openptk.log" />
</Properties>
</Logger>
</Loggers>
<!--
Security related information
-->
<Security>
<Encryptions>
<Encryption id="PBEWithMD5AndDES">
<Properties>
<Property name="crypto.classname" value="org.openptk.crypto.DESCrypto" />
</Properties>
</Encryption>
</Encryptions>
<!--
Authentication mechanisms
-->
<Authenticators>
<Authenticator id="Anonymous" level="ANON">
<Properties>
<Property name="authenticator.classname" value="org.openptk.authen.AnonAuthenticator"/>
<Property name="authenticator.description" value="Anonymous User"/>
</Properties>
</Authenticator>
<Authenticator id="Employees-IdPass-JDBC" level="USER">
<Properties>
<Property name="authenticator.classname" value="org.openptk.authen.IdPassServiceAuthenticator"/>
<Property name="authenticator.context" value="Employees-MySQL-JDBC"/>
<Property name="authenticator.description" value="Employees with User ID and Password verified against JDBC"/>
</Properties>
</Authenticator>
<Authenticator id="Employees-IdPass-LDAP" level="USER">
<Properties>
<Property name="authenticator.classname" value="org.openptk.authen.IdPassServiceAuthenticator"/>
<Property name="authenticator.context" value="Employees-OpenDS-JNDI"/>
<Property name="authenticator.description" value="Employees with User ID and Password verified against LDAP"/>
</Properties>
</Authenticator>
<Authenticator id="Employees-Token-LDAP" level="USER">
<Properties>
<Property name="authenticator.classname" value="org.openptk.authen.TokenAuthenticator"/>
<Property name="authenticator.context" value="Employees-OpenDS-JNDI"/>
<Property name="authenticator.description" value="Employees with HTTP Header token verified against LDAP"/>
</Properties>
</Authenticator>
<Authenticator id="OpenPTK-config" level="SYSTEM">
<Properties>
<Property name="authenticator.classname" value="org.openptk.authen.IdPassSystemAuthenticator"/>
<Property name="authenticator.description" value="OpenPTK config against internal admin credentials"/>
</Properties>
</Authenticator>
</Authenticators>
</Security>
<!--
Client information
-->
<Clients>
<Client id="anon">
<Authenticators>
<Authenticator id="Anonymous"/>
</Authenticators>
<Contexts default="Employees-MySQL-JDBC">
<Context id="Employees-MySQL-JDBC" />
<Context id="Employees-OpenDS-JNDI" />
</Contexts>
</Client>
<Client id="server">
<Authenticators>
<Authenticator id="Employees-IdPass-LDAP"/>
<Authenticator id="Employees-IdPass-JDBC"/>
<Authenticator id="OpenPTK-config"/>
</Authenticators>
<Contexts default="Employees-MySQL-JDBC">
<Context id="Employees-MySQL-JDBC" />
<Context id="Employees-OpenDS-JNDI" />
</Contexts>
</Client>
<Client id="portal" secret="gKZo9rUyLeY56vSsFpR4J9GJ">
<Authenticators>
<Authenticator id="Anonymous"/>
<Authenticator id="Employees-Token-LDAP"/>
</Authenticators>
<Contexts default="Employees-MySQL-JDBC">
<Context id="Employees-MySQL-JDBC" />
<Context id="Employees-OpenDS-JNDI" />
</Contexts>
</Client>
<Client id="uml" secret="WeacAymEnZqP34gDQuNfDsHE">
<Authenticators>
<Authenticator id="Anonymous"/>
<Authenticator id="Employees-IdPass-LDAP"/>
<Authenticator id="Employees-IdPass-JDBC"/>
</Authenticators>
<Contexts default="Employees-MySQL-JDBC">
<Context id="Employees-MySQL-JDBC" />
<Context id="Employees-OpenDS-JNDI" />
</Contexts>
</Client>
<Client id="console" secret="tLlGZ1rkok865iEmvomJEl4Z">
<Authenticators>
<Authenticator id="Anonymous"/>
<Authenticator id="Employees-IdPass-JDBC"/>
</Authenticators>
<Contexts default="Employees-MySQL-JDBC">
<Context id="Employees-MySQL-JDBC" />
<Context id="Employees-OpenDS-JNDI" />
</Contexts>
</Client>
<Client id="apitest" secret="McP7NoBoPTPHrJZLfXsnDEod">
<Authenticators>
<Authenticator id="Anonymous"/>
<Authenticator id="Employees-Token-LDAP"/>
<Authenticator id="Employees-IdPass-LDAP"/>
</Authenticators>
<Contexts default="Employees-MySQL-JDBC">
<Context id="Employees-MySQL-JDBC" />
<Context id="Employees-OpenDS-JNDI" />
</Contexts>
</Client>
<Client id="taglibtest" secret="N343EhOmFig6XL1liUuRIvmf">
<Authenticators>
<Authenticator id="Anonymous"/>
<Authenticator id="Employees-IdPass-LDAP"/>
</Authenticators>
<Contexts default="Employees-MySQL-JDBC">
<Context id="Employees-MySQL-JDBC" />
<Context id="Employees-OpenDS-JNDI" />
</Contexts>
</Client>
</Clients>
<!--
Models
-->
<Models>
<Properties>
<Property name="model.classname" value="org.openptk.model.BasicModel"/>
</Properties>
<Model id="Employee">
<Properties>
<Property name="model.description" value="Person that has Organization and Location information"/>
</Properties>
<Relationships>
<Relationship id="directReports">
<Properties>
<Property name="relationship.classname" value="org.openptk.model.ChildrenRelationship"/>
<Property name="relationship.description" value="List of children for a Subject"/>
</Properties>
<Query type="EQ" name="manager" value="${uniqueid}"/>
</Relationship>
<Relationship id="reportsTo">
<Properties>
<Property name="relationship.classname" value="org.openptk.model.AncestorsRelationship"/>
<Property name="relationship.description" value="List (ordered) of ancestors for a Subject"/>
</Properties>
<Query type="EQ" name="uniqueid" value="${manager}"/>
</Relationship>
<Relationship id="organization">
<Properties>
<Property name="relationship.classname" value="org.openptk.model.OrganizationRelationship"/>
<Property name="relationship.description" value="List (ordered) of the Subject organization"/>
</Properties>
<Query type="EQ" name="uniqueid" value="${manager}"/>
</Relationship>
<Relationship id="peers">
<Properties>
<Property name="relationship.classname" value="org.openptk.model.SiblingsRelationship"/>
<Property name="relationship.description" value="List of siblings for a Subject"/>
</Properties>
<Query type="EQ" name="manager" value="${manager}"/>
</Relationship>
<Relationship id="location">
<Properties>
<Property name="relationship.classname" value="org.openptk.model.SubjectRelationship" />
<Property name="relationship.description" value="Location related Subject" />
<Property name="relationship.uniqueid.attribute" value="location" />
</Properties>
</Relationship>
<Relationship id="photo">
<Properties>
<Property name="relationship.classname" value="org.openptk.model.MediaRelationship" />
<Property name="relationship.description" value="Employee photo" />
</Properties>
</Relationship>
</Relationships>
<Views>
<View id="extended">
<Relationships>
<Relationship id="location"/>
<Relationship id="organization"/>
<Relationship id="peers"/>
<Relationship id="directReports"/>
</Relationships>
</View>
<View id="address">
<Relationships>
<Relationship id="location"/>
</Relationships>
</View>
</Views>
</Model>
</Models>
<!--
Converter Rules for the Structures
-->
<Converters>
<Converter type="json" classname="org.openptk.structure.JsonConverter">
<Structures>
<Structure id="results">
<Properties>
<Property name="children" value="list"/>
</Properties>
</Structure>
</Structures>
</Converter>
<Converter type="xml" classname="org.openptk.structure.XmlConverter"/>
<Converter type="html" classname="org.openptk.structure.HtmlConverter"/>
<Converter type="plain" classname="org.openptk.structure.PlainConverter"/>
</Converters>
</OpenPTK>