Exemple #1
0
def downvote(request, blog_pk):
    body = request.data
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            None, body['recaptcha_token'],
            'blog_stats') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    try:
        blog = models.Blog.objects.get(pk=blog_pk)
        vote = models.Vote.objects.filter(user=request.user, blog=blog)
        if len(vote) == 0:
            vote = models.Vote(user=request.user, blog=blog, vote_type=False)
        else:
            vote = vote[0]
            vote.vote_type = False
        vote.save()
        return JsonResponse(create_response(data=BlogSnippetSerializer(
            instance=blog, many=False, context={
                'user': request.user
            }).data),
                            safe=False)
    except Exception as e:
        log(e, 'e')
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.blog_couldnt_found),
                            safe=False)
Exemple #2
0
def auth_social_user(request):
    body = JSONParser().parse(request)
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            None, body['recaptcha_token'],
            'signin') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    post_data = {
        'client_id': body['client_id'],
        'client_secret': body['client_secret'],
        'grant_type': 'convert_token'
    }
    provider = body['provider']
    post_data['backend'] = provider
    if provider == 'linkedin-oauth2':
        post_data['token'] = get_access_token_with_code(body['token'])
    else:
        post_data['token'] = body['token']
    response = requests.post('http://localhost:8000/auth/convert-token',
                             data=json.dumps(post_data),
                             headers={'content-type': 'application/json'})
    json_res = json.loads(response.text)
    log(json_res, 'e')
    if 'error' in json_res:
        success = False
        code = ResponseCodes.invalid_credentials
    else:
        success = True
        code = ResponseCodes.success
        user = AccessToken.objects.get(token=json_res['access_token']).user
        if 'first_name' in body:
            user.first_name = body['first_name']
        if 'last_name' in body:
            user.first_name = body['last_name']
        if 'photo_url' in body:
            utils.save_image_file_to_user(body['photo_url'], user)
        if 'user_type' in body:
            user.user_type = UserType.objects.get(pk=body['user_type'])
        elif user.user_type is None:
            user.user_type = UserType.objects.get(name__iexact='Undefined')
        user.signup_flow_completed = True
        json_res['user_type'] = UserTypeSerializer(instance=user.user_type,
                                                   many=False).data
        json_res['signup_flow_completed'] = user.signup_flow_completed
        user.approved = True
        user.last_login = timezone.now()
        LoginLog.objects.create(user=user)
        user.save()
        if provider == 'google-oauth2':
            user.is_gmail_read_ok = True
            user.save()
            schedule_fetcher(user.id)
    return JsonResponse(create_response(data=json_res,
                                        success=success,
                                        error_code=code),
                        safe=False)
Exemple #3
0
def do_action(request, blog_pk, type):
    body = request.data
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            None, body['recaptcha_token'],
            'blog_stats') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    blog = Blog.objects.get(pk=blog_pk)
    if type == ActionType.view:
        blog.view_count = blog.view_count + 1
        blog.save()
    else:
        if type == ActionType.none:
            Vote.objects.filter(user=request.user, blog=blog).delete()
        else:
            vote, new = Vote.objects.get_or_create(user=request.user,
                                                   blog=blog)
            if type == ActionType.upvote:
                vote.vote_type = True
            elif type == ActionType.downvote:
                vote.vote_type = False
            vote.save()
    return JsonResponse(create_response(data=None))
Exemple #4
0
def login(request):
    body = JSONParser().parse(request)

    post_data = {
        'client_id': body['client_id'],
        'client_secret': body['client_secret'],
        'grant_type': 'password',
        'username': body['username'],
        'password': body['password']
    }
    user = authenticate(username=body['username'], password=body['password'])
    if user is None:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.invalid_credentials),
                            safe=False)
    # if not user.approved:
    #    return JsonResponse(create_response(data=None, success=False, error_code=ResponseCodes.email_verification_required), safe=False)
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            user.email, body['recaptcha_token'],
            'signin') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    response = requests.post('http://localhost:8000/auth/token',
                             data=json.dumps(post_data),
                             headers={'content-type': 'application/json'})
    json_res = json.loads(response.text)
    if 'error' in json_res:
        success = False
        code = ResponseCodes.couldnt_login
    else:
        success = True
        code = ResponseCodes.success
        json_res['user_type'] = UserTypeSerializer(instance=user.user_type,
                                                   many=False).data
        json_res['signup_flow_completed'] = user.signup_flow_completed
        user = AccessToken.objects.get(token=json_res['access_token']).user
        user.last_login = timezone.now()
        user.save()
        LoginLog.objects.create(user=user)
    return JsonResponse(create_response(data=json_res,
                                        success=success,
                                        error_code=code),
                        safe=False)
