-
Notifications
You must be signed in to change notification settings - Fork 2k
/
authenticator.py
44 lines (32 loc) · 1.26 KB
/
authenticator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import logging
from zope.interface import implements
from repoze.who.interfaces import IAuthenticator
from ckan.model import User, Session
log = logging.getLogger(__name__)
class OpenIDAuthenticator(object):
implements(IAuthenticator)
def authenticate(self, environ, identity):
if 'repoze.who.plugins.openid.userid' in identity:
openid = identity['repoze.who.plugins.openid.userid']
user = User.by_openid(openid)
if user is None or user.is_deleted():
return None
else:
return user.name
return None
class UsernamePasswordAuthenticator(object):
implements(IAuthenticator)
def authenticate(self, environ, identity):
if not ('login' in identity and 'password' in identity):
return None
login = identity['login']
user = User.by_name(login)
if user is None:
log.debug('Login failed - username %r not found', login)
elif user.is_deleted():
log.debug('Login as %r failed - user is deleted', login)
elif not user.validate_password(identity['password']):
log.debug('Login as %r failed - password not valid', login)
else:
return user.name
return None