Ejemplo n.º 1
0
def paynow(request):
    languages = []
    for lang in Issue.LANGUAGES:
        languages.append(lang[0])
    issuetracker = request.POST.get('issuetracker')
    issueurl = request.POST.get('issueUrl')
    issuetitle = request.POST.get('title')
    issuesummary = request.POST.get('summary')
    language = request.POST.get('language')
    bounty = request.POST.get('bounty')
    message = ''
    if not bounty:
        message = "Bounty is required."
    if not issuesummary:
        message = "Summary is required."
    if not issuetitle:
        message = "Title is required."
    if not issueurl:
        message = "Issue URL is required."
    if not message:
        userprofile = UserProfile()
        issuesaver = Issue()
        issuesaver.title = issuetitle
        issuesaver.content = issuesummary
        issuesaver.language = language
        issuesaver.notified_user = False
        issuesaver.status = "open"
        issuesaver.user = request.user
        issuesaver.save()

        bountysaver = Bounty()
        bountysaver.price = bounty
        bountysaver.issue = issuesaver
        bountysaver.user = request.user
        bountysaver.save()

        return render(request, 'post.html', {
            'languages': languages,
            'message': 'Successfully registered on DB.'
        })
    else:
        return render(request, 'post.html', {
            'languages': languages,
            'message': message
        })
Ejemplo n.º 2
0
def add_issue_to_database(request):

    issue = request.session.get('issue', False)
    service = Service.objects.get(name=issue['service'])

    try:
        db_issue = Issue.objects.get(service=service,
                                     number=issue['number'],
                                     project=issue['project'])
        if db_issue.status == "paid":
            error = "I see that issue has been closed and paid already."
            messages.error(request, error)
            return False
    except:

        db_issue = Issue(service=service,
                         number=issue['number'],
                         project=issue['project'],
                         user=issue.has_key('user') and issue['user'] or '',
                         title=issue['title'],
                         content=issue['content'][:350],
                         status=issue['status'])
        filename, file = get_image_for_issue(service, issue)
        if filename:
            db_issue.image.save(filename, file)
        db_issue.save()
        if not settings.DEBUG:
            create_comment(db_issue)

    ends = issue['limit']
    hour_day = ends[-1]
    number = ends.rstrip(hour_day)
    if hour_day == "h":
        limit = datetime.timedelta(hours=int(number))
    else:
        limit = datetime.timedelta(days=int(number))
    bounty = Bounty(user=request.user,
                    issue=db_issue,
                    price=issue['bounty'],
                    ends=datetime.datetime.now() + limit)
    bounty.save()
    alert_watchers_increase(db_issue, int(request.GET.get('bounty', 0)))
    del request.session['issue']
    return True
Ejemplo n.º 3
0
def create_issue_and_bounty(request):
    languages = []
    for lang in Issue.LANGUAGES:
        languages.append(lang[0])
    user = request.user

    if request.method == 'GET':
        url = request.GET.get('url')
        if url:
            helper = get_issue_helper(request, url)
            issue_data = helper.get_issue(request, url)

            if not "title" in issue_data:
                messages.error(request, 'Please provide an valid issue url')
                return redirect('/post')

            form = IssueCreateForm(
                initial={
                    'issueUrl': request.GET.get('url'),
                    'title': issue_data['title'],
                    'content': issue_data['content'] or "Added from Github"
                })
        else:
            form = IssueCreateForm()
        return render(request, 'post.html', {
            'languages': languages,
            'form': form,
        })
    if request.method == 'POST':
        url = request.POST.get('issueUrl', '')
        if not url:
            messages.error(request, 'Please provide an issue url')
            return render(request, 'post.html', {'languages': languages})
        try:
            helper = get_issue_helper(request, url)
            issue_data = helper.get_issue(request, url)
            if issue_data and "service" in issue_data:
                service = Service.objects.get(name=issue_data['service'])
                instance = Issue(number=issue_data['number'],
                                 project=issue_data['project'],
                                 user=issue_data['user'],
                                 service=service)
        except:
            return render(
                request, 'post.html', {
                    'languages':
                    languages,
                    'message':
                    'Please provide a propper issue url like \
                - https://github.com/CoderBounty/coderbounty/issues/83',
                })
        try:
            form = IssueCreateForm(request.POST, instance=instance)
        except:
            helper = get_issue_helper(request, url)
            issue_data = helper.get_issue(request, url)
            if issue_data and "service" in issue_data:
                service = Service.objects.get(name=issue_data['service'])
                instance = Issue(number=issue_data['number'],
                                 project=issue_data['project'],
                                 user=issue_data['user'],
                                 service=service)
        bounty_form = BountyCreateForm(request.POST)
        bounty_form_is_valid = bounty_form.is_valid()
        if form.is_valid() and bounty_form_is_valid:
            price = bounty_form.cleaned_data['price']
            if int(price) < 5:
                return render(
                    request, 'post.html', {
                        'languages': languages,
                        'message': 'Bounty must be greater than $5',
                    })
            try:
                issue = form.save()
            except:
                issue = Issue.objects.get(number=issue_data['number'],
                                          project=issue_data['project'],
                                          user=issue_data['user'],
                                          service=service)

            bounty_instance = Bounty(user=user, issue=issue, price=price)
            if int(request.user.userprofile.balance or 0) >= int(
                    request.POST.get('grand_total')):
                profile = request.user.userprofile
                profile.balance = int(request.user.userprofile.balance) - int(
                    request.POST.get('grand_total'))
                profile.save()
                bounty_instance.save()
                if not settings.DEBUG:
                    create_comment(issue)
                return redirect(issue.get_absolute_url())
            else:
                data = serializers.serialize('json', [
                    bounty_instance,
                ])
                # https://devtools-paypal.com/guide/pay_paypal/python?env=sandbox
                import paypalrestsdk
                paypalrestsdk.configure({
                    'mode': settings.MODE,
                    'client_id': settings.CLIENT_ID,
                    'client_secret': settings.CLIENT_SECRET
                })

                payment = paypalrestsdk.Payment({
                    "intent":
                    "sale",
                    "payer": {
                        "payment_method": "paypal"
                    },
                    "redirect_urls": {
                        "return_url":
                        request.build_absolute_uri(issue.get_absolute_url()),
                        "cancel_url":
                        "https://coderbounty.com/post"
                    },
                    "transactions": [{
                        "amount": {
                            "total": request.POST.get('grand_total'),
                            "currency": "USD"
                        },
                        "description":
                        "Coderbounty #" + str(issue.id),
                        "custom":
                        data
                    }]
                })

                if payment.create():
                    for link in payment.links:
                        if link.method == "REDIRECT":
                            redirect_url = link.href
                    return redirect(redirect_url)
                else:
                    messages.error(request, payment.error)
                    return render(request, 'post.html',
                                  {'languages': languages})

                # wepay = WePay(settings.WEPAY_IN_PRODUCTION, settings.WEPAY_ACCESS_TOKEN)
                # wepay_data = wepay.call('/checkout/create', {
                #     'account_id': settings.WEPAY_ACCOUNT_ID,
                #     'amount': request.POST.get('grand_total'),
                #     'short_description': 'CoderBounty',
                #     'long_description': data,
                #     'type': 'service',
                #     'redirect_uri': request.build_absolute_uri(issue.get_absolute_url()),
                #     'currency': 'USD'
                # })
                # if "error_code" in wepay_data:
                #     messages.error(request, wepay_data['error_description'])
                #     return render(request, 'post.html', {
                #         'languages': languages
                #     })

                #

        else:
            return render(
                request, 'post.html', {
                    'languages': languages,
                    'message': form.errors,
                    'errors': form.errors,
                    'form': form,
                    'bounty_errors': bounty_form.errors,
                })