Exemple #5
0
def auth_social_user(request):
    body = JSONParser().parse(request)
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            None, body['recaptcha_token'],
            'signin') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    post_data = {
        'client_id': body['client_id'],
        'client_secret': body['client_secret'],
        'grant_type': 'convert_token'
    }
    provider = body['provider']
    post_data['backend'] = provider
    if provider == 'linkedin-oauth2':
        post_data['token'] = get_access_token_with_code(body['token'])
    else:
        post_data['token'] = body['token']
    response = requests.post('http://localhost:8000/auth/convert-token',
                             data=json.dumps(post_data),
                             headers={'content-type': 'application/json'})
    json_res = json.loads(response.text)
    log(json_res, 'e')
    if 'error' in json_res:
        success = False
        code = ResponseCodes.invalid_credentials
    else:
        success = True
        code = ResponseCodes.success
        user = AccessToken.objects.get(token=json_res['access_token']).user
        json_res['user_type'] = user.user_type
        user.save()
        user.approved = True
        user.save()
        if provider == 'google-oauth2':
            user.is_gmail_read_ok = True
            user.save()
            schedule_fetcher(user.id)
    return JsonResponse(create_response(data=json_res,
                                        success=success,
                                        error_code=code),
                        safe=False)
Exemple #6
0
def feedback(request):
    body = request.data
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            request.user.email, body['recaptcha_token'],
            'feedback') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    text = body['text']
    star = body['star']
    user = request.user
    Feedback.objects.create(user=user, text=text, star=star)
    send_notification_email_to_admins('feedback')
    return JsonResponse(create_response(data=None), safe=False)
Exemple #7
0
def verify_recaptcha(request):
    body = request.data
    if 'recaptcha_token' not in body or 'action' not in body:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)
    elif utils.verify_recaptcha(
            request.user.email, body['recaptcha_token'],
            body['action']) == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)
    else:
        return JsonResponse(create_response(data=None, success=True),
                            safe=False)
Exemple #8
0
def login(request):
    body = JSONParser().parse(request)

    post_data = {
        'client_id': body['client_id'],
        'client_secret': body['client_secret'],
        'grant_type': 'password',
        'username': body['username'],
        'password': body['password']
    }
    user = authenticate(username=body['username'], password=body['password'])
    if user is None:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.invalid_credentials),
                            safe=False)
    # if not user.approved:
    #    return JsonResponse(create_response(data=None, success=False, error_code=ResponseCodes.email_verification_required), safe=False)
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            user.email, body['recaptcha_token'],
            'signin') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    response = requests.post('http://localhost:8000/auth/token',
                             data=json.dumps(post_data),
                             headers={'content-type': 'application/json'})
    json_res = json.loads(response.text)
    if 'error' in json_res:
        success = False
        code = ResponseCodes.couldnt_login
    else:
        success = True
        code = ResponseCodes.success
        json_res['user_type'] = user.user_type
    return JsonResponse(create_response(data=json_res,
                                        success=success,
                                        error_code=code),
                        safe=False)
Exemple #9
0
def view(request, blog_pk):
    body = request.data
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            None, body['recaptcha_token'],
            'blog_stats') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    try:
        blog = models.Blog.objects.get(pk=blog_pk)
        blog.view_count = blog.view_count + 1
        blog.save()
        return JsonResponse(create_response(data=None), safe=False)
    except:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.blog_couldnt_found),
                            safe=False)
Exemple #10
0
def forgot_password(request):
    body = JSONParser().parse(request)
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            None, body['recaptcha_token'],
            'forgot_password') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    username = body['username']
    try:
        user = User.objects.get(
            Q(username__iexact=username) | Q(email__iexact=username))
        activation_key, expiration_time = utils.generate_activation_key_and_expiredate(
            user.username)
        user.forgot_password_key = activation_key
        user.forgot_password_key_expires = expiration_time
        user.save()
        utils.send_email(user.email, activation_key, 'validateForgotPassword')
    except Exception as e:
        log(traceback.format_exception(None, e, e.__traceback__), 'e')
    return JsonResponse(create_response(data=None, success=True), safe=False)
Exemple #11
0
def feedback(request):
    body = request.data
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            request.user.email, body['recaptcha_token'],
            'feedback') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    text = body['text']
    star = body['star']
    user = request.user
    if user.username.startswith('demo'):
        from_demo_account = True
    else:
        from_demo_account = False
    Feedback.objects.create(user=user,
                            text=text,
                            star=star,
                            from_demo_account=from_demo_account)
    send_notification_email_to_admins('feedback', feedback.user.college.id)
    return JsonResponse(create_response(data=None), safe=False)
