From 097d86454a137495b1462e42ad11098507f4a08c Mon Sep 17 00:00:00 2001 From: "Renato \"Lond\" Cerqueira" Date: Tue, 29 Dec 2020 20:51:05 +0100 Subject: [PATCH 001/986] Add signatures to requests to mastodon to support authorized fetch mode When mastodon is in authorized fetch mode any request has to be signed or it fails with 401. This adds the needed signature to the requests made to discover the actor when receiving something from mastodon (such as a follow request) --- bookwyrm/activitypub/base_activity.py | 40 +++++++++++++++++++++++++++ bookwyrm/models/activitypub_mixin.py | 2 +- bookwyrm/signatures.py | 12 +++++--- bookwyrm/tests/test_signing.py | 2 +- 4 files changed, 50 insertions(+), 6 deletions(-) diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index 24d383ac7..c3287d45d 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -8,6 +8,10 @@ from django.db import IntegrityError, transaction from bookwyrm.connectors import ConnectorException, get_data from bookwyrm.tasks import app +import requests +from django.utils.http import http_date +from bookwyrm import models +from bookwyrm.signatures import make_signature class ActivitySerializerError(ValueError): """routine problems serializing activitypub json""" @@ -284,6 +288,12 @@ def resolve_remote_id( # load the data and create the object try: data = get_data(remote_id) + except requests.HTTPError as e: + if e.response.status_code == 401: + ''' This most likely means it's a mastodon with secure fetch enabled. Need to be specific ''' + data = get_activitypub_data(remote_id) + else: + raise e except ConnectorException: raise ActivitySerializerError( f"Could not connect to host for remote_id: {remote_id}" @@ -304,3 +314,33 @@ def resolve_remote_id( # if we're refreshing, "result" will be set and we'll update it return item.to_model(model=model, instance=result, save=save) + +def get_activitypub_data(url): + ''' wrapper for request.get ''' + now = http_date() + + # XXX TEMP!! + sender = models.User.objects.get(id=1) + if not sender.key_pair.private_key: + # this shouldn't happen. it would be bad if it happened. + raise ValueError('No private key found for sender') + + try: + resp = requests.get( + url, + headers={ + 'Accept': 'application/json; charset=utf-8', + 'Date': now, + 'Signature': make_signature('get', sender, url, now), + }, + ) + except RequestError: + raise ConnectorException() + if not resp.ok: + resp.raise_for_status() + try: + data = resp.json() + except ValueError: + raise ConnectorException() + + return data diff --git a/bookwyrm/models/activitypub_mixin.py b/bookwyrm/models/activitypub_mixin.py index 402cb040b..ee0b2c40d 100644 --- a/bookwyrm/models/activitypub_mixin.py +++ b/bookwyrm/models/activitypub_mixin.py @@ -533,7 +533,7 @@ def sign_and_send(sender, data, destination): headers={ "Date": now, "Digest": digest, - "Signature": make_signature(sender, destination, now, digest), + "Signature": make_signature("post", sender, destination, now, digest), "Content-Type": "application/activity+json; charset=utf-8", "User-Agent": USER_AGENT, }, diff --git a/bookwyrm/signatures.py b/bookwyrm/signatures.py index 61cafe71f..27c6357f6 100644 --- a/bookwyrm/signatures.py +++ b/bookwyrm/signatures.py @@ -22,27 +22,31 @@ def create_key_pair(): return private_key, public_key -def make_signature(sender, destination, date, digest): +def make_signature(method, sender, destination, date, digest): """uses a private key to sign an outgoing message""" inbox_parts = urlparse(destination) signature_headers = [ - f"(request-target): post {inbox_parts.path}", + f"(request-target): {method} {inbox_parts.path}", f"host: {inbox_parts.netloc}", f"date: {date}", f"digest: {digest}", ] + headers = "(request-target) host date" + if digest is not None: + signature_headers.append("digest: %s" % digest) + headers = "(request-target) host date digest" + message_to_sign = "\n".join(signature_headers) signer = pkcs1_15.new(RSA.import_key(sender.key_pair.private_key)) signed_message = signer.sign(SHA256.new(message_to_sign.encode("utf8"))) signature = { "keyId": f"{sender.remote_id}#main-key", "algorithm": "rsa-sha256", - "headers": "(request-target) host date digest", + "headers": headers, "signature": b64encode(signed_message).decode("utf8"), } return ",".join(f'{k}="{v}"' for (k, v) in signature.items()) - def make_digest(data): """creates a message digest for signing""" return "SHA-256=" + b64encode(hashlib.sha256(data.encode("utf-8")).digest()).decode( diff --git a/bookwyrm/tests/test_signing.py b/bookwyrm/tests/test_signing.py index d33687a59..afcfb6907 100644 --- a/bookwyrm/tests/test_signing.py +++ b/bookwyrm/tests/test_signing.py @@ -85,7 +85,7 @@ class Signature(TestCase): now = date or http_date() data = json.dumps(get_follow_activity(sender, self.rat)) digest = digest or make_digest(data) - signature = make_signature(signer or sender, self.rat.inbox, now, digest) + signature = make_signature("post", signer or sender, self.rat.inbox, now, digest) with patch("bookwyrm.views.inbox.activity_task.delay"): with patch("bookwyrm.models.user.set_remote_server.delay"): return self.send(signature, now, send_data or data, digest) From e2ee3d27a7e40b877d8ddba90c056aa3f7418d25 Mon Sep 17 00:00:00 2001 From: "Renato \"Lond\" Cerqueira" Date: Wed, 5 Jan 2022 15:42:54 +0100 Subject: [PATCH 002/986] WIP --- bookwyrm/activitypub/base_activity.py | 12 ++++++++++-- bookwyrm/tests/activitypub/test_base_activity.py | 5 +++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index c3287d45d..f58b0bde9 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -12,6 +12,7 @@ import requests from django.utils.http import http_date from bookwyrm import models from bookwyrm.signatures import make_signature +from bookwyrm.settings import DOMAIN class ActivitySerializerError(ValueError): """routine problems serializing activitypub json""" @@ -315,12 +316,19 @@ def resolve_remote_id( # if we're refreshing, "result" will be set and we'll update it return item.to_model(model=model, instance=result, save=save) +def get_representative(): + try: + models.User.objects.get(id=-99) + except models.User.DoesNotExist: + username = "%s@%s" % (DOMAIN, DOMAIN) + email = "representative@%s" % (DOMAIN) + models.User.objects.create_user(id=-99, username=username, email=email, local=True, localname=DOMAIN) + def get_activitypub_data(url): ''' wrapper for request.get ''' now = http_date() - # XXX TEMP!! - sender = models.User.objects.get(id=1) + sender = get_representative() if not sender.key_pair.private_key: # this shouldn't happen. it would be bad if it happened. raise ValueError('No private key found for sender') diff --git a/bookwyrm/tests/activitypub/test_base_activity.py b/bookwyrm/tests/activitypub/test_base_activity.py index b951c7ab4..0eca7f7aa 100644 --- a/bookwyrm/tests/activitypub/test_base_activity.py +++ b/bookwyrm/tests/activitypub/test_base_activity.py @@ -14,6 +14,7 @@ from bookwyrm.activitypub.base_activity import ( ActivityObject, resolve_remote_id, set_related_field, + get_representative ) from bookwyrm.activitypub import ActivitySerializerError from bookwyrm import models @@ -51,6 +52,10 @@ class BaseActivity(TestCase): image.save(output, format=image.format) self.image_data = output.getvalue() + def test_get_representative_not_existing(self, _): + representative = get_representative() + self.assertIsInstance(representative, models.User) + def test_init(self, *_): """simple successfuly init""" instance = ActivityObject(id="a", type="b") From dbd5a02617a19f501a6494e6f5179a73bee3f069 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Wed, 16 Mar 2022 23:56:19 -0700 Subject: [PATCH 003/986] specify npm prefix and stylelint configs and adjust ignores --- bw-dev | 18 ++++++++++-------- dev-tools/.stylelintignore | 1 + dev-tools/.stylelintrc.js | 2 +- dev-tools/Dockerfile | 7 ++++--- dev-tools/package.json | 1 + docker-compose.yml | 1 + 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/bw-dev b/bw-dev index b610758fe..6b1d52255 100755 --- a/bw-dev +++ b/bw-dev @@ -139,19 +139,21 @@ case "$CMD" in docker-compose run --rm dev-tools black celerywyrm bookwyrm ;; prettier) - docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js + docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- prettier \ + --write bookwyrm/static/js/*.js ;; stylelint) - docker-compose run --rm dev-tools npx stylelint \ - bookwyrm/static/css/bookwyrm.scss bookwyrm/static/css/bookwyrm/**/*.scss --fix \ - --config dev-tools/.stylelintrc.js + docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- stylelint \ + --fix --config=dev-tools/.stylelintrc.js --ignore-path=dev-tools/.stylelintignore \ + bookwyrm/static/css ;; formatters) docker-compose run --rm dev-tools black celerywyrm bookwyrm - docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js - docker-compose run --rm dev-tools npx stylelint \ - bookwyrm/static/css/bookwyrm.scss bookwyrm/static/css/bookwyrm/**/*.scss --fix \ - --config dev-tools/.stylelintrc.js + docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- prettier \ + --write bookwyrm/static/js/*.js + docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- stylelint \ + --fix --config=dev-tools/.stylelintrc.js --ignore-path=dev-tools/.stylelintignore \ + bookwyrm/static/css ;; compilescss) runweb python manage.py compilescss diff --git a/dev-tools/.stylelintignore b/dev-tools/.stylelintignore index b2cd33f89..441f5eb72 100644 --- a/dev-tools/.stylelintignore +++ b/dev-tools/.stylelintignore @@ -1 +1,2 @@ **/vendor/** +**/fonts/** diff --git a/dev-tools/.stylelintrc.js b/dev-tools/.stylelintrc.js index 7ab51b9b3..ba9c50e96 100644 --- a/dev-tools/.stylelintrc.js +++ b/dev-tools/.stylelintrc.js @@ -1,7 +1,7 @@ /* global module */ module.exports = { - "extends": "stylelint-config-standard", + "extends": "stylelint-config-standard-scss", "plugins": [ "stylelint-order" diff --git a/dev-tools/Dockerfile b/dev-tools/Dockerfile index c207a60d0..9e3ddc324 100644 --- a/dev-tools/Dockerfile +++ b/dev-tools/Dockerfile @@ -2,13 +2,14 @@ FROM python:3.9 ENV PYTHONUNBUFFERED 1 -RUN mkdir /app -WORKDIR /app +WORKDIR /app/dev-tools -COPY package.json requirements.txt .stylelintrc.js .stylelintignore /app/ +COPY package.json requirements.txt .stylelintrc.js .stylelintignore /app/dev-tools/ RUN pip install -r requirements.txt RUN apt-get update && apt-get install -y curl RUN curl -sL https://deb.nodesource.com/setup_17.x | bash - RUN apt-get install -y nodejs && apt-get clean RUN npm install . + +WORKDIR /app diff --git a/dev-tools/package.json b/dev-tools/package.json index 3fbc940cb..f7b996b77 100644 --- a/dev-tools/package.json +++ b/dev-tools/package.json @@ -11,6 +11,7 @@ "stylelint-config-recommended": "^7.0.0", "stylelint-config-standard": "^25.0.0", "stylelint-order": "^5.0.0", + "stylelint-config-standard-scss": "^3.0.0", "watch": "^0.13.0" }, "dependencies": { diff --git a/docker-compose.yml b/docker-compose.yml index e45cae0d1..f8e0e3ad7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -101,6 +101,7 @@ services: build: dev-tools env_file: .env volumes: + - /app/dev-tools/ - .:/app volumes: pgdata: From 6f27b5fd2e49836dcaafe34ef8ef50b5320320e0 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Wed, 16 Mar 2022 23:56:34 -0700 Subject: [PATCH 004/986] auto-fixes from running this --- bookwyrm/static/css/bookwyrm.scss | 1 - bookwyrm/static/css/bookwyrm/_all.scss | 6 ------ bookwyrm/static/css/themes/bookwyrm-dark.scss | 3 +-- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.scss b/bookwyrm/static/css/bookwyrm.scss index 437795457..c44bf990c 100644 --- a/bookwyrm/static/css/bookwyrm.scss +++ b/bookwyrm/static/css/bookwyrm.scss @@ -1,4 +1,3 @@ @charset "utf-8"; - @import "vendor/bulma/bulma.sass"; @import "bookwyrm/all.scss"; diff --git a/bookwyrm/static/css/bookwyrm/_all.scss b/bookwyrm/static/css/bookwyrm/_all.scss index 6002785f7..bdc34784b 100644 --- a/bookwyrm/static/css/bookwyrm/_all.scss +++ b/bookwyrm/static/css/bookwyrm/_all.scss @@ -16,9 +16,7 @@ @import "components/status"; @import "components/tabs"; @import "components/toggle"; - @import "overrides/bulma_overrides"; - @import "utilities/a11y"; @import "utilities/alignments"; @import "utilities/colors"; @@ -77,7 +75,6 @@ button::-moz-focus-inner { /** Utilities not covered by Bulma ******************************************************************************/ - .tag.is-small { height: auto; } @@ -128,8 +125,6 @@ button:focus-visible .button-invisible-overlay { opacity: 1; } - - /** Tooltips ******************************************************************************/ @@ -151,7 +146,6 @@ button:focus-visible .button-invisible-overlay { cursor: not-allowed; } - /* Notifications page ******************************************************************************/ diff --git a/bookwyrm/static/css/themes/bookwyrm-dark.scss b/bookwyrm/static/css/themes/bookwyrm-dark.scss index 466d8026d..24c21bae2 100644 --- a/bookwyrm/static/css/themes/bookwyrm-dark.scss +++ b/bookwyrm/static/css/themes/bookwyrm-dark.scss @@ -69,7 +69,7 @@ $navbar-dropdown-item-hover-color: $white; } /* misc */ -$shadow: 0 0.5em 1em -0.125em rgba($black, 0.2), 0 0px 0 1px rgba($black, 0.02); +$shadow: 0 0.5em 1em -0.125em rgba($black, 0.2), 0 0 0 1px rgba($black, 0.02); $card-header-shadow: 0 0.125em 0.25em rgba($black, 0.1); $invisible-overlay-background-color: rgba($black, 0.66); $progress-value-background-color: $border-light; @@ -79,6 +79,5 @@ $progress-value-background-color: $border-light; $family-primary: $family-sans-serif; $family-secondary: $family-sans-serif; - @import "../bookwyrm.scss"; @import "../vendor/icons.css"; From 54b8d2c3f372c74cc7626f274d543e0366923a80 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Thu, 17 Mar 2022 00:44:16 -0700 Subject: [PATCH 005/986] add import rule override for styles --- dev-tools/.stylelintrc.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dev-tools/.stylelintrc.js b/dev-tools/.stylelintrc.js index ba9c50e96..a3403e89c 100644 --- a/dev-tools/.stylelintrc.js +++ b/dev-tools/.stylelintrc.js @@ -18,5 +18,13 @@ module.exports = { "declaration-block-no-redundant-longhand-properties": null, "no-descending-specificity": null, "alpha-value-notation": null - } + }, + "overrides": [ + { + "files": [ "../**/themes/bookwyrm-*.scss" ], + "rules": { + "no-invalid-position-at-import-rule": null + } + } + ] }; From 225957ba8a6bdea48845d3f102725632cca99ad5 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Thu, 17 Mar 2022 00:44:34 -0700 Subject: [PATCH 006/986] remove non-css extensions --- bookwyrm/static/css/bookwyrm.scss | 4 ++-- bookwyrm/static/css/themes/bookwyrm-dark.scss | 4 ++-- bookwyrm/static/css/themes/bookwyrm-light.scss | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.scss b/bookwyrm/static/css/bookwyrm.scss index c44bf990c..17d6d9119 100644 --- a/bookwyrm/static/css/bookwyrm.scss +++ b/bookwyrm/static/css/bookwyrm.scss @@ -1,3 +1,3 @@ @charset "utf-8"; -@import "vendor/bulma/bulma.sass"; -@import "bookwyrm/all.scss"; +@import "vendor/bulma/bulma"; +@import "bookwyrm/all"; diff --git a/bookwyrm/static/css/themes/bookwyrm-dark.scss b/bookwyrm/static/css/themes/bookwyrm-dark.scss index 24c21bae2..35acbcb02 100644 --- a/bookwyrm/static/css/themes/bookwyrm-dark.scss +++ b/bookwyrm/static/css/themes/bookwyrm-dark.scss @@ -1,4 +1,4 @@ -@import "../vendor/bulma/sass/utilities/initial-variables.sass"; +@import "../vendor/bulma/sass/utilities/initial-variables"; /* Colors ******************************************************************************/ @@ -79,5 +79,5 @@ $progress-value-background-color: $border-light; $family-primary: $family-sans-serif; $family-secondary: $family-sans-serif; -@import "../bookwyrm.scss"; +@import "../bookwyrm"; @import "../vendor/icons.css"; diff --git a/bookwyrm/static/css/themes/bookwyrm-light.scss b/bookwyrm/static/css/themes/bookwyrm-light.scss index c74d2ee20..291ae5f08 100644 --- a/bookwyrm/static/css/themes/bookwyrm-light.scss +++ b/bookwyrm/static/css/themes/bookwyrm-light.scss @@ -1,4 +1,4 @@ -@import "../vendor/bulma/sass/utilities/derived-variables.sass"; +@import "../vendor/bulma/sass/utilities/derived-variables"; /* Colors ******************************************************************************/ @@ -55,5 +55,5 @@ $invisible-overlay-background-color: rgba($scheme-invert, 0.66); $family-primary: $family-sans-serif; $family-secondary: $family-sans-serif; -@import "../bookwyrm.scss"; +@import "../bookwyrm"; @import "../vendor/icons.css"; From 51bb4c6f5d733c3cb08f5565ead399be8b1d614b Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Thu, 17 Mar 2022 00:49:22 -0700 Subject: [PATCH 007/986] make bw-dev consistent --- bw-dev | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bw-dev b/bw-dev index 6b1d52255..4ce324301 100755 --- a/bw-dev +++ b/bw-dev @@ -139,20 +139,20 @@ case "$CMD" in docker-compose run --rm dev-tools black celerywyrm bookwyrm ;; prettier) - docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- prettier \ + docker-compose run --rm dev-tools npm exec --prefix dev-tools -- prettier \ --write bookwyrm/static/js/*.js ;; stylelint) - docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- stylelint \ - --fix --config=dev-tools/.stylelintrc.js --ignore-path=dev-tools/.stylelintignore \ + docker-compose run --rm dev-tools npm exec --prefix dev-tools -- stylelint \ + --fix --config dev-tools/.stylelintrc.js --ignore-path dev-tools/.stylelintignore \ bookwyrm/static/css ;; formatters) docker-compose run --rm dev-tools black celerywyrm bookwyrm - docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- prettier \ + docker-compose run --rm dev-tools npm exec --prefix dev-tools -- prettier \ --write bookwyrm/static/js/*.js - docker-compose run --rm dev-tools npm exec --prefix=dev-tools/ -- stylelint \ - --fix --config=dev-tools/.stylelintrc.js --ignore-path=dev-tools/.stylelintignore \ + docker-compose run --rm dev-tools npm exec --prefix dev-tools -- stylelint \ + --fix --config dev-tools/.stylelintrc.js --ignore-path dev-tools/.stylelintignore \ bookwyrm/static/css ;; compilescss) From 891a5d4dd8ff5ac17aeccc1387e233433a8f562c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 8 Jul 2022 10:51:22 -0700 Subject: [PATCH 008/986] Adds "Your Books" to the header and removed "Feed" The instance icon is already a link to the feed, and I think it's weird not to have a quick link to your books, since books are important. --- bookwyrm/templates/layout.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html index 6b9e4daa1..6f6a40536 100644 --- a/bookwyrm/templates/layout.html +++ b/bookwyrm/templates/layout.html @@ -42,7 +42,7 @@
{% if site.support_link %} diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index daf05e10e..90d0d0edc 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -318,6 +318,7 @@ urlpatterns = [ re_path(r"^about/?$", views.about, name="about"), re_path(r"^privacy/?$", views.privacy, name="privacy"), re_path(r"^conduct/?$", views.conduct, name="conduct"), + re_path(r"^impressum/?$", views.impressum, name="impressum"), path("", views.Home.as_view(), name="landing"), re_path(r"^discover/?$", views.Discover.as_view(), name="discover"), re_path(r"^notifications/?$", views.Notifications.as_view(), name="notifications"), diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 21e33450c..bc70490c5 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -60,7 +60,7 @@ from .books.editions import Editions, switch_edition from .books.links import BookFileLinks, AddFileLink, delete_link # landing -from .landing.about import about, privacy, conduct +from .landing.about import about, privacy, conduct, impressum from .landing.landing import Home, Landing from .landing.login import Login, Logout from .landing.register import Register diff --git a/bookwyrm/views/landing/about.py b/bookwyrm/views/landing/about.py index 7016dfcdb..0bcdfd836 100644 --- a/bookwyrm/views/landing/about.py +++ b/bookwyrm/views/landing/about.py @@ -1,5 +1,6 @@ """ non-interactive pages """ from dateutil.relativedelta import relativedelta +from django.http import Http404 from django.template.response import TemplateResponse from django.utils import timezone from django.views.decorators.http import require_GET @@ -36,3 +37,12 @@ def conduct(request): def privacy(request): """more information about the instance""" return TemplateResponse(request, "about/privacy.html") + + +@require_GET +def impressum(request): + """more information about the instance""" + site = models.SiteSettings.objects.get() + if not site.show_impressum: + raise Http404() + return TemplateResponse(request, "about/impressum.html") From 8b068e94d5d4242e3e5e25909bd6fbe54666935c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 25 Nov 2022 12:19:49 -0800 Subject: [PATCH 061/986] Headers aren't one of the rows --- bookwyrm/importers/importer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/importers/importer.py b/bookwyrm/importers/importer.py index e4b19f20a..a2641ff11 100644 --- a/bookwyrm/importers/importer.py +++ b/bookwyrm/importers/importer.py @@ -37,7 +37,7 @@ class Importer: """check over a csv and creates a database entry for the job""" csv_reader = csv.DictReader(csv_file, delimiter=self.delimiter) rows = list(csv_reader) - if len(rows) <= 1: + if len(rows) < 1: raise ValueError("CSV file is empty") rows = enumerate(rows) From 8ec984c3ff9771430540fbfed48f18809d888c2c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 25 Nov 2022 14:37:27 -0800 Subject: [PATCH 062/986] Tick version number --- bookwyrm/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index ed0f57839..1a3238a1f 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -11,7 +11,7 @@ from django.utils.translation import gettext_lazy as _ env = Env() env.read_env() DOMAIN = env("DOMAIN") -VERSION = "0.5.1" +VERSION = "0.5.2" RELEASE_API = env( "RELEASE_API", From cac9dc2603026444b18145940074d43c506667e1 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Sat, 26 Nov 2022 11:33:16 -0800 Subject: [PATCH 063/986] registration answer was not long enough client side, fixes #2377 for real --- bookwyrm/templates/landing/layout.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/landing/layout.html b/bookwyrm/templates/landing/layout.html index bf0a6b2a1..46cfe49ea 100644 --- a/bookwyrm/templates/landing/layout.html +++ b/bookwyrm/templates/landing/layout.html @@ -73,7 +73,7 @@ {% if site.invite_request_question %}
- + {% include 'snippets/form_errors.html' with errors_list=request_form.answer.errors id="desc_answer_register" %}
{% endif %} From e0896e3828a9ff4d1d5e769c1bbd2bc1fae7c3c5 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Sat, 26 Nov 2022 11:54:55 -0800 Subject: [PATCH 064/986] fix input type --- bookwyrm/templates/landing/layout.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/landing/layout.html b/bookwyrm/templates/landing/layout.html index 46cfe49ea..e3cdf1bdf 100644 --- a/bookwyrm/templates/landing/layout.html +++ b/bookwyrm/templates/landing/layout.html @@ -73,7 +73,7 @@ {% if site.invite_request_question %}
- + {% include 'snippets/form_errors.html' with errors_list=request_form.answer.errors id="desc_answer_register" %}
{% endif %} From c4398ff18747752ee26ed9bc66ad094fbaf7c83b Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Sat, 26 Nov 2022 12:14:48 -0800 Subject: [PATCH 065/986] make use of templates instead of hidden divs which is more elegant --- bookwyrm/static/js/bookwyrm.js | 5 +- bookwyrm/templates/search/barcode_modal.html | 94 ++++++++++---------- 2 files changed, 48 insertions(+), 51 deletions(-) diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index aa06a8b0a..eddbfbee3 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -628,9 +628,8 @@ let BookWyrm = new (class { } function toggleStatus(status) { - for (const child of statusNode.children) { - BookWyrm.toggleContainer(child, !child.classList.contains(status)); - } + const template = document.querySelector(`#barcode-${status}`); + statusNode.replaceChildren(template ? template.content.cloneNode(true) : null); } function initBarcodes(cameraId = null) { diff --git a/bookwyrm/templates/search/barcode_modal.html b/bookwyrm/templates/search/barcode_modal.html index 70481b20a..519adfd3b 100644 --- a/bookwyrm/templates/search/barcode_modal.html +++ b/bookwyrm/templates/search/barcode_modal.html @@ -1,48 +1,46 @@ -{% extends 'components/modal.html' %} -{% load i18n %} - -{% block modal-title %} - {% blocktrans %} - Scan Barcode - {% endblocktrans %} -{% endblock %} - -{% block modal-body %} -
-
-
- -
- -
- -
- - - - -
-{% endblock %} - -{% block modal-footer %} - -{% endblock %} - - +{% extends 'components/modal.html' %} +{% load i18n %} + +{% block modal-title %} + {% blocktrans %} + Scan Barcode + {% endblocktrans %} +{% endblock %} + +{% block modal-body %} +
+
+
+ +
+ +
+ + + + +
+{% endblock %} + +{% block modal-footer %} + +{% endblock %} + + From c2b447cf49f4e55f448c80667ef6332cbf580bab Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Sat, 26 Nov 2022 12:19:37 -0800 Subject: [PATCH 066/986] lint --- bookwyrm/static/js/bookwyrm.js | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index eddbfbee3..5b3f13d4a 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -629,6 +629,7 @@ let BookWyrm = new (class { function toggleStatus(status) { const template = document.querySelector(`#barcode-${status}`); + statusNode.replaceChildren(template ? template.content.cloneNode(true) : null); } From d9ecd35024275064c944405ba0e518baef071f99 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Sat, 26 Nov 2022 12:36:52 -0800 Subject: [PATCH 067/986] Remove no-longer present `compilescss` from fish autocomplete config --- complete_bwdev.fish | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/complete_bwdev.fish b/complete_bwdev.fish index fbdae2492..208d7ee4f 100644 --- a/complete_bwdev.fish +++ b/complete_bwdev.fish @@ -1,5 +1,5 @@ # bw-dev auto-completions for fish-shell. -# copy this to ~./.config/fish/completions/ with the name `bw-dev.fish` +# copy this to ~/.config/fish/completions/ with the name `bw-dev.fish` # this will only work if renamed to `bw-dev.fish`. set -l commands up \ @@ -61,7 +61,6 @@ __bw_complete "$commands" "black" "run Python code formatting __bw_complete "$commands" "prettier" "run JavaScript code formatting tool" __bw_complete "$commands" "stylelint" "run SCSS linting tool" __bw_complete "$commands" "formatters" "run multiple formatter tools" -__bw_complete "$commands" "compilescss" "compile the SCSS layouts to CSS" __bw_complete "$commands" "populate_streams" "populate the main streams" __bw_complete "$commands" "populate_lists_streams" "populate streams for book lists" __bw_complete "$commands" "populate_suggestions" "populate book suggestions" From 86d1c8552e0162371009aceab549a9626077ec39 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Sat, 26 Nov 2022 13:17:48 -0800 Subject: [PATCH 068/986] use transparent buttons for reply and more --- bookwyrm/templates/snippets/status/layout.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/snippets/status/layout.html b/bookwyrm/templates/snippets/status/layout.html index 3dd576fee..4e5b75cc0 100644 --- a/bookwyrm/templates/snippets/status/layout.html +++ b/bookwyrm/templates/snippets/status/layout.html @@ -32,7 +32,7 @@ {% if not moderation_mode %} {% endif %} From 6cf028994e4fdebe97bc2c492333e5726abe99cc Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Sat, 26 Nov 2022 13:18:11 -0800 Subject: [PATCH 069/986] dark theme: increase background color darkness, fix shepherd color --- bookwyrm/static/css/themes/bookwyrm-dark.scss | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bookwyrm/static/css/themes/bookwyrm-dark.scss b/bookwyrm/static/css/themes/bookwyrm-dark.scss index b98422688..ae904b4a4 100644 --- a/bookwyrm/static/css/themes/bookwyrm-dark.scss +++ b/bookwyrm/static/css/themes/bookwyrm-dark.scss @@ -15,6 +15,8 @@ $danger: #872538; $danger-light: #481922; $light: #393939; $red: #ffa1b4; +$black: #000; +$white-ter: hsl(0, 0%, 90%); /* book cover standins */ $no-cover-color: #002549; @@ -56,9 +58,12 @@ $link-active: $white-bis; $link-light: #0d1c26; /* bulma overrides */ +$body-background-color: rgb(17, 18, 18); $background: $background-secondary; $menu-item-active-background-color: $link-background; $navbar-dropdown-item-hover-color: $white; +$info-light: $background-body; +$info-dark: #72b6ee; /* These element's colors are hardcoded, probably a bug in bulma? */ @media screen and (min-width: 769px) { @@ -74,7 +79,7 @@ $navbar-dropdown-item-hover-color: $white; } /* misc */ -$shadow: 0 0.5em 1em -0.125em rgba($black, 0.2), 0 0px 0 1px rgba($black, 0.02); +$shadow: 0 0.5em 0.5em -0.125em rgba($black, 0.2), 0 0px 0 1px rgba($black, 0.02); $card-header-shadow: 0 0.125em 0.25em rgba($black, 0.1); $invisible-overlay-background-color: rgba($black, 0.66); $progress-value-background-color: $border-light; @@ -92,6 +97,7 @@ $family-secondary: $family-sans-serif; color: $grey-light !important; } + #qrcode svg { background-color: #a6a6a6; } From 9738c9617563495c7a6a18cd3c94899ca723c9a3 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Sat, 26 Nov 2022 13:26:11 -0800 Subject: [PATCH 070/986] fix css which caused weird spacing for desc. field --- bookwyrm/templates/book/book.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 95829ae9d..4e7862f7a 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -194,10 +194,10 @@