aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki
Commit message (Collapse)AuthorAge
* Fix inverted footnote config with MultiMarkdown.Amitai Schleier2019-09-04
| | | | | | Bug spotted and fix from Giuseppe Bilotta <giuseppe.bilotta@gmail.com>. Extend mdwn tests to cover MultiMarkdown, where applicable.
* Catch up to highlight 3.51 API change.Amitai Schleier2019-05-26
| | | | | | | | | | | As of 3.51, searchFile() is no longer provided in highlight's Perl bindings (at least on NetBSD and OS X, as built from pkgsrc). This leaves us falling through to getConfDir(), which has been gone rather longer. From highlight git, it appears searchFile() and getFiletypesConfPath() both originated in the 3.14 release. The latter is still available in 3.51, and returns the same result searchFile() used to. Switch to it.
* useragent: Automatically choose whether to use LWPx::ParanoidAgentSimon McVittie2019-02-26
| | | | | | | | | | | | | The simple implementation of this, which I'd prefer to use, would be: if we can import LWPx::ParanoidAgent, use it; otherwise, use LWP::UserAgent. However, aggregate has historically worked with proxies, and LWPx::ParanoidAgent quite reasonably refuses to work with proxies (because it can't know whether those proxies are going to do the same filtering that LWPx::ParanoidAgent would). Signed-off-by: Simon McVittie <smcv@debian.org>
* po: Always filter .po filesSimon McVittie2019-02-24
| | | | | | | | | | | | | | | | | | | | The input to filter hooks is meant to be the content of a source file on disk. If we only filter once per (page, destpage) pair, and a page is inlined into the same destpage more than once, then the second occurrence will render as the result of htmlizing .po source as if it was Markdown (or whatever the type of the corresponding master page is), which is never going to end well. The alreadyfiltered mechanism was added in commit 1e874b3f to avoid preprocessing loops, but I'm not sure where it could lead to a loop: filter hooks are only called from IkiWiki::filter, which is only called on page content from disk or on proposed content being previewed. According to <https://bugs.debian.org/911356#41>, deleting the alreadyfiltered mechanism resolves the problem, as well as simplifying the code. Closes: #911356 Tested-by: intrigeri
* append javascript after CSSAntoine Beaupré2019-02-03
| | | | | | | | | | | | | | Javascript resources should be presented to browsers after CSS, and "after the fold" (ATF) according to the best practices: https://developers.google.com/speed/docs/insights/mobile#PutStylesBeforeScripts This change allows the browser to download Javascript files in parallel, by including Javascript on the *closing* </body> tag instead of the opening tag. We also improve the regex to tolerate spaces before the body tag, as some templates have (proper) indentation for the tag.
* Fix inline plugin for non-ASCII rootpageFeng Shu2019-02-03
|
* trail: Allow unescaped punctuation in pagenamesSimon McVittie2019-02-03
| | | | | | | By processing the pagenames through linkpage, we let users specify page names that contain non-alphanumerics in a more natural way. Signed-off-by: Simon McVittie <smcv@debian.org>
* Fix table plugin can handle UTF-8 csv formatFeng Shu2019-01-31
|
* fix permalink to commentsJoey Hess2019-01-21
| | | | This commit was sponsored by Thomas May.
* rename postvote to postlinkJoey Hess2018-11-26
| | | | | | This better explains what it contains, which is a wikilink to the page to go to after posting the vote. And postlink is more consistent a name with posttrail.
* poll: Added postvote and posttrail options for better multi-page polls.Joey Hess2018-11-26
| | | | | | | | | | | Modern web users probably expect the poll to move on automatically to the next question, and this allows for that behavior. Note that bestlink() runs at vote time, which avoids needing to make the page containing the poll depend on the page that sets up a trail, as the current trail at vote time will be used. This commit was sponsored by Eric Drechsel on Patreon.
* aggregate: Fix aggregation of posts without a titleJoey Hess2018-10-28
| | | | | | | | | | | | | | | | When an aggregated post lacked a title, the code first prepended the $feed->{dir} to it, and only then checked if it had zero length. So, that check could never succeed and it was possible to end up with $page="dir/", and writing to that would of course fail. (Same problem could also occur when the whole title got sanitized away by the wiki_file_regexp.) Fixed by simply checking earlier if $page is empty. Based on a patch by Alexandre Oliva which got lost in a maze of email folders all alike for over two years despite him mentioning it to me at least once in person.
* Give graph an optional "file" param, like table's.Amitai Schleier2018-10-22
|
* Need <sys/wait.h> for waitpid (NetBSD 8 warns).Amitai Schleier2018-08-21
|
* When emailauth can't send, show the error message.Amitai Schleier2018-05-13
|
* Call srcfile() with nothrow, as clearly intended.Amitai Schleier2018-04-23
|
* meta: Error if we can't parse dates because Date::Parse is missingSimon McVittie2018-03-21
| | | | | | | | | You can still use [[!meta name="date" content="..."]] to generate <meta> tags that are not interpreted, but the common case for [[!meta date="..."]] is that you want to change the ctime, and that won't work without Date::Parse. Signed-off-by: Simon McVittie <smcv@debian.org>
* meta: Make syntactically invalid dates an errorSimon McVittie2018-03-21
| | | | | | | If for some reason you want to create <meta name="date" content="12345">, this now requires [[!meta name="date" content="12345"]]. Signed-off-by: Simon McVittie <smcv@debian.org>
* mdwn: Automatically detect which libdiscount flags to useSimon McVittie2018-03-08
| | | | | | | | | | Unconditionally passing arbitrary numbers as flags turns out to be a bad idea, because some of the "unused" values have historically had side-effects internal to libdiscount. Detect whether the known flags work by rendering short Markdown snippets the first time we htmlize, checking whether each known flag is both necessary and sufficient. Signed-off-by: Simon McVittie <smcv@debian.org>
* img: Explicitly detect format if neededSimon McVittie2018-02-28
| | | | | | | | | | An empty coder name used to detect the format implicitly, but has been interpreted as a literal part of the filename since ImageMagick 6.9.8-3. In newer versions, there does not seem to be any way to indicate that a filename containing ':' is to be taken literally without first knowing the decoder to use. Signed-off-by: Simon McVittie <smcv@debian.org>
* mdwn: Restore historical behaviourSimon McVittie2018-01-29
| | | | | | | | | | | | | | | The Discount package in Debian historically enabled fenced code blocks, PHP Markdown Extra-style definition lists, and an expanded character set for tag names. Since Discount 2.2.0 those are runtime settings, so enable them. Unfortunately Text::Markdown::Discount doesn't yet expose the necessary constants: https://rt.cpan.org/Public/Bug/Display.html?id=124188 The IDANCHOR option was historically also enabled in Debian, but is not enabled here because ikiwiki does not enable the TOC option, and IDANCHOR does nothing without TOC. Closes: #888055
* Don't send relative redirect URLs when behind a reverse proxySimon McVittie2018-01-08
|
* add and use cgiurl_abs_sameschemeJoey Hess2018-01-05
| | | | | | | | | | | | | | | | * emailauth: Fix cookie problem when user is on https and the cgiurl uses http, by making the emailed login link use https. * passwordauth: Use https for emailed password reset link when user is on https. Not entirely happy with this approach, but I don't currently see a better one. I have not verified that the passwordauth change fixes any problem, other than the user getting a http link when they were using https. The emailauth problem is verified fixed by this commit. This commit was sponsored by Michael Magin.
* improve error message when postsignin is not setJoey Hess2018-01-04
| | | | | | | This can happen if the user goes directly to /ikiwiki.cgi?do=login and logs in, since nothing redirected them to there, there's no postsignin value set. It can also happen when cookies are disabled, or perhaps other problems.
* Pass some git environment variables to the test-receive hookSimon McVittie2017-10-01
| | | | | | | | | | | Since git 2.11, git has stored the proposed push in a "quarantine area" until it is accepted by the pre-receive hook, and passed extra environment variables to the pre-receive hook so that it can read objects from the quarantine area. This fixes untrusted push on modern git versions. Signed-off-by: Simon McVittie <smcv@debian.org>
* IkiWiki::Receive: Avoid using asprintfSimon McVittie2017-10-01
| | | | | | | | | On GNU/Linux, it isn't declared in stdio.h unless we define _GNU_SOURCE, which we don't; using the implicit declaration risks crashes on platforms where sizeof(pointer) != sizeof(int). On other platforms it isn't guaranteed to exist at all. Signed-off-by: Simon McVittie <smcv@debian.org>
* img: resize images in a deterministic manner.intrigeri2017-09-01
|
* emailauth, passwordauth: Avoid leaving cgisess_* files in the system temp ↵Joey Hess2017-08-23
| | | | | | | | | | | | | directory. Due to the use/abuse of CGI::Session to generate a token for the login process, a new session database was created for each login, and left behind afterwards. While each file is small, with many logings this could bloat the size of /tmp significantly. Fixed by making CGI::Session write to /dev/null, since there does not seem to be a way to entirely prevent the writing. This commit was sponsored by Henrik Riomar on Patreon.
* htmlscrubber: Add support for the video tag's loop and muted attributes.Joey Hess2017-07-11
| | | | | | | Those were not in the original html5 spec, but have been added in the whatwg html living standard and have wide browser support. This commit was sponsored by John Peloquin on Patreon.
* osm: Convert savestate hook into a changes hookSimon McVittie2017-06-20
| | | | | | | | | | | | | savestate is not the right place to write wiki content, and in particular this breaks websetup if osm's dependencies are not installed, even if the osm plugin is not actually enabled. (Closes: #719913) This is not a full solution: it should be possible to render the PoI files for only the maps that changed, from the format, changes or rendered hook. However, getting that right would require more understanding of this plugin, and this version is enough to not break websetup. This version is the closest correct hook to the one where this previously took place.
* color: Use markup for the preserved CSS, not character dataSimon McVittie2017-05-16
| | | | | | This still smuggles it past the sanitize step, but avoids having other plugins that want to capture text content without markup (notably toc) see the CSS as if it was text content.
* use heading identifiers in TOC linksAntoine Beaupré2017-05-16
| | | | | | | | | | | reasoning: if headings have identifiers, they are probably more useful anchors than the automatically generated anchors we build in the toc plugin. this can happen if, for example, you use the `multimarkdown` plugin, which inserts `id` tags for every header it encounters. this also leverages the `headinganchors` plugin nicely. keeps backwards-compatibility with old toc-generated #indexXhY anchors.
* mdwn: Don't enable alphabetically labelled ordered lists by defaultSimon McVittie2017-05-16
| | | | | | | | | | | This avoids misinterpreting initials ("C. S. Lewis was an author"), the abbreviation for Monsieur ("M. Descartes was a philosopher") and German page numbering ("S. 42") as ordered lists if they happen to begin a line. This only affects the default Discount implementation: Text::Markdown and Text::MultiMarkdown do not have this feature anyway. A new mdwn_alpha_list option can be used to restore the old interpretation.
* mdwn: Enable footnotes by default when using DiscountSimon McVittie2017-05-14
| | | | | A new mdwn_footnotes option can be used to disable footnotes in MultiMarkdown and Discount.
* mdwn: Don't mangle <style> into <elyts> under some circumstancesSimon McVittie2017-05-14
| | | | | We can ask libdiscount not to elide <style> blocks, which means we don't have to work around them.
* mdwn: Make flags passed to libdiscount explicitSimon McVittie2017-05-14
| | | | | | The Perl binding defaults to MKD_NOHEADER|MKD_NOPANTS anyway, but making them explicit means we can use other flags of our choice, and makes it easier to justify why those flags are appropriate.
* cgierror: When the CGI fails, print the error to stderr, not "Died"Simon McVittie2017-05-14
| | | | | $@ could be clobbered by the "exception handler", and in practice it seems that it is. This can be seen on stderr of t/git-cgi.t.
* Defend against empty session namesSimon McVittie2017-05-14
| | | | | If misconfiguration has resulted in an empty session name, treat the session as having not signed in.
* httpauth: If REMOTE_USER is empty, behave as though it was unsetSimon McVittie2017-05-14
| | | | | | A frequently cut-and-pasted HTTP basic authentication configuration for nginx sets it to the empty string when not authenticated, which is not useful.
* remove: make it clearer that repeated page parameter is OK hereSimon McVittie2017-01-11
| | | | | | ikiwiki's web interface does not currently have UI for removing multiple pages simultaneously, but the remove plugin is robust against doing so. Use a clearer idiom to make that obvious.
* CGI, attachment, passwordauth: harden against repeated parametersSimon McVittie2017-01-11
| | | | | | | | | | These instances of code similar to OVE-20170111-0001 are not believed to be exploitable, because defined(), length(), setpassword(), userinfo_set() and the binary "." operator all have prototypes that force the relevant argument to be evaluated in scalar context. However, using a safer idiom makes mistakes less likely. (cherry picked from commit 69230a2220f673c66b5ab875bfc759b32a241c0d)
* passwordauth: avoid userinfo forgery via repeated email parameterSimon McVittie2017-01-11
| | | | | | OVE-20170111-0001 (cherry picked from commit bffb71d6a7d28f6dd5f0be241f214e79eea7bb91)
* passwordauth: prevent authentication bypass via multiple name parametersSimon McVittie2017-01-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Calling CGI::FormBuilder::field with a name argument in list context returns zero or more user-specified values of the named field, even if that field was not declared as supporting multiple values. Passing the result of field as a function parameter counts as list context. This is the same bad behaviour that is now discouraged for CGI::param. In this case we pass the multiple values to CGI::Session::param. That accessor has six possible calling conventions, of which four are documented. If an attacker passes (2*n + 1) values for the 'name' field, for example name=a&name=b&name=c, we end up in one of the undocumented calling conventions for param: # equivalent to: (name => 'a', b => 'c') $session->param('name', 'a', 'b', 'c') and the 'b' session parameter is unexpectedly set to an attacker-specified value. In particular, if an attacker "bob" specifies name=bob&name=name&name=alice, then authentication is carried out for "bob" but the CGI::Session ends up containing {name => 'alice'}, an authentication bypass vulnerability. This vulnerability is tracked as OVE-20170111-0001. (cherry picked from commit e909eb93f4530a175d622360a8433e833ecf0254)
* git: don't redundantly pass "--" to git_sha1Simon McVittie2017-01-09
| | | | | | | | | | | | | | | git_sha1 already puts "--" before its arguments, so git_sha1_file($dir, 'doc/index.mdwn') would have incorrectly invoked git rev-list --max-count=1 HEAD -- -- doc/index.mdwn If there is no file in the wiki named "--", that's harmless, because it merely names the latest revision in which either "--" or "doc/index.mdwn" changed. However, it could return incorrect results if there is somehow a file named "--".
* git: use parameters, not global state, to swap working directorySimon McVittie2017-01-09
|
* Revert "git: Turn $git_dir into a stack"Simon McVittie2017-01-09
| | | | | | | Now that we have avoided using in_git_dir recursively, we don't need the stack any more. This reverts commit 39b8931ad31fe6b48afdc570caa459a0996c2092.
* git: do not mix in_git_dir with eval{}Simon McVittie2017-01-09
| | | | | | | | If we throw an exception (usually from run_or_die), in_git_dir won't unshift the current directory from the stack. That's usually fine, but in rcs_preprevert we catch exceptions and do some cleanup before returning, for which we need the git directory to be the root and not the temporary working tree.
* Use rel=nofollow microformat for dynamic (CGI-related) URLsSimon McVittie2017-01-09
| | | | | | | Some of these might be relatively expensive to dereference or result in messages being logged, and there's no reason why a search engine should need to index them. (In particular, we'd probably prefer search engines to index the rendered page, not its source code.)
* Enquote $background_command as surely intended.Amitai Schleier2017-01-02
|
* git: Do not disable commit hook for temporary working treeSimon McVittie2016-12-29
| | | | | | | | We exclude .git/hooks from symlinking into the temporary working tree, which avoids the commit hook being run for the temporary branch anyway. This avoids the wiki not being updated if an orthogonal change is received in process A, while process B prepares a revert that is subsequently cancelled.