Ejemplo n.º 1
0
    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")
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
    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()
Ejemplo n.º 5
0
    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')
Ejemplo n.º 6
0
 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, "/")