From d9c07503353f437707ed004492bf58bd836a21f1 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 16 Feb 2017 19:00:29 -0800 Subject: [PATCH 1/5] bringing in necessary components/authentication into userprofile views from todo views. --- neuropy/userprofile/views.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/neuropy/userprofile/views.py b/neuropy/userprofile/views.py index 3e862c4..d06df19 100644 --- a/neuropy/userprofile/views.py +++ b/neuropy/userprofile/views.py @@ -1,14 +1,30 @@ """Views for profile.""" +import os +import httplib2 from django.contrib.auth.mixins import LoginRequiredMixin from django.http import HttpResponseRedirect from django.urls import reverse_lazy from django.views.generic import DetailView, UpdateView, FormView from userprofile.forms import ProfileForm, MedicationForm from userprofile.models import Profile -from todo.views import create_event_list +from todo.views import create_event_list, calender_insert +from userprofile.models import CredentialsModel +from oauth2client.contrib.django_util.storage import DjangoORMStorage +from oauth2client.contrib import xsrfutil +from neuropy import settings +from oauth2client.client import flow_from_clientsecrets + +CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), '..', 'neuropy', 'client_secret.json') + +FLOW = flow_from_clientsecrets( + CLIENT_SECRETS, + scope='https://www.googleapis.com/auth/calendar', + redirect_uri='http://localhost:8000/oauth2callback' +) + class ProfileView(LoginRequiredMixin, DetailView): """View for profile.""" @@ -38,6 +54,18 @@ def form_valid(self, form): """Return HttpResponse when valid data is posted.""" medication = form.cleaned_data['medication'] priority_list = create_event_list(medication.name, self.request.user.profile) + + storage = DjangoORMStorage(CredentialsModel, 'user_id', request.user, 'credential') + credential = storage.get() + if credential is None or credential.invalid: + FLOW.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY, + request.user) + authorize_url = FLOW.step1_get_authorize_url() + return HttpResponseRedirect(authorize_url) + else: + http = httplib2.Http() + http = credential.authorize(http) + self.request.session['some_list'] = priority_list return HttpResponseRedirect(self.get_success_url()) From 407a15c6b92ff21b171515a6c7ecac74b5270e16 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 16 Feb 2017 19:27:59 -0800 Subject: [PATCH 2/5] merging to pull --- neuropy/todo/views.py | 2 ++ neuropy/userprofile/views.py | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/neuropy/todo/views.py b/neuropy/todo/views.py index c1f5d7a..05b6704 100644 --- a/neuropy/todo/views.py +++ b/neuropy/todo/views.py @@ -157,6 +157,8 @@ def td(time): elif idx == 3 and priority_dict['start'] < easy_start: priority_dict['ease'] = 'medium' + else: + priority_dict['ease'] = 'easy' priority_dict['start'] = start_time.strftime("%H:%M") priority_dict['end'] = end_time.strftime("%H:%M") diff --git a/neuropy/userprofile/views.py b/neuropy/userprofile/views.py index d06df19..cd5e4a2 100644 --- a/neuropy/userprofile/views.py +++ b/neuropy/userprofile/views.py @@ -66,8 +66,29 @@ def form_valid(self, form): http = httplib2.Http() http = credential.authorize(http) - self.request.session['some_list'] = priority_list + for event in priority_list: + google_event = {} + if event['ease'] == 'easy': + google_event['colorId'] = 3 + elif event['ease'] == 'medium': + google_event['colorId'] = 2 + else: + google_event['colorId'] = 11 + google_event['description'] = event['description'] + google_event['summary'] = event['summary'] + google_event['start'] = {'dateTime': str(event['start'])} + google_event['end'] = {'dateTime': str(event['end'])} + google_event['reminders'] = { + 'useDefault': False, + 'overrides': [ + {'method': 'email', 'minutes': 24 * 60}, + {'method': 'popup', 'minutes': 10}, + ] + } + + calender_insert(http, {}) + self.request.session['some_list'] = priority_list return HttpResponseRedirect(self.get_success_url()) From 0e271d85a567a6c2e0fb7fc80f457fabc93cc6ac Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 16 Feb 2017 19:30:14 -0800 Subject: [PATCH 3/5] minor fix in oauth. --- neuropy/neuropy/oauth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neuropy/neuropy/oauth.py b/neuropy/neuropy/oauth.py index 5914f32..6af7508 100644 --- a/neuropy/neuropy/oauth.py +++ b/neuropy/neuropy/oauth.py @@ -25,7 +25,7 @@ def auth_return(request): if not xsrfutil.validate_token(settings.SECRET_KEY, request.GET['state'], request.user): return HttpResponseBadRequest() - credential = FLOW.step2_exchange(request.GET['code']) + credential = FLOW.step2_exchange(request.GET['code'].encode()) storage = DjangoORMStorage(CredentialsModel, 'user_id', request.user, 'credential') storage.put(credential) return HttpResponseRedirect("/") From fe8cd51f04dfe9f340d1a1f8a40021966f74085f Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 16 Feb 2017 20:50:14 -0800 Subject: [PATCH 4/5] added insert prioritized todo-entries into google cal. fixed date formatting and color assignments. --- neuropy/neuropy/client_secret.json | 2 +- neuropy/neuropy/oauth.py | 2 +- neuropy/todo/views.py | 10 +++++----- neuropy/userprofile/views.py | 16 +++++++++------- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/neuropy/neuropy/client_secret.json b/neuropy/neuropy/client_secret.json index 7df441c..0f99f79 100644 --- a/neuropy/neuropy/client_secret.json +++ b/neuropy/neuropy/client_secret.json @@ -8,4 +8,4 @@ "client_secret":"bobdole", "redirect_uris": "http://localhost:8080/oauth2callback/" } -} +} \ No newline at end of file diff --git a/neuropy/neuropy/oauth.py b/neuropy/neuropy/oauth.py index 6af7508..5914f32 100644 --- a/neuropy/neuropy/oauth.py +++ b/neuropy/neuropy/oauth.py @@ -25,7 +25,7 @@ def auth_return(request): if not xsrfutil.validate_token(settings.SECRET_KEY, request.GET['state'], request.user): return HttpResponseBadRequest() - credential = FLOW.step2_exchange(request.GET['code'].encode()) + credential = FLOW.step2_exchange(request.GET['code']) storage = DjangoORMStorage(CredentialsModel, 'user_id', request.user, 'credential') storage.put(credential) return HttpResponseRedirect("/") diff --git a/neuropy/todo/views.py b/neuropy/todo/views.py index 2c7904e..21daee7 100644 --- a/neuropy/todo/views.py +++ b/neuropy/todo/views.py @@ -109,10 +109,10 @@ def calendar_get(http, date): return events_result.get('items', []) -def calender_insert(http, event): +def calender_insert(http, event, email): """Insert entries and calender.""" service = discovery.build('calendar', 'v3', http=http) - event = service.events().insert(calendarId='prmary', body=event).execute() + event = service.events().insert(calendarId=email, body=event).execute() return event @@ -172,11 +172,11 @@ def td(time): elif idx == 3 and priority_dict['start'] < easy_start: priority_dict['ease'] = 'medium' - else: + elif idx == 3: priority_dict['ease'] = 'easy' - priority_dict['start'] = start_time.strftime("%H:%M") - priority_dict['end'] = end_time.strftime("%H:%M") + priority_dict['start'] = start_time + priority_dict['end'] = end_time events_list.append(dict(priority_dict)) start_time = start_time + datetime.timedelta(hours=event.duration) diff --git a/neuropy/userprofile/views.py b/neuropy/userprofile/views.py index cd5e4a2..10e834e 100644 --- a/neuropy/userprofile/views.py +++ b/neuropy/userprofile/views.py @@ -55,11 +55,11 @@ def form_valid(self, form): medication = form.cleaned_data['medication'] priority_list = create_event_list(medication.name, self.request.user.profile) - storage = DjangoORMStorage(CredentialsModel, 'user_id', request.user, 'credential') + storage = DjangoORMStorage(CredentialsModel, 'user_id', self.request.user, 'credential') credential = storage.get() if credential is None or credential.invalid: FLOW.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY, - request.user) + self.request.user) authorize_url = FLOW.step1_get_authorize_url() return HttpResponseRedirect(authorize_url) else: @@ -74,10 +74,11 @@ def form_valid(self, form): google_event['colorId'] = 2 else: google_event['colorId'] = 11 + google_event['description'] = event['description'] - google_event['summary'] = event['summary'] - google_event['start'] = {'dateTime': str(event['start'])} - google_event['end'] = {'dateTime': str(event['end'])} + google_event['summary'] = event['title'] + google_event['start'] = {'dateTime': event['start'].isoformat() + '-08:00'} + google_event['end'] = {'dateTime': event['end'].isoformat() + '-08:00'} google_event['reminders'] = { 'useDefault': False, 'overrides': [ @@ -85,8 +86,9 @@ def form_valid(self, form): {'method': 'popup', 'minutes': 10}, ] } - - calender_insert(http, {}) + calender_insert(http, google_event, self.request.user.email) + event['start'] = event['start'].strftime("%H:%M") + event['end'] = event['end'].strftime("%H:%M") self.request.session['some_list'] = priority_list return HttpResponseRedirect(self.get_success_url()) From cbebae0a3774b49035f91a905666d1ebaec7357b Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 16 Feb 2017 21:13:40 -0800 Subject: [PATCH 5/5] fixed forloop bug --- neuropy/neuropy/client_secret.json | 12 ++++++++---- neuropy/userprofile/views.py | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/neuropy/neuropy/client_secret.json b/neuropy/neuropy/client_secret.json index 0f99f79..957f99b 100644 --- a/neuropy/neuropy/client_secret.json +++ b/neuropy/neuropy/client_secret.json @@ -1,11 +1,15 @@ { "web":{ - "client_id":"666-bobdole.apps.googleusercontent.com", - "project_id":"bobdoel", + "client_id":"662194819445-oc6c5e7uk8025mffbv035g876l6amk5q.apps.googleusercontent.com", + "project_id":"homemon-go-1478832356580", "auth_uri":"https://accounts.google.com/o/oauth2/auth", "token_uri":"https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs", - "client_secret":"bobdole", - "redirect_uris": "http://localhost:8080/oauth2callback/" + "client_secret":"ArEd-PCRqt1JmxzFtWzepNzl", + "redirect_uris":[ + "http://localhost:8000/oauth2callback", + "http://127.0.0.1:8000/oauth2callback", + "http://localhost:8080/" + ] } } \ No newline at end of file diff --git a/neuropy/userprofile/views.py b/neuropy/userprofile/views.py index 10e834e..67e0118 100644 --- a/neuropy/userprofile/views.py +++ b/neuropy/userprofile/views.py @@ -16,7 +16,6 @@ from oauth2client.client import flow_from_clientsecrets - CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), '..', 'neuropy', 'client_secret.json') FLOW = flow_from_clientsecrets( @@ -74,7 +73,7 @@ def form_valid(self, form): google_event['colorId'] = 2 else: google_event['colorId'] = 11 - + google_event['description'] = event['description'] google_event['summary'] = event['title'] google_event['start'] = {'dateTime': event['start'].isoformat() + '-08:00'} @@ -89,6 +88,7 @@ def form_valid(self, form): calender_insert(http, google_event, self.request.user.email) event['start'] = event['start'].strftime("%H:%M") event['end'] = event['end'].strftime("%H:%M") + return HttpResponseRedirect(reverse_lazy('schedule')) self.request.session['some_list'] = priority_list return HttpResponseRedirect(self.get_success_url())