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