Exemple #12
0
def notes(request, pos_app_pk):
    body = request.data
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            None, body['recaptcha_token'],
            'jobapp_note') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)
    if request.method == "GET":
        if pos_app_pk is None:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.invalid_parameters),
                                safe=False)
        else:
            notes_list = PositionApplicationNote.objects.filter(
                pos_app__pk=pos_app_pk).order_by('-updated_date',
                                                 '-created_date')
            notes_list = PositionApplicationNoteSerializer(instance=notes_list,
                                                           many=True).data
            return JsonResponse(create_response(
                data=notes_list,
                success=True,
                error_code=ResponseCodes.success),
                                safe=False)
    elif request.method == "POST":
        description = body['description']
        if pos_app_pk is None or description is None:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.invalid_parameters),
                                safe=False)
        else:
            user_job_app = PositionApplication.objects.get(pk=pos_app_pk)
            if user_job_app.user == request.user:
                note = PositionApplicationNote(pos_app=user_job_app,
                                               description=description)
                note.save()
                data = PositionApplicationNoteSerializer(instance=note,
                                                         many=False).data
                return JsonResponse(create_response(
                    data=data, success=True, error_code=ResponseCodes.success),
                                    safe=False)
            else:
                return JsonResponse(create_response(
                    data=None,
                    success=False,
                    error_code=ResponseCodes.record_not_found),
                                    safe=False)
    elif request.method == "PUT":
        jobapp_note_id = body['jobapp_note_id']
        description = body['description']
        if jobapp_note_id is None:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.invalid_parameters),
                                safe=False)
        else:
            note = PositionApplicationNote.objects.get(pk=jobapp_note_id)
            if note.pos_app.user == request.user:
                note.description = description
                note.updated_date = timezone.now()
                note.save()
                data = PositionApplicationNoteSerializer(instance=note,
                                                         many=False).data
                return JsonResponse(create_response(
                    data=data, success=True, error_code=ResponseCodes.success),
                                    safe=False)
            else:
                return JsonResponse(create_response(
                    data=None,
                    success=False,
                    error_code=ResponseCodes.record_not_found),
                                    safe=False)
    elif request.method == "DELETE":
        jobapp_note_id = body['jobapp_note_id']
        if jobapp_note_id is None:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.invalid_parameters),
                                safe=False)
        else:
            user_job_app_note = PositionApplicationNote.objects.get(
                pk=jobapp_note_id)
            if user_job_app_note.pos_app.user == request.user:
                user_job_app_note.delete()
                return JsonResponse(create_response(
                    data=None, success=True, error_code=ResponseCodes.success),
                                    safe=False)
            else:
                return JsonResponse(create_response(
                    data=None,
                    success=False,
                    error_code=ResponseCodes.record_not_found),
                                    safe=False)
Exemple #13
0
def link_social_account(request):
    body = request.data
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            None, body['recaptcha_token'],
            'signin') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    post_data = {
        'client_id': body['client_id'],
        'client_secret': body['client_secret'],
        'grant_type': 'convert_token'
    }
    provider = body['provider']
    post_data['backend'] = provider
    if provider == 'linkedin-oauth2':
        if request.user.social_auth.filter(
                provider='linkedin-oauth2').count() == 0:
            post_data['token'] = get_access_token_with_code(body['token'])
        else:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.account_already_linked),
                                safe=False)
    else:
        if request.user.social_auth.filter(
                provider='google-oauth2').count() == 0:
            post_data['token'] = body['token']
        else:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.account_already_linked),
                                safe=False)
    response = requests.post('http://localhost:8001/auth/convert-token',
                             data=json.dumps(post_data),
                             headers={'content-type': 'application/json'})
    json_res = json.loads(response.text)
    log(json_res, 'e')
    if 'error' in json_res:
        success = False
        code = ResponseCodes.invalid_credentials
    else:
        social_user = UserSocialAuth.objects.get(
            extra_data__icontains=post_data['token'])

        if social_user.user.email != request.user.email:
            social_user.user.delete()

        social_user.user = request.user
        social_user.save()

        post_data = {
            'token': json_res['access_token'],
            'client_id': body['client_id'],
            'client_secret': body['client_secret']
        }
        headers = {'content-type': 'application/json'}
        response = requests.post('http://localhost:8001/auth/revoke-token',
                                 data=json.dumps(post_data),
                                 headers=headers)

        log(str(response), 'e')
        if provider == 'google-oauth2':
            request.user.is_gmail_read_ok = True
            request.user.save()
        return JsonResponse(create_response(
            data=ProfileSerializer(instance=request.user, many=False).data),
                            safe=False)
    return JsonResponse(create_response(data=None,
                                        success=success,
                                        error_code=code),
                        safe=False)
