Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Tom Scavo committed Jun 13, 2017
2 parents 657f75f + 32e8fa5 commit c5ea33a
Showing 1 changed file with 145 additions and 6 deletions.
151 changes: 145 additions & 6 deletions README.md
@@ -25,11 +25,15 @@ A given target directory will be created if one doesn't already exist. In any ca
```Shell
$ ls -1 $BIN_DIR
cget.sh
compute_md_vital_stats.sh
request_http_resources.sh
test_compressed_resources.sh

$ ls -1 $LIB_DIR
compatible_date.sh
config_tools.sh
core_lib.sh
entities_timestamps_txt.xsl
entity_endpoints_txt.xsl
entity_identifiers_txt.xsl
entity_idp_names_txt.xsl
@@ -39,13 +43,24 @@ md_tools.sh
saml_tools.sh
```

## Overview
## Environment

### `cget.sh`
Besides `BIN_DIR` and `LIB_DIR` above, the scripts leverage the following environment variables:

Bash script `cget.sh` retrieves and caches HTTP resources on disk. A previously cached resource is retrieved via HTTP Conditional GET [RFC 7232]. If the web server responds with HTTP 200 OK, the resource is cached and written to stdout. If the web server responds with 304 Not Modified, the cached resource is output instead.
| Variable | |
| --- | --- |
| `CACHE_DIR` | A persistent HTTP cache directory |
| `TMPDIR` | A temporary directory |
| `LOG_FILE` | A persistent log file |
| `LOG_LEVEL` | The global log level [0..5] |

All but `LOG_LEVEL` are REQUIRED. See the following section for more info about logging.

First let's configure logging. For convenience, we will log directly to the terminal:
Note: Some OSes define `TMPDIR` and some do not. In any case, a temporary directory by that name is required to use these scripts.

## Logging

For convenience, we will log directly to the terminal in the examples below:

```Shell
$ export LOG_FILE=/dev/tty
@@ -63,13 +78,60 @@ Various log levels are supported:
| ERROR | 1 |
| FATAL | 0 |

The default logging level is INFO (i.e., if you do not explicitly set the `LOG_LEVEL` environment variable, the value `LOG_LEVEL=3` is assumed by default).
The default logging level is INFO (i.e., if you do not explicitly set the optional `LOG_LEVEL` environment variable, the value `LOG_LEVEL=3` is assumed by default).

Next we define a couple of HTTP resources and a cache:
## Overview

The following HTTP resources are used repeatedly in the examples below:

```Shell
$ url1=http://md.incommon.org/InCommon/InCommon-metadata-preview.xml
$ url2=http://md.incommon.org/InCommon/InCommon-metadata-fallback.xml
```

### `request_http_resources.sh`

Bash script `request_http_resources.sh` issues a HEAD request for one or more HTTP resources:

```Shell
$ $BIN_DIR/request_http_resources.sh -d /tmp/out $url1 $url2
2017-06-11T02:26:26Z INFO request_http_resources.sh BEGIN
2017-06-11T02:26:26Z INFO request_http_resources.sh requesting resource: http://md.incommon.org/InCommon/InCommon-metadata-preview.xml
2017-06-11T02:26:26Z INFO request_http_resources.sh requesting resource: http://md.incommon.org/InCommon/InCommon-metadata-fallback.xml
2017-06-11T02:26:26Z INFO request_http_resources.sh writing output file: http_response_headers.json
2017-06-11T02:26:26Z INFO request_http_resources.sh moving output file to dir: /tmp/out
2017-06-11T02:26:26Z INFO request_http_resources.sh END
```

The script produces a JSON array containing objects such as the following:

```JavaScript
{
"successFlag": true,
"message": "Resource request successful",
"location": "http://md.incommon.org/InCommon/InCommon-metadata-preview.xml",
"ResponseCode": "200",
"Date": "Sun, 11 Jun 2017 02:16:44 GMT",
"LastModified": "Fri, 09 Jun 2017 19:05:16 GMT",
"ETag": "\"2a96bf6-5518ba65a0c50\"",
"ContentLength": "44657654",
"ContentType": "application/samlmetadata+xml"
}
```

The JSON file is written to the output directory specified on the command line. See the inline help file for details:

```Shell
$ $BIN_DIR/request_http_resources.sh -h
```

### `cget.sh`

Bash script `cget.sh` retrieves and caches HTTP resources on disk. A previously cached resource is retrieved via HTTP Conditional GET [RFC 7232]. If the web server responds with HTTP 200 OK, the resource is cached and written to stdout. If the web server responds with 304 Not Modified, the cached resource is output instead.

First define a cache:

```Shell
$ export CACHE_DIR=/tmp/http_cache
```

@@ -161,6 +223,83 @@ See the inline help file for details:
$ $BIN_DIR/cget.sh -h
```

