Giter Club home page Giter Club logo

epochtalk's Introduction

Epochtalk Circle CI Gitter chat

Warning this project is under active development, design is subject to change

Next generation forum software. Epochtalk forum software utilizes technologies such as AngularJS, Webpack, Postgres and Bourbon for improved performance and user experience as compared to existing forum software.

Epochtalk Forums

Index

Features

  • Epochtalk is a single page web application created with AngularJS
  • Web/Mobile ready responsive design using Bourbon
  • Code is bundled and loaded as needed, for performance, using Webpack
  • Designed with performance in mind. Epochtalk's backend utilizes Postgres as a database.
  • Customizable Theming (Branding, coloring, fonts, sizes)
  • Fully modular permissions system with roles

System Dependencies

Installation

1) Checkout repository using git:

$ git clone [email protected]:epochtalk/epochtalk.git

2) SSL and Nginx setup

Install an SSL cert and edit the nginx .conf file (located /etc/nginx/default.conf) with server info and SSL cert info

3) Change directories and install dependencies using yarn

$ cd epochtalk
$ yarn

4) Copy the example.env file

This file specifies the server configurations and is necessary to run the server. You can edit the .env file later to specify the configurations as outlined in the Configuration section.

$ cd .. # cd back to project root
$ cp example.env .env

5) Checkout and Run Migrations

Note: If you do not have brew installed, you must manually install Elixir

$ cd .. # (or just change directories outside of the epochtalk directory)
$ brew install elixir # this installs elixir so we can run epoch migrations
$ git clone [email protected]:epochtalk/epoch.git
$ cd epoch
$ mix deps.get # install project deps
$ mix ecto.setup # create and migrate epochtalk database
$ cd ../epochtalk # change directories back to epochtalk root

6) Initialize First User

First ensure that Postgres is installed and running. Before running Epochtalk for the first time, it is necessary to setup the database and first user account. The CLI tool will create the first board and admin account for the forum. From the root directory of the project run the following command:

$ node cli --create

7) Start the Epochtalk server

Running the npm run serve command will start the Epochtalk webserver and compile all JavaScript and css. Once the server is running, the forum can be viewed at http://localhost:8080

$ yarn run serve

8) Log in and change admin account information

Login to the admin account using the username admin and password admin1234. Visit your profile by clicking the link in the top right corner of the page, then change your username and password.

Configuration

Forum configurations can be set either manually or using the admin panel.

Manual Configuration

The forum server configs can and must be set manually with a .env file in the root directory of the project.

DATABASE_URL="postgres://localhost/epochtalk_dev"
HOST="localhost"
PORT="8080"
PUBLIC_URL="http://localhost:8080"
REDIS_HOST="localhost"
REDIS_PORT="6379"
REDIS_AUTH_PASS=""

Admin Panel Configuration

Some configurations can also be set using the settings tab in the administration panel. Admin Settings

Saas mode

This can be set in the .env file by setting the var SAAS_MODE to true. What this basically does is the emailer and images config are hidden in the admin/settings/general view. These configs can only be edited through the .env file or directly in the database only and requires a restart for the changes to take effect.

API

The Epochtalk API can be accessed at http://localhost:8080/api/ while the server is running. To see full documentation for the api visit the Epochtalk API Documentation wiki page.

##Editor Editor

Each post is crafted through a unique editor with a live content preview.

BBCode

As for BBCode, the tags that are parsed are based off the SMF 1.0 BBCode spec but with some modifications as per the BitcoinTalk forum. Due to the fact that BBCode differs from forum to forum, a preview window is provided to the right of the main user input to preview what the post will look like once it has been sent to the server. The editor itself will parse the user input in real time with a 250 millisecond debounce. So user can continue to type and the text will not be parsed until 250 millisecond after the last keypress.

To view the list of supported BBCode tags click the Format button at the top right of the editor:

Formatting

Security

All user typed HTML is escaped using their decimal encoding while any other HTML is cleaned using punkave's sanitize-html library. All BBCode input is parsed through our modified BBCode-Parser library. This ensures that all content passed to the server is sanitized from any malicious code. Also, Angular's sanitization library also ensures that anything missed through the above process is yet again cleaned before it is shown on the client's browser.

All inputs on the forum are cleaned to different degrees.

Title like inputs are stripped of all html while description like inputs are allowed only formatting based html tags (<b>, <em>, <table> but not <div>, <img>, and <span>). Posts and Signatures are given the full treatment as described above but allow more html like <img>.

Anti-Abuse

Marked routes are protected from spam or abuse by tracking the number of times a user access an API endpoint. The first two uses of the endpoint are free of any penalties. Any use of the endpoint afterward is penalized with longer and longer cool down periods, starting from 1 minute and ranging up to 65536 minutes or roughly 45 days from the last known incident. Proper use of the endpoint will trigger a function to remove all cool down periods. Improper use of the endpoint during the cool down period will only increase the cool down period.

Contributions

Epochtalk is an open source project and gladly welcomes public contributions. Contributions can be made by creating a discussion via the issues. New features or fixes can be contributed via pull requests. Please note, all new packages must be added via yarn, not npm