Ejemplo n.º 4
0
def create_issue_and_bounty(request):
    languages = []
    for lang in Issue.LANGUAGES:
        languages.append(lang[0])
    user = request.user

    if request.method == 'GET':
        url = request.GET.get('url')
        if url:
            helper = get_issue_helper(request, url)
            issue_data = helper.get_issue(request, url)
            if not issue_data:
                messages.error(request, 'Please provide an valid issue url')
                return redirect('/post')

            form = IssueCreateForm(
                initial={
                    'issueUrl': request.GET.get('url'),
                    'title': issue_data['title'],
                    'content': issue_data['content'] or "Added from Github"
                })
        else:
            form = IssueCreateForm()
        return render(request, 'post.html', {
            'languages': languages,
            'form': form,
        })
    if request.method == 'POST':
        url = request.POST.get('issueUrl', '')
        if not url:
            messages.error(request, 'Please provide an issue url')
            return render(request, 'post.html', {'languages': languages})
        try:
            helper = get_issue_helper(request, url)
            issue_data = helper.get_issue(request, url)
            if issue_data and "service" in issue_data:
                service = Service.objects.get(name=issue_data['service'])
                instance = Issue(number=issue_data['number'],
                                 project=issue_data['project'],
                                 user=issue_data['user'],
                                 service=service)
        except:
            return render(
                request, 'post.html', {
                    'languages':
                    languages,
                    'message':
                    'Please provide a propper issue url like \
                - https://github.com/CoderBounty/coderbounty/issues/83',
                })
        form = IssueCreateForm(request.POST, instance=instance)
        bounty_form = BountyCreateForm(request.POST)
        bounty_form_is_valid = bounty_form.is_valid()
        if form.is_valid() and bounty_form_is_valid:
            price = bounty_form.cleaned_data['price']
            if int(price) < 5:
                return render(
                    request, 'post.html', {
                        'languages': languages,
                        'message': 'Bounty must be greater than $5',
                    })
            try:
                issue = form.save()
            except:
                issue = Issue.objects.get(number=issue_data['number'],
                                          project=issue_data['project'],
                                          user=issue_data['user'],
                                          service=service)

            bounty_instance = Bounty(user=user, issue=issue, price=price)
            if int(request.user.userprofile.balance or 0) >= int(
                    request.POST.get('grand_total')):
                profile = request.user.userprofile
                profile.balance = int(request.user.userprofile.balance) - int(
                    request.POST.get('grand_total'))
                profile.save()
                bounty_instance.save()
                if not settings.DEBUG:
                    create_comment(issue)
                return redirect(issue.get_absolute_url())
            else:
                data = serializers.serialize('xml', [
                    bounty_instance,
                ])

                wepay = WePay(settings.WEPAY_IN_PRODUCTION,
                              settings.WEPAY_ACCESS_TOKEN)
                wepay_data = wepay.call(
                    '/checkout/create', {
                        'account_id':
                        settings.WEPAY_ACCOUNT_ID,
                        'amount':
                        request.POST.get('grand_total'),
                        'short_description':
                        'CoderBounty',
                        'long_description':
                        data,
                        'type':
                        'service',
                        'redirect_uri':
                        request.build_absolute_uri(issue.get_absolute_url()),
                        'currency':
                        'USD'
                    })
                if "error_code" in wepay_data:
                    messages.error(request, wepay_data['error_description'])
                    return render(request, 'post.html',
                                  {'languages': languages})

                return redirect(wepay_data['checkout_uri'])

        else:
            return render(
                request, 'post.html', {
                    'languages': languages,
                    'message': form.errors,
                    'errors': form.errors,
                    'form': form,
                    'bounty_errors': bounty_form.errors,
                })