mirror of
https://github.com/pinry/pinry.git
synced 2025-11-13 08:35:41 +01:00
Refactor apps to be in repo folder
This commit is contained in:
43
users/auth/backends.py
Normal file
43
users/auth/backends.py
Normal file
@@ -0,0 +1,43 @@
|
||||
import re
|
||||
|
||||
from core.models import Pin
|
||||
from users.models import User
|
||||
|
||||
email_re = re.compile(
|
||||
r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom
|
||||
# quoted-string, see also http://tools.ietf.org/html/rfc2822#section-3.2.5
|
||||
r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"'
|
||||
r')@((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)$)'
|
||||
# domain
|
||||
r'|\[(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}\]$', re.IGNORECASE) # literal form, ipv4 address (SMTP 4.1.3)
|
||||
|
||||
|
||||
class CombinedAuthBackend(object):
|
||||
def authenticate(self, username=None, password=None):
|
||||
is_email = email_re.match(username)
|
||||
if is_email:
|
||||
qs = User.objects.filter(email=username)
|
||||
else:
|
||||
qs = User.objects.filter(username=username)
|
||||
|
||||
try:
|
||||
user = qs.get()
|
||||
except User.DoesNotExist:
|
||||
return None
|
||||
if user.check_password(password):
|
||||
return user
|
||||
return None
|
||||
|
||||
def get_user(self, user_id):
|
||||
try:
|
||||
return User.objects.get(pk=user_id)
|
||||
except User.DoesNotExist:
|
||||
return None
|
||||
|
||||
def has_perm(self, user, perm, obj=None):
|
||||
"""
|
||||
A very simplistic authorization mechanism for now. Basically a pin owner can do anything with the pin.
|
||||
"""
|
||||
if obj and isinstance(obj, Pin):
|
||||
return obj.submitter == user
|
||||
return False
|
||||
Reference in New Issue
Block a user