Coder Social home page Coder Social logo

disintegration / bebop Goto Github PK

View Code? Open in Web Editor NEW
553.0 31.0 70.0 28 MB

Bebop is a simple discussion board / forum web application

License: MIT License

Go 83.82% CSS 1.41% JavaScript 13.63% HTML 1.14%
forum discussion-board web-app rest-api vuejs golang

bebop's Introduction

Bebop

Bebop is a simple discussion board / forum web application.

Features

  • REST API backend written in Go
  • Vue.js-based frontend
  • Two databases are supported:
    • PostgreSQL
    • MySQL
  • Three file-storage backends are supported to store user-uploaded files (e.g. avatars):
    • Local filesystem
    • Google Cloud Storage
    • Amazon S3
  • Social login (OAuth 2.0) via three providers:
    • Google
    • Facebook
    • Github
  • JSON Web Tokens (JWT) are used for user authentication in the API
  • Single binary deploy. All the static assets (frontend JavaScript & CSS files) are embedded into the binary
  • Markdown comments
  • Avatar upload, including animated GIFs. Auto-generated letter-avatars on user creation

Getting Started

  • Create a new empty database (MySQL оr PostgreSQL) that will be used as a data store and a database user with all privileges granted on this database.

  • Obtain OAuth 2.0 credentials (client_id and secret) from at least one of the providers (Google, Facebook, Github) so users can log into the web application. The OAuth callback url will be <base_url>/oauth/end/<provider>. The <base_url> is where the bebop web app will be mounted on your site and the <provider> is the lowercase provider name. For example, if base_url is https://my.website.com/forum/, then the oauth callback url for google will be https://my.website.com/forum/oauth/end/google.

  • Download and compile the bebop binary:

    $ go get -u github.com/disintegration/bebop/cmd/bebop
    
  • Inside an empty directory run:

    $ bebop init
    

    This will generate an initial configuration file "bebop.conf" inside the current dir. Edit the configuration file to set the server listen address, the base url, the database and file storage parameters, OAuth credentials, etc.

  • Run the following command to start the bebop web server.

    $ bebop start
    
  • Sign in into your web application using one of the social login providers. Then run the following command to grant admin privileges to your user.

    $ bebop add-admin <your-username>
    

Screenshots

Topics

Topics

Comments

Comments

bebop's People

Contributors

disintegration 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bebop's Issues

go get fails

I just tried getting the project with golang 1.8.1 and got ...

$ go get -u github.com/disintegration/bebop/cmd/bebop

# github.com/disintegration/bebop/vendor/google.golang.org/grpc/credentials
go/src/github.com/disintegration/bebop/vendor/google.golang.org/grpc/credentials/credentials_util_go18.go:52: cfg.Clone undefined (type *tls.Config has no field or method Clone, but does have tls.clone)
# github.com/disintegration/bebop/vendor/golang.org/x/net/http2
go/src/github.com/disintegration/bebop/vendor/golang.org/x/net/http2/go18.go:16: c.Clone undefined (type *tls.Config has no field or method Clone, but does have tls.clone)
go/src/github.com/disintegration/bebop/vendor/golang.org/x/net/http2/go18.go:17: c.GetClientCertificate undefined (type *tls.Config has no field or method GetClientCertificate)
go/src/github.com/disintegration/bebop/vendor/golang.org/x/net/http2/go18.go:21: undefined: http.Pusher
go/src/github.com/disintegration/bebop/vendor/golang.org/x/net/http2/go18.go:24: undefined: http.PushOptions
go/src/github.com/disintegration/bebop/vendor/golang.org/x/net/http2/go18.go:35: h1.IdleTimeout undefined (type *http.Server has no field or method IdleTimeout)
go/src/github.com/disintegration/bebop/vendor/golang.org/x/net/http2/go18.go:36: h1.IdleTimeout undefined (type *http.Server has no field or method IdleTimeout)
go/src/github.com/disintegration/bebop/vendor/golang.org/x/net/http2/go18.go:45: undefined: http.ErrAbortHandler
go/src/github.com/disintegration/bebop/vendor/golang.org/x/net/http2/go18.go:49: req.GetBody undefined (type *http.Request has no field or method GetBody)
go/src/github.com/disintegration/bebop/vendor/golang.org/x/net/http2/go18.go:53: undefined: http.NoBody
# github.com/disintegration/bebop/vendor/github.com/aws/aws-sdk-go/aws
go/src/github.com/disintegration/bebop/vendor/github.com/aws/aws-sdk-go/aws/url.go:11: url.Hostname undefined (type *url.URL has no field or method Hostname)
# github.com/disintegration/bebop/vendor/github.com/lib/pq
go/src/github.com/disintegration/bebop/vendor/github.com/lib/pq/conn_go18.go:14: undefined: driver.NamedValue
go/src/github.com/disintegration/bebop/vendor/github.com/lib/pq/conn_go18.go:29: undefined: driver.NamedValue
go/src/github.com/disintegration/bebop/vendor/github.com/lib/pq/conn_go18.go:43: undefined: driver.TxOptions
# github.com/disintegration/bebop/vendor/github.com/pressly/chi/middleware
go/src/github.com/disintegration/bebop/vendor/github.com/pressly/chi/middleware/compress18.go:10: undefined: http.PushOptions
go/src/github.com/disintegration/bebop/vendor/github.com/pressly/chi/middleware/compress18.go:11: undefined: http.Pusher
go/src/github.com/disintegration/bebop/vendor/github.com/pressly/chi/middleware/wrap_writer18.go:19: undefined: http.Pusher
go/src/github.com/disintegration/bebop/vendor/github.com/pressly/chi/middleware/wrap_writer18.go:37: undefined: http.PushOptions
go/src/github.com/disintegration/bebop/vendor/github.com/pressly/chi/middleware/wrap_writer18.go:38: undefined: http.Pusher
go/src/github.com/disintegration/bebop/vendor/github.com/pressly/chi/middleware/wrap_writer18.go:41: undefined: http.Pusher

any idea why this could happen?

SQLite support?

Hey there. Would be nice to have SQlite support, ideal for small forums, easy to maintain and low on resources.

Thanks!

Interest in making this completely client side ?

Hi there !

Great project. I was thinking of making this a completely client-side app with service workers, localstorage, material-ui design and just using firebase as the backend.

So, that will completely remove the Golang server component(which I understand has undergone a lot of effort into building). Is this something that you will be willing to do ?

implement categories

hi there,

not sure if it's the correct place to discuss such high-level items but...

it would be nice if bebop supported a way to regroup different topics, what other forums call "categories".
would this be something that would be inline with the general direction that bebop should take?

plugins: devise a way to add a plugin mechanism

it would be nice if bebop had a way to allow 3rd-party plugins to extend or modify bebop behaviour.
for example, I'd like to be able to have bebop being to send an email whenever a new post is created in a topic.
this could perhaps be implemented with plugins.

most probably, if plugins are blessed as the bebop way to achieve extension and modification, they would need to be re-compiled together with the "main" application.

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.