Isso – a commenting server similar to Disqus
Isso – Ich schrei sonst – is a lightweight commenting server written in Python and JavaScript. It aims to be a drop-in replacement for Disqus.
See posativ.org/isso for more details.
Isso – Ich schrei sonst – is a lightweight commenting server written in Python and JavaScript. It aims to be a drop-in replacement for Disqus.
See posativ.org/isso for more details.
The PR is now closed due to a lot of messes.
I'll create separate PRs in the future about this PR.
If you wanna try the feature in this PR to help me with my future PRs, you can try the notification
branch, which will serve as an upstream for the newly added mail module.
PR separation (will do the next one once the current one is merged):
lang
option and the translation about the term Anonymous
from isso/js/app/i18n/
format
option and translation templates for mail.format
in email.format
in email.template
option for mail template path customization.Available options: plain
, html
, multipart
. Default set to plain
, so you don't need to config this in the mail block of the isso server conf if you mean to use plain text:
[mail]
...
format = plain
To use multipart, set the option to multipart
in the mail block of the isso server conf:
[mail]
...
format = multipart
To use html, set the option to html
in the mail block of the isso server conf:
[mail]
...
format = html
To customize the mail title, set like the following options in the mail block of the isso server conf:
[mail]
...
subject_admin = {replier} commented on {title}
subject_user_new_comment = {receiver}, {replier} replied {repliee}'s comments on {title}
subject_user_reply = {replier} replied to your comments on {title}
IN the example, subject_user
is set to two values, then the first one will be used when {repliee}'s comment is not the {receiver}'s original one, the second one will be used otherwise.
subject_user
can be set to a value, then the value will be used all the time in the reply notification.
Result:
[mail]
...
language = en
https://github.com/posativ/isso/pull/518#issuecomment-450546330
All three formats support customization, it helps to read the dafault configuration for details (isso/templates/comment.html
for format = html
, isso/templates/comment.plain
for format = plain
).
To use the feature, set the following options like this in the mail block of the isso server conf:
[mail]
...
template = /the/path/to/the/directory/or/a-single-template
If you set it to the path to a directory,
for format = html
it will check if admin.html
and user.html
in that directory are available.
(For format = plain
it will check admin.plain
and user.plain
;
For format = multipart
, it will check admin.html
and user.html
for html part, admin.plain
and user.plain
for plain part)
The name of the file should be self-explaining. user.html
and user.plain
are used for reply notifications to the subcribed users, admin.html
and admin.plain
are used for mail notifications to the admin.
If one of these is missing then in the corresponding case the template will fall back to the default.
The log will tell you what happened when the error occurs. The template will be rendered by Jinja2.
Alternatively, you could just directly edit the default mail template without setting the option template
.
Default template path for format = plain
(Different if you set a different mail language using the option language
):
When mail language is not set using language
or set via language = en
: isso/templates/comment.plain
When it's set any other language than en
using language
, take language = ja
for example: isso/templates/comment_ja.plain
Default template path for format = html
(Different if you set a different mail language using the option language
):
When mail language is not set using language
or set via language = en
: isso/templates/comment.html
When it's set any other language than en
using language
, take language = ja
for example: isso/templates/comment_ja.html
Default template path for format = multipart
:
html part: the same as Default template path for format = html
(listed above)
plain part: the same as Default template path for format = plain
(listed above)
Templating Examples: https://github.com/posativ/isso/pull/518#issuecomment-450542453
HTML Styling suggestion: Using inline css as much as u can, cause webmail service like gmail will block any kind of css on the web other than the inline css. In imap <style>
tag works in mail. Don't leave out the <html>
out as this will add to spam score to your mail.
Format choose suggestion: Don't use format = html
, the mail will have a higher spam score for having only html part. If you wanna use html, use format = multipart
instead.
Plain Text Customization Suggestion: remember to tidy your text and remove every unnecessary spaces besides the comment you want (things like {#...#}
won't be rendered), 'cause they will be rendered into the final mail.
Fallback Template: https://github.com/posativ/isso/pull/518#issuecomment-450537644
Hi,
I love Isso, but the only thing that prevent me to drop Disqus for Isso is the ability for commenters to receive an email notification of reply.
I get a working version with this feature (I use it in production on my blog: http://thomassileo.com), it still need some improvement, I just open the pull request to open the discussion.
What do you think about this feature ?
I added a field in the comment table, is this something that will prevent you to merge this feature ?
Let me know what you think about this,
Thanks!
I just set up isso for my blog and ran into an issue with the documentation.
You mention embedding embed.min.js into the website, but you never once mention where it's from.
Since I already new about the Embed.js library I got the code from that library and called that up.
Lo and behold, nothing happened.
Luckily I found a blog (in french) which mentioned copying js files from isso/lib/python2.7/site-packages/isso/js into Apache's directories led me onto the straight path.
I therefore believe that it is necessary to include this into the documentation. I can probably produce a Pull Request, if it would help, even though I haven't worked with Sphinx before.
I'm running isso 0.10.6 installed via pip on uberspace7 and added it (embed.min.js) to my Pelican driven blog. When loading the page, I can see the form and also the text that there is no comment yet, but when I try to submit a comment, I get a 403 on the POST request.
The request was
Accept: / Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.5 Connection: keep-alive Content-Length: 180 Content-Type: application/json Cookie: 4=WzQsIjg0MDQ1NGQwNDFlNjUyMmQ2NTE2NzNmNTdlNDlmOTQ2N2ZkYzdlYTgiXQ.DaZoLw.YCChMYMt4mQPoCNrY2MPndQ1sBQ; 5=WzUsIjUyMjVhZWJkMmI4YzQyZDBhYmY5ZjAzN2I5NTI5M2NkZmQ4MTM4YWYiXQ.DaZoOw.Rl2ZxtdGnsbksZWaDpC1rdi0HAY; 6=WzYsIjhjYTE4N2QzYjRhOGU0ZGRiOWQzMjBiMTE1YjkyYjRlOGUxYThmOWMiXQ.DaZpZw.mN6xd0BMG8NehUY6t2txP05kC5M DNT: 1 Host: isso.mydomain.de Origin: https://mydomain.de Referer: https://mydomain.de/ User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:59.0) Gecko/20100101 Firefox/59.0
and the response is
HTTP/2.0 403 Forbidden access-control-allow-credentials: true access-control-allow-headers: Origin, Referer, Content-Type access-control-allow-methods: HEAD, GET, POST, PUT, DELETE access-control-allow-origin: https://mydomain.de access-control-expose-headers: X-Set-Cookie, Date content-length: 153 content-type: text/html; charset=UTF-8 date: Wed, 04 Apr 2018 13:57:09 GMT referrer-policy: strict-origin-when-cross-origin server: nginx strict-transport-security: max-age=172800 x-content-type-options: nosniff X-Firefox-Spdy: h2 x-frame-options: SAMEORIGIN x-xss-protection: 1; mode=block
Did I miss something in the docs? Do I need to adjust some file access? Any help appreciated.
support docsHello there!
I have an issue. I have followed the Quickguide instructions, and added Isso to my website, but I cannot send comments.
I am running isso in /opt/isso
. The nginx is in /etc/nginx
. These are my configuration files:
isso.cfg here. nginx.conf here. (here is the javascript code, in case it might be of help. Nothing special there. Just copy pasted from another site))
My html code is:
<!-- comments enabled (isso) -->
<div class="comments">
<h2 class="isso-title">Comments</h2>
<script type="text/javascript"
data-title="Comments"
data-isso="//comments.127.0.0.1:4000/"
data-isso-css="true"
data-isso-lang="en"
data-isso-reply-to-self="false"
data-isso-require-author="false"
data-isso-require-email="false"
data-isso-max-comments-top="10"
data-isso-max-comments-nested="5"
data-isso-reveal-on-click="5"
data-isso-avatar="true"
data-isso-avatar-bg="#f0f0f0"
data-isso-avatar-fg="#9abf88 #5698c4 #e279a3 #9163b6 #2069b6 #486910 #e4bf80 #0f0f0f"
data-isso-vote="true"
data-vote-levels="[-5,5,15]"
src="https://cdnjs.cloudflare.com/ajax/libs/embed-js/4.2.2/embed.min.js"></script>
<section id="isso-thread"></section>
</div>
The comment's box does appear on my website, but when I click submit, nothing happens.
This is what I do to run my site (locally):
bundle exec jekyll serve
(using jekyll). This gives me a server address at http://127.0.0.1:4000/
source /opt/isso/bin/activate
isso -c /opt/isso/isso.cfg run
. This gives me the message: connected to http://127.0.0.1:4000/
Then, I go to a particular subdomain in my website (http://127.0.0.1:4000/blog/2017/097/hello/
), and try to submit a comment, but nothing happens.
What is the issue? Am I actually running the proxy with nginx? Notice that my site is a blog and the comment box appears on every page. Is that ok?
Some settings (reply-to-self and require-email) always need to be set to the same value on server and client side for correct operation. This change removes the need for such redundant information by having the client read out those settings from the server.
According to the docs this should be true for require-author as well, but that settings doesn't seem to be implemented.
server client featureI have this
# Isso can notify you on new comments via SMTP. In the
# email notification, you also can moderate comments. If
# the server connection fails during startup, a null
# mailer is used.
[smtp]
# self-explanatory, optional
username =
# self-explanatory (yes, plain text, create a dedicated
# account for notifications), optional.
password =
# SMTP server
host = localhost
# SMTP port
port = 587
#465
# use a secure connection to the server, possible values: "none", "starttls"
# or "ssl". Python 2.X probably does not validate certificates (needs
# research). But you should use a dedicated email account anyways.
security = none
#starttls
#ssl
# recipient address, e.g. your email address
to = [email protected]
# sender address, e.g. [email protected]
#from = [email protected]
in isso.conf but SMTP sending emails does not work. I use Exim4. What is wrong?
The service appears to be running, but it appears Isso decided to quit.
$ sudo systemctl status isso
sudo systemctl status isso
● isso.service - Isso Commenting Server
Loaded: loaded (/etc/systemd/system/isso.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-08-20 04:02:55 UTC; 3ms ago
Main PID: 1801 (systemd)
Tasks: 0 (limit: 4915)
CGroup: /system.slice/iss
My config:
[general]
dbpath = /var/lib/isso/comments.db
host = https://domain/
max-age = 15m
notify = smtp
log-file = /var/log/isso.log
[moderation]
enabled = false
[server]
listen = http://localhost:1943
reload = off
profile = off
[guard]
enabled = true
ratelimit = 2
direct-reply = 3
reply-to-self = false
require-author = false
require-email = false
Aug 20 04:11:49 cbtree isso[2010]: Traceback (most recent call last):
Aug 20 04:11:49 cbtree isso[2010]: File "/home/isso/.local/bin/isso", line 7, in <module>
Aug 20 04:11:49 cbtree isso[2010]: from isso import main
Aug 20 04:11:49 cbtree isso[2010]: File "/home/isso/.local/lib/python3.6/site-packages/isso/__init__.py", line 60
Aug 20 04:11:49 cbtree isso[2010]: from werkzeug.wsgi import SharedDataMiddleware
Aug 20 04:11:49 cbtree isso[2010]: ImportError: cannot import name 'SharedDataMiddleware'
Aug 20 04:11:49 cbtree systemd[1]: isso.service: Main process exited, code=exited, status=1/FAILURE
Aug 20 04:11:49 cbtree systemd[1]: isso.service: Failed with result 'exit-code'.
Aug 20 04:11:49 cbtree sudo[2012]: cranberrypie : TTY=pts/0 ; PWD=/home/cranberrypie ; USER=root ; COMMAND=/bin/journalct
Aug 20 04:11:49 cbtree sudo[2012]: pam_unix(sudo:session): session opened for user root by cranberrypie(uid=0)
question
Hi,
I followed your quickstart guide but it seems that isso does not work. You could check it here.
My nginx config is:
server {
listen 80;
server_name comments.somenxavier.xyz;
location / {
proxy_pass http://localhost:8000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
My isso config is:
[general]
dbpath = /var/isso/comments.db
host = http://somenxavier.xyz/
name = hola
[server]
listen = http://localhost:8080/
What is wrong?
Thanks in advance,
I can't figure out what's exactly wrong. Also, how do I see the Isso version?
isso@vm-150:~$ sudo systemctl status isso
isso.service - Isso Commenting Server
Loaded: loaded (/etc/systemd/system/isso.service; enabled; vendor preset: enab
Active: activating (auto-restart) (Result: exit-code) since Tue 2020-03-24 19:
Process: 9223 ExecStart=/home/isso/.local/bin/isso -c /home/isso/isso.conf (cod
Main PID: 9223 (code=exited, status=2)
Mar 24 19:13:12 vm-150 systemd[1]: isso.service: Unit entered failed state.
Mar 24 19:13:12 vm-150 systemd[1]: isso.service: Failed with result 'exit-code'
lines 1-8/8 (END)
support question needs-more-info
Hi! I see tons of useful features merged in the repo, but no new releases.
To be able to benefit from those new features, it would be great to have some documentation about how to switch from a running isso installed with pip install isso
to the version at GitHub.
Would it be something like cd
into the isso folder, delete the content, do git clone, and then pip install .
? Using virtualenv, right? Is there a way to go back? (probably backup the database and the folder first?). Are there new required/important config settings?
Thank you :)
docsmaster
branch does not fix my issueI have a couple of extremely persistent spammers who have not yet realized that I moderate all my comments. It would be nice if I could make comments from specific email addresses or matching specific URL patterns just go into a black hole so that I don't have to see them ever again.
master
branch does not fix my issueNot all comments are loaded. The comment count on the top of the page is always correct, but at the bottom of the article not all comments are shown. I noticed that sometimes switching from http
to https
in the URL bar of the browser helps, but not always. See for example:
I haven't been able to figure out a reproducible pattern.
I'm running isso 0.13.0 as fcgi, and this is my host
stanza from the config file:
; your website or blog (not the location of Isso!)
host =
http://www.mardy.it/
https://www.mardy.it/
http://mardy.it/
https://mardy.it/
http://blog.mardy.it/
https://blog.mardy.it/
I had the same issue with isso 0.12.x, so it's not a regression.
master
branch does not fix my issueThe documentation here makes note of a number of extensions that can be added to the default Markdown editor, such as "math", "footnotes", "highlight", "tables" etc. However, even after adding them to the configuration, there does not seem to be any change, and no errors in the logs either.
Isso configuration file contains the following [markup] section:
[markup]
options = autolink, fenced-code, no-intra-emphasis, strikethrough, superscript, math, highlight, tables, underline
flags = hard-wrap
allowed-elements =
allowed-attributes =
The "default" ones -- "autolink, fenced-code, no-intra-emphasis, strikethrough, superscript" work correctly and as expected, adding and removing them from the line produces the expected results. However, "math, highlight, tables, underline" produce no effect whatsoever. A demo can be seen on this page, the last comment: https://mihnea.net/hello-world/#isso-11
Is there something I'm missing from the installation? The Misaka library appears to be present under isso/lib/python3.9/site-packages/misaka
and is at version 2.1.1.
CHANGES.rst
because this is a user-facing change or an important bugfixSet encoding=UTF-8 in open methods used in config module to load configuration files.
I've been facing UnicodeDecodeError issues using Apache2 + mod_wsgi + Isso.
I've found 2 solutions:
encoding="utf8"
in io.open
callsWSGIDaemonProcess
in the Apache vhost config. See this blog post from Graham (maintainer of the mod_wsgi)I'm using this second option but still, I think this is a small reliability improvment for Isso to explicitly use UTF8 to read configuration files.
isso_wsgi.py
:
import site # noqa: E402
site.addsitedir("{{ comments_path }}.venv")
from pathlib import Path # noqa: E402
# 3rd party
from isso import config, make_app # noqa: E402
# globals
isso_conf_file = Path(__file__).parent / "isso-prod.cfg"
application = make_app(
config.load(
config.default_file(),
str(isso_conf_file.resolve())
),
multiprocessing=True,
threading=True,
)
tail /var/log/apache2/geotribu_comments_error.log -n 25
:
[Thu Nov 03 17:39:15.240427 2022] [wsgi:error] [pid 2047229:tid 139679207601728] [remote 86.229.66.142:45462] File "/var/www/geotribu/comments/isso_wsgi.py", line 20, in <module>
[Thu Nov 03 17:39:15.240429 2022] [wsgi:error] [pid 2047229:tid 139679207601728] [remote 86.229.66.142:45462] config.load(
[Thu Nov 03 17:39:15.240433 2022] [wsgi:error] [pid 2047229:tid 139679207601728] [remote 86.229.66.142:45462] File "/var/www/geotribu/comments/.venv/lib/python3.10/site-packages/isso/config.py", line 153, in load
[Thu Nov 03 17:39:15.240435 2022] [wsgi:error] [pid 2047229:tid 139679207601728] [remote 86.229.66.142:45462] parser.read_file(f)
[Thu Nov 03 17:39:15.240439 2022] [wsgi:error] [pid 2047229:tid 139679207601728] [remote 86.229.66.142:45462] File "/usr/lib/python3.10/configparser.py", line 719, in read_file
[Thu Nov 03 17:39:15.240441 2022] [wsgi:error] [pid 2047229:tid 139679207601728] [remote 86.229.66.142:45462] self._read(f, source)
[Thu Nov 03 17:39:15.240444 2022] [wsgi:error] [pid 2047229:tid 139679207601728] [remote 86.229.66.142:45462] File "/usr/lib/python3.10/configparser.py", line 1021, in _read
[Thu Nov 03 17:39:15.240446 2022] [wsgi:error] [pid 2047229:tid 139679207601728] [remote 86.229.66.142:45462] for lineno, line in enumerate(fp, start=1):
[Thu Nov 03 17:39:15.240450 2022] [wsgi:error] [pid 2047229:tid 139679207601728] [remote 86.229.66.142:45462] File "/usr/lib/python3.10/encodings/ascii.py", line 26, in decode
[Thu Nov 03 17:39:15.240452 2022] [wsgi:error] [pid 2047229:tid 139679207601728] [remote 86.229.66.142:45462] return codecs.ascii_decode(input, self.errors)[0]
[Thu Nov 03 17:39:15.240460 2022] [wsgi:error] [pid 2047229:tid 139679207601728] [remote 86.229.66.142:45462] UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 210: ordinal not in range(128)
[Thu Nov 03 17:47:27.489385 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] mod_wsgi (pid=2052433): Failed to exec Python script file '/var/www/geotribu/comments/isso_wsgi.py'.
[Thu Nov 03 17:47:27.489485 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] mod_wsgi (pid=2052433): Exception occurred processing WSGI script '/var/www/geotribu/comments/isso_wsgi.py'.
[Thu Nov 03 17:47:27.489931 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] Traceback (most recent call last):
[Thu Nov 03 17:47:27.489961 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] File "/var/www/geotribu/comments/isso_wsgi.py", line 20, in <module>
[Thu Nov 03 17:47:27.489964 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] config.load(
[Thu Nov 03 17:47:27.489968 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] File "/var/www/geotribu/comments/.venv/lib/python3.10/site-packages/isso/config.py", line 153, in load
[Thu Nov 03 17:47:27.489971 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] parser.read_file(f)
[Thu Nov 03 17:47:27.489974 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] File "/usr/lib/python3.10/configparser.py", line 719, in read_file
[Thu Nov 03 17:47:27.489977 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] self._read(f, source)
[Thu Nov 03 17:47:27.489991 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] File "/usr/lib/python3.10/configparser.py", line 1021, in _read
[Thu Nov 03 17:47:27.489994 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] for lineno, line in enumerate(fp, start=1):
[Thu Nov 03 17:47:27.489997 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] File "/usr/lib/python3.10/encodings/ascii.py", line 26, in decode
[Thu Nov 03 17:47:27.490000 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] return codecs.ascii_decode(input, self.errors)[0]
[Thu Nov 03 17:47:27.490011 2022] [wsgi:error] [pid 2052433:tid 139659067721280] [remote 86.229.66.142:53850] UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 210: ordinal not in range(128)
master
branch does not fix my issue — I am using the latest docker image: ghcr.io/isso-comments/isso:0.13.0
I have ISSO showing imported comments, but posting comments doesn't work.
When I try to post a comment, a POST
is sent to https://comments.domain.tld/new?uri=%2F2019%2F12%2Fblog-title-slug%2F
and ISSO returns 404:
<!doctype html>
<html lang=en>
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>URI does not exist %s</p>
Here is my isso.cfg
:
[general]
name = domain
host =
http://blog.domain.tld/
https://blog.domain.tld/
dbpath = /config/comments.db
gravatar = true
[guard]
enabled = true
ratelimit = 2
Here is my nginx config for comments.domain.tld
:
server {
server_name comments.domain.tld;
listen 443 ssl;
listen 80;
ssl_certificate /etc/letsencrypt/live/comments.domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/comments.domain.tld/privkey.pem;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://isso:8081;
}
}
Here is the HTML that's used to load the comments on the page:
<script data-isso="//comments.domain.tld/"
data-isso-vote="false"
src="//comments.domain.tld/js/embed.min.js"></script>
<section id="isso-thread">
<noscript>Javascript needs to be activated to view comments.</noscript>
</section>
ISSO is being run using the docker image ghcr.io/isso-comments/isso:0.13.0
, with the default command which I believe is this (only modified the port):
/isso/bin/gunicorn -b 0.0.0.0:8081 -w 4 --preload isso.run --worker-tmp-dir /dev/shm
needs-contributor bug docs
master
branch does not fix my issueEDIT: I've figured out what the problem is! Even though I've solved it, I've modified the issue title to indicate that this is (I believe) something that should be more clearly documented and explained. See my followup comment below this post.
According to this documentation it is possible to setup ISSO so that everything gets routed through a /isso/
path: https://isso-comments.de/docs/reference/multi-site-sub-uri/#sub-uri
This doesn't work.
ISSO will still make multiple requests to the root domain that do not follow this path, and the documentation isn't clear on how to fix this.
For example, ISSO will try to connect to /?uri=...
, /new?uri=...
, /config
, /css/isso.css
, and possibly other paths.
This makes it impossible to run ISSO on the same website as the blog.
My nginx setup looks something like this:
server {
server_name blog.domain.tld ;
root /var/www/blog.domain.tld;
listen 443 ssl;
listen 80;
ssl_certificate /etc/letsencrypt/live/blog.domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.domain.tld/privkey.pem;
location / {
try_files $uri $uri/;
add_header Cache-Control "private, max-age=0, no-cache";
}
location /isso {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Script-Name /isso;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://isso:8081;
}
}
My isso.cfg
looks something like this:
[general]
name = isso
host = http://blog.domain.tld/
dbpath = /config/comments.db
gravatar = true
[guard]
enabled = true
ratelimit = 2
My docker-compose.yml
has a service that looks something like this:
isso:
# https://github.com/isso-comments/placeholder/blob/master/Dockerfile
image: ghcr.io/isso-comments/isso:0.13.0
command: ${ISSO_CMD:-/isso/bin/gunicorn -b 0.0.0.0:8081 -w 4 --preload isso.run --worker-tmp-dir /dev/shm}
depends_on:
- logs
logging:
driver: fluentd
options:
tag: "{{.Name}}.log"
expose:
- "8081"
extra_hosts:
- "blog.domain.tld:192.168.1.17"
volumes: # save config to vol/isso/isso.cfg
- ./vol/isso:/config
- ./cache/localtime:/etc/localtime:ro
For local development, I've also added an alias in /etc/hosts
on the host machine for blog.domain.tld
that points to 127.0.0.1
and have added a similar entry to the docker container via extra_hosts
.
Full release notes: News
.cfg
extension, unify getting conf location by @ix5 in https://github.com/posativ/isso/pull/827/count
request if there are no counters by @BBaoVanC in https://github.com/posativ/isso/pull/869contenteditable
div
with textarea
by @BBaoVanC in https://github.com/posativ/isso/pull/887Full Changelog: https://github.com/posativ/isso/compare/0.12.6...0.13.0
Source code(tar.gz)Note: This is a hotfix release.
Full Changelog: https://github.com/posativ/isso/compare/0.12.6.1...0.12.6.2
Note: This is a hotfix release.
Full Changelog: https://github.com/posativ/isso/compare/0.12.6...0.12.6.1
Postbox
before comment list again (fixes https://github.com/posativ/isso/issues/815)<pre>
for comments in admin area by @ix5 in https://github.com/posativ/isso/pull/604Full Changelog: https://github.com/posativ/isso/compare/0.12.5...0.12.6
Source code(tar.gz)Bugs & features:
Translations:
add support for different vote levels, #260
List of vote levels used to customize comment appearance based on score. Provide a comma-separated values (eg. "0,5,10,25,100"
) or a JSON array (eg. "[-5,5,15]"
).
For example, the value "-5,5"
will cause each isso-comment
to be given one of these 3 classes:
isso-vote-level-0
for scores lower than -5
isso-vote-level-1
for scores between -5
and 4
isso-vote-level-2
for scores of 5
and greaterThese classes can then be used to customize the appearance of comments (eg. put a star on popular comments).
add new post preview API endpoint, #254
add an option for mandatory author, #257
clients can now use data-title
to get the HTML title for a new page, #252
add finish translation and other minor bugfixes
Also a new release is required for the source distribution, since 0.10 has been uploaded previously and can no longer be re-uploaded on PyPi (see https://github.com/pypa/packaging-problems/issues/75).
Source code(tar.gz)add new configuration section for hash handling.
[hash]
salt = Eech7co8Ohloopo9Ol6baimi
algorithm = pbkdf2
You can customize the salt, choose different hash functions and tweak the parameters for PBKDF2.
Python 3.4+ validate TLS connections against the system's CA. Previously no validation was in place, see PEP-446 for details.
add fenced_code
and no_intra_emphasis
to default configuration.
Fenced code allows to write code without indentation using ~~~
delimiters (optionally with language identifier).
Intra emphasis would compile foo_bar_baz
to foobarbaz. This behavior is very confusing for users not knowing the Markdown spec in detail.
new configuration to require an email when submitting comments, #199. Set
[guard]
require-email = true
and use data-isso-require-email="true"
to enable this feature. Disabled by default.
new Bulgarian translation by sahwar, new Swedish translation by Gustav Näslund – #143, new Vietnamese translation by Đinh Xuân Sâm, new Croatian translation by streger, new Czech translation by Jan Chren
fix SMTP setup without credentials, #174
version pin Misaka to 1.x, html5lib to 0.9999999
Fix #174.
Source code(tar.gz)remember name, email and website in localStorage, #119
add option to hide voting feature, #115
data-isso-vote="true|false"
remove email field from JSON responses
This is a quite serious issue. For the identicon, an expensive hash is used to avoid the leakage of personal information like a real email address. A git blame
reveals, the email has been unintenionally exposed since the very first release of Isso :-/
The testsuite now contains a dedicated test to prevent this error in the future.
prevent no-break space ( ) insertion to enable manual line breaks using two trailing spaces (as per Markdown convention), #112
limit request size to 256 kb, #107
Previously unlimited or limited by proxy server). 256 kb is a rough approximation of the next database schema with comments limited to 65535 characters and additional fields.
add support for logging to file, #103
[general]
log-file =
show timestamp when hovering
fix a regression when editing comments with multiple paragraphs introduced in 0.9.3 which would HTML escape manually inserted linebreaks.
Add translation for Esperanto
Source code(tar.gz)comment pagination by Srijan Choudhary, #15
Isso can now limit the amount of comments shown by default and add link to show more. By default, all top-level comments are shown but only 5 nested comments (per reply). You can override the settings:
isso-data-max-comments-top="N" isso-data-max-comments-nested="N"
Where N is a number from 0 to infinity ("inf"). If you limit the amount of shown top level comments, the overall comment count may be incorrect and a known issue.
You can also configure the amount of comments shown per click (5 by default):
isso-data-reveal-on-click="N"
This feature also required a change in the comment structure. Previously, all comments are stored tree-like but shown linearly. To ease the implementation of pagination, the comment tree is now limited to a maximum depth of one. Jeff Atwood explains, why discussions are flat by design.
When you upgrade, Isso will automatically normalize the tree and some information gets lost. All new replies to a comment are now automatically a direct child of the top-level comment.
style improvements by William Dorffer, #39, #84 #90 and #91
Isso now longer uses a fat SCSS library, but plain CSS instead. The design is now responsive and no longer sets global CSS rules.
experimental WordPress import, #75
Isso should be able to import WXR 1.0-1.2 exports. The import code is based on two WXR dumps I found (and created) and may not work for you. Please report any failure.
avatar changes, #49
You can now configure the client to not show avatars:
data-isso-avatar="false"
Also there is no longer an avatar shown next to the comment box. This is due to the new CSS and removes two runtime dependencies.
you may now set a full From header, #87
[smtp]
from = Foo Bar <spam@local>
SMTP (all caps) is now recognized for notifications, #95
Isso now ships a small demo site at /demo, #44
a few bugfixes: Disqus import now anonymizes IP addresses, uWSGI spooling for Python 3, HTTP-Referer fallback for HTTP-Origin
remove Django's PBKDF2 implementation in favour of the PBKDF2 function available in werkzeug 0.9 or higher. If you're still using werkzeug 0.8, Isso imports passlib as fallback (if available).
This release also features a new templating engine Jade which replaces Markup.js. Jade can compile directly to JavaScript with a tiny runtime module on the client. Along with the removal of sha1.js and pbkdf2.js and a few build optimizations, the JS client now weighs only 40kb (12kb gzipped) – 52kb resp. 17kb before.
Source code(tar.gz)replace <textarea>
with <div contentedtiable="true">
to remove the sluggish auto-resize on input feature. If you use a custom CSS, replace textarea
with .textarea
.
remove superscript extension from Markdown defaults as it may lead to unexpected behavior for certain smileys such as "^^". To enable the extension, add
[markup]
options = superscript
allowed-elements = sup
to your configuration.
comment count requests are now bundled into a single POST request, but the old API is still there (deprecated though).
store session-key in database (once generated on database creation). That means links to activate, edit or delete comments are now always valid even when you restart Isso.
Currently statically set session keys in [general]
are automatically migrated into the database on startup and you will get a notice that you can remove this option.
fix undefined timestamp when client time differs for more than 1 second. The human-readable "time ago" deltas have been refined to match Moment.js behavior.
avatar colors and background can now be customized:
data-isso-avatar-bg="#f0f0f0"
sets the background colordata-isso-avatar-fg="#9abf88 #5698c4 #e279a3 #9163b6 ..."
sets possible avatar colors (up to 8 colors are possible).new [markup] section to customize Misaka's Markdown generation (strikethrough and autolink enabled by default). Furthermore, you can now allow certain HTML elemenets and attributes in the generated output, e.g. to enable images, set
[markup]
allowed-elements = img
allowed-attributes = src
Check docs/configuration/server.rst for more details.
replace requirejs-domready with a (self-made) HTML5 idiom, #51
fix malicious HTML injection (due to wrong API usage). All unknown/unsafe HTML tags are now removed from the output (html5lib
0.99(9) or later) or properly escaped (older html5lib
versions).
See 36d702c and 3a1f92b for more details.
remove kriskowal/q JS library (promises implementation) in favour of a self-made 50 LoC implementation to ease packaging (for Debian), #51
add documentation to display a comment counter, #56 and #57
SMTP notifications now support STARTTLS and use this transport security by default, #48 and #58. This also changes the configuration option from ssl = [yes|no]
to security = [none|starttls|ssl]
.
translation can now be made (and updated) with Transifex. If you want to take ownership for a language, contact me on IRC.
fix french pluralform
the (by default random) session-key is now shown on application startup to make different keys per startup more visible
use threading.lock
by default for systems without semaphore support
This bugfix release now sanitizes HTML tags based on a whitelist (also prevents auto-link to "unsafe" web protocols and images) as intended.
Fortunately because of Sundown's typography support, it did not affect JS injection, but custom style tags and iframes.
PS: thanks to the anonymous submitter of a comment including a style tag for 24pt, red font ;-)
Source code(tar.gz)Major improvements:
To use the same thread for different URLs, you can now add a custom data-isso-id="my-id"
attribute which is used to identify and retrieve comments (defaults to current URL aka window.location.pathname
).
isso.dispatch
now dispatches multiple websites (= configurations) based on URL prefixesexample.conf
, #43Minor improvements:
isso:application
to isso.run:application
to avoid uneccessary initialization in some cases (change module if you use uWSGI or Gunicorn)Major improvements:
listen
option replaces host
and port
to support UNIX domain sockets, #25
Instead of host = localhost
and port = 8080
, use listen = http://localhost:8080
. To listen on a UNIX domain socket, replace http://
with unix://
, e.g. unix:///tmp/isso.sock
.
new option notify
(in the general section) is used to choose (one or more) notification backends (currently only SMTP is available, though). Isso will no longer automatically use SMTP for notifications if the initial connection succeeds.
new options to control the client integration
data-isso-css="false"
prevents the client from appending the CSS to the document. Enabled by default.data-isso-lang="de"
overrides the useragent's preferred language (de, en and fr are currently supported).data-isso-reply-to-self="true"
should be set, when you allow reply to own comments (see server configuration for details).add support for gevent, a coroutine-based Python networking library that uses greenlets (lightweight threads). Recommended WSGI server when not running with uWSGI (unfortunately stable gevent is not yet able to listen on a UNIX domain socket).
fix a serious issue with the voters bloomfilter. During an Isso run, the ip addresses from all commenters accumulated into the voters bloomfilter for new comments. Thus, previous commenters could no longer vote other comments. This fixes the rare occurences of #5.
In addition to this fix, the current voters bloomfilter will be re-initialized if you are using Isso 0.4 or below (this is not necessary, but on the other hand, the current bloomfilter for each comment is sort-of useless).
french translation (thanks to @sploinga), #38
support for multiple sites, part of #34
Minor improvements:
--dry-run
option to do no actual operation on the database.GooPyCharts A Google Charts API for Python 2 and 3, meant to be used as an alternative to matplotlib. Syntax is similar to MATLAB. The goal of this pr
Clipboard Uploader A ShareX alternative for Mac OS built in Python. Install and setup Download the latest release and put it in your applications fold
Faster Twitch Alerts What is "Faster Twitch Alerts"? Faster Twitch Alerts is a highly customizable, lightning-fast alternative to Twitch's slow mobile
OpenFaas Job Worker OpenFaas Job Worker is a fork of project : OSCAR Worker - https://github.com/grycap/oscar-worker Thanks to Sebástian Risco @srisco
disqus-python Let's start with installing the API: pip install disqus-python Use the API by instantiating it, and then calling the method through dott
PyArmadillo is a linear algebra library for the Python language, with an emphasis on ease of use.
GooPyCharts A Google Charts API for Python 2 and 3, meant to be used as an alternative to matplotlib. Syntax is similar to MATLAB. The goal of this pr
HibiAPI An alternative implement of Imjad API. Imjad API 的开源替代. 前言 由于Imjad API这是什么?使用人数过多, 致使调用超出限制, 所以本人希望提供一个开源替代来供社区进行自由的部署和使用, 从而减轻一部分该API的使用压力 优势
Django Lifecycle Hooks This project provides a @hook decorator as well as a base model and mixin to add lifecycle hooks to your Django models. Django'
Glances - An eye on your system Summary Glances is a cross-platform monitoring tool which aims to present a large amount of monitoring information thr
Confluence: A Robust Non-IoU Alternative to Non-Maxima Suppression in Object Detection 1. 介绍 用以替代 NMS,在所有 bbox 中挑选出最优的集合。 NMS 仅考虑了 bbox 的得分,然后根据 IOU 来
Glances - An eye on your system Summary Glances is a cross-platform monitoring tool which aims to present a large amount of monitoring information thr
lazydocs Generate markdown API documentation for Google-style Python docstring. Getting Started • Features • Documentation • Support • Contribution •
Get Your Localhost Online - Ngrok Alternative
If you have a webserver running on one computer (say your development laptop), and you want to expose it securely (ie HTTPS) via a public URL, SirTunnel allows you to easily do that.
This repository contains the SystemVerilog RTL, C++, HLS (Intel FPGA OpenCL to wrap RTL code) and Python needed to reproduce the numerical results in
Alternative firmware for ESP8266/ESP32 based devices with easy configuration using webUI, OTA updates, automation using timers or rules, expandability
A Python library that provides a simplified alternative to DBAPI 2. It provides a facade in front of DBAPI 2 drivers.
Alternative StdLib for Nim for Python targets, hijacks Python StdLib for Nim
Mathics is a general-purpose computer algebra system (CAS). It is an open-source alternative to Mathematica. It is free both as in "free beer" and as in "freedom".