Commit Graph

960 Commits

Author SHA1 Message Date
Deimos
5fbc72c44c Add ability to process posts with Lua scripts
This adds the backend pieces (no interface yet) to configure Lua scripts
that will be applied to topics and comments due to different events.
Initially, it only supports running a script when a new topic or comment
is posted. For example, here is a Lua script that would prepend a new
topic's title with "[Text] " or "[Link] " depending on its type, as well
as replace its tags with either "text" or "link":

function on_topic_post (topic)
    if (topic.is_text_type) then
        topic.title = "[Text] " .. topic.title
        topic.tags = {"text"}
    elseif (topic.is_link_type) then
        topic.title = "[Link] " .. topic.title
        topic.tags = {"link"}
    end
end

There can be a global script as well as group-specific scripts, and the
scripts are sandboxed, with limited access to data as well as being
restricted to a subset of Lua's built-in functions. The Lua sandboxing
code comes from Splash (https://github.com/scrapinghub/splash). It will
need to be modified, but this commit keeps it unmodified so that future
changes can be more easily tracked by comparing to the original state of
the file.

The sandboxing also includes some restrictions on number of instructions
and memory usage, but this might be more effectively managed on the OS
level. More research will still need to be done on security and resource
restrictions before this feature can be safely opened to users.
2020-11-30 17:05:00 -07:00
Deimos
8144a8b789 Use postponed evaluation of type annotations
The __future__ import will be able to be removed as of Python 3.10.
2020-11-18 15:33:31 -07:00
Deimos
b6d20340c9 Add action-settings to topic-with-excerpt grid
Whoops, only added it to the ones without excerpts, which causes a minor
layout issue for the with-excerpt ones.
2020-11-16 15:03:13 -07:00
Deimos
dac8ec3a01 Add ability to edit topic title from listing pages
This adds an "Edit title" choice in the actions dropdown for topics on
listing pages, instead of needing to go to the comments page.

Some pieces of this feel a little hack-ish (like needing to reduce the
bottom padding because of the usually-empty div that the title-editing
input gets put into), so I'll probably want to try and find a better
overall approach to this eventually, but it should do the job for now.
2020-11-15 15:49:06 -07:00
Deimos
8c913d595c Alphabetize invoke task functions
Just rearranges the module so the functions are in alphabetical order
(except web_server_reload, which has to be earlier so it can be called
as a post-task).
2020-11-03 18:20:05 -07:00
Deimos
79072f76d8 Rename invoke tasks to standardize format
I think this is going to be a better way to name invoke tasks. The
previous naming where a verb was often first made it much harder for
anyone to figure out the name of a task that affects a certain thing
without always looking through the entire list.

For example, if someone is looking for a task that affects the web
server, it's much easier to find web-server-reload than
reload-web-server.

The changes were:

- check-code-style -> code-style-check
- reload-web-server -> web-server-reload
- renew-tls-certificate -> tls-certificate-renew
- type-checking -> type-check
- update-pip-requirements -> pip-requirements-update
2020-11-03 18:09:36 -07:00
Deimos
9d5e2bf5e3 Add gemini:// to allowed link protocols 2020-11-02 14:56:21 -07:00
Deimos
2d70ef8da8 Update pypi package versions (requirements.txt) 2020-11-02 14:53:00 -07:00
Deimos
70949ff0e2 Add invoke task to renew TLS certificate 2020-10-21 16:01:48 -06:00
Deimos
f31052670a Remove "via" annotations from requirements files
I should have just done this all along, these have been way more trouble
than they're worth.

If the information is needed, it's always possible to just do a temp run
of pip-compile without --no-annotate or use a dedicated tool like
pipdeptree.
2020-10-09 22:00:08 -06:00
Deimos
9652dfb722 Add --full flag to invoke test
This is simpler than needing to know that --html-validation is the flag
to use to make sure that all tests are run, and can stay constant even
if we add other types of excluded-by-default tests in the future.
2020-10-09 19:16:04 -06:00
Deimos
9e7906c4a1 Add invoke task to start an IPython shell 2020-10-09 17:52:13 -06:00
Deimos
4e6d56574a CONTRIBUTING.md: Update links to development pages 2020-10-09 16:56:33 -06:00
Deimos
f4933be2dd Nginx: remove /development redirects on Docs site
These were set up to redirect the original locations of the development
pages to their new locations inside the instructions folder, but can't
be used any more now that we're creating a development folder.
2020-10-09 16:50:11 -06:00
Deimos
e4a187eb56 Stop stripping periods from multi-sentence titles
If a topic title has multiple sentences in it, it looks strange to strip
the trailing period off it, so we only want to do that automatically
when it's a single sentence.
2020-10-07 17:16:25 -06:00
Deimos
ee78cd7760 Update Black to version 20.8b1
Updates the Black code-formatter for Python to the latest version, and
applies it to some files that had formatting that the new version does
differently (splitting collections with trailing commas across lines).
2020-10-07 16:19:28 -06:00
Deimos
6231a5e6a2 Update pypi package versions (requirements.txt) 2020-10-07 16:14:43 -06:00
Deimos
21e016d481 Fix "-r" check in invoke update-pip-requirements
This needs to check for spaces around the "-r", otherwise it ends up
removing comments that include "pyramid-session-redis" and similar.
2020-10-07 16:13:49 -06:00
Deimos
dd00e2e79c Add invoke tab-completion script to dev .bashrc
This enables tab-completion for the new invoke tasks in the dev version.
So for example, you can type "invoke ty<Tab>" and it will complete to
"type-checking".
2020-10-07 15:39:14 -06:00
Deimos
ffde9f29a1 Use invoke tasks in git pre-push/pre-commit hooks 2020-10-07 15:25:04 -06:00
Deimos
ff07815985 Add invoke task to run code-style checks
The output of this has some issues and can definitely use some work, but
should do the job for now.
2020-10-07 15:21:55 -06:00
Deimos
037176524b Add invoke task to check type annotations 2020-10-06 18:31:24 -06:00
Deimos
c2bfe2e2c7 Add invoke task to run tests
This way, instead of needing to know that you run "pytest" and knowing
tricks like "pytest -m ''" to run webtests and HTML validation, you can
now just run "invoke test", with more intuitive flags. This also reduces
the output in quiet mode even more.

After adding invoke tasks for some of the other tools/checks, I'll be
able to switch the git hooks to use these instead.
2020-10-05 20:33:16 -06:00
Deimos
6a216aba52 Add invoke task to update pip package versions
First invoke task: uses pip-compile to update the versions of all the
pip packages in requirements.txt and requirements-dev.txt. It also
post-processes the output file and removes any comments that have a "-r"
reference in them, since those currently cause Salt to break (and are
kind of redundant anyway).

Unfortunately, as part of writing this I discovered that invoke can't
handle type annotations in the definitions of its task functions, so I
had to exclude tasks.py from being checked by mypy. That makes me a
little nervous about whether invoke is still being maintained. Relevant
issue (over 4 years old): https://github.com/pyinvoke/invoke/issues/357
2020-10-05 18:20:41 -06:00
Deimos
85bbe7feb5 Install invoke python package 2020-10-05 14:19:14 -06:00
Deimos
4efff58bac Add Amazonbot to list of bot user agents 2020-10-02 13:14:28 -06:00
Deimos
746568cb44 Fix .btn-primary hover colors reverting to Spectre 2020-10-01 17:59:04 -06:00
Bauke
3d6fcb5a70 Add the Love themes. 2020-10-01 17:35:14 -06:00
Deimos
be3403680d Fix border color for <fieldset> (new topic page) 2020-09-29 13:07:39 -06:00
Deimos
de1a64b3d0 CSS: fix some border color regressions 2020-09-28 17:21:26 -06:00
Deimos
082e3b51a1 CSS: replace some custom props with native values
This isn't perfectly equivalent in some cases, but it's a barely
noticeable difference, and it's nice to not have all of these extra
custom properties like "--button-darkened-8-color" for an extremely
niche usage.
2020-09-28 17:03:02 -06:00
Deimos
135a010aa4 CSS: Move all theme color rules into normal places
Now that we've switched to CSS custom properties, all the color rules
don't need to be repeated for each theme via a mixin, so the
_theme_base.scss could be split up with all its rules going into the
expected modules/locations along with all the other associated styles.
2020-09-28 15:34:17 -06:00
Deimos
f311e294dc Move syntax-highlighting CSS into a module
No need for this to be a mixin any more now that it only exists once and
isn't being called for each theme separately.
2020-09-24 17:44:23 -06:00
Deimos
0f4890dda5 CSS: add "-color" suffix to all custom properties
I think it's best to be specific that all of these are colors, otherwise
there could be some confusing usages (and potential collisions) with
ones like --border.

Sorry @Bauke (and probably some others), I know this will most likely
mess with any changes you've already made to override these properties,
but I wanted to do it eventually and it's only going to get worse the
longer I wait.
2020-09-24 16:52:00 -06:00
Deimos
0cbe17f763 Fix sidebar background color in fallback themes 2020-09-15 00:24:49 -06:00
Deimos
925278ed7c Add minimal theme support for old browsers
This should allow users with browsers that don't support CSS custom
properties to still have some minimal theme support. There will be
various issues with the themes (and that's fine), but it will at least
set the main colors for their chosen theme.
2020-09-14 20:28:41 -06:00
Deimos
cbf77c1def Fix transparent sidebar for very old browsers
With the switch to CSS custom properties for the themes, old browsers
with no support are ending up with a transparent background on the
sidebar. This makes the site especially difficult to use on mobile.

I'm going to do something more extensive to allow browsers with no
support for custom properties to still get basic theming, but it's
dependent on a @supports query. For browsers that don't support that
query either, we need this line to give the sidebar a background.
2020-09-14 20:22:21 -06:00
Deimos
7afbcb85d0 Revert "Temp: test @supports query for CSS custom props"
This reverts commit df64807384.
2020-09-14 17:38:37 -06:00
Deimos
df64807384 Temp: test @supports query for CSS custom props 2020-09-13 10:46:26 -06:00
Deimos
a13179044e Fix border colors on some more elements 2020-09-11 21:54:27 -06:00
Deimos
8ec4a86eb2 Remove donation goal from Financials page
This is probably just temporary, but I'm going to leave the donation
goal meter off the sidebar for now, so I don't want the confusing
section in the middle of the Financials page saying that the goal is $0
and so on.
2020-09-11 18:55:50 -06:00
Deimos
f8f7a96431 Show Exemplary badge on labeled comments
This starts showing the Exemplary badge to all users again (but only the
author can see the count still).

It also changes the "priority" of the .is-comment-exemplary and
.is-comment-new classes so that the stripe will show the new color when
a comment is both new and exemplary.
2020-09-11 13:39:41 -06:00
Deimos
3a18be64ad Fix border on hovered comment collapse button 2020-09-09 17:23:33 -06:00
Deimos
d3a84fe411 Fix issue if "most recent comment" not found
Not sure exactly how this can happen, but I've seen a few errors caused
by this.
2020-09-09 16:41:41 -06:00
Bauke
2d023cd659 Use CSS custom properties for theming 2020-09-08 19:27:35 -06:00
Deimos
68870119f4 Remove remnants of Redis breached-passwords check
We've been using pts_lbsearch on the text file for a few weeks now, and
it's working fine. Checks generally seem to take about 10 ms, and that's
totally fine for the relatively uncommon events of registrations and
password changes.

This removes everything related to the previous Redis-based method,
which means we no longer need the second Redis server or the ReBloom
module.
2020-09-06 18:32:10 -06:00
Deimos
624123929a Exclude removed comments from "last comment" link
The "last comment posted" link in the sidebar on a topic's comments page
was still considering removed comments, so if the last comment in a
topic was removed it would link to that one. That's not very useful for
anyone, so this excludes removed comments the same way that deleted ones
were already excluded.
2020-09-03 15:16:21 -06:00
Deimos
26b1d4dd9b Use pts_lbsearch to check for breached passwords
This replaces the current method of using a Bloom filter in Redis to
check for breached passwords with searching the text file directly using
pts_lbsearch (https://github.com/pts/pts-line-bisect/).

I'm not removing the Redis-based method yet because I want to test the
performance of this first, but this is *far* simpler and doesn't have
the possibility for false positives like the Bloom filter does.
2020-08-11 18:27:16 -06:00
Deimos
a70cc61499 Add metric to breached-password check 2020-08-10 13:16:04 -06:00
Deimos
d61b848816 Fix bug with trying to unnest non-webargs errors
When a ValidationError comes up for a reason unrelated to webargs (for
example, if a user tries to set a password that's in the breached list),
this crashes when trying to unnest it, since it doesn't have the extra
level that webargs adds.

This is a bit ugly, but checks to see whether the extra level is there
first.
2020-08-10 12:52:10 -06:00