Add rebuilderd status to the package details page

The reproducible status is now shown for logged in users, as the
reproducible effort is still much experimental and so to not confuse not
logged in users.
This commit is contained in:
Jelle van der Waa 2021-05-26 22:38:47 +02:00 committed by jelle van der Waa
parent 30ac888c62
commit 3f807c8e18
6 changed files with 64 additions and 5 deletions

View File

@ -0,0 +1,9 @@
[
{
"model": "packages.flagdenylist",
"pk": 1,
"fields": {
"keyword": "bit.ly"
}
}
]

View File

@ -1,7 +1,7 @@
from django.contrib import admin
from .models import (PackageRelation, FlagRequest, Signoff, SignoffSpecification,
Update)
from .models import (PackageRelation, FlagDenylist, FlagRequest, Signoff,
SignoffSpecification, Update)
class PackageRelationAdmin(admin.ModelAdmin):
@ -12,6 +12,13 @@ class PackageRelationAdmin(admin.ModelAdmin):
date_hierarchy = 'created'
class FlagDenylistAdmin(admin.ModelAdmin):
list_display = ('keyword',)
list_filter = ('keyword',)
search_fields = ('keyword',)
ordering = ('keyword',)
class FlagRequestAdmin(admin.ModelAdmin):
list_display = ('pkgbase', 'full_version', 'repo', 'created', 'who',
'is_spam', 'is_legitimate', 'message')
@ -54,6 +61,7 @@ class UpdateAdmin(admin.ModelAdmin):
admin.site.register(PackageRelation, PackageRelationAdmin)
admin.site.register(FlagDenylist, FlagDenylistAdmin)
admin.site.register(FlagRequest, FlagRequestAdmin)
admin.site.register(Signoff, SignoffAdmin)
admin.site.register(SignoffSpecification, SignoffSpecificationAdmin)

View File

@ -0,0 +1,20 @@
# Generated by Django 3.2.3 on 2021-06-17 14:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('packages', '0001_squashed_0003_auto_20170524_0704'),
]
operations = [
migrations.CreateModel(
name='FlagDenylist',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('keyword', models.CharField(max_length=255)),
],
),
]

View File

@ -224,6 +224,10 @@ def __str__(self):
return '%s from %s on %s' % (self.pkgbase, self.who(), self.created)
class FlagDenylist(models.Model):
keyword = models.CharField(max_length=255)
class UpdateManager(models.Manager):
def log_update(self, old_pkg, new_pkg):
'''Utility method to help log an update. This will determine the type

View File

@ -271,7 +271,7 @@ def test_groups_details(self):
class FlagPackage(TestCase):
fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json',
'main/fixtures/package.json']
'main/fixtures/package.json', 'main/fixtures/denylist.json']
def test_flag_package(self):
data = {
@ -307,6 +307,19 @@ def test_flag_package_invalid(self):
self.assertIn('Enter a valid and useful out-of-date message', response.content.decode())
self.assertEqual(len(mail.outbox), 0)
def test_flag_package_invalid_denylist(self):
data = {
'website': '',
'email': 'nobody@archlinux.org',
'message': 'check out https://bit.ly/4z3rty',
}
response = self.client.post('/packages/core/x86_64/linux/flag/',
data,
follow=True)
self.assertEqual(response.status_code, 200)
self.assertIn('Enter a valid and useful out-of-date message', response.content.decode())
self.assertEqual(len(mail.outbox), 0)
def test_flag_help(self):
response = self.client.get('/packages/flaghelp/')
self.assertEqual(response.status_code, 200)

View File

@ -10,7 +10,7 @@
from django.utils.timezone import now
from django.views.decorators.cache import cache_page, never_cache
from ..models import FlagRequest
from ..models import FlagDenylist, FlagRequest
from main.models import Package
@ -35,8 +35,13 @@ def __init__(self, *args, **kwargs):
def clean_message(self):
data = self.cleaned_data['message']
# make sure the message isn't garbage (only punctuation or whitespace)
# or spam (using a simple denylist)
# and ensure a certain minimum length
if re.match(r'^[^0-9A-Za-z]+$', data) or len(data) < 3:
if (
re.match(r'^[^0-9A-Za-z]+$', data)
or any(fd.keyword in data for fd in FlagDenylist.objects.all())
or len(data) < 3
):
raise forms.ValidationError("Enter a valid and useful out-of-date message.")
return data