Пример #1
0
    def register_by_access_token(access_token):
        ''' registering user to the system if access toke is valid '''
        ex = None
        user = None
        alreadyExist = False
        try:
            strategy = DjangoStrategy(None)
            backend = GoogleOAuth2(strategy)
            s = backend.get_scope()
            userdata = backend.user_data(access_token)
            if userdata is not None and userdata[
                    'email'] is not None and userdata['email'] != '':
                user = Helper.build_user(userdata, access_token)
                if user is not None:
                    alreadyExist = Helper.user_already_exist(user)
                    if not alreadyExist:
                        user.save()
                    else:
                        Helper.update_token(user, access_token)

        except Exception as e:
            ''' todo: write exception to logger'''
            user = None
            ex = e

        return user, ex, alreadyExist
Пример #2
0
def create_user(**user_details):
    strategy = DjangoStrategy(DjangoStorage)
    openstax = OpenStax(strategy=strategy)
    result = openstax.run_pipeline(pipeline=settings.IMPORT_USER_PIPELINE,
                                   details=user_details,
                                   uid=user_details['uid'])
    user = result['user']
    return user
Пример #3
0
def update_user_details(hacker_id, user):
    social_auth = DjangoUserMixin.get_social_auth_for_user(user)[0]
    backend = social_auth.get_backend_instance()
    social_auth.refresh_token(DjangoStrategy())
    url = backend.HACKER_SCHOOL_ROOT + '/api/v1/people/%s?' % hacker_id + urlencode(
        {'access_token': social_auth.extra_data['access_token']})

    try:
        response = backend.request(url, method='GET')
        hacker_data = backend.get_user_details(response.json())
        create_or_update_hacker(None, hacker_data, None,
                                User.objects.get(id=hacker_id))

    except Exception:
        # It's not very bad, if we are not able to update the userdata... we
        # silently ignore it.
        pass
Пример #4
0
    def test_enroll_from_third_party_redirect(self):
        """
        Test that, when a user visits the registration page *after* visiting a course,
        if they go on to register and/or log in via third-party auth, they'll be enrolled
        in that course.

        The testing here is a bit hackish, since we just ping the registration page, then
        directly call the step in the third party pipeline that registers the user if
        `registration_course_id` is set in the session, but it should catch any major breaks.
        """
        self.client.logout()
        self.client.get(reverse('register_user'), {'course_id': self.course.id})
        self.client.login(username=self.USERNAME, password=self.PASSWORD)
        dummy_request = RequestFactory().request()
        dummy_request.session = self.client.session
        strategy = DjangoStrategy(RequestFactory, request=dummy_request)
        change_enrollment_third_party(is_register=True, strategy=strategy, user=self.user)
        self.assertTrue(CourseEnrollment.is_enrolled(self.user, self.course.id))
Пример #5
0
    def test_no_prof_ed_third_party_autoenroll(self):
        """
        Test that a user authenticating via third party auth while attempting to enroll
        in a professional education course is not automatically enrolled in the course.
        """
        self.client.logout()

        # Create the course mode required for this test case
        CourseModeFactory(course_id=self.course.id, mode_slug='professional')

        self.client.get(reverse('register_user'), {'course_id': self.course.id})
        self.client.login(username=self.USERNAME, password=self.PASSWORD)
        dummy_request = RequestFactory().request()
        dummy_request.session = self.client.session
        strategy = DjangoStrategy(RequestFactory, request=dummy_request)
        change_enrollment_third_party(is_register=True, strategy=strategy, user=self.user)

        # Verify that the user has not been enrolled in the course
        self.assertFalse(CourseEnrollment.is_enrolled(self.user, self.course.id))
Пример #6
0
 def test_user_data(self):
     """
     Tests that the server return a json with the expected schema and content.
     """
     # get a valid access token from the server
     access_token = self._get_test_access_token(
         settings.TEST_INTEGRATION_CLIENT_ID)
     # call oauth server to retrieve user data
     # the server should define an user with the following profile info
     from social.strategies.django_strategy import DjangoStrategy
     from social.storage.django_orm import BaseDjangoStorage
     user_data = OAuth2ioOAuth2(
         DjangoStrategy(BaseDjangoStorage)).user_data(access_token)
     self.assertDictContainsSubset(
         {
             'username': '******',
             'first_name': 'Test',
             'last_name': 'User',
             'email': '*****@*****.**',
         }, user_data)
Пример #7
0
    def run_oauth(self, m, user=None):

        strategy = DjangoStrategy(DjangoStorage)
        backend = self.Backend_Class(strategy,
                                     redirect_uri=self.client_complete_url)

        start_url = do_auth(backend).url
        start_query = parse_qs(urlparse(start_url).query)

        # set 'state' in client
        backend.data.update({'state': start_query['state']})

        m.get(backend.USER_DATA_URL,
              json={
                  "username": self.social_username,
                  "email": self.social_email
              },
              status_code=200)

        m.post(backend.ACCESS_TOKEN_URL,
               json={
                   'access_token': self.access_token,
                   'token_type': self.token_type,
                   'expires_in': self.expires_in,
                   'scope': self.scope,
                   'refresh_token': self.refresh_token
               },
               status_code=200)

        def _login(backend, user, social_user):
            backend.strategy.session_set('username', user.username)

        do_complete(backend, user=user, login=_login)

        social = backend.strategy.storage.user.get_social_auth(
            backend.name, self.social_username)

        return strategy.session_get('username'), social, backend
Пример #8
0
    def setUp(self):
        """Setup the test"""
        self.backend = BSDToolsOAuth2()

        # We need to use the django strategy to get access to django settings
        self.backend.strategy = DjangoStrategy(BaseDjangoStorage())