Example #1
0
def test_authenticate_valid(rf, monkeypatch, cognito_well_known_keys,
                            jwk_private_key_one):
    token = create_jwt_token(
        jwk_private_key_one,
        {
            "iss": "https://cognito-idp.eu-central-1.amazonaws.com/bla",
            "aud": settings.COGNITO_AUDIENCE,
            "sub": "username",
        },
    )

    def func(payload):
        return USER_MODEL(username=payload["sub"])

    monkeypatch.setattr(USER_MODEL.objects,
                        "get_or_create_for_cognito",
                        func,
                        raising=False)

    request = rf.get("/", HTTP_AUTHORIZATION=b"bearer %s" % token)
    auth = backend.JSONWebTokenAuthentication()
    user, auth_token = auth.authenticate(request)
    assert user
    assert user.username == "username"
    assert auth_token == token
Example #2
0
def test_validate_token_caching(
    cognito_well_known_keys,
    jwk_private_key_one,
    settings,
    responses,
    is_cache_enabled,
    responses_calls,
):
    if is_cache_enabled is not None:
        settings.COGNITO_PUBLIC_KEYS_CACHING_ENABLED = is_cache_enabled

    token = create_jwt_token(
        jwk_private_key_one,
        {
            "iss": "https://cognito-idp.eu-central-1.amazonaws.com/bla",
            "aud": "my-audience",
            "sub": "username",
        },
    )
    auth = validator.TokenValidator("eu-central-1", "bla", "my-audience")
    auth.validate(token)
    assert len(responses.calls) == 1

    auth_again = validator.TokenValidator("eu-central-1", "bla", "my-audience")
    auth_again.validate(token)
    assert len(responses.calls) == responses_calls
Example #3
0
 def get(self, req, *args, **kwargs):
     authorizaion = req.META['HTTP_AUTHORIZATION']
     token = authorizaion.replace("Bearer ", "")
     data = get_data_from_token(token)
     if data:
         uid = int(kwargs.get('id')) if kwargs.get('id') else None
         if uid:
             user = get_user_model().objects.get(id=uid)
             if user is not None:
                 obj = {
                     'id': uid,
                     'username': user.username,
                     'email': user.email,
                     'type': user.type,
                     'password': user.password,
                     'first_name': '',
                     'last_name': '',
                     'portrait': ''
                 }
                 token = create_jwt_token(obj)
                 return JsonResponse({'token': token, 'data': obj})
             else:
                 return JsonResponse({'token': '', 'data': ''})
         else:
             return self.getList(req)
     else:
         return JsonResponse({'data': ''})
Example #4
0
    def post(self, req, *args, **kwargs):
        """ sign up"""
        user = None
        ubody = req.body.decode('utf-8')
        d = json.loads(ubody)
        if d:
            username = d.get('username')
            email = d.get('email')
            password = d.get('password')
            utype = d.get('type')
        else:
            return JsonResponse({'token': '', 'user': ''})

        if find_user(email) or find_user(username):
            return JsonResponse({'token': '', 'user': ''})
        else:  # username, email cannot be empty
            user = save_user(None, username, email, password, utype)
            if user is not None:
                obj = {
                    'username': username,
                    'email': email,
                    'type': utype,
                    'password': '',
                    'first_name': '',
                    'last_name': '',
                    'portrait': ''
                }
                token = create_jwt_token(obj)
                return JsonResponse({'token': token, 'data': obj})
            else:
                return JsonResponse({'token': '', 'data': ''})
Example #5
0
def test_validate_token(cognito_well_known_keys, jwk_private_key_one):
    token = create_jwt_token(
        jwk_private_key_one, {
            'iss': 'https://cognito-idp.eu-central-1.amazonaws.com/bla',
            'aud': 'my-audience',
            'sub': 'username',
        })
    auth = validator.TokenValidator('eu-central-1', 'bla', 'my-audience')
    auth.validate(token)
Example #6
0
    def post(self, req, *args, **kwargs):
        '''Institution sign up'''
        params = req.POST

        user = None
        username = params.get('username')
        email = params.get('email')
        password = params.get('password')
        firstname = 'me'  #params.get('firstname')
        lastname = 'me'  #params.get('lastname')
        utype = 'business'  #params.get('type')
        portrait = ''  #params.get('portrait')
        r = None
        try:
            r = get_user_model().objects.get(email__iexact=email)
        except Exception:  # models.DoesNotExist:
            pass

        if r:
            return JsonResponse({
                'token': '',
                'user': '',
                'errors': [ERR_USER_EXIST]
            })
        else:  # assume username, email alwayse have value

            if params.get('lat') and params.get('lng'):
                user = save_user(None, username, email, password, utype,
                                 firstname, lastname, portrait)
                if user is not None:
                    image = req.FILES.get("image")
                    restaurant = self.createRestaurant(params, image, user)

                    obj = {
                        'username': username,
                        'email': email,
                        'password': '',
                        'type': utype,
                        'password': '',
                        'first_name': '',
                        'last_name': '',
                        'portrait': '',
                        'restaurant_id': restaurant.id
                    }
                    token = create_jwt_token(obj)
                    return JsonResponse({
                        'token': token,
                        'user': to_json(user),
                        'errors': []
                    })
            return JsonResponse({
                'token': '',
                'user': '',
                'errors': [ERR_SAVE_USER_EXCEPTION]
            })
Example #7
0
def test_validate_token_error_key(cognito_well_known_keys,
                                  jwk_private_key_two):
    token = create_jwt_token(
        jwk_private_key_two, {
            'iss': 'https://cognito-idp.eu-central-1.amazonaws.com/bla',
            'aud': 'my-audience',
            'sub': 'username',
        })
    auth = validator.TokenValidator('eu-central-1', 'bla', 'my-audience')
    with pytest.raises(validator.TokenError):
        auth.validate(token)
