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
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
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 })
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, })
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, })
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, })
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, }, )
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, })