Verified Commit 62dc554d authored by Baptiste Beauplat's avatar Baptiste Beauplat
Browse files

Add a lookup_user_from_address method to User's manager

Parses arbitrary email format such as Deb822's Maintainer or Changed-By
fields (Vincent Time <vtime@example.org>).
parent 971fd483
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE. # OTHER DEALINGS IN THE SOFTWARE.
from email.utils import getaddresses
from enum import Enum from enum import Enum
from django.contrib.auth.models import AbstractUser, BaseUserManager from django.contrib.auth.models import AbstractUser, BaseUserManager
...@@ -92,6 +93,28 @@ class UserManager(BaseUserManager): ...@@ -92,6 +93,28 @@ class UserManager(BaseUserManager):
return self._create_user(email, name, password, **extra_fields) return self._create_user(email, name, password, **extra_fields)
def lookup_user_from_address(self, address):
"""
Lookup a user using an arbitrary formatted email.
This method is used by Changes to lookup the user of an unsigned upload,
when allowed. The address is extracted from the .chagnes Changed-By
field or, if missing, from the Maintainer field.
The address format (Vincent Time <vtime@example.org>) is decoded using
email.utils.getaddresses.
"""
if not address:
return
decoded_address = getaddresses([address])
email = decoded_address[0][1]
try:
return self.get(email=email)
except User.DoesNotExist:
return
class User(AbstractUser): class User(AbstractUser):
"""User model.""" """User model."""
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment