Giter VIP home page Giter VIP logo

ecf's Introduction

Erlang Creative Forum

Simple BEAM-powered forum software

About

Erlang Creative Forum (ECF) is intended to be a very simple forum host, similar to SMF or vBulletin or the like, but very lightweight and fast. It's still very early in development so it's missing a lot of features, and I would (currently) recommend against using it. Feel free to take a look around the code though!

Just keep in mind that this is a big giant mess of testing random junk so everything is super inconsistent and weird :P

At the bare minimum, ECF still needs the following:

  • Documentation
  • Tests
  • Lots and lots of CSS/HTML/JS magic to make it look decent!
  • Terms of use and privacy policy?
  • Limit lengths on various things
  • Administration frontend
    • Editing permissions on forums, threads, and groups
  • Security
    • Logging stuff (most likely through lager)
    • Deny non-HTTPS traffic
  • Some kind of rich text formatting (markdown? could kludge it in with client side JS)

So that ECF is reasonably useable, I'd like to add the following as well:

  • Track read/unread posts (needs backend)
  • Listing all users, sorting by various fields (partially done, needs sorting)
  • Searching (needs backend)
    • List all posts by a user
  • Thread tags
  • Replying to posts
  • Email notifications for posts/replies/threads/forums/PMs

And these would be nice to get:

  • Events calendar
  • Announcements
  • Other "addons", perhaps as optional systems
    • e.g. threadmarks

Requirements

Erlang/OTP 20

Installation

Currently there is no real installation process. However, testing ECF is very simple since it uses erlang.mk. Simply make run and it will start it listening on port 8080 and drop you into an Erlang REPL. The first time you start it up, be sure to use ecf_db:install(). to create and setup the database. After that if you change the backing records you will need to either delete and recreate the Mnesia database, or call mnesia:transform_table/3.

Configuration

I'd recommend leaving sys.config alone and editing private.config with all of your needed configuration.

TODO: Describe all configuration options.

You will need to set the following app env variables:

  • captcha_key: reCAPTCHA site key
  • captcha_secret: reCAPTCHA site secret
  • host: The domain name that the forum is hosted on
    • <<"example.com">>
  • base_url: The "base" url of the forum, use a leading slash but no trailing
    • "/ecf", "/forum"
  • email_addr: The address to send email as
  • email_relay: The host to use as a relay
  • email_login: {Username, Password} if your relay requires authentication, or false if it doesn't (e.g. if you're using a relay on localhost).
  • email_host: The host to EHLO as when sending email, set to false to use host
  • forum_name: The name of your forum.
  • http: false or a port number.
  • https: false or {Port, CertFile, KeyFile}.

So when setting up ECF behind an HTTPS-serving reverse proxy, you'll want to set http to the local port (such as 8080, the default), and https to false (also the default).

If you want ECF to server HTTPS traffic directly, set http to false and then https to the required things. Note that they must be strings and not binaries. The PEM file pointed at CertFile may also contain the private key. If that's the case, then KeyFile should be false.

Please note that ECF does not support using HTTP unless behind a reverse proxy that serves HTTPS. This will not change.

Also note that ECF does not currently support using a HTTPS-serving proxy that in turn connects to ECF using HTTPS. It should be supported in the future though.

License and Third Party Software

ECF is under the AGPL 3.0, you may find a copy of it in LICENSE.

ECF makes use of the following third-party software:

ecf's People

Contributors

ecrownoffire avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

ecf's Issues

Email notifications

  1. Threads in forums
  2. Posts in forums
  3. Posts in threads
  4. PMs

May be good to start queuing emails in mnesia for better durability.

Forum permission profiles

SMF has a feature where you can have multiple forums set to use the same permissions, which is really convenient. ECF should have something similar.

Configuration & Globals

Rather than shoving everything into sys.config, ECF should probably have a centralized config location that allows for editing by forum admins, possibly one that leverages ecf_global.

Config values should only be persisted if they're changed from the default.

Modify and generalize the perms get_modes/0 parse transform for getting the list of configs?

Rich text formatting

Use cases: basic formatting such as bold, italics, and links. Advanced cases: text color, size, etc.

BBCode or something similar is likely necessary for the latter, while Markdown could work for the former.

Perhaps allow either Markdown or BBCode?

Track (un)read posts

Lots and lots of use cases here:

  1. Unread posts in threads I've posted in ("unread replies" in SMF)
  2. Show all unread posts
  3. Jumping to the last unread page of a thread.
  4. Showing how many new posts are in a thread

Replies

  • Reply to a specific post instead of a thread in general
  • reply to multiple posts at once?
  • (maybe) jump to replies?

Related to #3.

Logs

Need to log important administrative actions, errors encountered by users, etc.

There are two important sinks that should be implemented:

  1. Plaintext log that would go into /var/log
  2. Log for internal administration

The second should just go into Mnesia, possibly with a disk only table?

Subforums and forum categories

Forums should be able to have a parent or a category.

Perhaps a single field would be good, with either {forum, Id} or {category, Id}?

Subforums should inherit the permissions of their parents.

Categories should be able to have their permissions set.

Thread tags

Currently you can:

  • Add and remove tags from threads
  • Create tags if they don't exist when tagging a thread
    • config option, off by default
  • Tag management for admins/mods (create/delete tags)
  • Search by tag
  • Limit names to something sensible

Searching

Should be word/token based, and ignore any formatting. A search for foo should match *foo* or *foo bar*. May be useful to separate out the search engine.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.