Skip to content

Commit

Permalink
Merge pull request #1305 from AtmegaBuzz/feature/report-bug-on-hunts
Browse files Browse the repository at this point in the history
Feature: Mention Bughunt on the reported Bug
  • Loading branch information
DonnieBLT authored Aug 12, 2023
2 parents dfbb55a + b79f79a commit 155cc07
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 71 deletions.
84 changes: 40 additions & 44 deletions company/templates/company/bughunt/view_bughunt.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,51 +9,47 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/2.1.0/showdown.min.js"></script>

<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" />
<link rel="stylesheet" href="https://unpkg.com/@tailwindcss/typography@0.2.x/dist/typography.min.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/codemirror@5.59.2/lib/codemirror.min.css" />
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
html {
scroll-behavior: smooth;
font-family: 'Space Grotesk', sans-serif;
}
.cursive {
font-family: 'Nanum Pen Script', cursive;
}
[x-cloak] { display: none; }

<link rel="stylesheet" href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" />
<link rel="stylesheet" href="https://unpkg.com/@tailwindcss/typography@0.2.x/dist/typography.min.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/codemirror@5.59.2/lib/codemirror.min.css" />
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
.cursive {
font-family: 'Nanum Pen Script', cursive;
}
[x-cloak] { display: none; }

.CodeMirror-focused {
border-radius: .375rem;
outline: 2px solid transparent;
outline-offset: 2px;
--tw-ring-opacity: 0.5;
--tw-ring-color: rgba(199, 210, 254, var(--tw-ring-opacity));
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.CodeMirror {
padding: 0.75rem;
font-family: inherit;
font-size: inherit;
border-bottom-left-radius: .375rem;
border-bottom-right-radius: .375rem;
--tw-border-opacity: 1;
border: 1px solid rgba(209, 213, 219, var(--tw-border-opacity));
}
.CodeMirror.CodeMirror-focused {
--tw-border-opacity: 1;
border-color: rgba(165, 180, 252, var(--tw-border-opacity));
}
.CodeMirror-focused {
border-radius: .375rem;
outline: 2px solid transparent;
outline-offset: 2px;
--tw-ring-opacity: 0.5;
--tw-ring-color: rgba(199, 210, 254, var(--tw-ring-opacity));
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.CodeMirror {
padding: 0.75rem;
font-family: inherit;
font-size: inherit;
border-bottom-left-radius: .375rem;
border-bottom-right-radius: .375rem;
--tw-border-opacity: 1;
border: 1px solid rgba(209, 213, 219, var(--tw-border-opacity));
}
.CodeMirror.CodeMirror-focused {
--tw-border-opacity: 1;
border-color: rgba(165, 180, 252, var(--tw-border-opacity));
}

.cm-s-default .cm-header,
.cm-s-default .cm-variable-2 {
color: rgb(31, 41, 55);
}
</style>
.cm-s-default .cm-header,
.cm-s-default .cm-variable-2 {
color: rgb(31, 41, 55);
}
</style>

<link
rel="stylesheet"
Expand Down Expand Up @@ -99,7 +95,7 @@
<i class="fa-sharp fa-solid fa-bell fa-lg text-white"></i>
<span>Subscribe</span>
</button>
<a href="{% url 'report'%}" class="flex items-center bg-red-600 hover:bg-red-700 text-gray-100 px-4 py-2 rounded text-sm space-x-2 transition duration-100">
<a href="{% url 'report' %}?hunt={{ hunt_obj.id }}" class="flex items-center bg-red-600 hover:bg-red-700 text-gray-100 px-4 py-2 rounded text-sm space-x-2 transition duration-100">
<i class="fa-sharp fa-solid fa-bug fa-lg text-white"></i>
<span>Submit Bug</span>
</a>
Expand Down
54 changes: 41 additions & 13 deletions website/templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
{% providers_media_js %}
{% load i18n %}f
{% block content %}
<script src="{% static "js/jquery.validate.js" %}"></script>
<script src="{% static 'js/jquery.validate.js' %}"></script>
<script src="{% static 'js/activity.js' %}"></script>
<div class="w-full h-[30rem] flex flex-col space-y-14 items-center">
<p class="text-5xl text-center mt-20 font-sans sm:text-6xl lg:text-7xl">Find Bugs, Win Points and Prizes</p>
Expand Down Expand Up @@ -108,28 +108,56 @@ <h2 class="text-slider-line animated fadeInUp text-4xl">{% trans "Find a bug on
</div>


<p class="text-7xl text-center mb-10 font-sans text-[#B1B1B1]">TOP HUNTS</p>
<p class="text-7xl text-center mb-10 font-sans text-[#B1B1B1]">LATEST HUNTS</p>

<div class="flex items-center flex-wrap items-center w-full justify-between mb-[100px] mt-20 sm:justify-center ">
<div class="flex items-center flex-wrap w-full justify-between mb-[100px] mt-20 sm:justify-center ">

{% if top_hunts %}

{% for hunt in top_hunts %}

<div class="flex w-[350px] h-[110px] border-2 border-gray-300 p-1 cursor-pointer shadow-sm hover:scale-110 hover:shadow-lg transition-all m-5 sm:mt-5">

<div class="flex justify-center items-center w-[40%]">
<img class="w-32 h-32 rounded-lg" src="{{server_url}}/media/{{hunt.logo}}" alt="">
<div class="flex justify-between flex-col md:flex-row w-[700px] min-h-[200px] m-5 rounded-lg overflow-hidden bg-gray-700 p-[1px]">
<div class="w-full md:w-10 bg-gray-700 flex items-center justify-center md:rotate-180">
<p class="text-white md:rotate-90 font-bold text-2xl tracking-widest">LATEST</p>
</div>

<div class="flex flex-col ml-5 w-[60%]">
<p class="text-3xl font-extrabold mt-6">{{hunt.name}}</p>
<p class="tw-font-extralight text-gray-500 text-xl mt-1">{{hunt.url}}</p>
<div class="flex mt-5 justify-between items-center w-[90%]">
<p class="font-bold">${{hunt.prize}}</p>
<button class="bg-red-600 text-white w-[100px] h-[25px] font-bold">SUBMIT BUG</button>
<div class="flex w-full min-h-full bg-white">
<div class="flex h-full items-center">
<div class="w-[250px] h-[200px] p-5">
<img src="{{server_url}}/media/{{hunt.logo}}" class="w-full h-full object-fill" alt="Bughunt Logo">
</div>
</div>
<div class="flex flex-col w-[70%] h-full pt-7">
<p class="text-black text-4xl font-semibold">{{ hunt.name }}</p>
<div class="flex flex-col justify-between h-1/2 mt-10">
<div class="flex flex-col md:flex-row md:justify-between">
<div class="md:mt-0 w-full py-3 mr-4 rounded-lg flex items-center">
<i class="fa-solid fa-calendar-days text-3xl mr-6 text-gray-600"></i>
<p class="text-black font-semibold">{{ hunt.starts_on|date:"F" }} {{ hunt.starts_on__day }} {{ hunt.starts_on__year }} - {{ hunt.end_on|date:"F" }} {{ hunt.end_on__day }} {{ hunt.end_on__year }}</p>
</div>
</div>
<div class="flex flex-col md:flex-row md:justify-between">
<div class="w-full rounded-lg flex items-center">
<i class="fa-solid fa-globe text-3xl mr-5 text-gray-600"></i>
<a href="{{ hunt.url }}" class="text-black font-semibold">{{ hunt.url }}</a>
</div>
</div>
<div class="flex flex-col md:flex-row md:justify-between">
<div class="w-full py-3 rounded-lg flex items-center">
<i class="fa-solid fa-dollar-sign text-3xl mr-8 text-gray-600"></i>
<p class="text-black font-semibold">{{ hunt.total_prize }}</p>
</div>
</div>
</div>

<div class="flex w-full mt-5 mb-10">
<a href="{% url 'show_bughunt' hunt.id %}" class="mt-3 md:mt-0 w-full md:w-full py-3 mr-4 bg-red-500 rounded-lg flex items-center justify-center hover:bg-red-700">
<p class="text-white font-semibold">MORE INFO</p>
</a>
</div>
</div>
</div>

</div>

{% endfor %}
Expand Down
26 changes: 25 additions & 1 deletion website/templates/report.html
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,31 @@ <h3 class="text-xl font-bold leading-none text-red-500">Latest Issues</h3>
</div>
</div>
</div>

<div class="space-y-12 mt-10">

<div class="sm:col-span-1 w-full min-w-[150px]">
<label
for="hunt"
class="block text-2xl font-semibold leading-6 text-gray-900"
>BUG HUNT</label
>
<div class="mt-2">
<select
name="hunt"
required data-intro="Categorize the bug." data-step="3"
class="flex w-full placeholder:text-xl rounded-md border-0 py-4 px-3 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset"
>
{% if not report_on_hunt %}
<option value="None">REPORT INDEPENDENTLY</option>
{% endif %}
{% for hunt in hunts %}
<option value="{{ hunt.id }}">{{ hunt.name }}</option>
{% endfor %}
</select>
</div>
</div>
</div>

<div class="space-y-12 mt-10">

<div class="w-full max-h-max flex justify-between flex-wrap border-b border-gray-900/10 pb-[50px]">
Expand Down
22 changes: 12 additions & 10 deletions website/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,10 @@ def test_login(self):
WebDriverWait(self.selenium, 30).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
body = self.selenium.find_element('tag name', 'body')
self.assertIn('bugbug (0 Pts)', body.text)

@override_settings(DEBUG=True)
def test_post_bug_full_url(self):

self.selenium.set_page_load_timeout(70)
self.selenium.get('%s%s' % (self.live_server_url, '/accounts/login/'))
self.selenium.find_element("name", "login").send_keys('bugbug')
Expand All @@ -67,9 +68,9 @@ def test_post_bug_full_url(self):
EC.presence_of_element_located((By.TAG_NAME, "body"))
)
self.selenium.get('%s%s' % (self.live_server_url, '/report/'))
self.selenium.find_element("name", "url").send_keys('https://www.bugheist.com/report/')
self.selenium.find_element("name","markdown_description").send_keys("Test markdown description")
self.selenium.find_element("id", "description").send_keys('Description of bug')
self.selenium.find_element("name", "url").send_keys("https://www.bugheist.com/report/")
self.selenium.find_element("id", "description").send_keys('XSS Attack on Google') # title of bug
self.selenium.find_element("id", "markdownInput").send_keys('Description of bug')
Imagepath = os.path.abspath(os.path.join(os.getcwd(), 'website/static/img/background.jpg'))
self.selenium.find_element("name", "screenshots").send_keys(Imagepath)
# pass captacha if in test mode
Expand All @@ -78,10 +79,11 @@ def test_post_bug_full_url(self):
self.selenium.get('%s%s' % (self.live_server_url, '/all_activity/'))
WebDriverWait(self.selenium, 30).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
body = self.selenium.find_element('tag name', 'body')
self.assertIn('Description of bug', body.text)
self.assertIn('XSS Attack on Google', body.text)


@override_settings(DEBUG=True)
def test_post_bug(self):
def test_post_bug_domain_url(self):
self.selenium.set_page_load_timeout(70)
self.selenium.get('%s%s' % (self.live_server_url, '/accounts/login/'))
self.selenium.find_element("name", "login").send_keys('bugbug')
Expand All @@ -91,9 +93,9 @@ def test_post_bug(self):
EC.presence_of_element_located((By.TAG_NAME, "body"))
)
self.selenium.get('%s%s' % (self.live_server_url, '/report/'))
self.selenium.find_element("name", "url").send_keys('https://google.com')
self.selenium.find_element("name","markdown_description").send_keys("Test markdown description")
self.selenium.find_element("id", "description").send_keys('Description of bug')
self.selenium.find_element("name", "url").send_keys("https://google.com")
self.selenium.find_element("id", "description").send_keys('XSS Attack on Google') # title of bug
self.selenium.find_element("id", "markdownInput").send_keys('Description of bug')
Imagepath = os.path.abspath(os.path.join(os.getcwd(), 'website/static/img/background.jpg'))
self.selenium.find_element("name", "screenshots").send_keys(Imagepath)
# pass captacha if in test mode
Expand All @@ -102,7 +104,7 @@ def test_post_bug(self):
self.selenium.get('%s%s' % (self.live_server_url, '/all_activity/'))
WebDriverWait(self.selenium, 30).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
body = self.selenium.find_element('tag name', 'body')
self.assertIn('Description of bug', body.text)
self.assertIn('XSS Attack on Google', body.text)

class HideImage(TestCase):
def setUp(self):
Expand Down
34 changes: 31 additions & 3 deletions website/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,21 @@ def index(request, template="index.html"):
top_companies = Issue.objects.values("domain__name").annotate(count=Count('domain__name')).order_by("-count")[:10]
top_testers = Issue.objects.values("user__id","user__username").filter(user__isnull=False).annotate(count=Count('user__username')).order_by("-count")[:10]
activities = Issue.objects.exclude(Q(is_hidden=True) & ~Q(user_id=request.user.id))[0:10]

top_hunts = Hunt.objects.values('id','name','url','prize','logo').filter(is_published=True).order_by("-prize")[:3]

top_hunts = Hunt.objects.values(
'id',
'name',
'url',
'logo',
'starts_on',
'starts_on__day',
'starts_on__month',
'starts_on__year',
'end_on',
'end_on__day',
'end_on__month',
'end_on__year',
).annotate(total_prize=Sum("huntprize__value")).filter(is_published=True,result_published=False).order_by("-created")[:3]

context = {
"server_url": request.build_absolute_uri('/'),
Expand Down Expand Up @@ -576,6 +589,10 @@ def create_issue(self,form):
)
domain.save()

hunt = self.request.POST.get("hunt",None)
if hunt != None and hunt!="None":
hunt = Hunt.objects.filter(id=hunt).first()
obj.hunt = hunt

obj.domain = domain
obj.is_hidden = bool(self.request.POST.get("private",False))
Expand Down Expand Up @@ -712,7 +729,6 @@ def get_context_data(self, **kwargs):
context["captcha_form"] = CaptchaForm()
if self.request.user.is_authenticated:
context["wallet"] = Wallet.objects.get(user=self.request.user)
context["hunts"] = Hunt.objects.exclude(plan="Free")[:4]
context["leaderboard"] = (
User.objects.filter(
points__created__month=datetime.now().month,
Expand All @@ -721,6 +737,18 @@ def get_context_data(self, **kwargs):
.annotate(total_score=Sum("points__score"))
.order_by("-total_score")[:10],
)

# automatically add specified hunt to dropdown of Bugreport
report_on_hunt = self.request.GET.get("hunt",None)
if report_on_hunt:
context["hunts"] = Hunt.objects.values("id","name").filter(id=report_on_hunt)
context["report_on_hunt"] = True
else:
context["hunts"] = Hunt.objects.values("id","name").all()
context["report_on_hunt"] = False



return context


Expand Down

0 comments on commit 155cc07

Please sign in to comment.