### `compute_md_vital_stats.sh`

Bash script `compute_md_vital_stats.sh` parses one or more previously cached SAML metadata files:

```Shell
$ $BIN_DIR/compute_md_vital_stats.sh -d /tmp/out $url1 $url2
2017-06-11T13:09:53Z INFO compute_md_vital_stats.sh BEGIN
2017-06-11T13:09:53Z INFO conditional_get reading cached content file: /tmp/http_cache/1e6b844a49d1850b82feded72cf83ed7_content
2017-06-11T13:09:53Z INFO compute_md_vital_stats.sh parsing cached metadata file: http://md.incommon.org/InCommon/InCommon-metadata-preview.xml
2017-06-11T13:09:54Z INFO conditional_get reading cached content file: /tmp/http_cache/1727196e5b7593f3b7528c539e7169d2_content
2017-06-11T13:09:54Z INFO compute_md_vital_stats.sh parsing cached metadata file: http://md.incommon.org/InCommon/InCommon-metadata-fallback.xml
2017-06-11T13:09:55Z INFO compute_md_vital_stats.sh writing output file: md_vital_statistics.json
2017-06-11T13:09:55Z INFO compute_md_vital_stats.sh moving output file to dir: /tmp/out
2017-06-11T13:09:55Z INFO compute_md_vital_stats.sh END
```

The script produces a JSON array containing objects such as the following:

```JavaScript
{
"successFlag": true,
"message": "Metadata successfully parsed",
"metadataLocation": "http://md.incommon.org/InCommon/InCommon-metadata-preview.xml",
"currentTime": "2017-06-11T13:09:54Z",
"validUntil": "2017-06-23T18:56:31Z",
"creationInstant": "2017-06-09T18:56:31Z",
"validityInterval": "P14DT0H0M0S",
"untilInvalid": "P12DT5H46M37S",
"sinceCreation": "P1DT18H13M23S"
}
```

Note that this script depends on cached metadata. It will not fetch a metadata file from the server. See the inline help file for details:

```Shell
$ $BIN_DIR/compute_md_vital_stats.sh -h
```

### `test_compressed_resources.sh`

Bash script `test_compressed_resources.sh` tests one or more resources for HTTP Compression:

```Shell
$ $BIN_DIR/test_compressed_resources.sh -d /tmp/out $url1 $url2
2017-06-11T13:20:39Z INFO test_compressed_resources.sh BEGIN
2017-06-11T13:20:39Z INFO test_compressed_resources.sh requesting (compressed) resource: http://md.incommon.org/InCommon/InCommon-metadata-preview.xml
2017-06-11T13:20:43Z INFO conditional_get reading cached content file: /tmp/http_cache/1e6b844a49d1850b82feded72cf83ed7_content
2017-06-11T13:20:43Z INFO test_compressed_resources.sh requesting (compressed) resource: http://md.incommon.org/InCommon/InCommon-metadata-fallback.xml
2017-06-11T13:20:45Z INFO conditional_get reading cached content file: /tmp/http_cache/1727196e5b7593f3b7528c539e7169d2_content
2017-06-11T13:20:46Z INFO test_compressed_resources.sh writing output file: compressed_response_headers.json
2017-06-11T13:20:46Z INFO test_compressed_resources.sh moving output file to dir: /tmp/out
2017-06-11T13:20:46Z INFO test_compressed_resources.sh END
```

The script produces a JSON array containing objects such as the following:

```JavaScript
{
"successFlag": true,
"message": "Integrity of compressed metadata confirmed",
"location": "http://md.incommon.org/InCommon/InCommon-metadata-preview.xml",
"ResponseCode": "200",
"Date": "Sun, 11 Jun 2017 13:10:37 GMT",
"LastModified": "Fri, 09 Jun 2017 19:05:16 GMT",
"ETag": "\"80bc05-5518ba65a1fd5\"",
"ContentLength": "8436741",
"ContentType": "application/samlmetadata+xml",
"ContentEncoding": "gzip"
}
```

Like the previous script, this script also depends on cached metadata. In addition, this script requests (compressed) resources from the server just-in-time. See the inline help file for details:

```Shell
$ $BIN_DIR/test_compressed_resources.sh -h
```

## Compatibility

Shell scripts are compatible with both GNU/Linux and Mac OS. XSLT scripts are written in XSLT 1.0.

0 comments on commit c5ea33a

Please sign in to comment.