Exemple #14
0
def update_profile(request):
    body = request.data
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            request.user.email, body['recaptcha_token'],
            'update_profile') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    user = request.user
    if 'password' in body:
        user.set_password(body['password'])
    if 'username' in body:
        if User.objects.filter(username=body['username']).exists():
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.username_exists),
                                safe=False)
        user.username = body['username']
    if 'first_name' in body:
        user.first_name = body['first_name']
    if 'last_name' in body:
        user.last_name = body['last_name']
    if 'gender' in body:
        user.gender = body['gender']
    if 'dob' in body:
        user.dob = datetime.strptime(body['dob'], "%Y-%m-%d").date()
    if 'student_email' in body:
        user.student_email = body['student_email']
    if 'is_email_public' in body:
        user.is_email_public = body['is_email_public']
    if 'phone_number' in body:
        user.phone_number = body['phone_number']
    if 'emp_status_id' in body:
        if EmploymentStatus.objects.filter(
                pk=body['emp_status_id']).count() > 0:
            user.emp_status = EmploymentStatus.objects.get(
                pk=body['emp_status_id'])
    user_type, new = UserType.objects.get_or_create(name__iexact='Employer')

    if 'college_id' in body:
        if College.objects.filter(pk=body['college_id']).count() > 0:
            user.college = College.objects.get(pk=body['college_id'])
    if 'major' in body:
        user.major = insert_or_update_major(body['major'])
    if 'grad_year' in body:
        user.grad_year = body['grad_year']
    if 'job_title' in body:
        job_title = body['job_title']
        user.job_position = get_or_insert_position(job_title)
    if 'company' in body:
        company = body['company']
        user.company = get_or_create_company(company)

    if 'country_id' in body and 'state_id' in body:
        state = State.objects.get(pk=body['state_id'])
        if state.country.id != body['country_id']:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.invalid_parameters),
                                safe=False)
        country = Country.objects.get(pk=body['country_id'])
        user.country = country
        user.state = state

    user.signup_flow_completed = True
    user.save()
    return JsonResponse(create_response(
        data=ProfileSerializer(instance=user, many=False).data),
                        safe=False)
Exemple #15
0
def register(request):
    # Get form values
    body = JSONParser().parse(request)
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            None, body['recaptcha_token'],
            'signup') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)

    first_name = ''
    last_name = ''
    linkedin_auth_code = None
    google_access_token = None
    if 'first_name' in body:
        first_name = body['first_name']
    if 'last_name' in body:
        last_name = body['last_name']
    if 'linkedin_auth_code' in body:
        linkedin_auth_code = body['linkedin_auth_code']
    if 'google_access_token' in body:
        google_access_token = body['google_access_token']
    user_type, new = UserType.objects.get_or_create(name__iexact='Employer')
    username = body['username']
    email = body['email']
    password = body['password']
    password2 = body['password2']

    if '@' in username:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.invalid_username),
                            safe=False)

    # Check if passwords match
    if password == password2:
        # Check username
        if User.objects.filter(username__iexact=username).exists():
            success = False
            code = ResponseCodes.username_exists
        else:
            if User.objects.filter(email__iexact=email).exists():
                success = False
                code = ResponseCodes.email_exists
            else:
                # Looks good
                user = User.objects.create_user(username=username,
                                                password=password,
                                                email=email,
                                                first_name=first_name,
                                                user_type=user_type,
                                                last_name=last_name,
                                                approved=False,
                                                activation_key=None,
                                                key_expires=None)
                user.save()
                if linkedin_auth_code is None and google_access_token is None:
                    activation_key, expiration_time = utils.generate_activation_key_and_expiredate(
                        body['username'])
                    user.activation_key = activation_key
                    user.key_expires = expiration_time
                    user.save()
                    utils.send_email(user.email, activation_key, 'activate')

                    post_data = {
                        'client_id': body['client_id'],
                        'client_secret': body['client_secret'],
                        'grant_type': 'password',
                        'username': username,
                        'password': password
                    }

                    response = requests.post(
                        'http://localhost:8001/auth/token',
                        data=json.dumps(post_data),
                        headers={'content-type': 'application/json'})
                    json_res = json.loads(response.text)
                    if 'error' in json_res:
                        success = False
                        code = ResponseCodes.couldnt_login
                    else:
                        success = True
                        code = ResponseCodes.success
                        json_res['user_type'] = UserTypeSerializer(
                            instance=user.user_type, many=False).data
                        json_res[
                            'signup_flow_completed'] = user.signup_flow_completed
                    return JsonResponse(create_response(data=json_res,
                                                        success=success,
                                                        error_code=code),
                                        safe=False)
                else:
                    post_data = {
                        'client_id': body['client_id'],
                        'client_secret': body['client_secret'],
                        'grant_type': 'convert_token'
                    }
                    if linkedin_auth_code is not None:
                        post_data['backend'] = 'linkedin-oauth2'
                        post_data['token'] = get_access_token_with_code(
                            body['linkedin_auth_code'])
                    else:
                        post_data['backend'] = 'google-oauth2'
                        post_data['token'] = body['google_access_token']
                    response = requests.post(
                        'http://localhost:8001/auth/convert-token',
                        data=json.dumps(post_data),
                        headers={'content-type': 'application/json'})
                    jsonres = json.loads(response.text)
                    log(jsonres, 'e')
                    if 'error' in jsonres:
                        success = False
                        code = ResponseCodes.invalid_credentials
                    else:
                        social_user = UserSocialAuth.objects.get(
                            extra_data__icontains=post_data['token'])

                        if social_user.user.email != user.email:
                            social_user.user.delete()

                        social_user.user = user
                        social_user.save()

                        success = True
                        code = ResponseCodes.success
                        user = AccessToken.objects.get(
                            token=jsonres['access_token']).user
                        jsonres['user_type'] = UserTypeSerializer(
                            instance=user.user_type, many=False).data
                        jsonres[
                            'signup_flow_completed'] = user.signup_flow_completed
                        user.approved = True
                        user.save()
                    return JsonResponse(create_response(data=jsonres,
                                                        success=success,
                                                        error_code=code),
                                        safe=False)
    else:
        success = False
        code = ResponseCodes.passwords_do_not_match
    return JsonResponse(create_response(data=None,
                                        success=success,
                                        error_code=code),
                        safe=False)
