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