Commit Graph

927 Commits

Author SHA1 Message Date
Nicolas Giard
87fcfca6d7 feat: add Plausible Analytics module 2021-10-28 22:30:28 -04:00
NGPixel
5911867b21
fix: various OAuth2 fixes 2021-10-15 22:36:30 -04:00
Artur Shaik
87084c66b0
feat: Generic OAuth2 authentication implementation (#3094)
* OAuth2 authentication implementation

This PR shoul fix #2392. Used `passport-oauth2` strategy.

* indentations cleanup

* cleanup code
2021-10-15 22:25:15 -04:00
broxen
12aef93cd6
fix: remove excess div wrappers (#4528)
* Removing superfluous div wrapping

It seems like standalone text is already wrapped in paragraph elements, so this code seems superfluous. Additionally, it adds div wrappers at every line break as described in #4524

* Fix for newlines and returns

This change skips newlines and returns to focus on unbounded text only.

* misc: fix indentation

* misc: fix indentation (2)

Co-authored-by: Nicolas Giard <github@ngpixel.com>
2021-10-09 14:09:54 -04:00
mordini
d93bd1ad5a
fix: git storage - 'import everything' feature restored (#4559) (#4572) 2021-10-09 13:59:47 -04:00
broxen
db73b650c9
fix: issue with Custom Header IDs (#4527)
Fix the issue described in discussion #3502 regarding header links and TOC failing to properly generate when header ID is custom defined.
2021-10-01 20:22:55 -04:00
Beh
ed3925b1c5
fix: use first email address in Rocket.Chat auth response (#3122) 2021-09-29 20:42:48 -04:00
craph
3814eef922
fix: admin email setup toLowerCase (#4516) 2021-09-29 20:41:04 -04:00
Frederic Alix
8d1f752620
feat: add possibility to set PostgreSQL schema other than public (#4161) 2021-09-24 22:56:44 -04:00
Paul Saunders
66bf914725
fix: scheduled git sync task (#4481)
Signed-off-by: Paul Saunders <paul.saunders@finbourne.com>

Co-authored-by: Rainshaw <rxg@live.com>
2021-09-24 22:51:56 -04:00
Rainshaw
1dc974245f
fix: sftp error when dir already exists (#4024)
when the dir exists, sftp.mkdir() would raise an error and ends the for loop.
2021-09-14 20:14:32 -04:00
Andrew Yefanov
94aab69ba8
fix: add beacon and error beacon newrelic parameters for eu region support (#4421)
* add beacon and error beacon newrelic parameters for eu region support
* add default NewRelic beacon URIs
2021-09-14 20:11:57 -04:00
NGPixel
d5a5820c2f fix: remove unused middleware 2021-09-11 21:02:53 -04:00
Eric Knibbe
c5a45e578e
fix: git storage - handle renamed files & assets (#4307) 2021-09-01 12:11:33 -04:00
Étienne
9864be884d
fix: replace passport-slack implementation (#4369)
This commit replaces the observably defunct @aoberoi/passport-slack
implementation with that of nmaves's passport-slack-oauth2
2021-09-01 12:07:34 -04:00
Denis
ee8006892e
feat: add support of hd auth parameter to work with G Suite domains (#4010)
* Add support of hd google auth parameter - to work with G Suite domains

* Style-fix

* fix: google auth hostedDomain hint

Co-authored-by: Nicolas Giard <github@ngpixel.com>
2021-05-24 18:04:11 -04:00
opalmay
9081232e7c
fix: disallow # char in file uploads (#3770) 2021-05-20 15:16:26 -04:00
LK HO
a103127545
fix: graceful shutdown (#3821)
* fix: missing graceful shutdown handler

* fix: asar - use async fs operation

* fix: scheduler - graceful shutdown and wait for running jobs to complete
2021-04-12 11:45:33 -04:00
LK HO
71aa0c9346
fix: jobs/worker - pass through job error from worker process (#3822) 2021-04-12 11:41:36 -04:00
LK HO
a20f70ed8d
fix: rendering/html-core - null checks (#3823) 2021-04-12 11:39:35 -04:00
NGPixel
f55caab359 fix: convert page - handle tabsets 2021-04-02 17:30:04 -04:00
NGPixel
84b927915e fix: convert page - task list + UI fixes 2021-04-02 15:15:35 -04:00
NGPixel
26f1c0f372 feat: convert page 2021-04-02 00:39:11 -04:00
NGPixel
d75c5532d1 fix: handle raw mustache expressions over multiple lines 2021-03-25 23:50:59 -04:00
NGPixel
c57c9d9018 fix: disable cors 2021-03-25 21:21:03 -04:00
Max
033b8e6b21
fix: S3 copyObject usage - Missing bucket name (#3745)
* Fix copyObject usage: supply bucket name

* No semicolon

* Assign empty string on initialization

* Remove empty line
2021-03-23 11:14:29 -04:00
PaulD987
3f001dca2c
fix: loginRedirect doesn't work for non local strategies (#3222) 2021-03-18 21:56:59 -04:00
pylr
e87d511978
fix: HSTS header max-age value (#3225) 2021-03-18 21:53:55 -04:00
NGPixel
5ffa189383 fix: add v-pre to pre tags at render time 2021-03-11 19:23:24 -05:00
Thomas Nilefalk
919d7c12a1
fix: syntax error in rebuild-tree.js (#3048) 2021-02-08 11:26:55 -05:00
Paul
806e4e8f11
fix: get syncInterval from model instead of module data (#3003) 2021-02-01 17:45:34 -05:00
Kevyn Bruyere
b106018029
fix: LDAP - avoid reading empty tls cert file (#2980)
Co-authored-by: Kevyn Bruyere <kevyn@inovasi.fr>
2021-01-31 01:03:24 -05:00
scienceasdf
4b80bab88e
fix: rebuilding tree error when the page number is large enough in sqlite (#2830)
When the total page number is large enough (usually about 80+), sqlite will throw error: "Too many variables". This commit reduces the chunk size for sqlite configuration.
2021-01-29 14:16:33 -05:00
Adrián Martínez Interactiv4
52304a8149
fix: update storage.js to match pageHelper.injectPageMetadata (#2832)
* Update storage.js to match pageHelper.injectPageMetadata

At pageHelper.injectPageMetadata references editorKey and tags to build metadata, but this data seems not to be supplied to this function, since page object is only built from specified columns.

As a result, tags are always empty when exporting pages, and editor key appears as undefined.

It happens also with git storage, but may happen with another storage providers.

I run into this issue running Wiki.js 2.5.170 with the following Docker stack:

CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                                         NAMES
39373979b693        requarks/wiki:2                         "docker-entrypoint.s…"   44 minutes ago      Up 9 minutes        0.0.0.0:80->3000/tcp, 0.0.0.0:443->3443/tcp   wiki
608de6278aaa        requarks/wiki-update-companion:latest   "dotnet wiki-update-…"   5 months ago        Up 6 hours          80/tcp                                        wiki-update-companion
12c7b35ba295        postgres:11                             "docker-entrypoint.s…"   5 months ago        Up 6 hours          5432/tcp                                      db

* Provide id to allow to query for tags

* Update git storage to provide editorKey and tags
2021-01-29 14:15:22 -05:00
drewblin
063251248c
fix: set autocommit for mysql (#2638)
If in server config mysql has autocommit = 0, then wikijs fails with locks like this:
```
2020-10-30T12:56:51.725Z [JOB] error: Rebuilding page tree: [ FAILED ]
2020-10-30T12:56:51.726Z [JOB] error: truncate `pageTree` - Lock wait timeout exceeded; try restarting transaction
```
2020-12-13 14:57:20 -05:00
scienceasdf
d7d00b44f6
fix: search engine broken when renaming or moving pages (#2815)
For building suggest in elasticsearch, the safeContent field will be splitted into arrays. If the page is renamed or moved, the server will throw error: "Cannot read property 'split' of Undefined", and the index will be broken. Here two lines are added to fix this issue.
2020-12-13 14:51:44 -05:00
scienceasdf
d89224405c
feat: set analyzer for elasticsearch (#2793)
* Feature: Custom configuration for elasticsearch

For better search results especially in Chinese, which the standard token analyzer may not work well.

* Set default analyzer in settings when building index

* Remove dangling comma
2020-12-08 21:41:45 -05:00
Eric Knibbe
d04e33eb6b
fix: use absolute URL for logo in email if path relative (#2628) 2020-11-11 11:39:16 -05:00
avioral
089b7850d9 fix: broken draw io diagram on rtl mode, improve elasticsearch config (#2647)
* - Modify elastic settings
- Add tags field to index
- Modify elastic search query
- Remove empty entities from build suggests list

* Fix map parser error

* - Fix broken drawio svg diagram (rtl issue)

* - Restore the spaces in objects to respect the project formatting rules.
- Omit explanation line
2020-11-02 11:59:34 -05:00
YAEGASHI Takeshi
a3513b1bdf
fix: enable passport-azure-ad workaround for SameSite cookies (#2567)
This adds cookieEncryptionKeyString configuration in the Azure AD
authentication module.  It represents an array of cookie encryption
strings and enables workaround for SameSite cookies.
2020-11-01 13:10:50 -05:00
Chris
a6bf2412d7
fix: superscript typo in module definition.yml (#2577)
Fix spelling of "superscript"
***NO_CI***
2020-11-01 13:08:04 -05:00
Nicolas Giard
04a1896811
fix: revert refactor in markdown-kroki and plantuml modules (#2619) 2020-10-25 23:26:55 -04:00
Jafar Akhondali
5ba36ee421
refactor: server code (#2545)
+ Remove duplicated await
+ Replace some legacy codes with ES6
+ Fix some of eslint problems
2020-10-14 11:16:27 -04:00
NGPixel
63c8a308ba fix: remove bugsnag + update deps 2020-10-03 17:30:56 -04:00
NGPixel
fe890979af fix: bypass auth redirect cookie when set to homepage 2020-10-03 17:11:34 -04:00
NGPixel
0fa5b9750d fix: handle missing extra field during page render 2020-10-03 16:50:51 -04:00
NGPixel
9762bdc2ce fix: set enableArithAbort explicit value for tedious driver 2020-10-03 16:46:30 -04:00
Mirko Iannella
31a18c8a67
fix: check for email array during processProfile (#2515)
In our setup (based on yunohost) the profile.email field could be either a string (and that was properly handled) or an array.
This code adds support for the case where it is an array.
2020-10-03 16:23:58 -04:00
Aaron
23e3403054
fix: update Matomo integration client code (#2526)
Signed-off-by: Aaron <admin@datahoarder.dev>
2020-10-03 16:22:02 -04:00
NGPixel
084dcd69d1 fix: strip directory traversal sequences from asset paths 2020-10-03 01:44:57 -04:00
NGPixel
b0f61d6605 feat: rocket.chat auth module 2020-09-20 20:15:51 -04:00
Иван
79c5b8fac2
fix: security html module removes allow attribute from iframes (#2354)
* fix: secure html module removes allowfullscreen, allow and frameborder attributes from iframes
* Apply suggestions from code review
fix: remove deprecated attributes for iframe in secure html module

Co-authored-by: Nicolas Giard <github@ngpixel.com>
2020-09-13 13:55:32 -04:00
Riccardo Re
660b78d9e2
fix: support permissions by tags for basic db search engine (#2416)
This code will allow the "search" component to correctly filter pages by usergroup permissions based on tags instead of paths

Co-authored-by: Riccardo Re <riccardo.re@clevermind.cloud>
2020-09-13 13:53:31 -04:00
NGPixel
1404d6343e fix: API key incorrectly forces token revalidation 2020-09-12 14:33:45 -04:00
NGPixel
8f6cba262f fix: draw.io svgs are no longer removed with linebreaks (#2415) 2020-09-12 14:05:24 -04:00
NGPixel
02c3c66084 fix: checkExclusiveAccess incorrectly includes root admin 2020-09-11 17:37:50 -04:00
NGPixel
7c0d6e2883 fix: prevent write:groups from self-promoting 2020-09-09 22:37:49 -04:00
NGPixel
f988c5f811 fix: logout URL endpoint option for oauth2 module 2020-09-09 20:20:55 -04:00
NGPixel
9009816290 fix: 2fa qr code - handle special chars in site title 2020-09-09 20:10:51 -04:00
NGPixel
aa96e97028 fix: force lowercase for email on local auth 2020-09-09 19:59:46 -04:00
NGPixel
5295e413be fix: bypass page rule check for global permission check + handle missing page extra field 2020-09-09 19:35:43 -04:00
Rus
68d31af7af
fix: discord auth module new URL. (#2390)
Change "discordapp.com" to "discord.com"
2020-09-07 20:04:19 -04:00
NGPixel
78417524b3 feat: ldap avatar support 2020-09-07 20:02:33 -04:00
NGPixel
794ecc6ef6 fix: new install local auth not enabled (#2375) 2020-09-07 14:49:02 -04:00
NGPixel
9f1ba0a32f fix: elastic apm rum client script 2020-09-06 16:57:45 -04:00
NGPixel
af054257bd fix: 2.5.108 migration (2) 2020-09-06 15:36:51 -04:00
NGPixel
0ce63c8ef7 fix: 2.5.108 migration 2020-09-06 15:21:06 -04:00
NGPixel
60f2a2a8d9 fix: migration error for new installs 2020-09-05 23:47:41 -04:00
NGPixel
ef739de970 feat: purge history utility 2020-09-05 23:32:00 -04:00
NGPixel
8490fc1267 feat: handle disabled auth strategies 2020-09-05 18:33:15 -04:00
NGPixel
17f8071abe fix: LDAP missing reqToCallback 2020-09-05 15:19:18 -04:00
NGPixel
062a0b7979 feat: logout by auth strategy + keycloak implementation 2020-09-01 20:01:39 -04:00
jaljo
cda1f1e805
feat: export creation date in dumped content (#2345)
* Export creation date in dumped content

* date_creation -> dateCreated

Co-authored-by: Joris Langlois <joris.langlois@knplabs.com>
2020-08-31 11:28:55 -04:00
NGPixel
ae733392f3 feat: password reset 2020-08-30 21:46:55 -04:00
NGPixel
4dcf664040 fix: handle removed auth strategies 2020-08-30 16:33:52 -04:00
NGPixel
e319355017 feat: enable/disable TFA per user 2020-08-30 14:18:22 -04:00
NGPixel
32d67adee1 feat: social login providers with dynamic instances 2020-08-30 01:36:37 -04:00
moonkey124
a7ddafd4aa
fix: incorrect error name for 1017 (#2331)
Fixed a copy and paste mistake

***NO_CI***
2020-08-29 21:25:22 -04:00
NGPixel
8c205b6950 fix: site title check + UI fixes + 2FA setup on account verify 2020-08-23 12:58:56 -04:00
NGPixel
f72530bf84 refactor: deps update + 2FA setup + verify 2020-08-22 19:37:49 -04:00
Dan Nicholson
d5d368cd33
feat: fix + enable OIDC auth method (#2282)
* fix: pass userinfo URL in oidc strategy

The userinfo URL from the definition was not being provided to the
passport strategy, which resulted in a type error trying to resolve the
user's profile. Furthermore, the name of the defined URL was
inconsistent with all other authentication method URLs.

* fix: pass all necessary scopes to oidc auth method

When no scopes are provided, passport-openidconnect uses only `openid`,
which does not contain the username or email address. Include `profile`
and `email` to ensure the necessary claims are included.

* fix: update oidc method to call processProfile correctly

Now the profile object and providerKey are passed to processProfile. The
usernameClaim no longer has any use as the email address is the
username.

* fix: mark oidc authentication method as available
2020-08-15 13:32:58 -04:00
Marks Polakovs
95b6a7ad82
fix: resolve tags on pages in GraphQL (#2247) 2020-08-09 20:04:44 -04:00
Seyed Sajad Kahani
15bca54bdf
fix: change language in edit, history and source pages (#2194)
* change language in edit, history and source pages

* fix: remove unnecessary i18n locale switch for download page

Co-authored-by: Nicolas Giard <github@ngpixel.com>
2020-07-29 19:54:31 -04:00
Higor Tavares
06c372d53f
fix: foreign key constraint when page have comments (#2199)
* Solving foreing key contraint when page have comments

* Update pages.js

remove indentation changes

Co-authored-by: Higor Tavares <paulo.freire@dellead.com>
2020-07-29 19:39:47 -04:00
NGPixel
26af63a80b fix: login input hints 2020-07-20 00:22:29 -04:00
NGPixel
4cd6fe8a56 fix: unauthorized admin should receive 403 code 2020-07-19 15:30:29 -04:00
NGPixel
4f16dd0c81 fix: admin permissions + restrict nav settings 2020-07-19 15:26:51 -04:00
NGPixel
10f17c5712 feat: redirect on login based on group 2020-07-19 15:13:35 -04:00
NGPixel
be499e5795 fix: auth strategy dependent username label 2020-07-19 13:20:43 -04:00
NGPixel
52d0af19b4 feat: diagram rendering + post-processor (wip) 2020-07-12 15:58:45 -04:00
Regev Brody
b2ff064d34
fix: stream assets from storage local locations (#2087) 2020-07-12 12:19:01 -04:00
NGPixel
57f5cbd5b6 misc: knex update for mssql constraint bug 2020-07-11 16:53:18 -04:00
NGPixel
1ced9649c7 feat: enforce 2fa admin setting + hide local on login screen 2020-07-05 23:55:11 -04:00
NGPixel
b2f292cc39 fix: MSSQL migration 2.5.1 2020-07-05 15:59:02 -04:00
NGPixel
31661b2cb3 fix: token renewal date 2020-07-05 14:16:16 -04:00
NGPixel
b475795595 feat: login bg + bypass + hide local option 2020-07-05 01:36:02 -04:00
NGPixel
5282a82afe fix: wait for sideload locales before server start (#1248) 2020-07-04 17:01:35 -04:00
Nicolas Giard
c009cc1392
feat: new login experience (#2139)
* feat: multiple auth instances

* fix: auth setup + strategy initialization

* feat: admin auth - add strategy

* feat: redirect on login - group setting

* feat: oauth2 generic - props definitions

* feat: new login UI (wip)

* feat: new login UI (wip)

* feat: admin security login settings

* feat: tabset editor indicators + print view improvements

* fix: code styling
2020-07-03 19:36:33 -04:00
Regev Brody
1c4829f70f
fix: tags filtered by access (#2100) 2020-07-03 17:49:54 -04:00
Regev Brody
41327dd1e8
feat: support MultiMarkdown tables (#2126) 2020-07-03 17:46:07 -04:00
TakeruDMC
cf3a48a6fa
fix: "undefined" error on deletePage by git storage (#2132) 2020-07-03 17:44:42 -04:00
Seyed Sajad Kahani
3c5352fb53
fix: change reconnectLink behavior for page move (#1991) 2020-06-28 21:08:17 -04:00
Maho Hiyajo
ea3962d143
fix: change discord module ‘discordapp.com’ to ‘discord.com’ (#2117) 2020-06-27 17:01:00 -04:00
Nicolas Giard
2409b286da
fix: matomo module siteId 2020-06-26 15:34:53 -04:00
NGPixel
1c18f3a4c2 fix: revoke typo 2020-06-25 23:48:16 -04:00
NGPixel
98f21b9f6a fix: revalidate tokens created prior to server startup 2020-06-25 22:04:21 -04:00
NGPixel
92b29d1f06 fix: check revalidation timestamp 2020-06-25 19:25:08 -04:00
NGPixel
c37b0ad1d7 fix: remove console log from authenticate func 2020-06-25 00:04:08 -04:00
NGPixel
a25431bcf8 fix: token revocation incorrect TTL 2020-06-25 00:02:39 -04:00
NGPixel
a690e5597f fix: revocation token list for users + groups 2020-06-24 23:57:35 -04:00
Regev Brody
33a9d5774c
fix: GraphQL error with MySQL and FULL OUTER JOIN (#2104)
* fix: GraphQL error with MySQL and FULL OUTER JOIN #2071
2020-06-24 18:51:21 -04:00
Regev Brody
6ef7b0f130
fix: deactivated users can still refresh their token (#2105) 2020-06-24 18:15:36 -04:00
Regev Brody
4bc284b06e
fix: page schema validation for extra field (#2097) 2020-06-23 18:26:29 -04:00
NGPixel
4cb7f33dcf feat: visual editor code + sub/sup + table props 2020-06-21 14:47:11 -04:00
NGPixel
4855051d87 feat: page published state + comments localization 2020-06-20 22:08:59 -04:00
NGPixel
83b83a7510 feat: page css + scripts 2020-06-20 16:39:36 -04:00
NGPixel
53ddb50b51 feat: save page scripts + styles 2020-06-20 01:11:05 -04:00
NGPixel
718c14dd74 feat: editor props scripts + styles code editor 2020-06-19 21:00:44 -04:00
Regev Brody
0a16929a57
fix: editing buttons showing up even if no action is allowed (#2043)
* feat: Edit / Page Create Buttons showing up even if no action is allowed #1780
2020-06-19 18:54:05 -04:00
NGPixel
b723d7d626 fix: markdown core props + styles/scripts permissions 2020-06-18 22:49:26 -04:00
Regev Brody
77086a6e0a
feat: optional kroki/plantuml svg caching (#2047)
* feat: Caching kroki svgs #2020
2020-06-18 18:39:25 -04:00
Regev Brody
e03a80dccc
feat: underline markdown support (#2073)
* fix: no markdown support for underline #2072
2020-06-18 18:37:24 -04:00
Regev Brody
0e6340f51e
fix: use config value for tokenRenewal expiration (#2042)
* fix: tokenRenewal seems to be hard coded #1540
2020-06-18 13:08:57 -04:00
jonasjoest
3b055f2ed5
fix: use first email address when retrieving multiple from LDAP (#2051)
Signed-off-by: Jonas Jöst <jonas@gpplanet.de>
2020-06-16 00:11:38 -04:00
Nicolas Giard
9e08718ee9
Merge pull request from GHSA-9jgg-4xj2-vjjj 2020-06-13 21:43:21 -04:00
Regev Brody
4ffd1325bd
fix: sidebar is empty when the jwt token is expired (#2037) 2020-06-10 09:11:14 -04:00
Regev Brody
037822b994
fix: secure html module removes target attribute from links (#2012) 2020-06-07 19:23:33 -04:00
NGPixel
ca0708ea75 feat: extra options for generic S3 module 2020-06-07 18:28:16 -04:00
NGPixel
e45145986a feat: generic S3 module 2020-06-07 18:08:33 -04:00
Regev Brody
a508a27475
fix: validate permissions when listing assets (#1928)
* fix: assets permission issues #1926
2020-06-07 16:58:12 -04:00
NGPixel
65f71d8e3b fix: strip starting slash from path during page create 2020-06-05 14:52:36 -04:00
NGPixel
deacd80c45 fix: dashboard invalid version on load 2020-06-05 14:46:54 -04:00
NGPixel
c2a0773633 fix: site config host slice 2020-06-04 00:33:27 -04:00
NGPixel
2013ee4fa2 fix: failed auth strategy prevent local auth from initializing 2020-06-01 21:20:21 -04:00
NGPixel
3891816758 fix: setup assets location + mysql migration 2.4.13 2020-05-31 22:39:45 -04:00
NGPixel
7a946ec0f5 feat: edit comment 2020-05-31 18:15:15 -04:00
NGPixel
e74605501f feat: comments post min delay 2020-05-31 15:54:20 -04:00
NGPixel
8a74904731 feat: comments delete + refresh on post + formatting 2020-05-31 02:13:41 -04:00
NGPixel
83f7c2867d fix: admin security UI 2020-05-30 16:42:48 -04:00
NGPixel
1f9e5b3fd0 feat: delete user with replace target 2020-05-30 16:34:09 -04:00
daneallen
20e6bc1a70
fix: Open Redirect Vulnerability Mitigation - CWE 601 (#1963)
* Open redirect vulnerabilty mitigation

* Refacted Open Redirect to user configurable and corrected incorrect security variable names.

Co-authored-by: danallendds <daniel.allen@friends.dds.mil>
2020-05-29 18:24:20 -04:00
NGPixel
1222355046 feat: comments - default provider create (wip) + permissions 2020-05-26 22:56:24 -04:00
NGPixel
8205faca53 feat: use asar for twemoji assets 2020-05-24 18:02:05 -04:00
NGPixel
a0618ee4f6 feat: comments UI improvements 2020-05-23 18:49:10 -04:00
Regev Brody
8a1b5b1383
fix: S3 Export all trigger (#1922) 2020-05-22 13:20:47 -04:00
NGPixel
6b561623ee fix: incorrect migration name 2.4.14 2020-05-21 00:20:57 -04:00
NGPixel
df246af3bb fix: remove makefile + update nvmrc version 2020-05-21 00:20:57 -04:00
NGPixel
e1382771cf feat: extensions check + resolver 2020-05-21 00:20:57 -04:00
NGPixel
fb6c01c538 fix: legacy page view 2020-05-21 00:20:57 -04:00
NGPixel
887e8a0f5a feat: comments disqus + commento 2020-05-21 00:20:57 -04:00