Chris McDonough
2009-06-25 1849bf80417deefa12bf16a2e047ee5936f6299d
commit | author | age
07308f 1 ==================
aa8755 2 repoze.who changes
CM 3 ==================
4
1849bf 5 1.0.15 (2009/06/25)
CM 6 ===================
299b4c 7
a14163 8 - If the form post value ``max_age`` exists while in the ``identify``
CM 9   method is handling the ``login_handler_path``, pass the max_age
10   value in the returned identity dictionary as ``max_age``.  See the
11   below bullet point for why.
12
299b4c 13 - If the ``identity`` dict passed to the ``auth_tkt`` ``remember``
CM 14   method contains a ``max_age`` key with a string (or integer) value,
15   treat it as a cue to set the ``Max-Age`` and ``Expires`` headers in
16   the returned cookies.  The cookie ``Max-Age`` is set to the value
17   and the ``Expires`` is computed from the current time.
18
224a2c 19 1.0.14 (2009/06/17)
CM 20 ===================
9318dd 21
1810b2 22 - Fix test breakage on Windows.  See http://bugs.repoze.org/issue79 .
TS 23
00a6d9 24 - Documented issue with using ``include_ip`` setting in the ``auth_tkt``
TS 25   plugin.  See http://bugs.repoze.org/issue81 .
26
0dd808 27 - Added 'passthrough_challenge_decider', which avoids re-challenging 401
TS 28   responses which have been "pre-challenged" by the application.
29
9318dd 30 - One-hundred percent unit test coverage.
TS 31
a6f6dc 32 - Add ``timeout`` and ``reissue_time`` arguments to the auth_tkt
CM 33   identifier plugin, courtesty of Paul Johnston.
34
35 - Add a ``userid_checker`` argument to the auth_tkt identifier plugin,
36   courtesty of Gustavo Narea.
37
38   If ``userid_checker`` is provided, it must be a dotted Python name
39   that resolves to a function which accepts a userid and returns a
40   boolean True or False, indicating whether that user exists in a
41   database.  This is a workaround.  Due to a design bug in repoze.who,
42   the only way who can check for user existence is to use one or more
43   IAuthenticator plugin ``authenticate`` methods.  If an
44   IAuthenticator's ``authenticate`` method returns true, it means that
45   the user exists.  However most IAuthenticator plugins expect *both*
46   a username and a password, and will return False unconditionally if
47   both aren't supplied.  This means that an authenticator can't be
48   used to check if the user "only" exists.  The identity provided by
49   an auth_tkt does not contain a password to check against.  The
50   actual design bug in repoze.who is this: when a user presents
51   credentials from an auth_tkt, he is considered "preauthenticated".
52   IAuthenticator.authenticate is just never called for a
53   "preauthenticated" identity, which works fine, but it means that the
54   user will be considered authenticated even if you deleted the user's
55   record from whatever database you happen to be using.  However, if
56   you use a userid_checker, you can ensure that a user exists for the
57   auth_tkt supplied userid.  If the userid_checker returns False, the
58   auth_tkt credentials are considered "no good".
59
2b870f 60 1.0.13 (2009/4/24)
CM 61 ==================
64ba13 62
TS 63 - Added a paragraph to ``IAuthenticator`` docstring, documenting that plugins
64   are allowed to add keys to the ``identity`` dictionary (e.g., to save a
ced7bd 65   second database query in an ``IMetadataProvider`` plugin).
64ba13 66
08b2ae 67 - Patch supplied for issue #71 (http://bugs.repoze.org/issue71)
CM 68   whereby a downstream app can return a generator, relying on an
69   upstream component to call start_response.  We do this because the
70   challenge decider needs the status and headers to decide what to do.
71
56d0c5 72 1.0.12 (2009/4/19)
CM 73 ==================
74
75 - auth_tkt plugin tried to append REMOTE_USER_TOKENS data to
76   existing tokens data returned by auth_tkt.parse_tkt; this was
77   incorrect; just overwrite.
0ee58d 78
TS 79 - Extended auth_tkt plugin factory to allow passing secret in a separate
80   file from the main config file.  See http://bugs.repoze.org/issue40 .
81
a68075 82 1.0.11 (2009/4/10)
CM 83 ==================
afbbcd 84
8c20ba 85 - Fix auth_tkt plugin; cookie values are now quoted, making it possible
CM 86   to put spaces and other whitespace, etc in usernames. (thanks to Michael
95736b 87   Pedersen).
8c20ba 88
afbbcd 89 - Fix corner case issue of an exception raised when attempting to log
CM 90   when there are no identifiers or authenticators.
91
2e6142 92 1.0.10 (2009/1/23)
CM 93 ==================
7b931d 94
CM 95 - The RedirectingFormPlugin now passes along SetCookie headers set
96   into the response by the application within the NotFound response
97   (fixes TG2 "flash" issue).
98
f76fac 99 1.0.9 (2008/12/18)
9238cd 100 ==================
30ab69 101
9238cd 102 - The RedirectingFormPlugin now attempts to find a header named
CM 103   ``X-Authentication-Failure-Reason`` among the response headers set
104   by the application when a challenge is issued.  If a value for this
105   header exists (and is non-blank), the value is attached to the
106   redirect URL's query string as the ``reason`` parameter (or a
107   user-settable key).  This makes it possible for downstream
108   applications to issue a response that initiates a challenge with
109   this header and subsequently display the reason in the login form
110   rendered as a result of the challenge.
30ab69 111
5f7932 112 1.0.8 (2008/12/13)
9238cd 113 ==================
186ff6 114
9238cd 115 - The ``PluggableAuthenticationMiddleware`` constructor accepts a
CM 116   ``log_stream`` argument, which is typically a file.  After this
117   release, it can also be a PEP 333 ``Logger`` instance; if it is a
118   PEP 333 ``Logger`` instance, this logger will be used as the
119   repoze.who logger (instead of one being constructed by the
120   middleware, as was previously always the case).  When the
121   ``log_stream`` argument is a PEP 333 Logger object, the
122   ``log_level`` argument is ignored.
186ff6 123
37de44 124 1.0.7 (2008/08/28)
9238cd 125 ==================
37de44 126
9238cd 127 - ``repoze.who`` and ``repoze.who.plugins`` were not added to the
CM 128   ``namespace_packages`` list in setup.py, potentially making 1.0.6 a
129   brownbag release, given that making these packages namespace
130   packages was the only reason for its release.
37de44 131
facdf8 132 1.0.6 (2008/08/28)
9238cd 133 ==================
facdf8 134
9238cd 135 - Make repoze.who and repoze.who.plugins into namespace packages
CM 136   mainly so we can allow plugin authors to distribute packages in the
137   repoze.who.plugins namespace.
facdf8 138
7f0e9c 139 1.0.5 (2008/08/23)
9238cd 140 ==================
519300 141
9238cd 142 - Fix auth_tkt plugin to set the same cookies in its ``remember``
CM 143   method that it does in its ``forget`` method.  Previously, logging
144   out and relogging back in to a site that used auth_tkt identifier
145   plugin was slightly dicey and would only work sometimes.
facdf8 146
9238cd 147 - The FormPlugin plugin has grown a redirect-on-unauthorized feature.
CM 148   Any response from a downstream application that causes a challenge
149   and includes a Location header will cause a redirect to the value of
150   the Location header.
dee08c 151
b95a59 152 1.0.4 (2008/08/22)
9238cd 153 ===================
b95a59 154
9238cd 155 - Added a key to the '[general]' config section: ``remote_user_key``.
CM 156   If you use this key in the config file, it tells who to 1) not
157   perform any authentication if it exists in the environment during
158   ingress and 2) to set the key in the environment for the downstream
159   app to use as the REMOTE_USER variable.  The default is
160   ``REMOTE_USER``.
b95a59 161
9238cd 162 - Using unicode user ids in combination with the auth_tkt plugin would
CM 163   cause problems under mod_wsgi.
55dc7a 164
9238cd 165 - Allowed 'cookie_path' argument to InsecureCookiePlugin (and config
CM 166   constructor).  Thanks to Gustavo Narea.
55dc7a 167
f693fe 168 1.0.3 (2008/08/16)
9238cd 169 ==================
f693fe 170
9238cd 171 - A bug in the middleware's ``authenticate`` method made it impossible
CM 172   to authenticate a user with a userid that was null (e.g. 0, False),
173   which are valid identifiers.  The only invalid userid is now None.
c7e12d 174
9238cd 175 - Applied patch from Olaf Conradi which logs an error when an invalid
CM 176   filename is passed to the HTPasswdPlugin.
c7e12d 177
d76609 178 1.0.2 (2008/06/16)
9238cd 179 ==================
cad90d 180
9238cd 181 - Fix bug found by Chris Perkins: the auth_tkt plugin's "remember"
CM 182   method didn't handle userids which are Python "long" instances
183   properly.  Symptom: TypeError: cannot concatenate 'str' and 'long'
184   objects in "paste.auth.auth_tkt".
a2c030 185
9238cd 186 - Added predicate-based "restriction" middleware support
CM 187   (repoze.who.restrict), allowing configuratio-driven authorization as
188   a WSGI filter.  One example predicate, 'authenticated_predicate', is
189   supplied, which requires that the user be authenticated either via
190   'REMOTE_USER' or via 'repoze.who.identity'.  To use the filter to
191   restrict access::
cad90d 192
TS 193      [filter:authenticated_only]
194      use = egg:repoze.who#authenticated
195
196    or::
197
198      [filter:some_predicate]
199      use = egg:repoze.who#predicate
200      predicate = my.module:some_predicate
201      some_option = a value
202
8199a1 203 1.0.1
9238cd 204 =====
8199a1 205
9238cd 206 - Remove dependency-link to dist.repoze.org to prevent easy_install
CM 207   from inserting that path into its search paths (the dependencies are
208   available from PyPI).
8199a1 209
22e9e2 210 1.0
9238cd 211 ===
419946 212
9238cd 213 - The plugin at plugins.form.FormPlugin didn't redirect properly after
CM 214   collecting identification information.  Symptom: a downstream app
215   would receive a POST request with a blank body, which would
216   sometimes result in a Bad Request error.
f39349 217
9238cd 218 - Fixed interface declarations of
CM 219   'classifiers.default_request_classifier' and
220   'classifiers.default_password_compare'.
515c69 221
9238cd 222 - Added actual config-driven middleware factory,
CM 223   'config.make_middleware_with_config'
515c69 224
9238cd 225 - Removed fossilized 'who_conf' argument from plugin factory functions.
515c69 226
9238cd 227 - Added ConfigParser-based WhoConfig, implementing the spec outlined
CM 228   at
229   http://www.plope.com/static/misc/sphinxtest/intro.html#middleware-configuration-via-config-file,
230   with the following changes:
419946 231
9238cd 232 o "Bare" plugins (requiring no configuration options) may be specified
419946 233      as either egg entry points (e.g., 'egg:distname#entry_point_name') or
TS 234      as dotted-path-with-colon (e.g., 'dotted.name:object_id').
235
9238cd 236 o Therefore, the separator between a plugin and its classifier is now
CM 237   a semicolon, rather than a colon. E.g.::
419946 238
TS 239      [plugins:id_plugin]
240      use = egg:another.package#identify_with_frobnatz
241      frobnatz = baz
242
243      [identifiers]
244      plugins =
245        egg:my.egg#identify;browser
246        dotted.name:identifier
247        id_plugin
248
779caf 249 0.9.1 (2008-04-27)
9238cd 250 ==================
779caf 251
9238cd 252 - Fix auth_tkt plugin to be able to encode and decode integer user
CM 253   ids.
779caf 254
88e646 255 0.9 (2008-04-01)
9238cd 256 ================
88e646 257
9238cd 258 - Fix bug introduced in FormPlugin in 0.8 release (rememberer headers
CM 259   not set).
88e646 260
9238cd 261 - Add PATH_INFO to started and ended log info.
d9f046 262
9238cd 263 - Add a SQLMetadataProviderPlugin (in plugins/sql).
d9f046 264
9238cd 265 - Change constructor of SQLAuthenticatorPlugin: it now accepts only
CM 266   "query", "conn_factory", and "compare_fn".  The old constructor
267   accepted a DSN, but some database systems don't use DBAPI DSNs.  The
268   new constructor accepts no DSN; the conn_factory is assumed to do
269   all the work to make a connection, including knowing the DSN if one
270   is required.  The "conn_factory" should return something that, when
271   called with no arguments, returns a database connection.
d9f046 272
9238cd 273 - The "make_plugin" helper in plugins/sql has been renamed
CM 274   "make_authenticator_plugin".  When called, this helper will return a
275   SQLAuthenticatorPlugin.  A bit of helper logic in the
276   "make_authenticator_plugin" allows a connection factory to be
277   computed.  The top-level callable referred to by conn_factory in
278   this helper should return a function that, when called with no
279   arguments, returns a datbase connection.  The top-level callable
280   itself is called with "who_conf" (global who configuration) and any
281   number of non-top-level keyword arguments as they are passed into
282   the helper, to allow for a DSN or URL or whatever to be passed in.
d9f046 283
9238cd 284 - A "make_metatata_plugin" helper has been added to plugins/sql. When
CM 285   called, this will make a SQLMetadataProviderPlugin.  See the
286   implementation for details.  It is similar to the
287   "make_authenticator_plugin" helper.
d9f046 288
cbe4e3 289 0.8 (2008-03-27)
9238cd 290 ================
b5a331 291
9238cd 292 - Add a RedirectingFormIdentifier plugin.  This plugin is willing to
CM 293   redirect to an external (or downstream application) login form to
294   perform identification.  The external login form must post to the
295   "login_handler_path" of the plugin (optimally with a "came_from"
296   value to tell the plugin where to redirect the response to if the
297   authentication works properly).  The "logout_handler_path" of this
298   plugin can be visited to perform a logout.  The "came_from" value
299   also works there.
a400b0 300
9238cd 301 - Identifier plugins are now permitted to set a key in the environment
CM 302   named 'repoze.who.application' on ingress (in 'identify').  If an
303   identifier plugin does so, this application is used instead of the
304   "normal" downstream application.  This feature was added to more
305   simply support the redirecting form identifier plugin.
a400b0 306
CM 307 0.7 (2008-03-26)
9238cd 308 ================
a400b0 309
9238cd 310 - Change the IMetadataProvider interface: this interface used to have
CM 311   a "metadata" method which returned a dictionary.  This method is not
312   part of that API anymore.  It's been replaced with an "add_metadata"
313   method which has the signature::
b5a331 314
CM 315     def add_metadata(environ, identity):
316         """
317         Add metadata to the identity (which is a dictionary)
318         """
319
320    The return value is ignored.  IMetadataProvider plugins are now
321    assumed to be responsible for 'scribbling' directly on the identity
322    that is passed in (it's a dictionary).  The user id can always be
323    retrieved from the identity via identity['repoze.who.userid'] for
324    metadata plugins that rely on that value.
325
a400b0 326 0.6 (2008-03-20)
9238cd 327 ================
e35c64 328
9238cd 329 - Renaming: repoze.pam is now repoze.who
cb5426 330
9238cd 331 - Bump ez_setup.py version.
e35c64 332
9238cd 333 - Add IMetadataProvider plugin type.  Chris says 'Whit rules'.
fa9581 334
3b67e9 335 0.5 (2008-03-09)
9238cd 336 ================
db4cf5 337
9238cd 338 - Allow "remote user key" (default: REMOTE_USER) to be overridden
CM 339   (pass in remote_user_key to middleware constructor).
db4cf5 340
9238cd 341 - Allow form plugin to override the default form.
db4cf5 342
9238cd 343 - API change: IIdentifiers are no longer required to put both 'login'
CM 344   and 'password' in a returned identity dictionary.  Instead, an
345   IIdentifier can place arbitrary key/value pairs in the identity
346   dictionary (or return an empty dictionary).
40a968 347
9238cd 348 - API return value change: the "failure" identity which IIdentifiers
CM 349   return is now None rather than an empty dictionary.
40a968 350
9238cd 351 - The IAuthenticator interface now specifies that IAuthenticators must
CM 352   not raise an exception when evaluating an identity that does not
353   have "expected" key/value pairs (e.g. when an IAuthenticator that
354   expects login and password inspects an identity returned by an
355   IP-based auth system which only puts the IP address in the
356   identity); instead they fail gracefully by returning None.
40a968 357
9238cd 358 - Add (cookie) "auth_tkt" identification plugin.
a5b033 359
9238cd 360 - Stamp identity dictionaries with a userid by placing a key named
CM 361   'repoze.pam.userid' into the identity for each authenticated
362   identity.
a5b033 363
9238cd 364 - If an IIdentifier plugin inserts a 'repoze.pam.userid' key into the
CM 365   identity dictionary, consider this identity "preauthenticated".  No
366   authenticator plugins will be asked to authenticate this identity.
367   This is designed for things like the recently added auth_tkt plugin,
368   which embeds the user id into the ticket.  This effectively alllows
369   an IIdentifier plugin to become an IAuthenticator plugin when
370   breaking apart the responsibility into two separate plugins is
371   "make-work".  Preauthenticated identities will be selected first
372   when deciding which identity to use for any given request.
a5b033 373
9238cd 374 - Insert a 'repoze.pam.identity' key into the WSGI environment on
CM 375   ingress if an identity is found.  Its value will be the identity
376   dictionary related to the identity selected by repoze.pam on
377   ingress.  Downstream consumers are allowed to mutate this
378   dictionary; this value is passed to "remember" and "forget", so its
379   main use is to do a "credentials reset"; e.g. a user has changed his
380   username or password within the application, but we don't want to
381   force him to log in again after he does so.
a5b033 382
247f34 383 0.4 (03-07-2008)
9238cd 384 ================
247f34 385
9238cd 386 - Allow plugins to specify a classifiers list per interface (instead
CM 387   of a single classifiers list per plugin).
247f34 388
fb510d 389 0.3 (03-05-2008)
9238cd 390 ================
fb510d 391
9238cd 392 - Make SQLAuthenticatorPlugin's default_password_compare use hexdigest
CM 393   sha instead of base64'ed binary sha for simpler conversion.
fb510d 394
196bc2 395 0.2 (03-04-2008)
9238cd 396 ================
196bc2 397
9238cd 398 - Added SQLAuthenticatorPlugin (see plugins/sql.py).
196bc2 399
318832 400 0.1 (02-27-2008)
9238cd 401 ================
318832 402
9238cd 403 - Initial release (no configuration file support yet).
CM 404
fdbab9 405