diff --git a/docker-compose.yml b/docker-compose.yml
index 7a39a3f..e168162 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,52 +1,56 @@
version: '3'
+volumes:
+ postgres-data:
+ static-files:
+ node-modules:
services:
db:
- # See https://hub.docker.com/_/postgres
image: postgres
- container_name: postgres
environment:
- - POSTGRES_DB=$POSTGRES_NAME
- - POSTGRES_USER=$POSTGRES_USER
- - POSTGRES_PASSWORD=$POSTGRES_PASSWORD
+ POSTGRES_DB: "newsreader"
+ POSTGRES_USER: "newsreader"
+ POSTGRES_PASSWORD: "newsreader"
+ volumes:
+ - postgres-data:/var/lib/postgresql/data
rabbitmq:
image: rabbitmq:3.7
- container_name: rabbitmq
- celery:
- build: .
- container_name: celery
- command: poetry run celery -A newsreader worker -l INFO --beat --scheduler django --workdir=/app/src/
- environment:
- - POSTGRES_HOST=$POSTGRES_HOST
- - POSTGRES_NAME=$POSTGRES_NAME
- - POSTGRES_USER=$POSTGRES_USER
- - POSTGRES_PASSWORD=$POSTGRES_PASSWORD
- - DJANGO_SETTINGS_MODULE=newsreader.conf.docker
- volumes:
- - .:/app
- depends_on:
- - rabbitmq
memcached:
image: memcached:1.5.22
- container_name: memcached
ports:
- "11211:11211"
entrypoint:
- memcached
- -m 64
- web:
- build: .
- container_name: web
+ celery:
+ build:
+ context: .
+ dockerfile: ./docker/django
+ command: celery worker --app newsreader --loglevel INFO --beat --scheduler django --workdir /app/src/
+ environment:
+ - DJANGO_SETTINGS_MODULE=newsreader.conf.docker
+ depends_on:
+ - rabbitmq
+ django:
+ build:
+ context: .
+ dockerfile: ./docker/django
command: src/entrypoint.sh
environment:
- - POSTGRES_HOST=$POSTGRES_HOST
- - POSTGRES_NAME=$POSTGRES_NAME
- - POSTGRES_USER=$POSTGRES_USER
- - POSTGRES_PASSWORD=$POSTGRES_PASSWORD
- DJANGO_SETTINGS_MODULE=newsreader.conf.docker
- volumes:
- - .:/app
ports:
- '8000:8000'
depends_on:
- db
+ volumes:
+ - .:/app
+ - static-files:/app/src/newsreader/static
+ webpack:
+ build:
+ context: .
+ dockerfile: ./docker/webpack
+ command: npm run build:watch
+ volumes:
+ - .:/app
+ - static-files:/app/src/newsreader/static
+ - node-modules:/app/node_modules
diff --git a/Dockerfile b/docker/django
similarity index 59%
rename from Dockerfile
rename to docker/django
index 61ef10b..871828a 100644
--- a/Dockerfile
+++ b/docker/django
@@ -5,7 +5,6 @@ RUN pip install poetry
WORKDIR /app
COPY poetry.lock pyproject.toml /app/
-RUN poetry config virtualenvs.create false
-RUN poetry install --no-interaction
+RUN poetry config virtualenvs.create false && poetry install --no-interaction
COPY . /app/
diff --git a/docker/webpack b/docker/webpack
new file mode 100644
index 0000000..6909ee9
--- /dev/null
+++ b/docker/webpack
@@ -0,0 +1,9 @@
+FROM node:12
+
+WORKDIR /app
+
+COPY package.json package-lock.json /app/
+
+RUN npm install
+
+COPY . /app/
diff --git a/src/entrypoint.sh b/src/entrypoint.sh
index 451b7d3..3fbf941 100755
--- a/src/entrypoint.sh
+++ b/src/entrypoint.sh
@@ -1,5 +1,5 @@
#!/bin/bash
# This file should only be used in conjuction with docker-compose
-poetry run /app/src/manage.py migrate
-poetry run /app/src/manage.py runserver 0.0.0.0:8000
+python /app/src/manage.py migrate
+python /app/src/manage.py runserver 0.0.0.0:8000
diff --git a/src/newsreader/accounts/admin.py b/src/newsreader/accounts/admin.py
index 846f6b4..c223687 100644
--- a/src/newsreader/accounts/admin.py
+++ b/src/newsreader/accounts/admin.py
@@ -1 +1,30 @@
-# Register your models here.
+from django.contrib import admin
+from django.utils.translation import ugettext as _
+
+from newsreader.accounts.models import User
+
+
+class UserAdmin(admin.ModelAdmin):
+ list_display = ("email", "last_name", "date_joined", "is_active")
+ list_filter = ("is_active", "is_staff", "is_superuser")
+ ordering = ("email",)
+
+ search_fields = ["email", "last_name", "first_name"]
+ readonly_fields = ("last_login", "date_joined")
+ fieldsets = (
+ (
+ _("User settings"),
+ {"fields": ("email", "first_name", "last_name", "is_active")},
+ ),
+ (
+ _("Permission settings"),
+ {
+ "classes": ("collapse",),
+ "fields": ("is_staff", "is_superuser", "groups", "user_permissions"),
+ },
+ ),
+ (_("Misc settings"), {"fields": ("date_joined", "last_login")}),
+ )
+
+
+admin.site.register(User, UserAdmin)
diff --git a/src/newsreader/accounts/forms.py b/src/newsreader/accounts/forms.py
new file mode 100644
index 0000000..7a29f99
--- /dev/null
+++ b/src/newsreader/accounts/forms.py
@@ -0,0 +1,9 @@
+from django import forms
+
+from newsreader.accounts.models import User
+
+
+class UserSettingsForm(forms.ModelForm):
+ class Meta:
+ model = User
+ fields = ("first_name", "last_name")
diff --git a/src/newsreader/accounts/templates/accounts/components/login-form.html b/src/newsreader/accounts/templates/accounts/components/login-form.html
new file mode 100644
index 0000000..87dceb9
--- /dev/null
+++ b/src/newsreader/accounts/templates/accounts/components/login-form.html
@@ -0,0 +1,17 @@
+{% extends "components/form/form.html" %}
+{% load i18n %}
+
+{% block actions %}
+
+{% endblock actions %}
diff --git a/src/newsreader/accounts/templates/accounts/components/settings-form.html b/src/newsreader/accounts/templates/accounts/components/settings-form.html
new file mode 100644
index 0000000..ff06cb7
--- /dev/null
+++ b/src/newsreader/accounts/templates/accounts/components/settings-form.html
@@ -0,0 +1,18 @@
+{% extends "components/form/form.html" %}
+{% load i18n %}
+
+{% block actions %}
+
+{% endblock actions %}
diff --git a/src/newsreader/accounts/templates/accounts/login.html b/src/newsreader/accounts/templates/accounts/login.html
deleted file mode 100644
index ab308b2..0000000
--- a/src/newsreader/accounts/templates/accounts/login.html
+++ /dev/null
@@ -1,24 +0,0 @@
-{% extends "base.html" %}
-
-{% load static %}
-
-{% block content %}
-
-
-
-{% endblock %}
diff --git a/src/newsreader/accounts/templates/accounts/views/login.html b/src/newsreader/accounts/templates/accounts/views/login.html
new file mode 100644
index 0000000..b4c391d
--- /dev/null
+++ b/src/newsreader/accounts/templates/accounts/views/login.html
@@ -0,0 +1,7 @@
+{% extends "base.html" %}
+
+{% block content %}
+
+ {% include "accounts/components/login-form.html" with form=form title="Login" confirm_text="Login" %}
+
+{% endblock %}
diff --git a/src/newsreader/accounts/templates/accounts/views/password-change.html b/src/newsreader/accounts/templates/accounts/views/password-change.html
new file mode 100644
index 0000000..fb8a98b
--- /dev/null
+++ b/src/newsreader/accounts/templates/accounts/views/password-change.html
@@ -0,0 +1,8 @@
+{% extends "base.html" %}
+
+{% block content %}
+
+ {% url 'accounts:settings' as cancel_url %}
+ {% include "components/form/form.html" with form=form title="Change password" confirm_text="Change password" cancel_url=cancel_url %}
+
+{% endblock %}
diff --git a/src/newsreader/accounts/templates/accounts/views/settings.html b/src/newsreader/accounts/templates/accounts/views/settings.html
new file mode 100644
index 0000000..bf01f8e
--- /dev/null
+++ b/src/newsreader/accounts/templates/accounts/views/settings.html
@@ -0,0 +1,7 @@
+{% extends "base.html" %}
+
+{% block content %}
+
+ {% include "accounts/components/settings-form.html" with form=form title="User profile" confirm_text="Save" %}
+
+{% endblock %}
diff --git a/src/newsreader/accounts/tests/test_views.py b/src/newsreader/accounts/tests/test_views.py
new file mode 100644
index 0000000..d3ac77c
--- /dev/null
+++ b/src/newsreader/accounts/tests/test_views.py
@@ -0,0 +1,29 @@
+from django.test import TestCase
+from django.urls import reverse
+
+from newsreader.accounts.models import User
+from newsreader.accounts.tests.factories import UserFactory
+
+
+class UserSettingsViewTestCase(TestCase):
+ def setUp(self):
+ self.user = UserFactory(password="test")
+ self.client.force_login(self.user)
+
+ def test_simple(self):
+ response = self.client.get(reverse("accounts:settings"))
+
+ self.assertEquals(response.status_code, 200)
+
+ def test_user_credential_change(self):
+ response = self.client.post(
+ reverse("accounts:settings"),
+ {"first_name": "First name", "last_name": "Last name"},
+ )
+
+ user = User.objects.get()
+
+ self.assertRedirects(response, reverse("accounts:settings"))
+
+ self.assertEquals(user.first_name, "First name")
+ self.assertEquals(user.last_name, "Last name")
diff --git a/src/newsreader/accounts/urls.py b/src/newsreader/accounts/urls.py
index 8605233..d42ae13 100644
--- a/src/newsreader/accounts/urls.py
+++ b/src/newsreader/accounts/urls.py
@@ -1,3 +1,4 @@
+from django.contrib.auth.decorators import login_required
from django.urls import path
from newsreader.accounts.views import (
@@ -6,6 +7,7 @@ from newsreader.accounts.views import (
ActivationView,
LoginView,
LogoutView,
+ PasswordChangeView,
PasswordResetCompleteView,
PasswordResetConfirmView,
PasswordResetDoneView,
@@ -13,6 +15,7 @@ from newsreader.accounts.views import (
RegistrationClosedView,
RegistrationCompleteView,
RegistrationView,
+ SettingsView,
)
@@ -52,5 +55,10 @@ urlpatterns = [
PasswordResetCompleteView.as_view(),
name="password-reset-complete",
),
- # TODO: create password change views
+ path(
+ "password-change/",
+ login_required(PasswordChangeView.as_view()),
+ name="password-change",
+ ),
+ path("settings/", login_required(SettingsView.as_view()), name="settings"),
]
diff --git a/src/newsreader/accounts/views.py b/src/newsreader/accounts/views.py
index 28ae92d..fed60eb 100644
--- a/src/newsreader/accounts/views.py
+++ b/src/newsreader/accounts/views.py
@@ -2,15 +2,17 @@ from django.contrib.auth import views as django_views
from django.shortcuts import render
from django.urls import reverse_lazy
from django.views.generic import TemplateView
+from django.views.generic.edit import FormView, ModelFormMixin
from registration.backends.default import views as registration_views
+from newsreader.accounts.forms import UserSettingsForm
+from newsreader.accounts.models import User
+
class LoginView(django_views.LoginView):
- template_name = "accounts/login.html"
-
- def get_success_url(self):
- return reverse_lazy("index")
+ template_name = "accounts/views/login.html"
+ success_url = reverse_lazy("index")
class LogoutView(django_views.LogoutView):
@@ -72,20 +74,42 @@ class ActivationResendView(registration_views.ResendActivationView):
# prompts for a new password
# PasswordResetCompleteView shows a success message for the above
class PasswordResetView(django_views.PasswordResetView):
- template_name = "password-reset/password_reset_form.html"
- subject_template_name = "password-reset/password_reset_subject.txt"
- email_template_name = "password-reset/password_reset_email.html"
+ template_name = "password-reset/password-reset.html"
+ subject_template_name = "password-reset/password-reset-subject.txt"
+ email_template_name = "password-reset/password-reset-email.html"
success_url = reverse_lazy("accounts:password-reset-done")
class PasswordResetDoneView(django_views.PasswordResetDoneView):
- template_name = "password-reset/password_reset_done.html"
+ template_name = "password-reset/password-reset-done.html"
class PasswordResetConfirmView(django_views.PasswordResetConfirmView):
- template_name = "password-reset/password_reset_confirm.html"
+ template_name = "password-reset/password-reset-confirm.html"
success_url = reverse_lazy("accounts:password-reset-complete")
class PasswordResetCompleteView(django_views.PasswordResetCompleteView):
- template_name = "password-reset/password_reset_complete.html"
+ template_name = "password-reset/password-reset-complete.html"
+
+
+class PasswordChangeView(django_views.PasswordChangeView):
+ template_name = "accounts/views/password-change.html"
+ success_url = reverse_lazy("accounts:settings")
+
+
+class SettingsView(ModelFormMixin, FormView):
+ template_name = "accounts/views/settings.html"
+ success_url = reverse_lazy("accounts:settings")
+ form_class = UserSettingsForm
+ model = User
+
+ def get(self, request, *args, **kwargs):
+ self.object = self.get_object()
+ return super().get(request, *args, **kwargs)
+
+ def get_object(self, **kwargs):
+ return self.request.user
+
+ def get_form_kwargs(self):
+ return {**super().get_form_kwargs(), "instance": self.request.user}
diff --git a/src/newsreader/conf/base.py b/src/newsreader/conf/base.py
index 3692deb..ee5a296 100644
--- a/src/newsreader/conf/base.py
+++ b/src/newsreader/conf/base.py
@@ -31,6 +31,7 @@ INSTALLED_APPS = [
"axes",
# app modules
"newsreader.accounts",
+ "newsreader.news",
"newsreader.news.core",
"newsreader.news.collection",
]
@@ -171,6 +172,8 @@ AUTH_PASSWORD_VALIDATORS = [
# Authentication user model
AUTH_USER_MODEL = "accounts.User"
+LOGIN_REDIRECT_URL = "/"
+
# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/
LANGUAGE_CODE = "en-us"
diff --git a/src/newsreader/conf/docker.py b/src/newsreader/conf/docker.py
index 3584b30..dd2471f 100644
--- a/src/newsreader/conf/docker.py
+++ b/src/newsreader/conf/docker.py
@@ -3,9 +3,15 @@ from .dev import * # isort:skip
SECRET_KEY = "=q(ztyo)b6noom#a164g&s9vcj1aawa^g#ing_ir99=_zl4g&$"
-# Celery
-# https://docs.celeryproject.org/en/latest/userguide/configuration.html
-BROKER_URL = "amqp://guest:guest@rabbitmq:5672//"
+DATABASES = {
+ "default": {
+ "ENGINE": "django.db.backends.postgresql",
+ "NAME": "newsreader",
+ "USER": "newsreader",
+ "PASSWORD": "newsreader",
+ "HOST": "db",
+ }
+}
CACHES = {
"default": {
@@ -17,3 +23,7 @@ CACHES = {
"LOCATION": "memcached:11211",
},
}
+
+# Celery
+# https://docs.celeryproject.org/en/latest/userguide/configuration.html
+CELERY_BROKER_URL = "amqp://guest:guest@rabbitmq:5672//"
diff --git a/src/newsreader/fixtures/default-fixture.json b/src/newsreader/fixtures/default-fixture.json
index 7b7ecdf..a6a9162 100644
--- a/src/newsreader/fixtures/default-fixture.json
+++ b/src/newsreader/fixtures/default-fixture.json
@@ -1,68 +1,143 @@
[
{
- "model": "django_celery_beat.periodictask",
- "pk": 10,
+ "model": "contenttypes.contenttype",
"fields": {
- "name": "sonny@bakker.nl-collection-task",
- "task": "newsreader.news.collection.tasks.FeedTask",
- "interval": 4,
- "crontab": null,
- "solar": null,
- "clocked": null,
- "args": "[2]",
- "kwargs": "{}",
- "queue": null,
- "exchange": null,
- "routing_key": null,
- "headers": "{}",
- "priority": null,
- "expires": null,
- "one_off": false,
- "start_time": null,
- "enabled": true,
- "last_run_at": "2019-11-29T22:29:08.345Z",
- "total_run_count": 290,
- "date_changed": "2019-11-29T22:29:18.378Z",
- "description": ""
+ "app_label": "admin",
+ "model": "logentry"
}
},
{
- "model": "django_celery_beat.periodictask",
- "pk": 26,
+ "model": "contenttypes.contenttype",
"fields": {
- "name": "sonnyba871@gmail.com-collection-task",
- "task": "newsreader.news.collection.tasks.FeedTask",
- "interval": 4,
- "crontab": null,
- "solar": null,
- "clocked": null,
- "args": "[18]",
- "kwargs": "{}",
- "queue": null,
- "exchange": null,
- "routing_key": null,
- "headers": "{}",
- "priority": null,
- "expires": null,
- "one_off": false,
- "start_time": null,
- "enabled": true,
- "last_run_at": "2019-11-29T22:35:19.134Z",
- "total_run_count": 103,
- "date_changed": "2019-11-29T22:38:19.464Z",
- "description": ""
+ "app_label": "auth",
+ "model": "permission"
}
},
{
- "model": "django_celery_beat.crontabschedule",
- "pk": 1,
+ "model": "contenttypes.contenttype",
"fields": {
- "minute": "0",
- "hour": "4",
- "day_of_week": "*",
- "day_of_month": "*",
- "month_of_year": "*",
- "timezone": "UTC"
+ "app_label": "auth",
+ "model": "group"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "contenttypes",
+ "model": "contenttype"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "sessions",
+ "model": "session"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "django_celery_beat",
+ "model": "crontabschedule"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "django_celery_beat",
+ "model": "intervalschedule"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "django_celery_beat",
+ "model": "periodictask"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "django_celery_beat",
+ "model": "periodictasks"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "django_celery_beat",
+ "model": "solarschedule"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "django_celery_beat",
+ "model": "clockedschedule"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "registration",
+ "model": "registrationprofile"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "registration",
+ "model": "supervisedregistrationprofile"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "axes",
+ "model": "accessattempt"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "axes",
+ "model": "accesslog"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "accounts",
+ "model": "user"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "core",
+ "model": "post"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "core",
+ "model": "category"
+ }
+},
+{
+ "model": "contenttypes.contenttype",
+ "fields": {
+ "app_label": "collection",
+ "model": "collectionrule"
+ }
+},
+{
+ "model": "sessions.session",
+ "pk": "3sumq22krk8tsvexcs4b8czu82yhvuer",
+ "fields": {
+ "session_data": "OWZkZTQyZDQ2NzNkYzdkOTBhM2ZlOWU3MDhhNDkyMWQ0MDdmZTc5ODp7Il9hdXRoX3VzZXJfaWQiOiIxIiwiX2F1dGhfdXNlcl9iYWNrZW5kIjoiZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5kcy5Nb2RlbEJhY2tlbmQiLCJfYXV0aF91c2VyX2hhc2giOiJhZTMwMWFlMzI5OGFlOThkNjY1MTY1NDIxM2EyMmM0NDA0Y2FkZTc3In0=",
+ "expire_date": "2020-05-16T18:29:04.049Z"
}
},
{
@@ -97,11 +172,950 @@
"period": "hours"
}
},
+{
+ "model": "django_celery_beat.crontabschedule",
+ "pk": 1,
+ "fields": {
+ "minute": "0",
+ "hour": "4",
+ "day_of_week": "*",
+ "day_of_month": "*",
+ "month_of_year": "*",
+ "timezone": "UTC"
+ }
+},
+{
+ "model": "django_celery_beat.periodictasks",
+ "pk": 1,
+ "fields": {
+ "last_update": "2020-05-02T20:40:29.029Z"
+ }
+},
+{
+ "model": "django_celery_beat.periodictask",
+ "pk": 1,
+ "fields": {
+ "name": "celery.backend_cleanup",
+ "task": "celery.backend_cleanup",
+ "interval": null,
+ "crontab": 1,
+ "solar": null,
+ "clocked": null,
+ "args": "[]",
+ "kwargs": "{}",
+ "queue": null,
+ "exchange": null,
+ "routing_key": null,
+ "headers": "{}",
+ "priority": null,
+ "expires": null,
+ "expire_seconds": 43200,
+ "one_off": false,
+ "start_time": null,
+ "enabled": true,
+ "last_run_at": null,
+ "total_run_count": 0,
+ "date_changed": "2020-05-02T20:06:23.985Z",
+ "description": ""
+ }
+},
+{
+ "model": "django_celery_beat.periodictask",
+ "pk": 10,
+ "fields": {
+ "name": "sonny@bakker.nl-collection-task",
+ "task": "newsreader.news.collection.tasks.FeedTask",
+ "interval": 4,
+ "crontab": null,
+ "solar": null,
+ "clocked": null,
+ "args": "[2]",
+ "kwargs": "{}",
+ "queue": null,
+ "exchange": null,
+ "routing_key": null,
+ "headers": "{}",
+ "priority": null,
+ "expires": null,
+ "expire_seconds": null,
+ "one_off": false,
+ "start_time": null,
+ "enabled": true,
+ "last_run_at": "2020-05-02T20:06:24.012Z",
+ "total_run_count": 292,
+ "date_changed": "2020-05-02T20:06:24.027Z",
+ "description": ""
+ }
+},
+{
+ "model": "django_celery_beat.periodictask",
+ "pk": 26,
+ "fields": {
+ "name": "sonnyba871@gmail.com-collection-task",
+ "task": "newsreader.news.collection.tasks.FeedTask",
+ "interval": 4,
+ "crontab": null,
+ "solar": null,
+ "clocked": null,
+ "args": "[18]",
+ "kwargs": "{}",
+ "queue": null,
+ "exchange": null,
+ "routing_key": null,
+ "headers": "{}",
+ "priority": null,
+ "expires": null,
+ "expire_seconds": null,
+ "one_off": false,
+ "start_time": null,
+ "enabled": true,
+ "last_run_at": "2020-05-02T20:06:24.045Z",
+ "total_run_count": 105,
+ "date_changed": "2020-05-02T20:09:24.331Z",
+ "description": ""
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add log entry",
+ "content_type": [
+ "admin",
+ "logentry"
+ ],
+ "codename": "add_logentry"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change log entry",
+ "content_type": [
+ "admin",
+ "logentry"
+ ],
+ "codename": "change_logentry"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete log entry",
+ "content_type": [
+ "admin",
+ "logentry"
+ ],
+ "codename": "delete_logentry"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view log entry",
+ "content_type": [
+ "admin",
+ "logentry"
+ ],
+ "codename": "view_logentry"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add permission",
+ "content_type": [
+ "auth",
+ "permission"
+ ],
+ "codename": "add_permission"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change permission",
+ "content_type": [
+ "auth",
+ "permission"
+ ],
+ "codename": "change_permission"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete permission",
+ "content_type": [
+ "auth",
+ "permission"
+ ],
+ "codename": "delete_permission"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view permission",
+ "content_type": [
+ "auth",
+ "permission"
+ ],
+ "codename": "view_permission"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add group",
+ "content_type": [
+ "auth",
+ "group"
+ ],
+ "codename": "add_group"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change group",
+ "content_type": [
+ "auth",
+ "group"
+ ],
+ "codename": "change_group"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete group",
+ "content_type": [
+ "auth",
+ "group"
+ ],
+ "codename": "delete_group"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view group",
+ "content_type": [
+ "auth",
+ "group"
+ ],
+ "codename": "view_group"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add content type",
+ "content_type": [
+ "contenttypes",
+ "contenttype"
+ ],
+ "codename": "add_contenttype"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change content type",
+ "content_type": [
+ "contenttypes",
+ "contenttype"
+ ],
+ "codename": "change_contenttype"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete content type",
+ "content_type": [
+ "contenttypes",
+ "contenttype"
+ ],
+ "codename": "delete_contenttype"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view content type",
+ "content_type": [
+ "contenttypes",
+ "contenttype"
+ ],
+ "codename": "view_contenttype"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add session",
+ "content_type": [
+ "sessions",
+ "session"
+ ],
+ "codename": "add_session"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change session",
+ "content_type": [
+ "sessions",
+ "session"
+ ],
+ "codename": "change_session"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete session",
+ "content_type": [
+ "sessions",
+ "session"
+ ],
+ "codename": "delete_session"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view session",
+ "content_type": [
+ "sessions",
+ "session"
+ ],
+ "codename": "view_session"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add crontab",
+ "content_type": [
+ "django_celery_beat",
+ "crontabschedule"
+ ],
+ "codename": "add_crontabschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change crontab",
+ "content_type": [
+ "django_celery_beat",
+ "crontabschedule"
+ ],
+ "codename": "change_crontabschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete crontab",
+ "content_type": [
+ "django_celery_beat",
+ "crontabschedule"
+ ],
+ "codename": "delete_crontabschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view crontab",
+ "content_type": [
+ "django_celery_beat",
+ "crontabschedule"
+ ],
+ "codename": "view_crontabschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add interval",
+ "content_type": [
+ "django_celery_beat",
+ "intervalschedule"
+ ],
+ "codename": "add_intervalschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change interval",
+ "content_type": [
+ "django_celery_beat",
+ "intervalschedule"
+ ],
+ "codename": "change_intervalschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete interval",
+ "content_type": [
+ "django_celery_beat",
+ "intervalschedule"
+ ],
+ "codename": "delete_intervalschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view interval",
+ "content_type": [
+ "django_celery_beat",
+ "intervalschedule"
+ ],
+ "codename": "view_intervalschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add periodic task",
+ "content_type": [
+ "django_celery_beat",
+ "periodictask"
+ ],
+ "codename": "add_periodictask"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change periodic task",
+ "content_type": [
+ "django_celery_beat",
+ "periodictask"
+ ],
+ "codename": "change_periodictask"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete periodic task",
+ "content_type": [
+ "django_celery_beat",
+ "periodictask"
+ ],
+ "codename": "delete_periodictask"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view periodic task",
+ "content_type": [
+ "django_celery_beat",
+ "periodictask"
+ ],
+ "codename": "view_periodictask"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add periodic tasks",
+ "content_type": [
+ "django_celery_beat",
+ "periodictasks"
+ ],
+ "codename": "add_periodictasks"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change periodic tasks",
+ "content_type": [
+ "django_celery_beat",
+ "periodictasks"
+ ],
+ "codename": "change_periodictasks"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete periodic tasks",
+ "content_type": [
+ "django_celery_beat",
+ "periodictasks"
+ ],
+ "codename": "delete_periodictasks"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view periodic tasks",
+ "content_type": [
+ "django_celery_beat",
+ "periodictasks"
+ ],
+ "codename": "view_periodictasks"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add solar event",
+ "content_type": [
+ "django_celery_beat",
+ "solarschedule"
+ ],
+ "codename": "add_solarschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change solar event",
+ "content_type": [
+ "django_celery_beat",
+ "solarschedule"
+ ],
+ "codename": "change_solarschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete solar event",
+ "content_type": [
+ "django_celery_beat",
+ "solarschedule"
+ ],
+ "codename": "delete_solarschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view solar event",
+ "content_type": [
+ "django_celery_beat",
+ "solarschedule"
+ ],
+ "codename": "view_solarschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add clocked",
+ "content_type": [
+ "django_celery_beat",
+ "clockedschedule"
+ ],
+ "codename": "add_clockedschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change clocked",
+ "content_type": [
+ "django_celery_beat",
+ "clockedschedule"
+ ],
+ "codename": "change_clockedschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete clocked",
+ "content_type": [
+ "django_celery_beat",
+ "clockedschedule"
+ ],
+ "codename": "delete_clockedschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view clocked",
+ "content_type": [
+ "django_celery_beat",
+ "clockedschedule"
+ ],
+ "codename": "view_clockedschedule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add registration profile",
+ "content_type": [
+ "registration",
+ "registrationprofile"
+ ],
+ "codename": "add_registrationprofile"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change registration profile",
+ "content_type": [
+ "registration",
+ "registrationprofile"
+ ],
+ "codename": "change_registrationprofile"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete registration profile",
+ "content_type": [
+ "registration",
+ "registrationprofile"
+ ],
+ "codename": "delete_registrationprofile"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view registration profile",
+ "content_type": [
+ "registration",
+ "registrationprofile"
+ ],
+ "codename": "view_registrationprofile"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add supervised registration profile",
+ "content_type": [
+ "registration",
+ "supervisedregistrationprofile"
+ ],
+ "codename": "add_supervisedregistrationprofile"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change supervised registration profile",
+ "content_type": [
+ "registration",
+ "supervisedregistrationprofile"
+ ],
+ "codename": "change_supervisedregistrationprofile"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete supervised registration profile",
+ "content_type": [
+ "registration",
+ "supervisedregistrationprofile"
+ ],
+ "codename": "delete_supervisedregistrationprofile"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view supervised registration profile",
+ "content_type": [
+ "registration",
+ "supervisedregistrationprofile"
+ ],
+ "codename": "view_supervisedregistrationprofile"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add access attempt",
+ "content_type": [
+ "axes",
+ "accessattempt"
+ ],
+ "codename": "add_accessattempt"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change access attempt",
+ "content_type": [
+ "axes",
+ "accessattempt"
+ ],
+ "codename": "change_accessattempt"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete access attempt",
+ "content_type": [
+ "axes",
+ "accessattempt"
+ ],
+ "codename": "delete_accessattempt"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view access attempt",
+ "content_type": [
+ "axes",
+ "accessattempt"
+ ],
+ "codename": "view_accessattempt"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add access log",
+ "content_type": [
+ "axes",
+ "accesslog"
+ ],
+ "codename": "add_accesslog"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change access log",
+ "content_type": [
+ "axes",
+ "accesslog"
+ ],
+ "codename": "change_accesslog"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete access log",
+ "content_type": [
+ "axes",
+ "accesslog"
+ ],
+ "codename": "delete_accesslog"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view access log",
+ "content_type": [
+ "axes",
+ "accesslog"
+ ],
+ "codename": "view_accesslog"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add user",
+ "content_type": [
+ "accounts",
+ "user"
+ ],
+ "codename": "add_user"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change user",
+ "content_type": [
+ "accounts",
+ "user"
+ ],
+ "codename": "change_user"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete user",
+ "content_type": [
+ "accounts",
+ "user"
+ ],
+ "codename": "delete_user"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view user",
+ "content_type": [
+ "accounts",
+ "user"
+ ],
+ "codename": "view_user"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add post",
+ "content_type": [
+ "core",
+ "post"
+ ],
+ "codename": "add_post"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change post",
+ "content_type": [
+ "core",
+ "post"
+ ],
+ "codename": "change_post"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete post",
+ "content_type": [
+ "core",
+ "post"
+ ],
+ "codename": "delete_post"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view post",
+ "content_type": [
+ "core",
+ "post"
+ ],
+ "codename": "view_post"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add Category",
+ "content_type": [
+ "core",
+ "category"
+ ],
+ "codename": "add_category"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change Category",
+ "content_type": [
+ "core",
+ "category"
+ ],
+ "codename": "change_category"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete Category",
+ "content_type": [
+ "core",
+ "category"
+ ],
+ "codename": "delete_category"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view Category",
+ "content_type": [
+ "core",
+ "category"
+ ],
+ "codename": "view_category"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can add collection rule",
+ "content_type": [
+ "collection",
+ "collectionrule"
+ ],
+ "codename": "add_collectionrule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can change collection rule",
+ "content_type": [
+ "collection",
+ "collectionrule"
+ ],
+ "codename": "change_collectionrule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can delete collection rule",
+ "content_type": [
+ "collection",
+ "collectionrule"
+ ],
+ "codename": "delete_collectionrule"
+ }
+},
+{
+ "model": "auth.permission",
+ "fields": {
+ "name": "Can view collection rule",
+ "content_type": [
+ "collection",
+ "collectionrule"
+ ],
+ "codename": "view_collectionrule"
+ }
+},
{
"model": "accounts.user",
"fields": {
- "password": "pbkdf2_sha256$150000$5lBD7JemxYfE$B+lM5wWUW2n/ZulPFaWHtzWjyQ/QZ6iwjAC2I0R/VzU=",
- "last_login": "2019-11-27T18:57:36.686Z",
+ "password": "pbkdf2_sha256$180000$KGKGsPnSwyiN$RqQAD46r4Kzqndqp5dmpj+H/drDrPRI0r6j4gLtYBjE=",
+ "last_login": "2020-05-02T18:29:04.047Z",
"is_superuser": true,
"first_name": "",
"last_name": "",
@@ -114,23 +1128,6 @@
"user_permissions": []
}
},
-{
- "model": "accounts.user",
- "fields": {
- "password": "pbkdf2_sha256$150000$vUwxT8T25R8C$S+Eq2tMRbSDE31/X5KGJ/M+Nblh7kKfzuM/z7HraR/Q=",
- "last_login": null,
- "is_superuser": false,
- "first_name": "",
- "last_name": "",
- "is_staff": false,
- "is_active": false,
- "date_joined": "2019-11-25T15:35:14.051Z",
- "email": "sonnyba871@gmail.com",
- "task": 26,
- "groups": [],
- "user_permissions": []
- }
-},
{
"model": "core.category",
"pk": 8,
@@ -160,14 +1157,14 @@
"pk": 3,
"fields": {
"created": "2019-07-14T13:08:10.374Z",
- "modified": "2019-11-29T22:35:20.346Z",
+ "modified": "2020-05-02T20:06:25.841Z",
"name": "Hackers News",
"url": "https://news.ycombinator.com/rss",
"website_url": "https://news.ycombinator.com/",
"favicon": "https://news.ycombinator.com/favicon.ico",
"timezone": "UTC",
"category": 9,
- "last_suceeded": "2019-11-29T22:35:20.235Z",
+ "last_suceeded": "2020-05-02T20:06:25.793Z",
"succeeded": true,
"error": null,
"user": [
@@ -180,14 +1177,14 @@
"pk": 4,
"fields": {
"created": "2019-07-20T11:24:32.745Z",
- "modified": "2019-11-29T22:35:19.525Z",
+ "modified": "2020-05-02T20:06:24.719Z",
"name": "BBC",
"url": "http://feeds.bbci.co.uk/news/world/rss.xml",
"website_url": "https://www.bbc.co.uk/news/",
"favicon": "https://m.files.bbci.co.uk/modules/bbc-morph-news-waf-page-meta/2.5.2/apple-touch-icon-57x57-precomposed.png",
"timezone": "UTC",
"category": 8,
- "last_suceeded": "2019-11-29T22:35:19.241Z",
+ "last_suceeded": "2020-05-02T20:06:24.128Z",
"succeeded": true,
"error": null,
"user": [
@@ -200,14 +1197,14 @@
"pk": 5,
"fields": {
"created": "2019-07-20T11:24:50.411Z",
- "modified": "2019-11-29T22:35:20.010Z",
+ "modified": "2020-05-02T20:06:25.548Z",
"name": "Ars Technica",
"url": "http://feeds.arstechnica.com/arstechnica/index?fmt=xml",
"website_url": "https://arstechnica.com",
"favicon": "https://cdn.arstechnica.net/favicon.ico",
"timezone": "UTC",
"category": 9,
- "last_suceeded": "2019-11-29T22:35:19.808Z",
+ "last_suceeded": "2020-05-02T20:06:25.364Z",
"succeeded": true,
"error": null,
"user": [
@@ -220,14 +1217,14 @@
"pk": 6,
"fields": {
"created": "2019-07-20T11:25:02.089Z",
- "modified": "2019-11-29T22:35:20.233Z",
+ "modified": "2020-05-02T20:06:25.741Z",
"name": "The Guardian",
"url": "https://www.theguardian.com/world/rss",
"website_url": "https://www.theguardian.com/world",
"favicon": "https://assets.guim.co.uk/images/favicons/873381bf11d58e20f551905d51575117/72x72.png",
"timezone": "UTC",
"category": 8,
- "last_suceeded": "2019-11-29T22:35:20.076Z",
+ "last_suceeded": "2020-05-02T20:06:25.620Z",
"succeeded": true,
"error": null,
"user": [
@@ -240,14 +1237,14 @@
"pk": 7,
"fields": {
"created": "2019-07-20T11:25:30.121Z",
- "modified": "2019-11-29T22:35:19.695Z",
+ "modified": "2020-05-02T20:06:25.352Z",
"name": "Tweakers",
"url": "http://feeds.feedburner.com/tweakers/mixed?fmt=xml",
"website_url": "https://tweakers.net/",
"favicon": null,
"timezone": "UTC",
"category": 9,
- "last_suceeded": "2019-11-29T22:35:19.528Z",
+ "last_suceeded": "2020-05-02T20:06:24.730Z",
"succeeded": true,
"error": null,
"user": [
@@ -260,14 +1257,14 @@
"pk": 8,
"fields": {
"created": "2019-07-20T11:25:46.256Z",
- "modified": "2019-11-29T22:35:20.074Z",
+ "modified": "2020-05-02T20:06:25.792Z",
"name": "The Verge",
"url": "https://www.theverge.com/rss/index.xml",
"website_url": "https://www.theverge.com/",
"favicon": "https://cdn.vox-cdn.com/uploads/chorus_asset/file/7395367/favicon-16x16.0.png",
"timezone": "UTC",
"category": 9,
- "last_suceeded": "2019-11-29T22:35:20.012Z",
+ "last_suceeded": "2020-05-02T20:06:25.742Z",
"succeeded": true,
"error": null,
"user": [
@@ -280,19 +1277,1419 @@
"pk": 9,
"fields": {
"created": "2019-11-24T15:28:41.399Z",
- "modified": "2019-11-29T22:35:19.807Z",
+ "modified": "2020-05-02T20:06:25.619Z",
"name": "NOS",
"url": "http://feeds.nos.nl/nosnieuwsalgemeen",
"website_url": null,
"favicon": null,
"timezone": "Europe/Amsterdam",
"category": 8,
- "last_suceeded": "2019-11-29T22:35:19.697Z",
+ "last_suceeded": "2020-05-02T20:06:25.549Z",
"succeeded": true,
"error": null,
"user": [
"sonny@bakker.nl"
]
}
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 10,
+ "fields": {
+ "created": "2020-05-02T20:32:34.107Z",
+ "modified": "2020-05-02T20:32:34.107Z",
+ "name": "CollectionRule-0",
+ "url": "http://rasmussen-guerra.com/",
+ "website_url": "https://ritter.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 11,
+ "fields": {
+ "created": "2020-05-02T20:32:34.164Z",
+ "modified": "2020-05-02T20:32:34.164Z",
+ "name": "CollectionRule-1",
+ "url": "https://www.evans.com/",
+ "website_url": "https://taylor.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 12,
+ "fields": {
+ "created": "2020-05-02T20:32:34.220Z",
+ "modified": "2020-05-02T20:32:34.220Z",
+ "name": "CollectionRule-2",
+ "url": "http://weaver-quinn.net/",
+ "website_url": "https://www.mcintyre.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 13,
+ "fields": {
+ "created": "2020-05-02T20:32:34.277Z",
+ "modified": "2020-05-02T20:32:34.277Z",
+ "name": "CollectionRule-3",
+ "url": "http://www.palmer.com/",
+ "website_url": "http://www.riggs.org/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 14,
+ "fields": {
+ "created": "2020-05-02T20:32:34.333Z",
+ "modified": "2020-05-02T20:32:34.333Z",
+ "name": "CollectionRule-4",
+ "url": "http://moody-stein.net/",
+ "website_url": "https://www.lewis.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 15,
+ "fields": {
+ "created": "2020-05-02T20:32:34.390Z",
+ "modified": "2020-05-02T20:32:34.391Z",
+ "name": "CollectionRule-5",
+ "url": "http://www.ochoa.com/",
+ "website_url": "https://brown.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 16,
+ "fields": {
+ "created": "2020-05-02T20:32:34.448Z",
+ "modified": "2020-05-02T20:32:34.448Z",
+ "name": "CollectionRule-6",
+ "url": "https://www.pearson.biz/",
+ "website_url": "http://acosta-johnson.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 17,
+ "fields": {
+ "created": "2020-05-02T20:32:34.506Z",
+ "modified": "2020-05-02T20:32:34.506Z",
+ "name": "CollectionRule-7",
+ "url": "https://jones.com/",
+ "website_url": "https://www.thornton.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 18,
+ "fields": {
+ "created": "2020-05-02T20:32:34.562Z",
+ "modified": "2020-05-02T20:32:34.562Z",
+ "name": "CollectionRule-8",
+ "url": "http://www.matthews-graves.com/",
+ "website_url": "http://stewart.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 19,
+ "fields": {
+ "created": "2020-05-02T20:32:34.618Z",
+ "modified": "2020-05-02T20:32:34.618Z",
+ "name": "CollectionRule-9",
+ "url": "http://www.kelly-martinez.com/",
+ "website_url": "https://www.freeman.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 20,
+ "fields": {
+ "created": "2020-05-02T20:32:34.674Z",
+ "modified": "2020-05-02T20:32:34.674Z",
+ "name": "CollectionRule-10",
+ "url": "https://www.roberts.biz/",
+ "website_url": "http://www.lopez.info/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 21,
+ "fields": {
+ "created": "2020-05-02T20:32:34.730Z",
+ "modified": "2020-05-02T20:32:34.730Z",
+ "name": "CollectionRule-11",
+ "url": "https://www.holmes-cross.com/",
+ "website_url": "https://www.ramirez.net/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 22,
+ "fields": {
+ "created": "2020-05-02T20:32:34.786Z",
+ "modified": "2020-05-02T20:32:34.786Z",
+ "name": "CollectionRule-12",
+ "url": "https://www.jenkins.com/",
+ "website_url": "https://www.faulkner.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 23,
+ "fields": {
+ "created": "2020-05-02T20:32:34.841Z",
+ "modified": "2020-05-02T20:32:34.842Z",
+ "name": "CollectionRule-13",
+ "url": "https://www.adkins.com/",
+ "website_url": "https://www.munoz-brown.info/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 24,
+ "fields": {
+ "created": "2020-05-02T20:32:34.897Z",
+ "modified": "2020-05-02T20:32:34.898Z",
+ "name": "CollectionRule-14",
+ "url": "https://www.rodriguez-ortega.biz/",
+ "website_url": "http://www.santos.info/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 25,
+ "fields": {
+ "created": "2020-05-02T20:32:34.953Z",
+ "modified": "2020-05-02T20:32:34.954Z",
+ "name": "CollectionRule-15",
+ "url": "https://www.hawkins-stewart.com/",
+ "website_url": "http://www.jones.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 26,
+ "fields": {
+ "created": "2020-05-02T20:32:35.010Z",
+ "modified": "2020-05-02T20:32:35.010Z",
+ "name": "CollectionRule-16",
+ "url": "http://mullins.net/",
+ "website_url": "https://www.curtis.org/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 27,
+ "fields": {
+ "created": "2020-05-02T20:32:35.067Z",
+ "modified": "2020-05-02T20:32:35.067Z",
+ "name": "CollectionRule-17",
+ "url": "http://frederick.com/",
+ "website_url": "https://www.fowler.info/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 28,
+ "fields": {
+ "created": "2020-05-02T20:32:35.124Z",
+ "modified": "2020-05-02T20:32:35.124Z",
+ "name": "CollectionRule-18",
+ "url": "http://schmidt.com/",
+ "website_url": "http://bryant-hoffman.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 29,
+ "fields": {
+ "created": "2020-05-02T20:32:35.180Z",
+ "modified": "2020-05-02T20:32:35.180Z",
+ "name": "CollectionRule-19",
+ "url": "https://www.jones.net/",
+ "website_url": "http://benjamin.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 30,
+ "fields": {
+ "created": "2020-05-02T20:32:35.237Z",
+ "modified": "2020-05-02T20:32:35.237Z",
+ "name": "CollectionRule-20",
+ "url": "https://www.parker-lewis.com/",
+ "website_url": "http://www.anderson.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 31,
+ "fields": {
+ "created": "2020-05-02T20:32:35.294Z",
+ "modified": "2020-05-02T20:32:35.294Z",
+ "name": "CollectionRule-21",
+ "url": "http://martinez.com/",
+ "website_url": "http://burton-scott.biz/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 32,
+ "fields": {
+ "created": "2020-05-02T20:32:35.350Z",
+ "modified": "2020-05-02T20:32:35.350Z",
+ "name": "CollectionRule-22",
+ "url": "https://gibbs.com/",
+ "website_url": "https://www.robertson.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 33,
+ "fields": {
+ "created": "2020-05-02T20:32:35.407Z",
+ "modified": "2020-05-02T20:32:35.407Z",
+ "name": "CollectionRule-23",
+ "url": "http://www.fisher.com/",
+ "website_url": "https://mcclure-miller.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 34,
+ "fields": {
+ "created": "2020-05-02T20:32:35.463Z",
+ "modified": "2020-05-02T20:32:35.463Z",
+ "name": "CollectionRule-24",
+ "url": "https://schneider-lopez.org/",
+ "website_url": "https://andrews-williams.biz/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 35,
+ "fields": {
+ "created": "2020-05-02T20:32:35.522Z",
+ "modified": "2020-05-02T20:32:35.522Z",
+ "name": "CollectionRule-25",
+ "url": "http://www.rogers.info/",
+ "website_url": "https://www.petersen-stewart.biz/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 36,
+ "fields": {
+ "created": "2020-05-02T20:32:35.581Z",
+ "modified": "2020-05-02T20:32:35.581Z",
+ "name": "CollectionRule-26",
+ "url": "http://torres.com/",
+ "website_url": "https://hart-tapia.org/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 37,
+ "fields": {
+ "created": "2020-05-02T20:32:35.637Z",
+ "modified": "2020-05-02T20:32:35.638Z",
+ "name": "CollectionRule-27",
+ "url": "http://www.pham-scott.com/",
+ "website_url": "http://smith-diaz.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 38,
+ "fields": {
+ "created": "2020-05-02T20:32:35.699Z",
+ "modified": "2020-05-02T20:32:35.699Z",
+ "name": "CollectionRule-28",
+ "url": "http://www.gonzalez-castillo.com/",
+ "website_url": "http://www.conley.biz/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 39,
+ "fields": {
+ "created": "2020-05-02T20:32:35.758Z",
+ "modified": "2020-05-02T20:32:35.758Z",
+ "name": "CollectionRule-29",
+ "url": "https://rogers-smith.net/",
+ "website_url": "http://www.sharp.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 40,
+ "fields": {
+ "created": "2020-05-02T20:32:35.814Z",
+ "modified": "2020-05-02T20:32:35.814Z",
+ "name": "CollectionRule-30",
+ "url": "https://neal-salinas.com/",
+ "website_url": "https://www.baird-warner.net/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 41,
+ "fields": {
+ "created": "2020-05-02T20:32:35.873Z",
+ "modified": "2020-05-02T20:32:35.874Z",
+ "name": "CollectionRule-31",
+ "url": "http://www.williams.com/",
+ "website_url": "http://www.wood.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 42,
+ "fields": {
+ "created": "2020-05-02T20:32:35.930Z",
+ "modified": "2020-05-02T20:32:35.930Z",
+ "name": "CollectionRule-32",
+ "url": "https://www.mueller.com/",
+ "website_url": "http://www.miller-ramirez.org/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 43,
+ "fields": {
+ "created": "2020-05-02T20:32:35.988Z",
+ "modified": "2020-05-02T20:32:35.989Z",
+ "name": "CollectionRule-33",
+ "url": "http://lee.com/",
+ "website_url": "http://www.moody.org/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 44,
+ "fields": {
+ "created": "2020-05-02T20:32:36.044Z",
+ "modified": "2020-05-02T20:32:36.045Z",
+ "name": "CollectionRule-34",
+ "url": "http://estrada.com/",
+ "website_url": "http://www.hicks.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 45,
+ "fields": {
+ "created": "2020-05-02T20:32:36.102Z",
+ "modified": "2020-05-02T20:32:36.102Z",
+ "name": "CollectionRule-35",
+ "url": "https://griffin-brewer.org/",
+ "website_url": "http://jones.info/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 46,
+ "fields": {
+ "created": "2020-05-02T20:32:36.161Z",
+ "modified": "2020-05-02T20:32:36.161Z",
+ "name": "CollectionRule-36",
+ "url": "http://www.dixon-johnson.com/",
+ "website_url": "https://mason.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 47,
+ "fields": {
+ "created": "2020-05-02T20:32:36.217Z",
+ "modified": "2020-05-02T20:32:36.217Z",
+ "name": "CollectionRule-37",
+ "url": "https://perez.com/",
+ "website_url": "http://www.miller.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 48,
+ "fields": {
+ "created": "2020-05-02T20:32:36.278Z",
+ "modified": "2020-05-02T20:32:36.279Z",
+ "name": "CollectionRule-38",
+ "url": "https://www.grant.net/",
+ "website_url": "https://www.clayton.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 49,
+ "fields": {
+ "created": "2020-05-02T20:32:36.336Z",
+ "modified": "2020-05-02T20:32:36.336Z",
+ "name": "CollectionRule-39",
+ "url": "http://www.lewis.org/",
+ "website_url": "http://cook.org/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 50,
+ "fields": {
+ "created": "2020-05-02T20:32:36.395Z",
+ "modified": "2020-05-02T20:32:36.395Z",
+ "name": "CollectionRule-40",
+ "url": "https://galloway-allen.net/",
+ "website_url": "http://www.rodriguez-callahan.info/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 51,
+ "fields": {
+ "created": "2020-05-02T20:32:36.453Z",
+ "modified": "2020-05-02T20:32:36.453Z",
+ "name": "CollectionRule-41",
+ "url": "https://www.macias.com/",
+ "website_url": "https://jarvis-green.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 52,
+ "fields": {
+ "created": "2020-05-02T20:32:36.510Z",
+ "modified": "2020-05-02T20:32:36.510Z",
+ "name": "CollectionRule-42",
+ "url": "http://mccullough-grant.com/",
+ "website_url": "https://shannon.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 53,
+ "fields": {
+ "created": "2020-05-02T20:32:36.566Z",
+ "modified": "2020-05-02T20:32:36.566Z",
+ "name": "CollectionRule-43",
+ "url": "http://www.foster-oneal.org/",
+ "website_url": "http://johns.org/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 54,
+ "fields": {
+ "created": "2020-05-02T20:32:36.623Z",
+ "modified": "2020-05-02T20:32:36.623Z",
+ "name": "CollectionRule-44",
+ "url": "http://www.wright.net/",
+ "website_url": "http://www.ali.biz/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 55,
+ "fields": {
+ "created": "2020-05-02T20:32:36.682Z",
+ "modified": "2020-05-02T20:32:36.682Z",
+ "name": "CollectionRule-45",
+ "url": "http://www.payne-gibbs.info/",
+ "website_url": "http://knight.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 56,
+ "fields": {
+ "created": "2020-05-02T20:32:36.740Z",
+ "modified": "2020-05-02T20:32:36.740Z",
+ "name": "CollectionRule-46",
+ "url": "http://hammond.biz/",
+ "website_url": "http://www.nelson.net/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 57,
+ "fields": {
+ "created": "2020-05-02T20:32:36.797Z",
+ "modified": "2020-05-02T20:32:36.797Z",
+ "name": "CollectionRule-47",
+ "url": "http://gilmore.com/",
+ "website_url": "http://coleman.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 58,
+ "fields": {
+ "created": "2020-05-02T20:32:36.855Z",
+ "modified": "2020-05-02T20:32:36.855Z",
+ "name": "CollectionRule-48",
+ "url": "https://www.hernandez.com/",
+ "website_url": "https://www.phillips.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 59,
+ "fields": {
+ "created": "2020-05-02T20:32:36.912Z",
+ "modified": "2020-05-02T20:32:36.912Z",
+ "name": "CollectionRule-49",
+ "url": "https://www.nguyen.com/",
+ "website_url": "http://www.floyd.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 60,
+ "fields": {
+ "created": "2020-05-02T20:32:36.969Z",
+ "modified": "2020-05-02T20:32:36.969Z",
+ "name": "CollectionRule-50",
+ "url": "https://meyer-brown.net/",
+ "website_url": "https://www.blankenship.biz/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 61,
+ "fields": {
+ "created": "2020-05-02T20:32:37.026Z",
+ "modified": "2020-05-02T20:32:37.027Z",
+ "name": "CollectionRule-51",
+ "url": "https://marks.net/",
+ "website_url": "http://gregory.net/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 62,
+ "fields": {
+ "created": "2020-05-02T20:32:37.087Z",
+ "modified": "2020-05-02T20:32:37.087Z",
+ "name": "CollectionRule-52",
+ "url": "http://www.baxter.com/",
+ "website_url": "http://barrera.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 63,
+ "fields": {
+ "created": "2020-05-02T20:32:37.143Z",
+ "modified": "2020-05-02T20:32:37.143Z",
+ "name": "CollectionRule-53",
+ "url": "http://johnson.com/",
+ "website_url": "https://abbott.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 64,
+ "fields": {
+ "created": "2020-05-02T20:32:37.202Z",
+ "modified": "2020-05-02T20:32:37.202Z",
+ "name": "CollectionRule-54",
+ "url": "https://hebert-marshall.biz/",
+ "website_url": "https://www.ashley-walsh.org/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 65,
+ "fields": {
+ "created": "2020-05-02T20:32:37.261Z",
+ "modified": "2020-05-02T20:32:37.261Z",
+ "name": "CollectionRule-55",
+ "url": "https://miller.com/",
+ "website_url": "https://www.hoffman.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 66,
+ "fields": {
+ "created": "2020-05-02T20:32:37.320Z",
+ "modified": "2020-05-02T20:32:37.320Z",
+ "name": "CollectionRule-56",
+ "url": "http://frey.com/",
+ "website_url": "https://long.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 67,
+ "fields": {
+ "created": "2020-05-02T20:32:37.379Z",
+ "modified": "2020-05-02T20:32:37.379Z",
+ "name": "CollectionRule-57",
+ "url": "https://edwards.com/",
+ "website_url": "http://www.nixon-doyle.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 68,
+ "fields": {
+ "created": "2020-05-02T20:32:37.435Z",
+ "modified": "2020-05-02T20:32:37.435Z",
+ "name": "CollectionRule-58",
+ "url": "https://www.bennett.com/",
+ "website_url": "http://sullivan.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 69,
+ "fields": {
+ "created": "2020-05-02T20:32:37.493Z",
+ "modified": "2020-05-02T20:32:37.493Z",
+ "name": "CollectionRule-59",
+ "url": "http://stokes-thomas.com/",
+ "website_url": "http://morgan.net/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 70,
+ "fields": {
+ "created": "2020-05-02T20:32:37.550Z",
+ "modified": "2020-05-02T20:32:37.550Z",
+ "name": "CollectionRule-60",
+ "url": "https://moore.net/",
+ "website_url": "http://www.hubbard.biz/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 71,
+ "fields": {
+ "created": "2020-05-02T20:32:37.609Z",
+ "modified": "2020-05-02T20:32:37.609Z",
+ "name": "CollectionRule-61",
+ "url": "https://baker-edwards.com/",
+ "website_url": "https://www.anderson.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 72,
+ "fields": {
+ "created": "2020-05-02T20:32:37.666Z",
+ "modified": "2020-05-02T20:32:37.666Z",
+ "name": "CollectionRule-62",
+ "url": "https://www.jackson.com/",
+ "website_url": "https://www.edwards.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 73,
+ "fields": {
+ "created": "2020-05-02T20:32:37.724Z",
+ "modified": "2020-05-02T20:32:37.724Z",
+ "name": "CollectionRule-63",
+ "url": "https://kemp-pollard.biz/",
+ "website_url": "http://www.fuentes.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 74,
+ "fields": {
+ "created": "2020-05-02T20:32:37.782Z",
+ "modified": "2020-05-02T20:32:37.782Z",
+ "name": "CollectionRule-64",
+ "url": "https://hanna-cook.com/",
+ "website_url": "http://www.bowen.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 75,
+ "fields": {
+ "created": "2020-05-02T20:32:37.839Z",
+ "modified": "2020-05-02T20:32:37.839Z",
+ "name": "CollectionRule-65",
+ "url": "http://www.williams.net/",
+ "website_url": "http://www.chandler.org/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 76,
+ "fields": {
+ "created": "2020-05-02T20:32:37.896Z",
+ "modified": "2020-05-02T20:32:37.896Z",
+ "name": "CollectionRule-66",
+ "url": "https://www.alexander.com/",
+ "website_url": "https://johnson-ellis.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 77,
+ "fields": {
+ "created": "2020-05-02T20:32:37.951Z",
+ "modified": "2020-05-02T20:32:37.951Z",
+ "name": "CollectionRule-67",
+ "url": "https://www.cisneros.com/",
+ "website_url": "http://fox.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 78,
+ "fields": {
+ "created": "2020-05-02T20:32:38.008Z",
+ "modified": "2020-05-02T20:32:38.008Z",
+ "name": "CollectionRule-68",
+ "url": "http://www.foster-burton.com/",
+ "website_url": "https://grant.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
+},
+{
+ "model": "collection.collectionrule",
+ "pk": 79,
+ "fields": {
+ "created": "2020-05-02T20:32:38.066Z",
+ "modified": "2020-05-02T20:32:38.066Z",
+ "name": "CollectionRule-69",
+ "url": "https://www.hayes.net/",
+ "website_url": "http://morgan.com/",
+ "favicon": null,
+ "timezone": "UTC",
+ "category": null,
+ "last_suceeded": null,
+ "succeeded": false,
+ "error": null,
+ "user": [
+ "sonny@bakker.nl"
+ ]
+ }
}
]
diff --git a/src/newsreader/js/components/Selector.js b/src/newsreader/js/components/Selector.js
new file mode 100644
index 0000000..8b701f5
--- /dev/null
+++ b/src/newsreader/js/components/Selector.js
@@ -0,0 +1,23 @@
+class Selector {
+ onClick = ::this.onClick;
+
+ inputs = [];
+
+ constructor() {
+ const selectAllInput = document.querySelector('#select-all');
+
+ this.inputs = document.querySelectorAll(`[name=${selectAllInput.dataset.input}`);
+
+ selectAllInput.onchange = this.onClick;
+ }
+
+ onClick(e) {
+ const targetValue = e.target.checked;
+
+ this.inputs.forEach(input => {
+ input.checked = targetValue;
+ });
+ }
+}
+
+export default Selector;
diff --git a/src/newsreader/js/index.js b/src/newsreader/js/index.js
index 48db0b2..1ed14ed 100644
--- a/src/newsreader/js/index.js
+++ b/src/newsreader/js/index.js
@@ -1,3 +1,3 @@
import './pages/homepage/index.js';
-import './pages/rules/index.js';
import './pages/categories/index.js';
+import './pages/rules/index.js';
diff --git a/src/newsreader/js/pages/categories/App.js b/src/newsreader/js/pages/categories/App.js
index 95ab396..691aaed 100644
--- a/src/newsreader/js/pages/categories/App.js
+++ b/src/newsreader/js/pages/categories/App.js
@@ -80,7 +80,7 @@ class App extends React.Component {
const pageHeader = (
<>
Categories
-
+
Create category
>
diff --git a/src/newsreader/js/pages/categories/components/CategoryCard.js b/src/newsreader/js/pages/categories/components/CategoryCard.js
index a3a242d..94bd6f4 100644
--- a/src/newsreader/js/pages/categories/components/CategoryCard.js
+++ b/src/newsreader/js/pages/categories/components/CategoryCard.js
@@ -31,7 +31,10 @@ const CategoryCard = props => {
const cardContent = <>{category.rules && }>;
const cardFooter = (
<>
-
+
Edit