DEPRECATED: See Oratorium
AGPL-3.0 License
Some comments is stand-alone commenting microservice that you could attach by including javascript.
This was initially constructed because Ghost has no built in commenting functionality and I don't want ads funded commenting, nor tie it to one specific social platform.
Commenters can authenticate via 3rd party authentication like openid, google, facebook etc, or comment anonymously.
Get your site ID on http://somecomment.domain/sites/
(running your own node or using my example
at fredrik.liljegren.org:1337).
Make sure you added your site (with Site.add(server, domain)) at installation /sites/
and get
your site_id
.
Where you want to enable commenting, add something like (replacing site id and url):
<div class="comments" id="comments"></div>
<script src="http://somecomment.domain/node_modules/markdown/lib/markdown.js"></script>
<script src="http://somecomment.domain/node_modules/q/q.js"></script>
<script src="http://somecomment.domain/client.js"></script>
<script>
SomeComments('http://somecomment.domain/').displayByPage({{site_id}}, '{{url}}', 'comments')
</script>
The url
should be the pages canonical URL and will be used in notification e-mails.
And, add the css:
<link href="http://somecomment.domain/comments.css" rel="stylesheet" />
Some comments requires Node v4 or higher! I suggest using nvm.
git clone https://github.com/fiddur/some-comments.git
cd some-comments
npm install
cp config.js.example config.js # Edit to configure…
npm install -g grunt-cli # if you don't already have it…
grunt migrate:up
node index.js
To run in production I suggest using forever.
Configuration is done in config.js
, or by filename sent in as an argument like node index.js myalternativeconfigpath.js
.
Used for symmetric encryption of JSON Web Tokens.
secret: 'aRandomString',
State protocol, domain and port. If you use a proxy, this should be the proxies values; used for URLs in redirect etc.
baseUrl: 'http://example.net:1337/',
These are the ways the user can authenticat. Some Comments have no authentication of it's own, but relies solely on other systems.
To allow anonymous commenting, include anonymous in authenticators. It could be as {}
, but you
could also configure default displayName (default: 'Anonymous') and default avatar (could be a URL
or gravatar(method)
where method is one of the defaults in
Gravatar;
defaults to gravatar(monsterid)
.
When commenting anonymously, you will get an automatically created user. Further comments will be as that user until your session ends.
To use Dynamic OpenID, simply include openidconnect
with an empty array:
authenticators: {
openidconnect: []
}
If you add objects in the array (see below), Dynamic Registration will still be available.
For OpenID Connect endpoints that haven't implemented Dynamic Client Registration, you need to supply API credentials. For example:
authenticators: {
openidconnect: [
{
title: 'Google',
shortName: 'google',
authorizationURL: 'https://accounts.google.com/o/oauth2/v2/auth',
tokenURL: 'https://www.googleapis.com/oauth2/v4/token',
userInfoURL: 'https://www.googleapis.com/oauth2/v3/userinfo',
clientID: 'get your own',
clientSecret: 'get your own',
icon: 'https://upload.wikimedia.org/wikipedia/commons/4/4d/Google_Icon.svg',
}
]
}
For Google, you get your API credentials at the Developers
Console. Add an Oauth Client, with redirect URIs in the
form: http(s)://yourdomain.org/auth/<shortName>/callback
. The shortName
is a URL fragment and
is needed to separate the callback URIs for each openidconnect issuer.
Note: It's only the icon
that is displayed in the login list on default login frame.
authenticators: {
facebook: [
{
clientId: 'get your own',
clientSecret: 'get your own',
}
]
}
Callback URI will be http(s)://domain/auth/facebook/callback
.
Anything that Knex supports.
To use a backend, simply install it:
npm install sqlite3
…and use it in your config:
database: {
client: 'sqlite3',
connection: {
filename: "/var/lib/some-comments.db"
}
}
…and run the migrations:
grunt migrate:up
email: {
address: '[email protected]',
transport: {
host: 'smtp.example.com',
port: 25,
auth: {
user: 'username',
pass: 'password',
}
},
}
address
is the outgoing address used for notifications.
By default, transport
is your SMTP settings. It will be sent directly to
nodemailer.createTransport
, so it can use what
Nodemailer can use. To use a a non-builtin transport, you
could for example npm install nodemailer-sendmail-transport
and in config put transport: require('nodemailer-sendmail-transport')(options)
.
develop
branch.const
, =>
, prefer async/await
before explicit promises.Upgrade from 0.3:
database
format changed to Knex)node migrate0.3.0-0.4.0.js
Use with caution; I haven't tested the Dynamic OpenID Connect authentication in this version.
Upgrade from 0.2: grunt migrate:up
There is no automatic upgrade from 0.1 to 0.2
To updgrade, you need to create the new tables with migration scripts, and transfer the data accordingly. The new db-structure needs data that isn't available in 0.1.
secret
, email
.connector
into authenticator
.server
into baseUrl
.Working simple version.
/test
/users/me
Still no email notification…
Copyright (C) 2015 Fredrik Liljegren [email protected]
Some Comments is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
See COPYING.