Example #8
0
def test_validate_token(cognito_well_known_keys, jwk_private_key_one):
    token = create_jwt_token(
        jwk_private_key_one,
        {
            "iss": "https://cognito-idp.eu-central-1.amazonaws.com/bla",
            "aud": "my-audience",
            "sub": "username",
        },
    )
    auth = validator.TokenValidator("eu-central-1", "bla", "my-audience")
    auth.validate(token)
Example #9
0
def test_validate_token_error_key(cognito_well_known_keys,
                                  jwk_private_key_two):
    token = create_jwt_token(
        jwk_private_key_two,
        {
            "iss": "https://cognito-idp.eu-central-1.amazonaws.com/bla",
            "aud": "my-audience",
            "sub": "username",
        },
    )
    auth = validator.TokenValidator("eu-central-1", "bla", "my-audience")
    with pytest.raises(validator.TokenError):
        auth.validate(token)
Example #10
0
    def post(self, req, *args, **kwargs):
        """ login"""
        ubody = req.body.decode('utf-8')
        d = json.loads(ubody)
        if d:
            password = d.get('password')
            account = d.get('account')
            if account and password:
                r = find_user(account)
                if r and r.check_password(password):
                    user = authenticate(req,
                                        username=r.username,
                                        password=password)
                    if user is not None:
                        login(req, user)  # make use of django session

                    if r.type == 'business':
                        restaurant = Restaurant.objects.get(admin_id=r.id)
                        token = create_jwt_token({
                            'id': r.id,
                            'username': r.username,
                            'type': r.type,
                            'restaurant_id': restaurant.id
                        })
                    else:
                        token = create_jwt_token({
                            'id': r.id,
                            'username': r.username,
                            'type': r.type
                        })

                    r.password = ''
                    data = to_json(r)
                    if r.type == 'business':
                        data['restaurant_id'] = restaurant.id
                    return JsonResponse({'token': token, 'data': data})
                else:
                    return JsonResponse({'token': '', 'data': ''})
        return JsonResponse({'token': '', 'data': ''})
Example #11
0
def test_authenticate_invalid(rf, cognito_well_known_keys,
                              jwk_private_key_two):
    token = create_jwt_token(
        jwk_private_key_two, {
            'iss': 'https://cognito-idp.eu-central-1.amazonaws.com/bla',
            'aud': settings.COGNITO_AUDIENCE,
            'sub': 'username',
        })

    request = rf.get('/', HTTP_AUTHORIZATION=b'bearer %s' % token)
    auth = backend.JSONWebTokenAuthentication()

    with pytest.raises(AuthenticationFailed):
        auth.authenticate(request)
Example #12
0
async def register(request):
    data = await request.json()

    username, password = data['username'], data['password']

    if UserService.get_user(username=username):
        return utils.json_response({
            "errors": [
                {"username": "******"}
            ]
        })

    user = UserService.add_user(username, password)

    return web.Response(text=utils.create_jwt_token(user.id))
Example #13
0
def test_authenticate_invalid(rf, cognito_well_known_keys,
                              jwk_private_key_two):
    token = create_jwt_token(
        jwk_private_key_two,
        {
            "iss": "https://cognito-idp.eu-central-1.amazonaws.com/bla",
            "aud": settings.COGNITO_AUDIENCE,
            "sub": "username",
        },
    )

    request = rf.get("/", HTTP_AUTHORIZATION=b"bearer %s" % token)
    auth = backend.JSONWebTokenAuthentication()

    with pytest.raises(AuthenticationFailed):
        auth.authenticate(request)
Example #14
0
def test_validate_token_caching(cognito_well_known_keys, jwk_private_key_one,
                                settings, responses, is_cache_enabled,
                                responses_calls):
    if is_cache_enabled is not None:
        settings.COGNITO_PUBLIC_KEYS_CACHING_ENABLED = is_cache_enabled

    token = create_jwt_token(
        jwk_private_key_one, {
            'iss': 'https://cognito-idp.eu-central-1.amazonaws.com/bla',
            'aud': 'my-audience',
            'sub': 'username',
        })
    auth = validator.TokenValidator('eu-central-1', 'bla', 'my-audience')
    auth.validate(token)
    assert len(responses.calls) == 1

    auth_again = validator.TokenValidator('eu-central-1', 'bla', 'my-audience')
    auth_again.validate(token)
    assert len(responses.calls) == responses_calls
Example #15
0
async def login(request):
    data = await request.json()

    username, password = data['username'], data['password']
    user = UserService.get_user(username=username)

    if not user:
        return utils.json_response({
            "errors": [
                {"username": "******"}
            ]
        })
    else:
        if user.password == password:
            return web.Response(text=utils.create_jwt_token(user.id))
        return utils.json_response({
            "errors": [
                {"password": "******"}
            ]
        })
def test_authenticate_valid(rf, monkeypatch, cognito_well_known_keys, jwk_private_key_one):
    token = create_jwt_token(
        jwk_private_key_one,
        {
            'iss': 'https://cognito-idp.eu-central-1.amazonaws.com/bla',
            'aud': settings.COGNITO_AUDIENCE,
            'sub': 'username',
        })

    def func(payload):
        return USER_MODEL(
            username=payload['sub'])

    monkeypatch.setattr(
        USER_MODEL.objects, 'get_or_create_for_cognito', func, raising=False)

    request = rf.get('/', HTTP_AUTHORIZATION=b'bearer %s' % token)
    auth = backend.JSONWebTokenAuthentication()
    user, auth_token = auth.authenticate(request)
    assert user
    assert user.username == 'username'
    assert auth_token == token