Exemple #16
0
def job_applications(request):
    body = request.data
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            None, body['recaptcha_token'],
            'add_job') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)
    if request.method == "GET":
        timestamp = request.GET.get('timestamp')
        if timestamp is not None:
            timestamp = int(timestamp) / 1000
            if timestamp is None:
                return JsonResponse(
                    create_response(
                        data=None,
                        success=False,
                        error_code=ResponseCodes.invalid_parameters))
            profile = request.user
            time = datetime.fromtimestamp(int(timestamp))
            user_job_apps = JobApplication.objects.filter(created__gte=time)
            job_application_list = JobApplicationSerializer(
                instance=user_job_apps,
                many=True,
                context={
                    'user': request.user
                }).data
            response = {
                'data': job_application_list,
                'synching': profile.synching
            }
            return JsonResponse(create_response(data=response), safe=False)
        status_id = request.GET.get('status_id')
        if status_id is not None:
            user_job_apps = JobApplication.objects.filter(
                application_status__id=status_id,
                user__id=request.user.id,
                is_deleted=False).order_by('-apply_date')
        else:
            user_job_apps = JobApplication.objects.filter(
                user_id=request.user.id,
                is_deleted=False).order_by('-apply_date')
        job_applications_list = JobApplicationSerializer(
            instance=user_job_apps, many=True, context={
                'user': request.user
            }).data
        return JsonResponse(create_response(data=job_applications_list),
                            safe=False)
    elif request.method == "POST":
        job_title = body['job_title']
        company = body['company']
        application_date = body['application_date']
        status = int(body['status_id'])
        source = body['source']

        jt = get_or_insert_position(job_title)
        jc = get_or_create_company(company)

        if Source.objects.filter(value__iexact=source).count() == 0:
            source = Source.objects.create(value=source)
        else:
            source = Source.objects.get(value__iexact=source)

        job_application = JobApplication(position=jt,
                                         company_object=jc,
                                         apply_date=application_date,
                                         msg_id='',
                                         app_source=source,
                                         user=request.user)
        job_application.application_status = ApplicationStatus.objects.get(
            pk=status)
        job_application.save()
        return JsonResponse(create_response(
            data=JobApplicationSerializer(instance=job_application,
                                          many=False,
                                          context={
                                              'user': request.user
                                          }).data),
                            safe=False)
    elif request.method == "PUT":
        status_id = body.get('status_id')
        rejected = body.get('rejected')
        job_application_ids = []
        if 'jobapp_ids' in body:
            job_application_ids = body['jobapp_ids']
        if 'jobapp_id' in body:
            job_application_ids.append(body['jobapp_id'])
        if len(job_application_ids) == 0:
            return JsonResponse(create_response(
                success=False, error_code=ResponseCodes.record_not_found),
                                safe=False)
        elif rejected is None and status_id is None:
            return JsonResponse(create_response(
                success=False, error_code=ResponseCodes.record_not_found),
                                safe=False)
        else:
            user_job_apps = JobApplication.objects.filter(
                pk__in=job_application_ids)
            if user_job_apps.count() == 0:
                return JsonResponse(create_response(
                    success=False, error_code=ResponseCodes.record_not_found),
                                    safe=False)
            else:
                for user_job_app in user_job_apps:
                    if user_job_app.user == request.user:
                        if status_id is None:
                            user_job_app.is_rejected = rejected
                        else:
                            new_status = ApplicationStatus.objects.filter(
                                pk=status_id)
                            if new_status.count() == 0:
                                return JsonResponse(
                                    create_response(data=None,
                                                    success=False,
                                                    error_code=ResponseCodes.
                                                    invalid_parameters),
                                    safe=False)
                            else:
                                if rejected is None:
                                    user_job_app.application_status = new_status[
                                        0]
                                else:
                                    user_job_app.application_status = new_status[
                                        0]
                                    user_job_app.is_rejected = rejected
                                status_history = StatusHistory(
                                    job_post=user_job_app,
                                    application_status=new_status[0])
                                status_history.save()
                        if rejected is not None:
                            user_job_app.rejected_date = datetime.now()
                        user_job_app.updated_date = datetime.now()
                        user_job_app.save()
                return JsonResponse(create_response(data=None), safe=False)
    elif request.method == "PATCH":
        job_app_id = body.get('jobapp_id')
        if job_app_id is None:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.record_not_found),
                                safe=False)
        user_job_app = JobApplication.objects.get(pk=job_app_id)

        if user_job_app.user != request.user:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.record_not_found),
                                safe=False)
        if user_job_app.msg_id is not None and user_job_app.msg_id != '':
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.record_not_found),
                                safe=False)

        job_title = body.get('job_title')
        company = body.get('company')
        application_date = body.get('application_date')
        source = body.get('source')

        if application_date is not None:
            user_job_app.apply_date = application_date
        if job_title is not None:
            user_job_app.position = get_or_insert_position(job_title)
        if company is not None:
            user_job_app.company_object = get_or_create_company(company)
        if source is not None:
            if Source.objects.filter(value__iexact=source).count() == 0:
                source = Source.objects.create(value=source)
            else:
                source = Source.objects.get(value__iexact=source)
            user_job_app.app_source = source
        user_job_app.updated_date = datetime.now()
        user_job_app.save()
        return JsonResponse(create_response(data=JobApplicationSerializer(
            instance=user_job_app, many=False, context={
                'user': request.user
            }).data),
                            safe=False)
    elif request.method == "DELETE":
        job_application_ids = []
        if 'jobapp_ids' in body:
            job_application_ids = body['jobapp_ids']
        if 'jobapp_id' in body:
            job_application_ids.append(body['jobapp_id'])
        if len(job_application_ids) == 0 or JobApplication.objects.filter(
                pk__in=job_application_ids).count() == 0:
            return JsonResponse(create_response(
                success=False, error_code=ResponseCodes.record_not_found),
                                safe=False)
        else:
            user_job_apps = JobApplication.objects.filter(
                pk__in=job_application_ids)
            for user_job_app in user_job_apps:
                if user_job_app.user == request.user:
                    user_job_app.deleted_date = datetime.now()
                    user_job_app.is_deleted = True
                    user_job_app.save()
            return JsonResponse(create_response(data=None), safe=False)
