REST API: Implement a simple way to check user credentials
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
GNU Mailman |
Fix Released
|
High
|
Barry Warsaw |
Bug Description
Currently there is no way to check a user's credentials via the REST API. While there were discussions on implementing a middleware "hook" to implement complex authentication logic, there should also be a simple way to check if a given combination of a user's credentials (user name and password) matches the one stored in mailman's internal db.
A good way to do this (as discussed on IRC a while ago) could be to implement a SQL stored procedure-like behavior in the REST API.
Meaning: A client sends a uname/pwd-
Things to discuss or consider:
1.) How is the password stored in MMs internal db? (plaintext or hashed? if hashed, which algorithm is used?)
2.) (How) should the pwd be encrypted when sent to the API (depends on 1.)?
3.) Should this API resource be limited to requests from localhost and/or via SSL?
description: | updated |
Changed in mailman: | |
milestone: | none → 3.0.0b1 |
Changed in mailman: | |
status: | New → Confirmed |
importance: | Undecided → High |
assignee: | nobody → Barry Warsaw (barry) |
Changed in mailman: | |
milestone: | 3.0.0b1 → postponed |
I'm actually going to close this as Fix Committed. Here's what you can do; if this is insufficient, please reopen this bug (although it may indeed get postponed until after 3.0).
Let's say you're Postorius and someone has just typed their email address and password. You GET this resource:
http:// localhost:<email address hidden>
Dig out the `password` attribute in the json. Now, you are armed with the encoded-hashed password of the user, and the cleartext password they typed into the form. You then use this Python code to do the verification:
from flufl.password import verify json_password, typed_password):
if verify(
# The user successfully logged in.
See http:// packages. python. org/flufl. password/ docs/using. html#verifying- a-password for details.