Exemplo n.º 1
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
Exemplo 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
Exemplo n.º 3
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
        })
Exemplo 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 "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,
                })
Exemplo n.º 5
0
def create_issue_and_bounty(request):
    languages = []
    for lang in Issue.LANGUAGES:
        languages.append(lang[0])
    user = request.user
    if not user.is_authenticated():
        return render(request, 'post.html', {
            'languages': languages,
            'message': 'You need to be authenticated to post bounty'
        })
    if request.method == 'GET':
        return render(request, 'post.html', {
            'languages': languages,
        })
    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
            })
        issue_data = get_issue(request, url)
        if issue_data:
            service = Service.objects.get(name=issue_data['service'])
            instance = Issue(created = user,number = issue_data['number'],
            project=issue_data['project'],user = issue_data['user'],service=service)
        else:
            return render(request, 'post.html', {
                'languages': languages,
                'message':'Please provide a propper issue url',
            })
        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:
            if not instance.pk: 
                issue = form.save()
            else:
                issue = instance
                #issue already exists, post additional bounty
                #this doesn't seem to be working yet
            price = bounty_form.cleaned_data['price']
            bounty_instance = Bounty(user = user,issue = issue,price = price)
            #save this data and post it with the return_uri from wepay
            data = serializers.serialize('xml', [ bounty_instance, ])
            bounty_instance.save()

            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',
                'currency': 'USD'
            })
            print wepay_data

            #return redirect(wepay_data['checkout_uri'])

            return render(request, 'post.html', {
                'languages': languages,
                'message':'Successfully saved issue'
            })
        else:
            return render(request, 'post.html', {
                'languages': languages,
                'message':'Error',
                'errors': form.errors,
                'bounty_errors':bounty_form.errors,
            })
Exemplo n.º 6
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,
                })
Exemplo n.º 7
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})

        else:
            return render(
                request,
                "post.html",
                {
                    "languages": languages,
                    "message": form.errors,
                    "errors": form.errors,
                    "form": form,
                    "bounty_errors": bounty_form.errors,
                },
            )
Exemplo n.º 8
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',
            })
        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('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,
            })