Feedback

Please leave us feedback using github issues

License

The MIT License (MIT)

Copyright (c) 2016 Epochtalk

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

epochtalk's People

Contributors

akinsey avatar dependabot[bot] avatar jherberg462 avatar jsakuda avatar marcbachmann avatar ping-localhost avatar rizzrack09 avatar rsbondi avatar ruesato avatar unenglishable avatar wangbus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

epochtalk's Issues

Look into angular ui-router 0.2.5 for reloadOnSearch

Currently reloadOnSearch is not supported in ui-router but it will be in 0.2.5. A work-around has already been found for pages that need the parent controller to live through url query changes but we may want to see if there's a better solution once this build is in npm.

Preserve user's input for signature field

Although the signature is rendered faithfully, the user's BBCode input for signature is not preserved so repeated editing of the signature is not a pleasant experience.

In between edits, the BBCode input is converted to html and saved. This converted input is also shown to the user when editing the signature. Thus all the BBCode they originally entered is lost and needs to be recreated.

Reject usernames containing forbidden characters

We need to disallow users creating usernames with forbidden characters such as '/'.

Any input on what characters should be disallowed is welcome.

Possibly just need to update the regex for username creation

Inject image url button icon

The editor has a footer that lists all the image the user has uploaded. On successful upload, the image BBCode tag with the correct url is automatically injected into the editor. But in the rare case that the code isn't injected or the user deletes it by accident, a button has been added for each image that will inject the tag into the editor again.

Ryan, we need an icon for this button. I'm sure something as simple as a '+' would be fine.

Create separate process to clean memdown of obsolete data

memdown currently stores user auth tokens, and viewer ID hashes and vierwer IPs. The auth token should stay as long as they need to for now until we figure out how to handle expiration times for them.

Viewer ID hashes and IPs only live for about a minute and should be cleared from the db at a regular interval.

Can we have a demo?

Hey guys, this forum software sounds promising. Can you have a demo link please? Thanks

Handle username exceeding length limit

When the length limit for username of 50 characters is exceeded, the data can still be submitted to the server, which results in a 500 error. This should be handled with a message; the same way as uniqueness.

18:21:25 server.1  | 141224/042124.753, internalError, message: Registration Error: value too long for type character varying(50) stack: error: Registration Error: value too long for type character varying(50)
...

screen shot 2014-12-23 at 18 23 08

Post count doesn't raise

The post count of the users doesn't change. All of the users that have posted in a topic, if you visit their profile page, it says that they have made 0 posts.

Setup separate view for login form

@akinsey can you help me cobble together a view (or modal) for the login form?

We talked about moving the user/pwd fields out of the main toolbar, and into their own thing (we talked about view/page, but are leaning towards modal).

I am not very comfortable with Angular views and routes (yet), so any help piecing it together would be greatly appreciated. If you can get the basics onto a page that is accessible via a simple URL like /login, I can make the layout and styles work. Thanks!

User Registration

User registration is currently broken. The first time the user tries to register, an error is thrown but repeated clicking on the button allows the user to finally register.

Scroll to top of profile page on load

If I scroll down on the thread list and then click on a user name it takes me to the profile page, but it doesn't scroll to the top. It seems to retain the scroll position I was at on the thread list.

Add a button to cancel post edit/create

Right now there is no true way to cancel the editing of a post (or clearing out one they may have started but decided not to use). The only way to clear out a post being edited is to touch the part of the button that says "New Post".

Set ACL on file upload to s3

This is possible but just not through pkgcloud right now. There's a fix for it already in their github copy but it hasn't been pushed down into npm yet. Until it is, we'll just set the permissions manually.

Any demo?

By any chance do you have a live demo?

Quotes are broken

When quoting, the quoted text shows up under the quote line and sans quote formatation.
In the editor, the quote show fine in the preview.
Example below:
quotes

@taesup

Fix posts reload after new post

There is a hack in the current master branch that allows this to work but when angular ui-router 0.2.13 rolls out, the hack should be removed and the code updated. The reason for the hack is because of an issue with angular 1.3. The api for location.hash has changed and the update for account for the change isn't addressed until ui-router 0.2.13.

Modifying URLs in Safari causes session to be killed and logs the user out

Steps to reproduce from @akinsey:

  1. Go to home
  2. login
  3. click a board link
  4. change the link and hit enter ( e.g. http://localhost:8080/boards/14145372118032bd0d6b0-5ef6-11e4-80fd-ed1cfe46f47e -> http://localhost:8080/boards/blah)

Steps to reproduce from me:

  1. Go to home
  2. Login
  3. Hand jam http://localhost:8080/register and hit enter
  4. Repeat step 3

@akinsey says that this causes the session storage to be cleared in Safari. This will cause the user to be logged out.

Safari v8.0 on Yosemite

Improve mobile menu

@akinsey I'm not quite feeling the default mobile menu... what do you guys think about making it slide from the side (ios style) rather than just drop down from the navbar?

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.