Exemple #17
0
def position_applications(request):
    body = request.data
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            None, body['recaptcha_token'],
            'add_job') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)
    if request.method == "GET":
        status_id = request.GET.get('status_id')
        if status_id is not None:
            user_job_apps = PositionApplication.objects.filter(
                Q(user__id=request.user.id)
                | Q(position__company=request.user.company),
                application_status__id=status_id,
                is_deleted=False).order_by('-apply_date')
        else:
            user_job_apps = PositionApplication.objects.filter(
                Q(user__id=request.user.id)
                | Q(position__company=request.user.company),
                is_deleted=False).order_by('-apply_date')
        job_applications_list = PositionApplicationSerializer(
            instance=user_job_apps, many=True, context={
                'user': request.user
            }).data
        return JsonResponse(create_response(data=job_applications_list),
                            safe=False)
    elif request.method == "POST":
        position_id = body['position_id']
        company = body['company']
        application_date = body['application_date']
        status = int(body['status_id'])
        first_name = body['first_name']
        last_name = body['last_name']
        jt = PositionDetail.objects.get(pk=position_id)
        jc = get_or_create_company(company)
        job_application = PositionApplication(position=jt,
                                              company_object=jc,
                                              first_name=first_name,
                                              last_name=last_name,
                                              apply_date=application_date,
                                              user=request.user)
        job_application.application_status = ApplicationStatus.objects.get(
            pk=status)
        job_application.save()
        return JsonResponse(create_response(
            data=PositionApplicationSerializer(instance=job_application,
                                               many=False,
                                               context={
                                                   'user': request.user
                                               }).data),
                            safe=False)
    elif request.method == "PUT":
        status_id = body.get('status_id')
        rejected = body.get('rejected')
        job_application_ids = []
        if 'jobapp_ids' in body:
            job_application_ids = body['jobapp_ids']
        if 'jobapp_id' in body:
            job_application_ids.append(body['jobapp_id'])
        if len(job_application_ids) == 0:
            return JsonResponse(create_response(
                success=False, error_code=ResponseCodes.record_not_found),
                                safe=False)
        elif rejected is None and status_id is None:
            return JsonResponse(create_response(
                success=False, error_code=ResponseCodes.record_not_found),
                                safe=False)
        else:
            user_job_apps = PositionApplication.objects.filter(
                pk__in=job_application_ids)
            if user_job_apps.count() == 0:
                return JsonResponse(create_response(
                    success=False, error_code=ResponseCodes.record_not_found),
                                    safe=False)
            else:
                for user_job_app in user_job_apps:
                    if user_job_app.user == request.user:
                        if status_id is None:
                            user_job_app.is_rejected = rejected
                        else:
                            new_status = ApplicationStatus.objects.filter(
                                pk=status_id)
                            if new_status.count() == 0:
                                return JsonResponse(
                                    create_response(data=None,
                                                    success=False,
                                                    error_code=ResponseCodes.
                                                    invalid_parameters),
                                    safe=False)
                            else:
                                if rejected is None:
                                    user_job_app.application_status = new_status[
                                        0]
                                else:
                                    user_job_app.application_status = new_status[
                                        0]
                                    user_job_app.is_rejected = rejected
                                status_history = StatusHistory(
                                    pos_app=user_job_app,
                                    application_status=new_status[0])
                                status_history.save()
                        if rejected is not None:
                            user_job_app.rejected_date = timezone.now()
                        user_job_app.updated_date = timezone.now()
                        user_job_app.save()
                return JsonResponse(create_response(data=None), safe=False)
    elif request.method == "PATCH":
        job_app_id = body.get('jobapp_id')
        if job_app_id is None:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.record_not_found),
                                safe=False)
        user_job_app = PositionApplication.objects.get(pk=job_app_id)

        if user_job_app.user != request.user:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.record_not_found),
                                safe=False)

        job_title = body.get('job_title')
        company = body.get('company')
        application_date = body.get('application_date')
        source = body.get('source')

        if application_date is not None:
            user_job_app.apply_date = application_date
        if job_title is not None:
            user_job_app.position = get_or_insert_position(job_title)
        if company is not None:
            user_job_app.company_object = get_or_create_company(company)
        user_job_app.updated_date = timezone.now()
        user_job_app.save()
        return JsonResponse(create_response(data=PositionApplicationSerializer(
            instance=user_job_app, many=False, context={
                'user': request.user
            }).data),
                            safe=False)
    elif request.method == "DELETE":
        job_application_ids = []
        if 'jobapp_ids' in body:
            job_application_ids = body['jobapp_ids']
        if 'jobapp_id' in body:
            job_application_ids.append(body['jobapp_id'])
        if len(job_application_ids) == 0 or PositionApplication.objects.filter(
                pk__in=job_application_ids).count() == 0:
            return JsonResponse(create_response(
                success=False, error_code=ResponseCodes.record_not_found),
                                safe=False)
        else:
            user_job_apps = PositionApplication.objects.filter(
                pk__in=job_application_ids)
            for user_job_app in user_job_apps:
                if user_job_app.user == request.user:
                    user_job_app.deleted_date = timezone.now()
                    user_job_app.is_deleted = True
                    user_job_app.save()
            return JsonResponse(create_response(data=None), safe=False)
