Skip to content
Snippets Groups Projects
Commit ad19a622 authored by Megan Henning's avatar Megan Henning
Browse files

Bug fixes

parent 421a2d40
No related branches found
No related tags found
No related merge requests found
import requests
import json
from . import APIAuthProviderException, APIUnknownUserException
from . import APIAuthProviderException
from .. import config, util
......@@ -26,7 +26,7 @@ class AuthProvider(object):
when auth_type is dynamic.
"""
if auth_type in AuthProviders:
provider_class = AuthProviders[auth_type].value
provider_class = AuthProviders[auth_type]
return provider_class()
else:
raise NotImplementedError('Auth type {} is not supported'.format(auth_type))
......@@ -35,13 +35,13 @@ class AuthProvider(object):
class JWTAuthProvider(AuthProvider):
def __init__(self):
super(JWTAuthProvider,self).__init__(AuthProviders.ldap.key)
super(JWTAuthProvider,self).__init__('ldap')
def validate_code(code):
def validate_code(self, code):
uid = self.validate_user_exists(code)
return code, None, uid
def validate_user_exists(token):
def validate_user_exists(self, token):
r = requests.post(self.config['id_endpoint'], data={'token': token})
if not r.ok:
raise APIAuthProviderException('User token not valid')
......@@ -54,16 +54,16 @@ class JWTAuthProvider(AuthProvider):
class GoogleOAuthProvider(AuthProvider):
def __init__(self):
super(GoogleAuthProvider,self).__init__(AuthProviders.google.key)
super(GoogleOAuthProvider,self).__init__('google')
def validate_code(code):
def validate_code(self, code):
payload = {
'client_id': self.config['client_id'],
'client_secret': self.config['client_secret'],
'code': code,
'grant_type': 'authorization_code'
}
r = requests.post(self.config['token_url'], data=payload)
r = requests.post(self.config['token_endpoint'], data=payload)
if not r.ok:
raise APIAuthProviderException('User code not valid')
......@@ -74,7 +74,7 @@ class GoogleOAuthProvider(AuthProvider):
return token, refresh_token, uid
def validate_user_exists(token):
def validate_user_exists(self, token):
r = requests.get(self.config['id_endpoint'], headers={'Authorization': 'Bearer ' + token})
if not r.ok:
raise APIAuthProviderException('User token not valid')
......@@ -87,16 +87,16 @@ class GoogleOAuthProvider(AuthProvider):
class WechatOAuthProvider(AuthProvider):
def __init__(self):
super(WechatAuthProvider,self).__init__(AuthProviders.wechat.key)
super(WechatOAuthProvider,self).__init__('wechat')
def validate_code(code):
def validate_code(self, code):
payload = {
'appid': self.config['client_id'],
'secret': self.config['client_secret'],
'code': code,
'grant_type': 'authorization_code'
}
r = requests.post(self.config['token_url'], params=payload)
r = requests.post(self.config['token_endpoint'], params=payload)
if not r.ok:
raise APIAuthProviderException('User code not valid')
......@@ -107,8 +107,8 @@ class WechatOAuthProvider(AuthProvider):
return token, refresh_token, uid
AuthProviders = util.Enum('AuthProviders', {
AuthProviders = {
'google' : GoogleOAuthProvider,
'ldap' : JWTAuthProvider,
'wechat' : WechatOAuthProvider
})
}
......@@ -16,6 +16,7 @@ from .. import config
from ..types import Origin
from .. import validators
from ..auth.authproviders import AuthProvider
from ..auth import APIAuthProviderException
from ..dao import APIConsistencyException, APIConflictException, APINotFoundException, APIPermissionException, APIValidationException, dbutil
from ..dao.hierarchy import get_parent_tree
from ..web.request import log_access, AccessType
......@@ -341,6 +342,8 @@ class RequestHandler(webapp2.RequestHandler):
elif isinstance(exception, validators.InputValidationException):
code = 400
self.request.logger.warning(str(exception))
elif isinstance(exception, APIAuthProviderException):
code = 401
elif isinstance(exception, APIConsistencyException):
code = 400
elif isinstance(exception, APIPermissionException):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment