Example #1
0
def courses(request, show_hidden):
    """
    Renders the courses list for the API.

    :param request: The django HttpRequest object.
    :param show_hidden: True or False, (controlled from the urls.py file) to show courses with
                        upcoming enrollment date.

    :return: JsonResponse with a list of the courses.
    """
    courses_list = branding.get_visible_courses()

    if not show_hidden:
        # Using `AnonymousUser()` to hide unpublished courses
        anonymous_user = AnonymousUser()

        # The logic bellow has been copied (with amendments) from `courseware.courses.get_courses`,
        # Just in case something changes with edX releases.
        permission_name = settings.COURSE_CATALOG_VISIBILITY_PERMISSION

        courses_list = [
            c for c in courses_list
            if has_access(anonymous_user, permission_name, c)
        ]

    courses_list = sort_by_announcement(courses_list)
    courses_list = edraak_courses_logic(courses_list)

    courses_json_list = []

    prefix = get_absolute_url_prefix(request)

    for course in courses_list:
        video_tag = get_course_about_section(course, "video")
        youtube_id = video_tag[video_tag.find("embed") + 6:video_tag.find("?")]

        courses_json_list.append({
            "id": unicode(course.id),
            "number": course.display_number_with_default,
            "name": course.display_name_with_default,
            "organization": course.display_org_with_default,
            "description": get_course_about_section(course, "short_description").strip(),
            "startDate": course.start,
            "endDate": course.end,
            "enrollmentStartDate": course.enrollment_start,
            "enrollmentEndDate": course.enrollment_end,
            "overview": get_course_about_section(course, "overview").strip(),
            "aboutPage": prefix + reverse('about_course', args=[unicode(course.id)]),
            "image": prefix + course_image_url(course),
            "state": _get_course_status(course),
            "youtube_id": youtube_id,
            "effort": get_course_about_section(course, "effort").strip(),
        })

    return JsonResponse(courses_json_list)
Example #2
0
def activation(request):
    access_token = request.GET['access_token']
    user_email = request.GET['email']
    course_name = request.GET['course_name']
    course_id = request.GET['course_id']
    cert_end = request.GET['cert_end']
    user_id = request.user.id
    secret_key = settings.BAYT_SECRET_KEY
    my_string = user_email + course_name + secret_key
    current_access_token = hashlib.md5(my_string.encode('UTF-8')).hexdigest()

    if current_access_token == access_token:
        connection = Http()

        resp, content = connection.request('{base}?{params}'.format(
            base='https://api.bayt.com/api/edraak-api/post.adp',
            params=urllib.urlencode({
                'secret_key': settings.BAYT_SECRET_KEY,
                'valid_until': cert_end,
                'certificate_name': course_name.encode('UTF-8'),
                'email_address': user_email
            }),
        ))

        json_content = simplejson.loads(content)

        if json_content['status'] == 'NOT EXISTS':
            # redirect user to bayt registration
            return render_to_response('bayt/callback.html', {
                'status': False,
                'redirect_url': '{bayt_base}{register}'.format(
                    bayt_base=settings.BAYT_BASE,
                    register='/en/register-j/',
                )
            })

        BaytPublishedCertificate.objects.create(user_id=user_id, course_id=course_id)
        return render_to_response('bayt/callback.html', {
            'status': True,
            'redirect_url': '{base}{view}'.format(
                base=get_absolute_url_prefix(request),
                view=reverse('dashboard'),
            ),
        })
    else:
        log.warning(
            'Access tokens don\'t match: current=\'%s\' original=\'%s\'',
            current_access_token,
            access_token,
        )
        return JsonResponse({'success': False, 'error': True, 'redirect_to': False})
Example #3
0
def activation(request):
    access_token = request.GET['access_token']
    user_email = request.GET['email']
    course_name = request.GET['course_name']
    course_id = request.GET['course_id']
    cert_end = request.GET['cert_end']
    user_id = request.user.id
    secret_key = settings.BAYT_SECRET_KEY
    my_string = user_email + course_name + secret_key
    current_access_token = hashlib.md5(my_string.encode('UTF-8')).hexdigest()

    if current_access_token == access_token:
        connection = Http()

        resp, content = connection.request('{base}?{params}'.format(
            base='https://api.bayt.com/api/edraak-api/post.adp',
            params=urllib.urlencode({
                'secret_key': settings.BAYT_SECRET_KEY,
                'valid_until': cert_end,
                'certificate_name': course_name.encode('UTF-8'),
                'email_address': user_email
            }),
        ))

        json_content = simplejson.loads(content)

        if json_content['status'] == 'NOT EXISTS':
            # redirect user to bayt registration
            return render_to_response('bayt/callback.html', {
                'status': False,
                'redirect_url': '{bayt_base}{register}'.format(
                    bayt_base=settings.BAYT_BASE,
                    register='/en/register-j/',
                )
            })

        BaytPublishedCertificate.objects.create(user_id=user_id, course_id=course_id)
        return render_to_response('bayt/callback.html', {
            'status': True,
            'redirect_url': '{base}{view}'.format(
                base=get_absolute_url_prefix(request),
                view=reverse('dashboard'),
            ),
        })
    else:
        log.warning(
            'Access tokens don\'t match: current=\'%s\' original=\'%s\'',
            current_access_token,
            access_token,
        )
        return JsonResponse({'success': False, 'error': True, 'redirect_to': False})
Example #4
0
def get_student_email(request):
    user_email = request.POST['bayt_email']
    course_name = request.POST['course_name']
    course_id = request.POST['course_id']
    cert_end = request.POST['cert_end']
    user_id = request.user.id

    try:
        validate_email(user_email)
    except ValidationError:
        return JsonResponse({'success': False, 'error': _('Invalid Email')})

    try:
        user = User.objects.get(id=user_id)
    except User.DoesNotExist:
        ## close the pop-up because there is sth wrong
        return JsonResponse({'success': False, 'error': 'Invalid ID'})

    if user.email == user_email:
        h = Http()
        params = {
            'secret_key': settings.BAYT_SECRET_KEY,
            'valid_until': cert_end,
            'certificate_name': course_name.encode('UTF-8'),
            'email_address': user_email
        }

        url = 'https://api.bayt.com/api/edraak-api/post.adp?' + urllib.urlencode(params)
        resp, content = h.request(url)
        json_content = simplejson.loads(content)

        if json_content['status'] == 'NOT EXISTS':
            return JsonResponse({
                'success': True,
                'error': False,
                'redirect_to': '{bayt_base}{register}'.format(
                    bayt_base=settings.BAYT_BASE,
                    register='/en/register-j/',
                ),
                'response': content,
            })
        else:
            BaytPublishedCertificate.objects.create(user_id=int(user_id), course_id=course_id)
            return JsonResponse({'success': True, 'error': False, 'redirect_to': False, 'response': content})
    else:
        secret_key = settings.BAYT_SECRET_KEY
        my_string = user_email + course_name + secret_key
        access_token = hashlib.md5(my_string.encode('UTF-8')).hexdigest()

        params = {
            'email': user_email,
            'course_name': course_name.encode('UTF-8'),
            'access_token': access_token,
            'course_id': course_id.encode('UTF-8'),
            'cert_end': cert_end,
            'user_id': user_id,
        }

        message = render_to_string('emails/bayt_verification_email.txt', {
            'activation_url': '{base}{view}?{params}'.format(
                base=get_absolute_url_prefix(request),
                view=reverse('bayt_activation'),
                params=urllib.urlencode(params)
            ),
        })

        try:
            subject = _('Verify your email to share your Edraak certificate on Bayt.com')
            send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [user_email], fail_silently=False)
            # here we have to send an auth email to user email that contains a link to
            # get back to here and then post the certificate
            return JsonResponse({
                'success': True,
                'error': False,
                'redirect_to': reverse('bayt_check_email', kwargs={
                    'email': user_email,
                    'course_id': course_id,
                }),
            })
        except:
            log.warning('Unable to send activation email to user', exc_info=True)
            return JsonResponse({
                'success': False,
                'error': True,
                'redirect_to': False,
            })