Exemple #18
0
def reviews(request):
    body = request.data
    user = request.user
    if 'recaptcha_token' in body and utils.verify_recaptcha(
            user, body['recaptcha_token'],
            'review') == ResponseCodes.verify_recaptcha_failed:
        return JsonResponse(create_response(
            data=None,
            success=False,
            error_code=ResponseCodes.verify_recaptcha_failed),
                            safe=False)
    if request.method == "GET" and user.user_type.name == 'Career Service':
        reviews_list = Review.objects.filter(is_published=False,
                                             is_rejected=False,
                                             user__college=user.college)
        return JsonResponse(create_response(
            data=ReviewSerializer(instance=reviews_list, many=True).data),
                            safe=False)
    elif request.method == "PATCH":
        if request.user.user_type.name == 'Career Service':
            body = request.data
            review = Review.objects.get(pk=body['review_id'])
            approved = body['approved']
            review.is_published = approved
            review.is_rejected = not approved
            review.save()
            return JsonResponse(create_response(data=None), safe=False)
        else:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.not_supported_user),
                                safe=False)
    elif request.method == "GET":
        company_id = request.GET.get('company_id')
        position_id = request.GET.get('position_id')
        all_reviews = get_boolean_from_request(request, 'all_reviews')
        review_id = request.GET.get('review_id')
        if review_id is not None:
            reviews_list = Review.objects.filter(pk=review_id,
                                                 user=request.user)
            if reviews_list.count() == 0:
                return JsonResponse(create_response(
                    data=None,
                    success=False,
                    error_code=ResponseCodes.record_not_found),
                                    safe=False)
            return JsonResponse(create_response(data=ReviewSerializer(
                instance=reviews_list[0], many=False).data),
                                safe=False)
        elif company_id is None and position_id is None:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.invalid_parameters),
                                safe=False)
        if company_id is None:
            reviews_list = Review.objects.filter(Q(is_published=True)
                                                 | Q(user=request.user),
                                                 position__pk=position_id)
        elif position_id is None:
            reviews_list = Review.objects.filter(Q(is_published=True)
                                                 | Q(user=request.user),
                                                 company__pk=company_id)
        else:
            if all_reviews:
                reviews_list = Review.objects.filter(is_published=True,
                                                     position__pk=position_id,
                                                     company__pk=company_id)
            else:
                reviews_list = Review.objects.filter(user=request.user,
                                                     position__pk=position_id,
                                                     company__pk=company_id)
                if reviews_list.count() > 0:
                    return JsonResponse(create_response(data=ReviewSerializer(
                        instance=reviews_list[0], many=False).data),
                                        safe=False)
                else:
                    return JsonResponse(create_response(data=None), safe=False)
        return JsonResponse(create_response(
            data=ReviewSerializer(instance=reviews_list, many=True).data),
                            safe=False)
    else:
        if 'company_id' not in body or 'position_id' not in body:
            return JsonResponse(create_response(
                data=None,
                success=False,
                error_code=ResponseCodes.invalid_parameters),
                                safe=False)

        company = Company.objects.get(pk=body['company_id'])
        position = JobPosition.objects.get(pk=body['position_id'])
        if request.method == "PUT":
            review = Review.objects.get(pk=body['review_id'])
            if review.user.pk != user.pk:
                return JsonResponse(create_response(
                    data=None,
                    success=False,
                    error_code=ResponseCodes.record_not_found),
                                    safe=False)
            review.update_date = timezone.now()
        elif request.method == "POST":
            review = Review()
        review.company = company
        review.position = position
        review.user = request.user
        if 'pros' in body:
            review.pros = body['pros']
        if 'cons' in body:
            review.cons = body['cons']
        if 'interview_notes' in body:
            review.interview_notes = body['interview_notes']
        if 'overall_company_experience' in body:
            review.overall_company_experience = body[
                'overall_company_experience']
        if 'interview_difficulty' in body:
            review.interview_difficulty = body['interview_difficulty']
        if 'overall_interview_experience' in body:
            review.overall_interview_experience = body[
                'overall_interview_experience']
        if 'anonymous' in body:
            review.anonymous = body['anonymous']
        if 'emp_auths' in body:
            for a in body['emp_auths']:
                if 'value' in a:
                    auth = EmploymentAuth.objects.get(pk=a['id'])
                    review.save()
                    if CompanyEmploymentAuth.objects.filter(
                            review=review, employment_auth=auth).count() == 0:
                        c_auth = CompanyEmploymentAuth(review=review,
                                                       employment_auth=auth,
                                                       value=a['value'])
                        c_auth.save()
                    else:
                        c_auth = CompanyEmploymentAuth.objects.get(
                            review=review, employment_auth=auth)
                        c_auth.value = a['value']
                        c_auth.save()
        if 'emp_status_id' in body:
            review.emp_status = EmploymentStatus.objects.get(
                pk=body['emp_status_id'])
        if 'source_type_id' in body:
            review.source_type = SourceType.objects.get(
                pk=body['source_type_id'])

        # publish review if there is no content to approve
        if 'pros' not in body and 'cons' not in body and 'interview_notes' not in body:
            review.is_published = True
        else:
            review.is_published = False
            send_notification_email_to_admins('review', review.user.college.id)

        review.save()
        response = {
            'review':
            ReviewSerializer(instance=review, many=False).data,
            'company':
            CompanySerializer(instance=company,
                              many=False,
                              context={
                                  'user': request.user,
                                  'position': position
                              }).data
        }
        return JsonResponse(create_response(data=response), safe=False)