Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jedireza/frame
:bulb: A user system API starter
https://github.com/jedireza/frame
admin boilerplate hapi javascript mongodb nodejs starter-kit user-manager user-system
Last synced: about 2 months ago
JSON representation
:bulb: A user system API starter
- Host: GitHub
- URL: https://github.com/jedireza/frame
- Owner: jedireza
- License: mit
- Archived: true
- Created: 2014-09-20T23:58:13.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2020-07-12T05:20:16.000Z (over 4 years ago)
- Last Synced: 2024-08-03T10:02:05.786Z (5 months ago)
- Topics: admin, boilerplate, hapi, javascript, mongodb, nodejs, starter-kit, user-manager, user-system
- Language: JavaScript
- Homepage: https://jedireza.github.io/frame/
- Size: 2.36 MB
- Stars: 739
- Watchers: 35
- Forks: 157
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# No longer maintained
Boilerplates can be a huge time sink to maintain and I've decieded to archive
this project.Thanks for your interest in my projects.
- - - - - - - - - -
# Frame
A user system API starter. Bring your own front-end.
[![Build Status](https://travis-ci.org/jedireza/frame.svg?branch=master)](https://travis-ci.org/jedireza/frame)
[![Dependency Status](https://david-dm.org/jedireza/frame.svg?style=flat)](https://david-dm.org/jedireza/frame)
[![devDependency Status](https://david-dm.org/jedireza/frame/dev-status.svg?style=flat)](https://david-dm.org/jedireza/frame#info=devDependencies)## Features
- Login system with forgot password and reset password
- Abusive login attempt detection
- User roles for accounts and admins
- Admins only notes and status history for accounts
- Admin groups with shared permissions
- Admin level permissions that override group permissions## Technology
Frame is built with the [hapi](https://hapijs.com/) framework. We're
using [MongoDB](http://www.mongodb.org/) as a data store.## Bring your own front-end
Frame is only a restful JSON API. If you'd like a ready made front-end,
checkout [Aqua](https://github.com/jedireza/aqua). Or better yet, fork
this repo and build one on top of Frame.## Live demo
| url | username | password |
|:-------------------------------------------------------------------------------------------------- |:-------- |:-------- |
| [https://getframe.herokuapp.com/](https://getframe.herokuapp.com/) | root | root |
| [https://getframe.herokuapp.com/documentation](https://getframe.herokuapp.com/documentation) | | |[Postman](http://www.getpostman.com/) is a great tool for testing and
developing APIs. See the wiki for details on [how to
login](https://github.com/jedireza/frame/wiki/How-to-login).## Requirements
You need [Node.js](http://nodejs.org/download/) `>=8.x` and you'll need a
[MongoDB](http://www.mongodb.org/downloads) `>=2.6` server running.## Installation
```bash
$ git clone https://github.com/jedireza/frame.git
$ cd frame
$ npm install
```## Configuration
Simply edit `config.js`. The configuration uses
[`confidence`](https://github.com/hapijs/confidence) which makes it easy to
manage configuration settings across environments. __Don't store secrets in
this file or commit them to your repository.____Instead, access secrets via environment variables.__ We use
[`dotenv`](https://github.com/motdotla/dotenv) to help make setting local
environment variables easy (not to be used in production).Simply copy `.env-sample` to `.env` and edit as needed. __Don't commit `.env`
to your repository.__## First time setup
__WARNING__: This will clear all data in the following MongoDB collections if
they exist: `accounts`, `adminGroups`, `admins`, `authAttempts`, `sessions`,
`statuses`, and `users`.```bash
$ npm run first-time-setup# > [email protected] first-time-setup /home/jedireza/projects/frame
# > node first-time-setup.js# MongoDB URL: (mongodb://localhost:27017/frame)
# Root user email: [email protected]
# Root user password:
# Setup complete.
```## Running the app
```bash
$ npm start# > [email protected] start /home/jedireza/projects/frame
# > ./node_modules/nodemon/bin/nodemon.js -e js,md server# 09 Sep 03:47:15 - [nodemon] v1.10.2
# ...
```Now you should be able to point your browser to http://127.0.0.1:9000/ and
see the welcome message.[`nodemon`](https://github.com/remy/nodemon) watches for changes in server
code and restarts the app automatically.### With the debugger
```bash
$ npm run inspect# > [email protected] inspect /home/jedireza/projects/frame
# > nodemon --inspect -e js,md server.js# [nodemon] 1.14.12
# [nodemon] to restart at any time, enter `rs`
# [nodemon] watching: *.*
# [nodemon] starting `node --inspect server.js`
# Debugger listening on ws://127.0.0.1:9229/3d706d9a-b3e0-4fc6-b64e-e7968b7f94d0
# For help see https://nodejs.org/en/docs/inspector
# 180203/193534.071, [log,info,mongodb] data: HapiMongoModels: successfully connected to the db.
# 180203/193534.127, [log,info,mongodb] data: HapiMongoModels: finished processing auto indexes.
# Server started on port 9000
```Once started with the debuger you can open Google Chrome and go to
[chrome://inspect](chrome://inspect). See https://nodejs.org/en/docs/inspector/
for more details.## Running in production
```bash
$ node server.js
```Unlike `$ npm start` this doesn't watch for file changes. Also be sure to set
these environment variables in your production environment:- `NODE_ENV=production` - This is important for many different
optimizations.
- `NPM_CONFIG_PRODUCTION=false` - This tells `$ npm install` to not skip
installing `devDependencies`, which we may need to run the first time
setup script.## Have a question?
Any issues or questions (no matter how basic), open an issue. Please take the
initiative to read relevant documentation and be pro-active with debugging.## Want to contribute?
Contributions are welcome. If you're changing something non-trivial, you may
want to submit an issue before creating a large pull request.## Running tests
[Lab](https://github.com/hapijs/lab) is part of the hapi ecosystem and what we
use to write all of our tests.```bash
$ npm test# > [email protected] test /home/jedireza/projects/frame
# > lab -c -L# ..................................................
# ..................................................
# ..................................................
# ..............# 164 tests complete
# Test duration: 14028 ms
# No global variable leaks detected
# Coverage: 100.00%
# Linting results: No issues
```### Targeted tests
If you'd like to run a specific test or subset of tests you can use the
`test-server` npm script.You specificy the path(s) via the `TEST_TARGET` environment variable like:
```bash
$ TEST_TARGET=test/server/web/main.js npm run test-server
```## License
MIT
## Don't forget
What you build with Frame is more important than Frame.