Example #5
0
def get_student_email(request):
    user_email = request.POST['bayt_email']
    course_name = request.POST['course_name']
    course_id = request.POST['course_id']
    cert_end = request.POST['cert_end']
    user_id = request.user.id

    if not validate_email(user_email):
        return JsonResponse({'success': False, 'error': _('Invalid Email')})

    try:
        user = User.objects.get(id=user_id)
    except User.DoesNotExist:
        ## close the pop-up because there is sth wrong
        return JsonResponse({'success': False, 'error': 'Invalid ID'})

    if user.email == user_email:
        h = Http()
        params = {
            'secret_key': settings.BAYT_SECRET_KEY,
            'valid_until': cert_end,
            'certificate_name': course_name.encode('UTF-8'),
            'email_address': user_email
        }

        url = 'https://api.bayt.com/api/edraak-api/post.adp?' + urllib.urlencode(params)
        resp, content = h.request(url)
        json_content = simplejson.loads(content)

        if json_content['status'] == 'NOT EXISTS':
            return JsonResponse({
                'success': True,
                'error': False,
                'redirect_to': '{bayt_base}{register}'.format(
                    bayt_base=settings.BAYT_BASE,
                    register='/en/register-j/',
                ),
                'response': content,
            })
        else:
            BaytPublishedCertificate.objects.create(user_id=int(user_id), course_id=course_id)
            return JsonResponse({'success': True, 'error': False, 'redirect_to': False, 'response': content})
    else:
        secret_key = settings.BAYT_SECRET_KEY
        my_string = user_email + course_name + secret_key
        access_token = hashlib.md5(my_string.encode('UTF-8')).hexdigest()

        params = {
            'email': user_email,
            'course_name': course_name.encode('UTF-8'),
            'access_token': access_token,
            'course_id': course_id.encode('UTF-8'),
            'cert_end': cert_end,
            'user_id': user_id,
        }

        message = render_to_string('bayt/verification_email.txt', {
            'activation_url': '{base}{view}?{params}'.format(
                base=get_absolute_url_prefix(request),
                view=reverse('bayt_activation'),
                params=urllib.urlencode(params)
            ),
        })

        try:
            subject = _('Verify your email to share your Edraak certificate on Bayt.com')
            send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [user_email], fail_silently=False)
            # here we have to send an auth email to user email that contains a link to
            # get back to here and then post the certificate
            return JsonResponse({
                'success': True,
                'error': False,
                'redirect_to': reverse('bayt_check_email', kwargs={
                    'email': user_email,
                    'course_id': course_id,
                }),
            })
        except:
            log.warning('Unable to send activation email to user', exc_info=True)
            return JsonResponse({
                'success': False,
                'error': True,
                'redirect_to': False,
            })
Example #6
0
def courses(request, show_hidden):
    """
    Renders the courses list for the API.

    :param request: The django HttpRequest object.
    :param show_hidden: True or False, (controlled from the urls.py file) to show courses with
                        upcoming enrollment date.

    :return: JsonResponse with a list of the courses.
    """
    courses_list = branding.get_visible_courses()

    if not show_hidden:
        # Using `AnonymousUser()` to hide unpublished courses
        anonymous_user = AnonymousUser()

        # The logic bellow has been copied (with amendments) from `courseware.courses.get_courses`,
        # Just in case something changes with edX releases.
        permission_name = settings.COURSE_CATALOG_VISIBILITY_PERMISSION

        courses_list = [
            c for c in courses_list
            if has_access(anonymous_user, permission_name, c)
        ]

    courses_list = sort_by_announcement(courses_list)
    courses_list = edraak_courses_logic(courses_list)

    courses_json_list = []

    prefix = get_absolute_url_prefix(request)

    for course_overview in courses_list:

        try:
            course = get_course(course_overview.id)

            video_tag = get_course_about_section(request, course, "video")
            youtube_id = video_tag[video_tag.find("embed") + 6:video_tag.find("?")]

            courses_json_list.append({
                "id": unicode(course.id),
                "number": course.display_number_with_default,
                "name": course.display_name_with_default_escaped,
                "organization": course.display_org_with_default,
                "description": get_course_about_section(request, course, "short_description").strip(),
                "startDate": course.start,
                "endDate": course.end,
                "enrollmentStartDate": course.enrollment_start,
                "enrollmentEndDate": course.enrollment_end,
                "overview": get_course_about_section(request, course, "overview").strip(),
                "aboutPage": prefix + reverse('about_course', args=[unicode(course.id)]),
                "image": prefix + course_image_url(course),
                "state": _get_course_status(course),
                "youtube_id": youtube_id,
                "effort": get_course_about_section(request, course, "effort").strip(),
            })
        except ValueError:
            log.error(u"Course with id '{0}' not found".format(course_overview.id))


    return JsonResponse(courses_json_list)