Improve logging

- add a mixin to initialize a logger in the view __init__ method
- log login, link creation and link deletion
This commit is contained in:
Benjamin Dauvergne 2014-11-20 14:51:21 +01:00
parent 926accba9e
commit 0be4dacf27
1 changed files with 20 additions and 11 deletions

View File

@ -40,9 +40,10 @@ def user_has_mspaccount(user):
mspaccount_required = user_passes_test(user_has_mspaccount, '/')
logger = logging.getLogger(__name__)
class LoggerMixin(object):
def __init__(self, *args, **kwargs):
self.logger = logging.getLogger(__name__)
super(LoggerMixin, *args, **kwargs)
try:
cache = get_cache('msp')
@ -101,7 +102,7 @@ def access_token_from_request(request):
ACCESS_GRANT_CODE = 'accessgrantcode'
class MspOAuthSessionViewMixin(object):
class MspOAuthSessionViewMixin(LoggerMixin):
'''Add the OAuth2 dance to a view'''
scopes = []
redirect_field_name = REDIRECT_FIELD_NAME
@ -156,7 +157,7 @@ class MspOAuthSessionViewMixin(object):
def authorization_error(self, request, *args, **kwargs):
if request.REQUEST['error'] == 'access_denied':
messages.warning(request, _('request denied by user'))
logger.debug('authorization_error %r', request.GET)
self.logger.debug('authorization_error %r', request.GET)
return self.redirect(request)
def dispatch(self, request, *args, **kwargs):
@ -190,8 +191,10 @@ class LoginView(PopupViewMixin, MspOAuthSessionViewMixin, View):
user = authenticate(agc=agc)
if user:
auth_login(request, user)
self.logger.info('user %r logged in using msp', unicode(user))
else:
messages.warning(request, _('no local account is linked to your MSP account'))
messages.warning(request, _('no local account is linked to your MSP '
'account'))
return self.redirect(request)
login = LoginView.as_view()
@ -216,6 +219,8 @@ class LinkView(PopupViewMixin, MspOAuthSessionViewMixin, View):
except models.MspAccount.DoesNotExist:
models.MspAccount.objects.create(user=request.user,
agc=agc, token=json.dumps(self.token))
self.logger.info('msp link created for user %r',
unicode(request.user))
messages.info(request, _('msp link created'))
return self.redirect(request)
@ -231,21 +236,21 @@ class UnlinkView(PopupViewMixin, MspOAuthSessionViewMixin, TemplateView):
result = self.api_call('app/rest/agc', method='delete')
if result.status_code // 100 == 2:
qs.delete()
logger.debug('all link deleted for %r', request.user)
self.logger.info('msp link deleted for %r', unicode(request.user))
next_url = self.redirect_to(request, *args, **kwargs)
msp_unlink_url = reverse('msp-unlink-done')
next_url = '{0}?{1}'.format(msp_unlink_url,
urllib.urlencode({REDIRECT_FIELD_NAME: next_url}))
return self.redirect(request, next_url=next_url)
else:
logger.debug('error when deleting msp link %r', result.content)
self.logger.debug('error when deleting msp link %r', result.content)
else:
logger.debug('no msp account exist doing nothing')
self.logger.debug('no msp account exist doing nothing')
return self.redirect(request)
unlink = login_required(UnlinkView.as_view())
class AuthorizeView(View):
class AuthorizeView(LoggerMixin, View):
'''OAuth2/MSP proxy authorization view.
It works exactly like MSP authorization endpoint but hide the real
@ -300,7 +305,7 @@ class AuthorizeView(View):
assert GET['response_type'] == 'code'
redirect_uri = request.build_absolute_uri(request.path)
state = str(uuid.uuid4())
logger.debug('%s: received MSP authorization demande %r', state, GET)
self.logger.debug('%s: received MSP authorization demande %r', state, GET)
# save state
cache.set('msp-state-' + state, {
'msp_redirect_uri': redirect_uri,
@ -454,6 +459,7 @@ class LoginOrLinkView(PopupViewMixin, MspOAuthSessionViewMixin, View):
user = authenticate(agc=agc)
if user:
auth_login(request, user)
self.logger.info('user %r logged in using msp', unicode(user))
return self.redirect(request)
elif request.user.is_authenticated():
msp_account, created = models.MspAccount.objects.get_or_create(defaults={
@ -467,6 +473,9 @@ class LoginOrLinkView(PopupViewMixin, MspOAuthSessionViewMixin, View):
msp_account.agc = agc
msp_account.token = json.dumps(self.token)
msp_account.save()
else:
self.logger.info('msp link created for user %r',
unicode(request.user))
messages.info(request, _('msp link created'))
return self.redirect(request)
else: