| Commit message (Collapse) | Author | Age | Files | Lines |
| |\ |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
both encrypted according to a scheme, and a bytes object.
add_member(): Use encrypt_password().
cli_members: Give the user a default, user-friendly password. Of course, this
will be encrypted so it can't be retrieved, but it can be reset.
Passwords are stored as bytes objects, not unicode now.
ConfigLayer: Set the default test password scheme to cleartext.
General test repair.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- As the most common interface for adding new members (and users), adapt the
password storing bit to storing only encrypted passwords in the database.
schema.cfg:
- Remove the creator_pw_file and site_pw_file as they are obsolete.
- Add password_schema key for defining the default password encryption scheme.
mailman.sql, user.py:
- Store the password as a binary blob instead of as unicode text.
|
| |\| |
|
| | |\ |
|
| | | |
| | |
| | |
| | | |
pure convenience by way of an IUserManager lookup.
|
| |\| | |
|
| | |/ |
|
| | | |
|
| | | |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Add a 'uid factory' which allows us to return predictable unique ids for
various testing purposes, e.g. user ids. This should work even in the case
of cross-subprocess uid generation.
* REST access to individual users, or the set of all users.
* User objects now have a created_on attribute.
* Users can be created through the web, but must have an email address.
* Add a [devmode] 'testing' variable for communicating to qrunner subprocesses
that we're running in testing mode. This allows us to coordinate factories
and such in the qrunner processes.
* layers.is_testing() for more consistent API.
* Give AddressError a .address attribute for better diagnostics.
|
| |\| |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
initialization. buildout.cfg is now really simple; it calls one method.
That method does all the relevant layer initializations. This better
localizes what has to be set up before testing can even begin.
* IUsers now have a created_on property which contains the datetime at which
the user record was created.
* Rework the date and uid factories so that they consult the
MockAndMonkeyLayer for the current testing flag. Also, those factories
register themselves with the layer so that they'll get automatically reset
between tests, without the layer actually having to know about them.
* Move the User model object initialization into User.__init__() from the user
manager. The User now also adds itself to the store.
* Add a 'uid factory' for unique id creation, which is test suite aware.
|
| | | |
|
| |\| |
|
| | |
| |
| |
| |
| | |
* Find users by user_id via the user manager.
* Extend the repr of users to include the user id.
|
| |/
|
|
| |
* Remove mmsitepass.py - there is no more site password.
|
| |\ |
|
| | | |
|
| | |\
| |/
|/| |
|
| |\|
| |
| |
| |
| |
| |
| | |
Utils.maketext() and Utils.findtext() in favor of better implementations in
mailman.utilities.i18n.
We're nearly there!
|
| | | |
|
| | | |
|
| | | |
|
| | |
| |
| |
| | |
added. TODO: flesh out make().
|
| |/
|
|
| |
useful for ensuring current functionality.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
| |
subscription bans so as not to have to rely on BLOBS or pickles in the
database.
Also, be sure to include .rst files in both doctests and in the packaged
tarballs. With the now awesome reST mode for Emacs, I plan to rename all .txt
doctest files to .rst.
|
| | |
|
| |
|
|
|
|
|
|
| |
was already linked to a user. Found by Florian Fuchs who also provided the
fix, though I implemented the test differently. LP: #710182
Also, refactor the "reset the world" functionality ConfigLayer.testTearDown()
so that it could be used by other test code.
|
| | |
|
| |
|
|
| |
Also, remove a obsolete test.
|
| | |
|
| | |
|
| |
|
|
|
| |
Added smtp_user and smtp_pass options to the [mta] section to support logging
into the SMTP server. All the underlying support is in Python's smtplib.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* member-moderation happens at the same place in the built-in chain that the
previously named moderation rule happens. nonmember-moderation happens
after all the other normal moderation rules.
* Handle unsubscribed nonmember posts.
Other changes:
* Message.senders now filters out Nones and empty strings.
* Various test cleanups and simplifications.
* More `address` -> `email` fixes.
* Give Link class a useful repr.
* Fix a potential UnboundLocalError.
* Various other small changes.
|
| | |
|
| |
|
|
|
|
| |
IAddress.email and IAddress.original_address to IAddress.original_email. From
now on we'll use "address" to talk about the IAddress object and "email" to
talk about the textual email address.
|
| |
|
|
|
|
|
| |
* Add test to show that the incoming runner adds all sender addresses to
the global user manager.
* New doctest helper: dump_list()
* Other random cleanups.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now, nonmembers are represented by a separate roster of IMembers, the latter
which has grown a `moderation_action` enum. When that action is `defer`, then
the normal processing rules apply. Anything else and the `moderation` chain
is jumped to for a shortcut to moderation (which may include immediate
acceptance).
TODO: handle unregistered nonmembers.
Details:
* The member-moderation rule is renamed to just moderation, and handles both
members and nonmembers (though the latter must currently be registered).
* The moderation rule is moved up in the builtin chain. It is now checked
after `approved`, `emergency`, and `loop`, but before the normal moderation
checks. This means that nonmember postings will be (by default) held much
earlier.
* IMember.is_moderated is removed.
* IMember.moderation_action is added.
* IMailingList.default_member_moderation is removed.
* IMailingList.default_member_action and
IMailingList.default_nonmember_action are added.
* MemberRole.nonmember is added.
|
| |
|
|
|
|
| |
* member_moderation_action exposed in IMailingList
* REST configuration test for member_moderation_action, send_welcome_msg, and
welcome_msg.
|
| |\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
lp:~jimmy-sigint/mailman/restapi_additional_attributes
Ostensibly, this adds support for a few additional attributes through the REST
API:
* default_member_moderation
* generic_nonmember_action
* member_moderation_action
* reply_goes_to_list
* send_welcome_msg
* welcome_msg
However, I had never previously fleshed out the conversion of
default_member_moderation and member_moderation_action into the MM3 way of
things. That is now done. Non-member moderation still needs to be done.
Specific changes:
* mailman.chains.base.Chain no longer self registers
* The built-in chain gets a new link for checking 'member-moderation'. If
this rule matches, it jumps to the 'member-moderation' chain, which checks
member_moderation_action and returns a link that jumps to the appropriate
terminal chain.
* Chain initialization is done by the same auto-detection as rules, handlers,
etc. The one tricky thing is that abstract base classes such as Chain and
TerminalChainBase can't be instantiated. For now, there's an ugly special
case to skip these.
* default_member_moderation is now exposed in the IMailingList interface.
* Member.is_moderated gets set in the constructor from the mailing list's
default_member_moderation.
* The 'moderation' rule is renamed 'member-moderation'.
TODO:
* Work out non-member moderation
* Add member_moderation_action to IMailingList
* Double check tests for reply_goes_to_list, send_welcome_msg, and welcome_msg
|
| | |
| |
| |
| | |
member_moderation_action, default_member_moderation and generic_nonmember_action to the writable attributes in the REST service
|