Enhancement - Auth WSGI Middleware

- Implement the Keystone Middleware in such a way as to not require any special tokens
-- validates the incoming connection so long as the X-Auth-Token and X-Project-Id fields are present
-- fills out the same header fields that the Keystone Middleware fills out
-- Caches the access information in redis in order to only hit Keystone when required
Enhancement - Auth WSGI Middleware

- Store the Service Catalog as a proper string containing JSON data instead of the Keystone Service Catalog object
Enhancement - Auth WSGI Middleware

- Bug Fix: requirements spec for keystone client was invalid
Enhancement - Auth WSGI Middleware

- Hide the functions that should only be used internally to the auth - everything except wrap()
Enhancement - Auth WSGI Middleware

- eom/openstack/pep8 compliance
- implemented tests
-- every function in eom/auth.py with exception of get_redis_client() has its own tests
-- mocking is used on keystoneclient and to build up the functional chain
---- only V3 Identity information is stubbed but not yet tested since it would require a different service catalog mock class
-- adds ability to optionally add a token to the environment in tests.util.create_env()
- fixed numerous bugs and enhancements
-- better handling of option registration
-- fixes redis cache so that the data is base64 encoded instead of plain text
---- we could encrypt it if we wanted too, but that might be a bit much on the overhead
-- eom.auth has its own redis settings so as not to mix the service catalog data with other redis users. Admins can decide whether or not to mix them.
Enhancement - Auth WSGI Middleware

- Corrected Typo
- Added exception handling around redis lookup
- Added test to check the exception handling around the redis lookup
Enhancement - Auth WSGI Middleware

- Bug Fix: env is not a parameter to _get_access_info
- Added additional logging
Enhancement: Use msgpack for the cached data

- Converted to using msgpack for the cached data instead of dumping to a dictionary, encoding to utf-u, and base64 encoding it for storage
- Update tests to reflect the changes
Bug Fixes

- pexpire() uses milliseconds, we really should use pexireat() which takes a datetime object which is what access_info.expres returns
- fixed some pep8 complaince issues
Enhancement - Redis Options for Ops

- Added options so Ops can decide whether to use SSL
- Added option so Ops can decide whether to use a password on Redis for auth
Bug Fixes

- Updated log message per msgpack failure
- Updated test message to reflect the test (copy/paste update failure)
- Changed return codes to 412 if required headers are missing or 401 if authentication failed
Log Update

- Updated log to be more accurate; since we don't actually provide a "fuzz" value to will_expire_soon() it's either now or in the past, e.g expired, not about to expire (e.g now+future fuzz)
Enhancement: Blacklist known bad tokens

- Adds a blacklist for known bad tokens
--- if authentication fails, then the token is blacklisted for a configured amount of time in milliseconds
--- blacklist is simply the token stored in the cache and checked first
Bug Fix - docstring
Merge branch 'master' into enhancement_auth_wsgi

- Bug Fix: EOM Auth Test for validating the headers did not test the right thing for the X-Service-Catalog header.
--- No idea why this was passing Py27, PyPy

Conflicts:
	requirements.txt
Merge pull request #36 from BenjamenMeyer/enhancement_auth_wsgi

Enhancement auth wsgi