summaryrefslogtreecommitdiffstats
path: root/pharos-dashboard/src/account
diff options
context:
space:
mode:
authormaxbr <maxbr@mi.fu-berlin.de>2016-10-05 14:24:11 +0200
committerJose Lausuch <jose.lausuch@ericsson.com>2016-10-12 13:29:04 +0000
commitadafb09cb1f221259970d16886ea0e03169899a5 (patch)
treed282c9c67723a4f5247909256396bbfd1d957335 /pharos-dashboard/src/account
parent46e1d9ab232df1c4deb672b72cd7b87081094955 (diff)
Sync dashboard user data with jira
JIRA: PHAROS-264 Change-Id: Ic4533af04946ee0493c762ca79aaf46ee0f80e00 Signed-off-by: maxbr <maxbr@mi.fu-berlin.de>
Diffstat (limited to 'pharos-dashboard/src/account')
-rw-r--r--pharos-dashboard/src/account/migrations/0002_auto_20161005_1201.py25
-rw-r--r--pharos-dashboard/src/account/models.py8
-rw-r--r--pharos-dashboard/src/account/tasks.py34
-rw-r--r--pharos-dashboard/src/account/views.py21
4 files changed, 81 insertions, 7 deletions
diff --git a/pharos-dashboard/src/account/migrations/0002_auto_20161005_1201.py b/pharos-dashboard/src/account/migrations/0002_auto_20161005_1201.py
new file mode 100644
index 0000000..33d2cc5
--- /dev/null
+++ b/pharos-dashboard/src/account/migrations/0002_auto_20161005_1201.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10 on 2016-10-05 12:01
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('account', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='userprofile',
+ name='full_name',
+ field=models.CharField(default='', max_length=100),
+ ),
+ migrations.AddField(
+ model_name='userprofile',
+ name='jira_url',
+ field=models.CharField(default='', max_length=100),
+ ),
+ ]
diff --git a/pharos-dashboard/src/account/models.py b/pharos-dashboard/src/account/models.py
index 621f669..d87ee18 100644
--- a/pharos-dashboard/src/account/models.py
+++ b/pharos-dashboard/src/account/models.py
@@ -11,6 +11,7 @@
from django.db import models
from django.contrib.auth.models import User
+from rest_framework.authtoken.models import Token
from dashboard.models import Resource
@@ -23,8 +24,15 @@ class UserProfile(models.Model):
ssh_public_key = models.FileField(upload_to=upload_to, null=True, blank=True)
pgp_public_key = models.FileField(upload_to=upload_to, null=True, blank=True)
company = models.CharField(max_length=200, blank=False)
+
oauth_token = models.CharField(max_length=1024, blank=False)
oauth_secret = models.CharField(max_length=1024, blank=False)
+ jira_url = models.CharField(max_length=100, default='')
+ full_name = models.CharField(max_length=100, default='')
+
class Meta:
db_table = 'user_profile'
+
+ def __str__(self):
+ return self.user.username
diff --git a/pharos-dashboard/src/account/tasks.py b/pharos-dashboard/src/account/tasks.py
new file mode 100644
index 0000000..bfb865d
--- /dev/null
+++ b/pharos-dashboard/src/account/tasks.py
@@ -0,0 +1,34 @@
+##############################################################################
+# Copyright (c) 2016 Max Breitenfeldt and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+
+from celery import shared_task
+from django.contrib.auth.models import User
+from jira import JIRAError
+
+from account.jira_util import get_jira
+
+
+@shared_task
+def sync_jira_accounts():
+ users = User.objects.all()
+ for user in users:
+ jira = get_jira(user)
+ try:
+ user_dict = jira.myself()
+ except JIRAError:
+ # User can be anonymous (local django admin account)
+ continue
+ user.email = user_dict['emailAddress']
+ user.userprofile.url = user_dict['self']
+ user.userprofile.full_name = user_dict['displayName']
+ print(user_dict)
+
+ user.userprofile.save()
+ user.save() \ No newline at end of file
diff --git a/pharos-dashboard/src/account/views.py b/pharos-dashboard/src/account/views.py
index 3b4269d..ac973f5 100644
--- a/pharos-dashboard/src/account/views.py
+++ b/pharos-dashboard/src/account/views.py
@@ -12,6 +12,7 @@ import os
import urllib
import oauth2 as oauth
+from django.conf import settings
from django.contrib import messages
from django.contrib.auth import logout, authenticate, login
from django.contrib.auth.decorators import login_required
@@ -19,17 +20,14 @@ from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.models import User
from django.urls import reverse
from django.utils.decorators import method_decorator
-from django.views.generic import RedirectView
-from django.views.generic import TemplateView
-from django.views.generic import UpdateView
+from django.views.generic import RedirectView, TemplateView, UpdateView
+
from jira import JIRA
+from rest_framework.authtoken.models import Token
from account.forms import AccountSettingsForm
from account.jira_util import SignatureMethod_RSA_SHA1
from account.models import UserProfile
-from django.conf import settings
-
-consumer = oauth.Consumer(settings.OAUTH_CONSUMER_KEY, settings.OAUTH_CONSUMER_SECRET)
@method_decorator(login_required, name='dispatch')
@@ -46,9 +44,16 @@ class AccountSettingsView(UpdateView):
def get_object(self, queryset=None):
return self.request.user.userprofile
+ def get_context_data(self, **kwargs):
+ token, created = Token.objects.get_or_create(user=self.request.user)
+ context = super(AccountSettingsView, self).get_context_data(**kwargs)
+ context.update({'title': "Settings", 'token': token})
+ return context
+
class JiraLoginView(RedirectView):
def get_redirect_url(self, *args, **kwargs):
+ consumer = oauth.Consumer(settings.OAUTH_CONSUMER_KEY, settings.OAUTH_CONSUMER_SECRET)
client = oauth.Client(consumer)
client.set_signature_method(SignatureMethod_RSA_SHA1())
@@ -61,7 +66,7 @@ class JiraLoginView(RedirectView):
self.request.session['request_token'] = dict(urllib.parse.parse_qsl(content.decode()))
# Step 3. Redirect the user to the authentication URL.
url = settings.OAUTH_AUTHORIZE_URL + '?oauth_token=' + \
- self.request.session['request_token']['oauth_token'] + \
+ self.request.session['request_token']['oauth_token'] + \
'&oauth_callback=' + settings.OAUTH_CALLBACK_URL
return url
@@ -75,6 +80,7 @@ class JiraLogoutView(LoginRequiredMixin, RedirectView):
class JiraAuthenticatedView(RedirectView):
def get_redirect_url(self, *args, **kwargs):
# Step 1. Use the request token in the session to build a new client.
+ consumer = oauth.Consumer(settings.OAUTH_CONSUMER_KEY, settings.OAUTH_CONSUMER_SECRET)
token = oauth.Token(self.request.session['request_token']['oauth_token'],
self.request.session['request_token']['oauth_token_secret'])
client = oauth.Client(consumer, token)
@@ -122,6 +128,7 @@ class JiraAuthenticatedView(RedirectView):
# redirect user to settings page to complete profile
return url
+@method_decorator(login_required, name='dispatch')
class UserListView(TemplateView):
template_name = "account/user_list.html"