Skip to content
message board prototype... see link for live demo
Perl Other
  1. Perl 99.5%
  2. Other 0.5%
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
default
doc
lib
.gitignore
COPYING
LICENSE
README
access.pl
all
build.pl
build.sh
cb
clean-build
cron.pl
cron.sh
db
draft.txt
generate.pl
getfeeds.pl
gitflow.pl
gitflow.sh
index.pl
justaccesslog.pl
lighttpd.conf
lighttpd.pl
loop.pl
napkins.txt
open-database
pages.pl
pull.pl
removePreviousFiles
server.key.secret
sqlite.pl
taghooks.pl
test.db.prev
test.html
upgrade.pl
upgrade.sh
utils.pl
validate.pl

README

hike
====
a prototype message board system

Testing Locally
===============
clean-build
	purges cache/
	removes html/*.html
	removes config/template/*
	calls build.pl

open-database
	opens index.sqlite3 in sqlitebrowser
	for browsing indexed data

build.pl
rebuilds website, first looking for new messages in access log
	access.pl
	index.pl
	generate.pl

access.pl
reads access log from the web server and parses actions submitted by clients.
	common log format should be symlinked to log/access.log
	-or-
	change the path in in config/admin/access_log_path

index.pl
generates sqlite database called index.sqlite3
	contains data from html/txt/, log/, and config/

generate.pl
	generates static website using the sqlite database, and config/
	also generates some non-static elements such as .htaccess, PHP files

lighttpd.pl
	starts a local instance of lighttpd to serve the website
	http://localhost:3000/
	lighttpd.conf, included

gitflow.pl
	runs access.pl
	looks for any changes in html/txt/
		if any changes, "fills in" sqlite db-index and then html/

validate.pl
	(in the future will) compare the results of index.pl+generate.pl vs gitflow.pl

installation on GNU platforms
=============================

for devs to check out/play around
=================================
1. install pre-requisites
2. clone repository
3. ./build.sh
4. ./lighttpd.sh
5. ./build.sh as necessary to update the site

for local testing
=================
1. install lighttpd
2. use included lighttpd.conf or run ./lighttpd.pl

for deployment using apache or lighttpd
=======================================
1. symlink log/access.log to wherever your access log lives
2. symlink html root to html/
3. add ./cron.sh to your crontab, set to run as often as you like

requirements
============
* Perl 5.010+
* zip
* gpg
* git
* URI::Encode
* URI::Escape
* HTML::Parser
* Digest::MD5
* Digest::SHA1
* DBI
* SQLite

Debian, Ubuntu, and other apt-based syst
========================================
sudo apt-get install uri-encode-perl libany-uri-escape-perl libhtml-parser-perl libdbd-sqlite3-perl libdigest-sha-perl sqlite3 lighttpd gnupg gnupg2

Redhat, Centos, Fedora, and other yum-based
===========================================
sudo yum install perl-Digest-MD5 perl-Digest-SHA perl-HTML-Parser perl-DBD-SQLite perl-URI-Encode perl-Digest-SHA1 sqlite3 lighttpd gnupg gnupg2

known issues
============
sometimes new entries stop being picked up from access.log and/or written to the access log by web server
	the solution is to rm or cycle the access log and restart the web server
	the cause is still unknown to me, probably file is too big

just a basic prototype, not optimized to scale, and still a work in progress

all 40-character-long hex-looking strings are assumed to be existing items
	linked in the html-ized posts, even if they do not exist

voter id should (debatable) be generated once per page, but is currently generated once per item.

when an encrypted message has multiple recipients, only the first is used.

terminology
===========
author = anyone with a private key who has posted at least one item
item = a text file with some text in it
tag = a string which can be applied to items as an indicator of its properties
vote = an application of a tag to an item

config
======
config is handled using one file per setting
default/
	provides the defaults as part of the repository
config/
	overrides defaults with local settings
to change a setting, put the file in config/

For list of settings, see doc/config.txt

#todo in the future, config will be updatable by the admin via signed messages

to be continued...
You can’t perform that action at this time.