Node.js-based database service for Firefox Accounts. Includes:
- The API server.
Also published independently
via npm as
fxa-auth-db-server
, to enable use with alternative backend storage. - A memory-store backend. Useful as a stub for testing against.
- A MySQL backend. Used in production.
To run the tests for all components:
npm test
- Node.js 0.10 or later
- npm
- MySQL (we use version 5.6.21 in production)
See the API documentation. Backend implementers should also read the database documentation.
For example usage, see the readme.
To run the server tests:
npm run test-server
Implements the backend API as a memory store.
This is the backend store
that is loaded by the default export
from the npm package,
so the following call to require
will return a server
that uses the memory-store backend:
var fxadb = require('fxa-auth-db-mysql')
To run the memory-store tests:
npm run test-mem
Implements the backend API as a MySQL database.
To run the MySQL tests:
npm run test-mysql
Both the server
and the database patcher
read values from a config file
config/$NODE_ENV.json
,
where NODE_ENV
is an environment variable
set in the shell.
For local development,
set NODE_ENV
to dev
then create a new JSON file
called config/dev.json
.
In there,
you can set any values
that you'd like to override
the master config file,
config/config.js
.
For instance:
{
"master": {
"user": "root",
"password": "foo"
},
"slave": {
"user": "root",
"password": "bar"
}
}
You can start the server like so:
npm start
This will set up the database for you
then start the server on whichever port
is configured in config/$NODE_ENV.json
(port 8000 by default).
If the server fails to start, check that MySQL is running and that your active config has the correct settings to connect to the database.
If you want to run the database patcher on its own, use the following command:
node bin/db_patcher.js
This command creates the database
if it doesn't exist,
then runs migrations
from lib/db/schema
in the appropriate order.
Both forward and reverse migrations
are contained in this directory,
but note that the reverse migrations
are commented out
as a precaution against
accidental execution.
If the command fails, check that MySQL is running and that your active config has the correct settings to connect to the database.
If you want to clean the database, just drop it in MySQL:
mysql -u root -p -e 'DROP DATABASE fxa'
It will be recreated automatically
next time you run npm start
.
To run the MySQL backend inside a container, use the following commands:
docker build --rm -t mozilla/fxa_auth_db_mysql .
docker run --rm -v $PWD:/opt/fxa mozilla/fxa_auth_db_mysql npm install
docker run -it --rm -v $PWD:/opt/fxa --net=host mozilla/fxa_auth_db_mysql
This method shares the codebase
into a container
and runs the MySQL backend inside it.
You can npm install
and edit code
in your normal desktop environment
and the changes will be picked up automatically.