Simple Wiki engine inspired by Gollum
Find a file
2017-07-24 00:31:11 +01:00
resources WIP on Illuminator: minor look and feel tweeks 2017-07-24 00:31:11 +01:00
src/smeagol WIP on Illuminator: minor look and feel tweeks 2017-07-24 00:31:11 +01:00
test/smeagol/test Fixed a nasty breaking bug when the side bar file wasn't named as expected! 2016-12-20 12:13:04 +00:00
.gitignore #18: Very satisfactory! 2017-03-13 20:35:13 +00:00
Dockerfile Now with added Docker goodness! 2016-12-27 13:12:56 +00:00
LICENSE Changed license to GPL version 2 - which was what I always intended. 2014-11-11 21:46:25 +00:00
Procfile Initial commit, not yet complete. 2014-11-10 13:18:07 +00:00
project.clj #18: Very satisfactory! 2017-03-13 20:35:13 +00:00
README.md Added information about Docker image to README and Introduction. 2016-12-27 13:15:53 +00:00

One wiki to rule them all

Welcome to Smeagol!

Smeagol is a simple Wiki engine inspired by Gollum. Gollum is a Wiki engine written in Ruby, which uses a number of simple text formats including Markdown, and which uses Git to provide versioning and backup. I needed a new Wiki for a project and thought Gollum would be ideal - but unfortunately it doesn't provide user authentication, which I needed, and it was simpler for me to reimplement the bits I did need in Clojure than to modify Gollum.

So at this stage Smeagol is a Wiki engine written in Clojure which uses Markdown as its text format, which does have user authentication, and which uses Git as its versioning and backup system.

Status

Smeagol is now a fully working small Wiki engine, and meets my own immediate needs.

Markup syntax

Smeagol uses the Markdown format as provided by markdown-clj, with the addition that anything enclosed in double square brackets, like this, will be treated as a link into the wiki itself.

Security and authentication

Security is now greatly improved. There is a file called passwd in the resources directory, which contains a clojure map which maps usernames to maps with plain-text passwords and emails thus:

{:admin {:password "admin" :email "admin@localhost" :admin true}
 :adam {:password "secret" :email "adam@localhost"}}

that is to say, the username is a keyword and the corresponding password is a string. However, since version 0.5.0, users can now change their own passwords, and when the user changes their password their new password is encrypted using the scrypt one-way encryption scheme. The password file is now no longer either in the resources/public directory so cannot be downloaded through the browser, nor in the git archive to which the Wiki content is stored, so that even if that git archive is remotely clonable an attacker cannot get the password file that way.

Images

Smeagol does not currently have any mechanism to upload images. You can, however, link to images already available on the web, like this:

Smeagol

Todo

  • Mechanism to add users through the user interface;

Advertisement

If you like what you see here, I am available for work on open source Clojure projects. Contact me via WEFT.

Phoning home

Smeagol currently requests the WEFT logo in the page footer from my home site. This is mainly so I can get a feel for how many people are using the product. If you object to this, edit the file

resources/templates/base.html

and replace the line

<img height="16" width="16" alt="The Web Engineering Factory &amp; Toolworks" src="http://www.weft.scot/images/weft.logo.64.png"> Developed by <a href="http://www.weft.scot/">WEFT</a>

with the line

<img height="16" width="16" alt="The Web Engineering Factory &amp; Toolworks" src="img/weft.logo.64.png"> Developed by <a href="http://www.weft.scot/">WEFT</a>

License

Copyright © 2014-2015 Simon Brooke. Licensed under the GNU General Public License, version 2.0 or (at your option) any later version. If you wish to incorporate parts of Smeagol into another open source project which uses a less restrictive license, please contact me; I'm open to dual licensing it.

Prerequisites

You will need Leiningen 2.0 or above installed.

You will need node and bower installed.

Running

To start a web server for the application, run:

lein bower install
lein ring server

Alternatively, if you want to deploy to a servlet container (which I would strongly recommend), the simplest thing is to run:

lein bower install
lein ring uberwar

(a command which I'm sure Smeagol would entirely appreciate) and deploy the resulting war file.

Experimental Docker image

You can now run Smeagol as a Docker image. To run my Docker image, use

docker run simonbrooke/smeagol

Smeagol will run, obviously, on the IP address of your Docker image, on port 8080. To find the IP address, start the image using the command above and then use

docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -q)

Suppose this prints '10.10.10.10', then the URL to browse to will be http://10.10.10.10:8080/smeagol/

This image is experimental, but it does seem to work fairly well. What it does not yet do, however, is push the git repository to a remote location, so when you tear the Docker image down your edits will be lost. My next objective for this image is for it to have a cammand line parameter being the git address of a repository from which it can initialise the Wiki content, and to which it will periodically push local changes to the Wiki content.

To build your own Docker image, run:

lein clean
lein bower install
lein ring uberwar
lein docker build

This will build a new Docker image locally; you can, obviously, push it to your own Docker repository if you wish.