def get(self, request, *args, **kwargs): user = self.request.user auth_code = request.GET["code"] data = { "grant_type": "authorization_code", "code": auth_code, "redirect_uri": settings.OPENHUMANS_APP_BASE_URL + "/accounts/openhumans/complete", } token_response = requests.post( "https://www.openhumans.org/oauth2/token/", data=data, auth=requests.auth.HTTPBasicAuth( settings.OPENHUMANS_CLIENT_ID, settings.OPENHUMANS_CLIENT_SECRET ), ) token_data = token_response.json() # OpenHumansMember.get_create_member() does not work... oh_id = ohapi.api.exchange_oauth2_member( access_token=token_data["access_token"], base_url=settings.OPENHUMANS_OH_BASE_URL, )["project_member_id"] user_model = get_user_model() if user.is_authenticated: # User is trying to link link OH account to MH. try: user = user_model.objects.get(openhumansmember__oh_id=oh_id) # TODO: Link accounts to each other? self.request.session["OHMemberInUse"] = True return redirect("main:profile") except user_model.DoesNotExist: openhumansmember = OpenHumansMember.create( oh_id=oh_id, data=token_data, user=user ) openhumansmember.save() else: # User is trying to log in with an OH. try: user = user_model.objects.get(openhumansmember__oh_id=oh_id) except user_model.DoesNotExist: openhumansmember = OpenHumansMember.create(oh_id=oh_id, data=token_data) openhumansmember.save() user = openhumansmember.user login(self.request, user) return redirect("main:index")
def handle(self, *args, **options): for line in open(options['infile']): line = line.strip().split(options['delimiter']) oh_id = line[0] oh_refresh_token = line[1] github_refresh_token = line[2] if len(OpenHumansMember.objects.filter(oh_id=oh_id)) == 0: oh_member = OpenHumansMember.create( oh_id=oh_id, access_token="mock", refresh_token=oh_refresh_token, expires_in=-3600) oh_member.save() oh_member._refresh_tokens( client_id=settings.OPENHUMANS_CLIENT_ID, client_secret=settings.OPENHUMANS_CLIENT_SECRET) oh_member = OpenHumansMember.objects.get(oh_id=oh_id) github_member = DataSourceMember( access_token="mock", refresh_token=github_refresh_token, token_expires=DataSourceMember.get_expiration(-3600)) github_member.user = oh_member github_member._refresh_tokens( client_id=settings.GITHUB_CLIENT_ID, client_secret=settings.GITHUB_CLIENT_SECRET) process_github.delay(oh_member.oh_id) process_github(oh_member.oh_id)
def setUp(self): """ Set up the app for following tests """ settings.DEBUG = True self.factory = RequestFactory() data = {"access_token": 'foo', "refresh_token": 'bar', "expires_in": 36000} self.oh_member = OpenHumansMember.create(oh_id='12345678', data=data) self.oh_member.save() self.user = self.oh_member.user self.user.set_password('foobar') self.user.save()
def setUp(self): # set up project settings.DEBUG = True # settings.OPENHUMANS_APP_BASE_URL = "http://127.0.0.1" # set up user data = { "access_token": 'foo', "refresh_token": 'bar', "expires_in": 36000 } self.oh_member = OpenHumansMember.create(oh_id='1234567890abcdef', data=data) self.oh_member.save() self.user = self.oh_member.user self.user.set_password('foobar') self.user.save()
def test_delete_single(self): data = { "access_token": 'foo', "refresh_token": 'bar', "expires_in": 36000 } self.oh_member = OpenHumansMember.create(oh_id='1234567890abcdef', data=data) self.oh_member.save() self.user = self.oh_member.user self.user.set_password('foobar') self.user.save() c = Client() c.login(username=self.user.username, password='******') response = c.get("/delete/1337", follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, 'main/list.html')
def test_log_out(self): """ Tests logout function """ data = { "access_token": 'foo', "refresh_token": 'bar', "expires_in": 36000 } self.oh_member = OpenHumansMember.create(oh_id='1234567890abcdef', data=data) self.oh_member.save() self.user = self.oh_member.user self.user.set_password('foobar') self.user.save() c = Client() c.login(username=self.user.username, password='******') response = c.post('/logout') self.assertEqual(response.wsgi_request.user.username, '') self.assertRedirects(response, "/")