{"action":"created","comment":{"url":"https://api.github.com/repos/codice/ddf/pulls/comments/78263469","id":78263469,"diff_hunk":"@@ -0,0 +1,746 @@\n+\n+As most configurations are stored in configuration files, in some instances it may make sense to edit those configuration files directly.\n+\n+==== Configuring ${branding} Global Settings\n+\n+Global configuration settings are configured via the properties file `system.properties`.\n+These properties can be manually set by editing this file or set via the initial configuration from the ${admin-console}.\n+\n+.Global Settings\n+[cols=\"2,3m,2,3,3m,1\"]\n+|===\n+|Title\n+|Property\n+|Type\n+|Description\n+|Default Value\n+|Required\n+\n+6+^h|Keystore and truststore java properties\n+\n+|Keystore\n+|javax.net.ssl.keyStore\n+|String\n+|Path to server keystore\n+|etc/keystores/serverKeystore.jks\n+|Yes\n+\n+|Keystore Password\n+|javax.net.ssl.keyStorePassword\n+|String\n+|Password for accessing keystore\n+|changeit\n+|Yes\n+\n+|Truststore\n+|Truststorejavax.net.ssl.trustStore\n+|String\n+|The trust store used for SSL/TLS connections. Path is relative to `<INSTALL_HOME>`.\n+|etc/keystores/serverTruststore.jks\n+|Yes\n+\n+|Truststore Password\n+|javax.net.ssl.trustStorePassword\n+|String\n+|Password for server Truststore\n+|changeit\n+|Yes\n+\n+|Keystore Type\n+|javax.net.ssl.keyStoreType\n+|String\n+|File extension to use with server keystore\n+|jks\n+|Yes\n+\n+|Truststore Type\n+|javax.net.ssl.trustStoreType\n+|String\n+|File extension to use with server truststore\n+|jks\n+|Yes\n+\n+6+^h| Global URL Properties\n+\n+|Protocol\n+|org.codice.ddf.system.protocol\n+|String\n+|Default protocol that should be used to connect to this machine.\n+|https://\n+|Yes\n+\n+|Hostname\n+|org.codice.ddf.system.hostname\n+|String\n+|The hostname or IP address used to advertise the system. Do not enter `localhost`. Possibilities include the address of a single node or that of a load balancer in a multi-node deployment.\n+\n+NOTE: Does not change the address the system runs on.\n+|localhost\n+|Yes\n+\n+|HTTPS Port\n+|org.codice.ddf.system.httpsPort\n+|String\n+|The https port used by the system.\n+\n+NOTE: This *DOES* change the port the system runs on.\n+|8993\n+|Yes\n+\n+|HTTP Port\n+|org.codice.ddf.system.httpPort\n+|String\n+|The http port used by the system.\n+\n+NOTE: This *DOES* change the port the system runs on.\n+|8181\n+|Yes\n+\n+|Default Port\n+|org.codice.ddf.system.port\n+|String\n+|The default port used to advertise the system. This should match either the http or https port.\n+\n+NOTE: Does not change the port the system runs on.\n+|8993\n+|Yes\n+\n+|Root Context\n+|org.codice.ddf.system.rootContext\n+|String\n+|The the base or root context that services will be made available under.\n+|/services\n+|Yes\n+\n+6+^h|System Information Properties\n+\n+|Site Name\n+|org.codice.ddf.system.id\n+|String\n+|The site name for ${branding}.\n+|ddf.distribution\n+|Yes\n+\n+|Site Contact\n+|org.codice.ddf.system.siteContact\n+|String\n+|The email address of the site contact.\n+|\n+|No\n+\n+|Version\n+|org.codice.ddf.system.version\n+|String\n+|The version of ${branding} that is running.\n+\n+This value should not be changed from the factory default.\n+|${project.version}\n+|Yes\n+\n+|Organization\n+|org.codice.ddf.system.organization\n+|String\n+|The organization responsible for this installation of ${branding}.\n+|Codice Foundation\n+|Yes\n+\n+6+^h|Thread Pool Settings\n+\n+|Thread Pool Size\n+|org.codice.ddf.system.threadPoolSize\n+|Integer\n+|Size of thread pool used for handling UI queries, federating requests, and downloading resources\n+|128\n+|Yes\n+\n+6+^h|HTTPS Specific Settings\n+\n+|Cipher Suites\n+|https.cipherSuites\n+|String\n+|Cipher suites to use with secure sockets\n+|TLS_DHE_RSA_WITH_AES_128_CBC_SHA,\n+\n+TLS_DHE_RSA_WITH_AES_128_CBC_SHA,\n+\n+TLS_DHE_DSS_WITH_AES_128_CBC_SHA,\n+\n+TLS_RSA_WITH_AES_128_CBC_SHA\n+|No\n+\n+|Https Protocols\n+|https.protocols\n+|String\n+|Protocols to allow for secure connections\n+|TLSv1.1,TLSv1.2\n+|No\n+\n+|Allow Basic Auth Over Http\n+|org.codice.allowBasicAuthOverHttp\n+|Boolean\n+|Set to true to allow Basic Auth credentials to be sent over HTTP unsecurely. This should only be done in a test environment. These events will be audited.\n+|false\n+|Yes\n+\n+|Restrict the Security Token Service to allow connections only from DNs matching these patterns\n+|ws-security.subject.cert.constraints\n+|String\n+|Set to a comma separated list of regex patterns to define which hosts are allowed to connect to the STS\n+|.*\n+|Yes\n+\n+6+^h|XML Settings\n+\n+|Parse XML documents into DOM object trees\n+|javax.xml.parsers.DocumentBuilderFactory\n+|String\n+|Enables Xerces-J implementation of `DocumentBuilderFactory`\n+|org.apache.xerces.jaxp.DocumentBuilderFactoryImpl\n+|Yes\n+\n+6+^h|File Upload Settings\n+\n+|File extensions flagged as potentially dangerous to the host system or external clients\n+|bad.file.extensions\n+|String\n+|Files uploaded with these bad file extensions will have their file names sanitized before being saved\n+|.exe,\n+.jsp,\n+.html,\n+.js,\n+.php,\n+.phtml,\n+.php3,\n+.php4,\n+.php5,\n+.phps,\n+.shtml,\n+.jhtml,\n+.pl,\n+.py,\n+.cgi,\n+.msi,\n+.com,\n+.scr,\n+.gadget,\n+.application,\n+.pif,\n+.hta,\n+.cpl,\n+.msc,\n+.jar,\n+.kar,\n+.bat,\n+.cmd,\n+.vb,\n+.vbs,\n+.vbe,\n+.jse,\n+.ws,\n+.wsf,\n+.wsc,\n+.wsh,\n+.ps1,\n+.ps1xml,\n+.ps2,\n+.ps2xml,\n+.psc1,\n+.psc2,\n+.msh,\n+.msh1,\n+.msh2,\n+.mshxml,\n+.msh1xml,\n+.msh2xml,\n+.scf,\n+.lnk,\n+.inf,\n+.reg,\n+.dll,\n+.vxd,\n+.cpl,\n+.cfg,\n+.config,\n+.crt,\n+.cert,\n+.pem,\n+.jks,\n+.p12,\n+.p7b,\n+.key,\n+.der,\n+.csr,\n+.jsb,\n+.mhtml,\n+.mht,\n+.xhtml,\n+.xht\n+|Yes\n+\n+|File names flagged as potentially dangerous to the host system or external clients\n+|bad.files\n+|String\n+|Files uploaded with these bad file names will have their file names sanitized before being saved\n+|crossdomain.xml,\n+clientaccesspolicy.xml,\n+.htaccess,\n+.htpasswd,\n+hosts,\n+passwd,\n+group,\n+resolv.conf,\n+nfs.conf,\n+ftpd.conf,\n+ntp.conf,\n+web.config,\n+robots.txt\n+|Yes\n+\n+|Mime types flagged as potentially dangerous to external clients\n+|bad.mime.types\n+|String\n+|Files uploaded with these mime types will be rejected from the upload\n+|text/html,\n+text/javascript,\n+text/x-javascript,\n+application/x-shellscript,\n+text/scriptlet,\n+application/x-msdownload,\n+application/x-msmetafile\n+|Yes\n+\n+|===\n+\n+These properties are available to be used as variable parameters in input url fields within the ${admin-console}.\n+For example, the url for the local csw service (\\${secure_url}/services/csw) could be defined as:\n+\n+[source]\n+----\n+${variable-prefix}org.codice.ddf.system.protocol}${variable-prefix}org.codice.ddf.system.hostname}:${variable-prefix}org.codice.ddf.system.port}${variable-prefix}org.codice.ddf.system.rootContext}/csw\n+----\n+\n+This variable version is more verbose, but will not need to be changed if the system `host`, `port` or `root` context changes.\n+\n+\n+[IMPORTANT]\n+====\n+Since certain bundles can only be configured using the `.config` file format, this file format should be used.\n+====\n+\n+[WARNING]\n+====\n+Only root can access ports < 1024 on Unix systems.\n+For suggested ways to run ${branding} with ports < 1024 see <<How do I use port 80 as a non-root user?>>.\n+====\n+\n+==== Configuring ${branding} config Files\n+\n+The ${branding} is configured using `.config` files.\n+Like the Karaf `.cfg` files, these configuration files must be located in the `<${ddf-branding}_HOME>/etc/` directory, have a name that matches the _configuration persistence ID_ (PID) they represent, and have a `service.pid` property set to the configuration PID.\n+\n+As opposed to `.cfg` however, this type of configuration file supports lists within configuration values (metatype `cardinality` attribute greater than 1).\n+\n+[IMPORTANT]\n+====\n+This new configuration file format *must* be used for any configuration that makes use of lists.\n+Examples include Web Context Policy Manager (PID: `org.codice.ddf.security.policy.context.impl.PolicyManager`)\n+and Security STS Guest Claims Handler (PID: `ddf.security.sts.guestclaims`).\n+====\n+\n+[WARNING]\n+====\n+Only one configuration file should exist for any given PID.\n+The result of having both a `.cfg` and a `.config` file for the same PID is undefined and could cause the application to fail.\n+====\n+\n+The main purpose of the configuration files is to allow administrators to pre-configure ${branding} without having to use the ${admin-console}.\n+In order to do so, the configuration files need to be copied to the `<${branding}_HOME>/etc` directory after ${branding} zip has been extracted.\n+\n+Upon start up, all the `.config` files located in `<${branding}_HOME>/etc` are automatically read and processed.\n+Files that have been processed successfully are moved to `<${branding}_HOME>/etc/processed` so they will not be processed again when the system is restarted.\n+Files that could not be processed are moved to the `<${branding}_HOME>/etc/failed` directory.\n+\n+${branding} also monitors the `<${branding}_HOME>/etc` directory for any new `.config` file that gets added.\n+As soon as a new file is detected, it is read, processed and moved to the appropriate directory based on whether it was successfully processed or not.\n+\n+==== Configuring Managed Service Factory Bundles\n+\n+Services that are created using a Managed Service Factory can be configured using `.config` files as well.\n+The configuration files follow a different naming convention however.\n+The files must start with the Managed Service Factory PID, be followed by a unique identifier and have a `.config` extension.\n+For instance, assuming that the Managed Service Factory PID is `org.codice.ddf.factory.pid` and two instances of the service need to be configured, files `org.codice.ddf.factory.pid.uniqueID1.config` and `org.codice.ddf.factory.pid.uniqueID2.config` should be created and added to `<${branding}_HOME>/etc`.\n+\n+The unique identifiers used in the file names have no impact on the order in which the configuration files are processed.\n+No specific processing order should be assumed.\n+Also, a new service will be created and configured every time a configuration file matching the Managed Service Factory PID is added to the directory, regardless of the number used.\n+\n+These configuration files must also contain a `service.factoryPid` property set to the factory PID (without the sequential number).\n+They should not however contain the `service.pid` property.\n+\n+===== File Format\n+\n+The basic syntax of the `.config` configuration files is similar to the older `.cfg` files but introduces support for lists and types other than simple strings.\n+The type associated with a property must match the `type` attribute used in the corresponding `metatype.xml` file when applicable.\n+\n+The following table shows the format to use for each property type supported.\n+\n+[cols=\"1,2,4\" options=\"header\"]\n+|===\n+\n+|Type\n+|Format\n+|Example\n+\n+|Service PID\n+|`service.pid = \"servicePid\"`\n+|`service.pid = \"org.codice.ddf.security.policy.context.impl.PolicyManager\"`\n+\n+|Factory PID\n+|`service.factoryPid = \"serviceFactoryPid\"`\n+|`service.factoryPid = \"Csw_Federated_Source\"`\n+\n+|Strings\n+|`name = \"value\"`\n+|`name = \"john\"`\n+\n+|Booleans\n+|`name = B\"true\\|false\"`\n+|`authorized = B\"true\"`\n+\n+|Integers\n+|`name = I\"value\"`\n+|`timeout=I\"60\"`\n+\n+|Longs\n+|`name = L\"value\"`\n+|`diameter = L\"10000\"`\n+\n+|Floats\n+|`name = F\"value\"`\n+|`cost = F\"10.50\"`\n+\n+|Doubles\n+|`name = D\"value\"`\n+|`latitude = D\"45.0234\"`\n+\n+|Lists of Strings\n+|`name = [ \"value1\", \"value2\", ... ]`\n+|`complexStringArray = [ \"{\\\"url\\\"\\ \\\"http://test.sample.com\\\"\\ \\\"layers\\\"\\ [\\\"0\\\"]\\ {\\\"VERSION\\\"\\ \\\"1.1\\|1.2\\\"\\ \\\"image/png\\\"}\\ \\\"beta\\\"\\ 1}\", \"{\\\"url\\\"\\ \\\"http://test.sample.com\"\\ 0.5}\", \"/solr\\=SAML\\|PKI\\|basic\", \"/security-config\\=SAML\\|basic\" ]`\n+\n+|Lists of Integers\n+|`name = I[ \"value1\", \"value1\", ... ]`\n+|`sizes = I[ \"10\", \"20\", \"30\" ]`\n+\n+|===\n+\n+[NOTE]\n+====\n+* Lists of values can be prefixed with any of the supported types (`B`, `I`, `L`, `F` or `D`)\n+* To prevent any configuration issues, the `=` signs used in values should be escaped using a backslash (`\\`)\n+* Boolean values will default to `false` if any value other than `true` is provided\n+* Escape character in values must be used for double quotes (`\"`) and spaces, but cannot be used with `{` `}` or `[` `]` pairings\n+====\n+\n+.Sample configuration file\n+[source,java,linenums]\n+----\n+service.pid=\"org.codice.ddf.security.policy.context.impl.PolicyManager\"\n+\n+authenticationTypes=[\"/\\=SAML|GUEST\",\"/admin\\=SAML|basic\",\"/system\\=basic\",\"/solr\\=SAML|PKI|basic\",\"/sources\\=SAML|basic\",\"/security-config\\=SAML|basic\",\"/search\\=basic\"]\n+\n+realms=[\"/\\=karaf\"]\n+\n+requiredAttributes=[\"/\\=\",\"/admin\\={http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role\\=admin}\",\"/solr\\={http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role\\=admin}\",\"/system\\={http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role\\=admin}\",\"/security-config\\={http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role\\=admin}\"]\n+\n+whiteListContexts=[\"/services/SecurityTokenService\",\"/services/internal/metrics\",\"/services/saml\",\"/proxy\",\"/services/csw\"]\n+----\n+\n+===== Editing HTTP Ports for Multiple Local ${branding} Nodes\n+\n+Edit the port numbers in the files in the ${branding} install folder.\n+\n+[cols=\"4\" options=\"header\"]\n+|===\n+\n+|File to Edit\n+|Property(ies)\n+|Original Value\n+|Example of New Value\n+\n+|`bin/karaf.bat`\n+|`address`\n+|`5005`\n+|`5006`\n+\n+.2+|`etc/org.apache.karaf.management.cfg`\n+|`rmiRegistryPort`\n+|`1099`\n+|`1199`\n+\n+\n+|`rmiServerPort`\n+|`44444`\n+|`44445`\n+\n+.2+|`etc/system.properties`\n+|`httpsPort`,`port`\n+|`8993`\n+|`8994`\n+\n+|`httpPort`\n+|`8181`\n+|`8281`\n+\n+|===\n+\n+==== Editing ${branding} Web Service Providers Configuration Files\n+\n+[IMPORTANT]\n+====\n+If the hostname is changed during the install to something other than `localhost` a new keystore and truststore must be provided.\n+====\n+\n+[TIP]\n+====\n+When changing the hostname for testing or development purposes, the installer can be started with a `?dev=true` URL query parameter. This causes the system to automatically generate self-signed certificates for any hostname that is entered during the install process.\n+====\n+\n+==== Configuring Files in HOME Directory Hierarchy\n+\n+Many important configuration settings are stored in the `<${branding}_HOME>` directory.\n+\n+[IMPORTANT]\n+====\n+The passwords configured in this section reflect the passwords used to decrypt JKS (Java KeyStore) files.\n+Changing these values without also changing the passwords of the JKS causes undesirable behavior.\n+====\n+\n+. In `<${branding}_HOME>/etc/users.properties`, modify the line: `localhost=localhost,group,admin,manager,viewer,system-admin` to be: `<FQDN>=<PASSWORD>,group,admin,manager,viewer,system-admin`\n+. Configure `<${branding}_HOME>/etc/system.properties`\n+[source,bash]\n+----\n+#START ${branding} SETTINGS\n+# Set the keystore and truststore Java properties\n+javax.net.ssl.keyStore=etc/keystores/serverKeystore.jks\n+javax.net.ssl.keyStorePassword=<NewPassword>\n+javax.net.ssl.trustStore=etc/keystores/serverTruststore.jks\n+javax.net.ssl.trustStorePassword=<NewPassword>\n+javax.net.ssl.keyStoreType=jks\n+\n+# Set the global url properties\n+org.codice.ddf.system.protocol=https://\n+org.codice.ddf.system.hostname=<FQDN>\n+org.codice.ddf.system.httpsPort=8993\n+org.codice.ddf.system.httpPort=8181\n+org.codice.ddf.system.port=8993\n+org.codice.ddf.system.rootContext=/services\n+\n+# HTTPS Specific settings. If making a Secure Connection not leveraging the HTTPS Java libraries and\n+# classes (e.g. if you are using secure sockets directly) then you will have to set this directly\n+https.cipherSuites=TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA\n+https.protocols=TLSv1.1,TLSv1.2\n+----\n+\n+[NOTE]\n+====\n+Depending on the environment, it may be easier for integrators and administrators to configure ${branding} using the ${admin-console} prior to disabling it for hardening purposes.\n+The ${admin-console} can be re-enabled for additional configuration changes.\n+====\n+\n+In an environment hardened for security purposes, access to the ${ddf-branding} ${admin-console} might be denied.\n+It is necessary to configure ${branding} (e.g., providers, Schematron rulesets, etc.) using `.config` files or the ${admin-console}.\n+Configuration via the Karaf command line console is not supported and may result in configuration errors.\n+The OSGi container detects the creation of `.config` files in the `etc/` directory.\n+The following sections describe how to configure each ${branding} item using both of these mechanisms.\n+A template file is provided for some configurable ${branding} items so that they can be copied/renamed then modified with the appropriate settings.\n+\n+[WARNING]\n+====\n+If at a later time the ${admin-console} is enabled again, all of the configuration done via `.config` files is loaded and displayed.\n+However, note that the name of the `.config` file is not used in the ${admin-console}.\n+Rather, OSGi assigns a universally unique identifier (UUID) when the ${branding} item was created and displays this UUID in the console (e.g., `OpenSearchSource.112f298e-26a5-4094-befc-79728f216b9b`)\n+====\n+\n+.Templates included with ${branding}\n+[cols=\"1,4,4,1\" options=\"header\"]\n+|===\n+\n+|${ddf-branding} Service\n+|Template File Name\n+|Factory PID\n+|Configurable Properties\n+\n+|${ddf-branding} Catalog Framework\n+|`ddf.catalog.impl.service.CatalogFrameworkImpl.cfg`\n+|`ddf.catalog.CatalogFrameworkImpl`\n+|Standard Catalog Framework\n+\n+|===\n+\n+==== Configuring Using a `.cfg` File Template\n+\n+The following steps define the procedure for configuring a new source or feature using a `config` file:\n+\n+. Copy/rename the provided template file in the ``etc/templates` directory to the `etc` directory. (Refer to the table above to determine correct template.)\n+.. *Mandatory*: The dash between the PID (e.g., `OpenSearchSource_site.cfg`) and the instance name (e.g., `OpenSearchSource_site.cfg`) is required. The dash is a reserved character used by OSGi that identifies instances of a managed service factory that should be created.\n+.. Not required, but a good practice is to change the instance name (e.g., `federated_source`) of the file to something identifiable (`source1- ddf`).\n+. Edit the copied file to etc with the settings for the configuration. (Refer to the table above to determine the configurable properties).\n+.. This file is a Java properties file, hence the syntax is `<key>` = `<value>`.\n+.. Consult the inline comments in the file for guidance on what to modify.\n+\n+The new service can now be used as if it was created using the ${admin-console}.\n+\n+==== Configuring Notifications\n+\n+Notifications are messages that are sent to clients to inform them of some significant event happening in ${branding}.\n+Clients must subscribe to a ${branding} notification channel to receive these messages.\n+\n+===== Using Notifications\n+\n+${branding} notifications are currently being utilized in the ${ddf-branding} Catalog application for resource retrieval.\n+When a user initiates a resource retrieval via the ${ddf-branding} Standard Search UI, ${branding} opens the channel `/${ddf-branding-lowercase}/notification/catalog/downloads`, where notifications indicating the progress of that resource download are sent.\n+Any client interested in receiving these progress notifications must subscribe to that channel.\n+When ${branding} starts downloading the resource to the client that requested it, a notification with a status of \"Started\" will be broadcast.\n+If the resource download fails, a notification with a status of \"Failed\" will be broadcast.\n+Or, if the resource download is being attempted again after a failure, \"Retry\" will be broadcast.\n+\n+When a notification is received, ${ddf-branding} Standard UI displays a popup containing the contents of the notification, so a user is made aware of how fdownloads are proceeding.\n+\n+Behind the scenes, the ${ddf-branding} Standard Search UI invokes the REST endpoint to retrieve a resource.\n+In this request, it adds the query parameter \"user\" with the CometD session ID or the unique User ID as the value.\n+This allows the CometD server to know which subscriber is interested in the notification.\n+For example, \\http://${branding}_HOST:8993/services/catalog/sources/ddf.distribution/2f5db9e5131444279a1293c541c106cd?transform=resource&user=1w1qlo79j6tscii19jszwp9s2i55 notifications contain the following information:\n+\n+.Notifications Parameters\n+[cols=\"1,4,1\" options=\"header\"]\n+|===\n+\n+|Parameter Name\n+|Description\n+|Required by ${branding} Standard UI\n+\n+|`application`\n+|\"Downloads\" for resource retrieval.\n+This is used as a \"type\" or category of messages.\n+|Yes\n+\n+|`title`\n+|Resource/file name for resource retrieval.\n+|Yes\n+\n+|`message`\n+|Human-readable message containing status and a more detailed message.\n+|Yes\n+\n+|`timestamp`\n+|Timestamp in milliseconds of when event occurs.\n+|Yes\n+\n+|`user`\n+|CometD Session ID or unique User ID.\n+|Yes\n+\n+|`status`\n+|Status of event.\n+|No\n+\n+|`option`\n+|Resource retrieval option.\n+|No\n+\n+|`bytes`\n+|Number of bytes transmitted.\n+|No\n+\n+|===\n+\n+===== Receive Notifications\n+\n+* If interested in retrieve resource notifications, a client must subscribe to the CometD `channel/${ddf-branding-lowercase}/notification/catalog/downloads`.\n+* If interested in all notification types, a client must subscribe to the CometD `channel/${ddf-branding-lowercase}/notification/**`\n+* A client will only receive notifications for resources they have requested.\n+* ${ddf-branding} Standard UI is subscribed to all notifications of interest to that `user/browser session: /${ddf-branding-lowercase}/notification/**`\n+\n+===== Publish Notifications\n+\n+Any application running in ${branding} can publish notifications that can be viewed by the ${ddf-branding} Standard UI or received by another notifications client.\n+\n+. Set a properties map containing entries for each of the parameters listed in the table above.\n+. Set the OSGi event topic to `${ddf-branding-lowercase}/notification/<application-name>/<notification-type>`. Notice that there is no preceding slash on an OSGi event topic name, but there is one on the CometD channel name.\n+The OSGi event topic corresponds to the CometD channel this is published on.\n+. Post the notification to the OSGi event defined in the previous step.\n+\n+.Example for Publishing Notification\n+[source,java,linenums]\n+----\n+Dictionary <String, Object> properties = new Hashtable<String, Object>();\n+properties.put(\"application\", \"Downloads\");\n+properties.put(\"title\", resourceResponse.getResource().getName());\n+Long sysTimeMillis = System.currentTimeMillis();\n+properties.put(\"message\", generateMessage(status, resourceResponse.getResource().getName(), bytes, sysTimeMillis, detail));\n+properties.put(\"user\", getProperty(resourceResponse, USER));\n+properties.put(\"status\", \"Completed\");\n+properties.put(\"bytes\", 1024);\n+properties.put(\"timestamp\", sysTimeMillis);\n+\n+Event event = new Event(\"${ddf-branding-lowercase}/notification/catalog/downloads\", properties);\n+\n+eventAdmin.postEvent(event);\n+----\n+\n+==== Configuring Solr Catalog Provider Data Directory","path":"distribution/docs/src/main/resources/_contents/_configuring/configuring-from-configuration-files-contents.adoc","position":691,"original_position":691,"commit_id":"02739482904f2810dc5ca5cf8b8d7abab8a39e31","original_commit_id":"02739482904f2810dc5ca5cf8b8d7abab8a39e31","user":{"login":"lessarderic","id":11377558,"avatar_url":"https://avatars.githubusercontent.com/u/11377558?v=3","gravatar_id":"","url":"https://api.github.com/users/lessarderic","html_url":"https://github.com/lessarderic","followers_url":"https://api.github.com/users/lessarderic/followers","following_url":"https://api.github.com/users/lessarderic/following{/other_user}","gists_url":"https://api.github.com/users/lessarderic/gists{/gist_id}","starred_url":"https://api.github.com/users/lessarderic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lessarderic/subscriptions","organizations_url":"https://api.github.com/users/lessarderic/orgs","repos_url":"https://api.github.com/users/lessarderic/repos","events_url":"https://api.github.com/users/lessarderic/events{/privacy}","received_events_url":"https://api.github.com/users/lessarderic/received_events","type":"User","site_admin":false},"body":"So far, all system.properties configurations are documented in section 3.3.1. Should we be consistent and have one section per topic, regardless of where the configuration properties are located, or have a section per configuration file and have all the property descriptions in that same section? If we go with the latter then this section should be merged with section 3.3.1.","created_at":"2016-09-09T23:32:47Z","updated_at":"2016-09-09T23:32:47Z","html_url":"https://github.com/codice/ddf/pull/1161#discussion_r78263469","pull_request_url":"https://api.github.com/repos/codice/ddf/pulls/1161","_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments/78263469"},"html":{"href":"https://github.com/codice/ddf/pull/1161#discussion_r78263469"},"pull_request":{"href":"https://api.github.com/repos/codice/ddf/pulls/1161"}}},"pull_request":{"url":"https://api.github.com/repos/codice/ddf/pulls/1161","id":81909295,"html_url":"https://github.com/codice/ddf/pull/1161","diff_url":"https://github.com/codice/ddf/pull/1161.diff","patch_url":"https://github.com/codice/ddf/pull/1161.patch","issue_url":"https://api.github.com/repos/codice/ddf/issues/1161","number":1161,"state":"open","locked":false,"title":"DDF-2394: Updated Managing DDF section of documentation","user":{"login":"ricklarsen","id":10619999,"avatar_url":"https://avatars.githubusercontent.com/u/10619999?v=3","gravatar_id":"","url":"https://api.github.com/users/ricklarsen","html_url":"https://github.com/ricklarsen","followers_url":"https://api.github.com/users/ricklarsen/followers","following_url":"https://api.github.com/users/ricklarsen/following{/other_user}","gists_url":"https://api.github.com/users/ricklarsen/gists{/gist_id}","starred_url":"https://api.github.com/users/ricklarsen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ricklarsen/subscriptions","organizations_url":"https://api.github.com/users/ricklarsen/orgs","repos_url":"https://api.github.com/users/ricklarsen/repos","events_url":"https://api.github.com/users/ricklarsen/events{/privacy}","received_events_url":"https://api.github.com/users/ricklarsen/received_events","type":"User","site_admin":false},"body":"#### What does this PR do?\r\n\r\nThis PR is the second in a series of documentation rewrites. It includes the \r\n- Managing section:\r\n- QuickStart\r\n- Installing DDF\r\n- Configuring DDF\r\n- Securing DDF\r\n- Running DDF\r\n\r\n#### Who is reviewing it?\r\n\r\n@lessarderic @mcalcote @vinamartin @stustison @mcolanto\r\n\r\n#### Choose 2 committers to review/merge the PR (please choose ONLY two committers from below, delete the rest).\r\n\r\n@michaelmenousek\r\n@pklinef\r\n@shaundmorris\r\n\r\n#### How should this be tested?\r\n\r\n- Successful Build\r\n- free of typos & errors\r\n- information up to date and complete\r\n\r\n#### Any background context you want to provide?\r\n\r\nThe changes here will not yet be visible in the published documentation. To view new version, open draft-documentation in either html or pdf in the docs target directory. [pdf version attached to this PR] Once all changes are integrated, the draft-documentation will supersede the current version.\r\n\r\n#### What are the relevant tickets?\r\n\r\nhttps://codice.atlassian.net/browse/DDF-2309\r\nhttps://codice.atlassian.net/browse/DDF-2393\r\n\r\n#### Screenshots (if appropriate)\r\n\r\n[draft-documentation.pdf](https://github.com/codice/ddf/files/426109/draft-documentation.pdf)\r\n\r\n#### Checklist:\r\n- [x] Documentation Updated\r\n- [ ] Update / Add Unit Tests\r\n- [ ] Update / Add Integration Tests\r\n","created_at":"2016-08-19T00:18:02Z","updated_at":"2016-09-09T23:32:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"993a082da3665efe5c879195f6b821359ef906c0","assignee":{"login":"michaelmenousek","id":333623,"avatar_url":"https://avatars.githubusercontent.com/u/333623?v=3","gravatar_id":"","url":"https://api.github.com/users/michaelmenousek","html_url":"https://github.com/michaelmenousek","followers_url":"https://api.github.com/users/michaelmenousek/followers","following_url":"https://api.github.com/users/michaelmenousek/following{/other_user}","gists_url":"https://api.github.com/users/michaelmenousek/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelmenousek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelmenousek/subscriptions","organizations_url":"https://api.github.com/users/michaelmenousek/orgs","repos_url":"https://api.github.com/users/michaelmenousek/repos","events_url":"https://api.github.com/users/michaelmenousek/events{/privacy}","received_events_url":"https://api.github.com/users/michaelmenousek/received_events","type":"User","site_admin":false},"assignees":[{"login":"michaelmenousek","id":333623,"avatar_url":"https://avatars.githubusercontent.com/u/333623?v=3","gravatar_id":"","url":"https://api.github.com/users/michaelmenousek","html_url":"https://github.com/michaelmenousek","followers_url":"https://api.github.com/users/michaelmenousek/followers","following_url":"https://api.github.com/users/michaelmenousek/following{/other_user}","gists_url":"https://api.github.com/users/michaelmenousek/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelmenousek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelmenousek/subscriptions","organizations_url":"https://api.github.com/users/michaelmenousek/orgs","repos_url":"https://api.github.com/users/michaelmenousek/repos","events_url":"https://api.github.com/users/michaelmenousek/events{/privacy}","received_events_url":"https://api.github.com/users/michaelmenousek/received_events","type":"User","site_admin":false},{"login":"pklinef","id":700518,"avatar_url":"https://avatars.githubusercontent.com/u/700518?v=3","gravatar_id":"","url":"https://api.github.com/users/pklinef","html_url":"https://github.com/pklinef","followers_url":"https://api.github.com/users/pklinef/followers","following_url":"https://api.github.com/users/pklinef/following{/other_user}","gists_url":"https://api.github.com/users/pklinef/gists{/gist_id}","starred_url":"https://api.github.com/users/pklinef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pklinef/subscriptions","organizations_url":"https://api.github.com/users/pklinef/orgs","repos_url":"https://api.github.com/users/pklinef/repos","events_url":"https://api.github.com/users/pklinef/events{/privacy}","received_events_url":"https://api.github.com/users/pklinef/received_events","type":"User","site_admin":false},{"login":"shaundmorris","id":4359166,"avatar_url":"https://avatars.githubusercontent.com/u/4359166?v=3","gravatar_id":"","url":"https://api.github.com/users/shaundmorris","html_url":"https://github.com/shaundmorris","followers_url":"https://api.github.com/users/shaundmorris/followers","following_url":"https://api.github.com/users/shaundmorris/following{/other_user}","gists_url":"https://api.github.com/users/shaundmorris/gists{/gist_id}","starred_url":"https://api.github.com/users/shaundmorris/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shaundmorris/subscriptions","organizations_url":"https://api.github.com/users/shaundmorris/orgs","repos_url":"https://api.github.com/users/shaundmorris/repos","events_url":"https://api.github.com/users/shaundmorris/events{/privacy}","received_events_url":"https://api.github.com/users/shaundmorris/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/codice/ddf/pulls/1161/commits","review_comments_url":"https://api.github.com/repos/codice/ddf/pulls/1161/comments","review_comment_url":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}","comments_url":"https://api.github.com/repos/codice/ddf/issues/1161/comments","statuses_url":"https://api.github.com/repos/codice/ddf/statuses/02739482904f2810dc5ca5cf8b8d7abab8a39e31","head":{"label":"ricklarsen:DDF-2394","ref":"DDF-2394","sha":"02739482904f2810dc5ca5cf8b8d7abab8a39e31","user":{"login":"ricklarsen","id":10619999,"avatar_url":"https://avatars.githubusercontent.com/u/10619999?v=3","gravatar_id":"","url":"https://api.github.com/users/ricklarsen","html_url":"https://github.com/ricklarsen","followers_url":"https://api.github.com/users/ricklarsen/followers","following_url":"https://api.github.com/users/ricklarsen/following{/other_user}","gists_url":"https://api.github.com/users/ricklarsen/gists{/gist_id}","starred_url":"https://api.github.com/users/ricklarsen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ricklarsen/subscriptions","organizations_url":"https://api.github.com/users/ricklarsen/orgs","repos_url":"https://api.github.com/users/ricklarsen/repos","events_url":"https://api.github.com/users/ricklarsen/events{/privacy}","received_events_url":"https://api.github.com/users/ricklarsen/received_events","type":"User","site_admin":false},"repo":{"id":31686896,"name":"ddf","full_name":"ricklarsen/ddf","owner":{"login":"ricklarsen","id":10619999,"avatar_url":"https://avatars.githubusercontent.com/u/10619999?v=3","gravatar_id":"","url":"https://api.github.com/users/ricklarsen","html_url":"https://github.com/ricklarsen","followers_url":"https://api.github.com/users/ricklarsen/followers","following_url":"https://api.github.com/users/ricklarsen/following{/other_user}","gists_url":"https://api.github.com/users/ricklarsen/gists{/gist_id}","starred_url":"https://api.github.com/users/ricklarsen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ricklarsen/subscriptions","organizations_url":"https://api.github.com/users/ricklarsen/orgs","repos_url":"https://api.github.com/users/ricklarsen/repos","events_url":"https://api.github.com/users/ricklarsen/events{/privacy}","received_events_url":"https://api.github.com/users/ricklarsen/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ricklarsen/ddf","description":"The Distributed Data Framework - Distribution, SDK, and Test","fork":true,"url":"https://api.github.com/repos/ricklarsen/ddf","forks_url":"https://api.github.com/repos/ricklarsen/ddf/forks","keys_url":"https://api.github.com/repos/ricklarsen/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ricklarsen/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ricklarsen/ddf/teams","hooks_url":"https://api.github.com/repos/ricklarsen/ddf/hooks","issue_events_url":"https://api.github.com/repos/ricklarsen/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/ricklarsen/ddf/events","assignees_url":"https://api.github.com/repos/ricklarsen/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/ricklarsen/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/ricklarsen/ddf/tags","blobs_url":"https://api.github.com/repos/ricklarsen/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ricklarsen/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ricklarsen/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/ricklarsen/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ricklarsen/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/ricklarsen/ddf/languages","stargazers_url":"https://api.github.com/repos/ricklarsen/ddf/stargazers","contributors_url":"https://api.github.com/repos/ricklarsen/ddf/contributors","subscribers_url":"https://api.github.com/repos/ricklarsen/ddf/subscribers","subscription_url":"https://api.github.com/repos/ricklarsen/ddf/subscription","commits_url":"https://api.github.com/repos/ricklarsen/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/ricklarsen/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/ricklarsen/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/ricklarsen/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/ricklarsen/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/ricklarsen/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ricklarsen/ddf/merges","archive_url":"https://api.github.com/repos/ricklarsen/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ricklarsen/ddf/downloads","issues_url":"https://api.github.com/repos/ricklarsen/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/ricklarsen/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/ricklarsen/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/ricklarsen/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ricklarsen/ddf/labels{/name}","releases_url":"https://api.github.com/repos/ricklarsen/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/ricklarsen/ddf/deployments","created_at":"2015-03-05T00:10:16Z","updated_at":"2016-01-11T23:35:02Z","pushed_at":"2016-09-08T23:46:14Z","git_url":"git://github.com/ricklarsen/ddf.git","ssh_url":"git@github.com:ricklarsen/ddf.git","clone_url":"https://github.com/ricklarsen/ddf.git","svn_url":"https://github.com/ricklarsen/ddf","homepage":"","size":274550,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"codice:master","ref":"master","sha":"69d57f636ec6e5534eef719adc5783370e04a963","user":{"login":"codice","id":2386734,"avatar_url":"https://avatars.githubusercontent.com/u/2386734?v=3","gravatar_id":"","url":"https://api.github.com/users/codice","html_url":"https://github.com/codice","followers_url":"https://api.github.com/users/codice/followers","following_url":"https://api.github.com/users/codice/following{/other_user}","gists_url":"https://api.github.com/users/codice/gists{/gist_id}","starred_url":"https://api.github.com/users/codice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codice/subscriptions","organizations_url":"https://api.github.com/users/codice/orgs","repos_url":"https://api.github.com/users/codice/repos","events_url":"https://api.github.com/users/codice/events{/privacy}","received_events_url":"https://api.github.com/users/codice/received_events","type":"Organization","site_admin":false},"repo":{"id":15173563,"name":"ddf","full_name":"codice/ddf","owner":{"login":"codice","id":2386734,"avatar_url":"https://avatars.githubusercontent.com/u/2386734?v=3","gravatar_id":"","url":"https://api.github.com/users/codice","html_url":"https://github.com/codice","followers_url":"https://api.github.com/users/codice/followers","following_url":"https://api.github.com/users/codice/following{/other_user}","gists_url":"https://api.github.com/users/codice/gists{/gist_id}","starred_url":"https://api.github.com/users/codice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codice/subscriptions","organizations_url":"https://api.github.com/users/codice/orgs","repos_url":"https://api.github.com/users/codice/repos","events_url":"https://api.github.com/users/codice/events{/privacy}","received_events_url":"https://api.github.com/users/codice/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codice/ddf","description":"Distributed Data Framework - an open source, modular integration framework.","fork":false,"url":"https://api.github.com/repos/codice/ddf","forks_url":"https://api.github.com/repos/codice/ddf/forks","keys_url":"https://api.github.com/repos/codice/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codice/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codice/ddf/teams","hooks_url":"https://api.github.com/repos/codice/ddf/hooks","issue_events_url":"https://api.github.com/repos/codice/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/codice/ddf/events","assignees_url":"https://api.github.com/repos/codice/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/codice/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/codice/ddf/tags","blobs_url":"https://api.github.com/repos/codice/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codice/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codice/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/codice/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codice/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/codice/ddf/languages","stargazers_url":"https://api.github.com/repos/codice/ddf/stargazers","contributors_url":"https://api.github.com/repos/codice/ddf/contributors","subscribers_url":"https://api.github.com/repos/codice/ddf/subscribers","subscription_url":"https://api.github.com/repos/codice/ddf/subscription","commits_url":"https://api.github.com/repos/codice/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/codice/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/codice/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/codice/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/codice/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/codice/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codice/ddf/merges","archive_url":"https://api.github.com/repos/codice/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codice/ddf/downloads","issues_url":"https://api.github.com/repos/codice/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/codice/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/codice/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/codice/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codice/ddf/labels{/name}","releases_url":"https://api.github.com/repos/codice/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/codice/ddf/deployments","created_at":"2013-12-13T20:38:28Z","updated_at":"2016-08-30T00:53:22Z","pushed_at":"2016-09-09T14:57:49Z","git_url":"git://github.com/codice/ddf.git","ssh_url":"git@github.com:codice/ddf.git","clone_url":"https://github.com/codice/ddf.git","svn_url":"https://github.com/codice/ddf","homepage":"http://ddf.codice.org","size":286789,"stargazers_count":44,"watchers_count":44,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":90,"mirror_url":null,"open_issues_count":37,"forks":90,"open_issues":37,"watchers":44,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/1161"},"html":{"href":"https://github.com/codice/ddf/pull/1161"},"issue":{"href":"https://api.github.com/repos/codice/ddf/issues/1161"},"comments":{"href":"https://api.github.com/repos/codice/ddf/issues/1161/comments"},"review_comments":{"href":"https://api.github.com/repos/codice/ddf/pulls/1161/comments"},"review_comment":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/codice/ddf/pulls/1161/commits"},"statuses":{"href":"https://api.github.com/repos/codice/ddf/statuses/02739482904f2810dc5ca5cf8b8d7abab8a39e31"}}}}
{"actor":{"display_login":"lessarderic"}}