<?xml version="1.0"?>
<plugin-registry>
 <plugin-type id="IExtractionPlugin" title="extraction"
              description="Extraction plugins are responsible for extracting credentials from the request."
              interface="Products.PluggableAuthService.interfaces.plugins.IExtractionPlugin">
  <plugin id="basic_auth"/>
 </plugin-type>
 <plugin-type id="IAuthenticationPlugin"
              title="authentication"
              description="Authentication plugins are responsible for validating credentials generated by the Extraction Plugin."
              interface="Products.PluggableAuthService.interfaces.plugins.IAuthenticationPlugin">
  <plugin id="users"/>
 </plugin-type>
 <plugin-type id="IChallengePlugin" title="challenge"
              description="Challenge plugins initiate a challenge to the user to provide credentials."
              interface="Products.PluggableAuthService.interfaces.plugins.IChallengePlugin">
  <plugin id="basic_auth"/>
 </plugin-type>
 <plugin-type id="ICredentialsUpdatePlugin"
              title="update credentials"
              description="Credential update plugins respond to the user changing credentials."
              interface="Products.PluggableAuthService.interfaces.plugins.ICredentialsUpdatePlugin">
 </plugin-type>
 <plugin-type id="ICredentialsResetPlugin"
              title="reset credentials"
              description="Credential clear plugins respond to a user logging out."
              interface="Products.PluggableAuthService.interfaces.plugins.ICredentialsResetPlugin">
  <plugin id="basic_auth"/>
 </plugin-type>
 <plugin-type id="IUserFactoryPlugin" title="userfactory"
              description="Create users."
              interface="Products.PluggableAuthService.interfaces.plugins.IUserFactoryPlugin">
 </plugin-type>
 <plugin-type id="IAnonymousUserFactoryPlugin"
              title="anonymoususerfactory"
              description="Create anonymous users."
              interface="Products.PluggableAuthService.interfaces.plugins.IAnonymousUserFactoryPlugin">
 </plugin-type>
 <plugin-type id="IPropertiesPlugin" title="properties"
              description="Properties plugins generate property sheets for users."
              interface="Products.PluggableAuthService.interfaces.plugins.IPropertiesPlugin">
 </plugin-type>
 <plugin-type id="IGroupsPlugin" title="groups"
              description="Groups plugins determine the groups to which a user belongs."
              interface="Products.PluggableAuthService.interfaces.plugins.IGroupsPlugin">
  <plugin id="groups"/>
  <plugin id="dynamic_groups"/>
  <plugin id="recursive_groups"/>
 </plugin-type>
 <plugin-type id="IRolesPlugin" title="roles"
              description="Roles plugins determine the global roles which a user has."
              interface="Products.PluggableAuthService.interfaces.plugins.IRolesPlugin">
  <plugin id="roles"/>
 </plugin-type>
 <plugin-type id="IUpdatePlugin" title="update"
              description="Update plugins allow the user or the application to update the user's properties."
              interface="Products.PluggableAuthService.interfaces.plugins.IUpdatePlugin">
 </plugin-type>
 <plugin-type id="IValidationPlugin" title="validation"
              description="Validation plugins specify allowable values for user properties (e.g., minimum password length, allowed characters, etc.)"
              interface="Products.PluggableAuthService.interfaces.plugins.IValidationPlugin">
 </plugin-type>
 <plugin-type id="IUserEnumerationPlugin"
              title="user_enumeration"
              description="Enumeration plugins allow querying users by ID, and searching for users who match particular criteria."
              interface="Products.PluggableAuthService.interfaces.plugins.IUserEnumerationPlugin">
  <plugin id="users"/>
 </plugin-type>
 <plugin-type id="IUserAdderPlugin" title="user_adder"
              description="User Adder plugins allow the Pluggable Auth Service to create users."
              interface="Products.PluggableAuthService.interfaces.plugins.IUserAdderPlugin">
  <plugin id="users"/>
 </plugin-type>
 <plugin-type id="IGroupEnumerationPlugin"
              title="group_enumeration"
              description="Enumeration plugins allow querying groups by ID."
              interface="Products.PluggableAuthService.interfaces.plugins.IGroupEnumerationPlugin">
  <plugin id="groups"/>
  <plugin id="dynamic_groups"/>
 </plugin-type>
 <plugin-type id="IRoleEnumerationPlugin"
              title="role_enumeration"
              description="Enumeration plugins allow querying roles by ID."
              interface="Products.PluggableAuthService.interfaces.plugins.IRoleEnumerationPlugin">
  <plugin id="roles"/>
 </plugin-type>
 <plugin-type id="IRoleAssignerPlugin" title="role_assigner"
              description="Role Assigner plugins allow the Pluggable Auth Service to assign roles to principals."
              interface="Products.PluggableAuthService.interfaces.plugins.IRoleAssignerPlugin">
  <plugin id="roles"/>
 </plugin-type>
 <plugin-type id="IChallengeProtocolChooser"
              title="challenge_protocol_chooser"
              description="Challenge Protocol Chooser plugins decide what authorizationprotocol to use for a given request type."
              interface="Products.PluggableAuthService.interfaces.plugins.IChallengeProtocolChooser">
 </plugin-type>
 <plugin-type id="IRequestTypeSniffer"
              title="request_type_sniffer"
              description="Request Type Sniffer plugins detect the type of an incoming request."
              interface="Products.PluggableAuthService.interfaces.plugins.IRequestTypeSniffer">
 </plugin-type>
</plugin-registry>
