Merge pull request #332 from mozilla/shane-tomlinson-patch-1
chore(docs): Point to monorepo in README
This commit is contained in:
Коммит
2a2415a730
135
README.md
135
README.md
|
@ -1,134 +1,3 @@
|
|||
Firefox Accounts Customs Server
|
||||
=======================
|
||||
# This repository has been migrated to https://github.com/mozilla/fxa/tree/master/packages/fxa-customs-server
|
||||
|
||||
[![Build Status](https://travis-ci.org/mozilla/fxa-customs-server.svg?branch=master)](https://travis-ci.org/mozilla/fxa-customs-server)
|
||||
[![CircleCI](https://circleci.com/gh/mozilla/fxa-customs-server.svg?style=svg)](https://circleci.com/gh/mozilla/fxa-customs-server)
|
||||
|
||||
This project is used by the [Firefox Accounts Auth Server](https://github.com/mozilla/fxa-auth-server) to detect and deter [fraud and abuse](https://wiki.mozilla.org/Identity/Firefox_Accounts/Fraud_and_abuse).
|
||||
|
||||
## Development
|
||||
|
||||
Clone the git repository and install dependencies:
|
||||
|
||||
git clone git://github.com/mozilla/fxa-customs-server.git
|
||||
cd fxa-customs-server
|
||||
npm install
|
||||
|
||||
Install memcached
|
||||
|
||||
You'll need to [install memcached](http://www.memcached.org/downloads),
|
||||
otherwise all requests will be blocked.
|
||||
By default, the customs server tries to connect to memcached
|
||||
using port `11211` on `127.0.0.1`.
|
||||
You can specify a different port and IP address
|
||||
using the `memcache.address` configuration setting
|
||||
or the `MEMCACHE_ADDRESS` environment variable.
|
||||
|
||||
To start the server, run:
|
||||
|
||||
npm start
|
||||
|
||||
It will listen on http://127.0.0.1:7000 by default.
|
||||
|
||||
## Docker Based Development
|
||||
|
||||
To run the customs server via Docker:
|
||||
|
||||
$ docker-compose up mozilla/fxa_customs_server
|
||||
|
||||
## Testing
|
||||
|
||||
Run tests with:
|
||||
|
||||
npm test
|
||||
|
||||
To run tests via Docker:
|
||||
|
||||
```
|
||||
docker-compose run mozilla/fxa_customs_server npm test
|
||||
```
|
||||
|
||||
## Tagging Releases
|
||||
|
||||
Unlike other FxA services,
|
||||
the customs-server includes some non-public code changes
|
||||
that are managed in a separate private repo:
|
||||
|
||||
https://github.com/mozilla/fxa-customs-server-private/
|
||||
|
||||
When tagging a new release for deployment,
|
||||
it needs to be merged to the private repo
|
||||
and re-tagged with those changes in place.
|
||||
The process looks something like this:
|
||||
|
||||
```
|
||||
> # First, make a new public tag.
|
||||
> cd ./fxa-customs-server
|
||||
> grunt version
|
||||
> git push; git push --tags
|
||||
>
|
||||
> # Next, merge the updates to the private repo.
|
||||
> cd ../fxa-customs-server-private
|
||||
> git checkout master ; git pull
|
||||
> git remote add public https://github.com/mozilla/fxa-customs-server
|
||||
> git fetch public
|
||||
> git merge public/master
|
||||
> git push
|
||||
>
|
||||
> # Make a release branch in the private repo.
|
||||
> git checkout v1.XXX.0
|
||||
> git checkout -b train-XXX
|
||||
> git push -u origin train-XXX
|
||||
>
|
||||
> # Merge private changes from previous train.
|
||||
> git merge origin/train-(XXX-1)
|
||||
>
|
||||
> # Make a private tag to include those changes.
|
||||
> git tag v1.XXX.0-private
|
||||
> git push; git push --tags
|
||||
|
||||
```
|
||||
|
||||
|
||||
## Code
|
||||
|
||||
Here are the main components of this project:
|
||||
|
||||
- `./bin/customs_server.js`: process listening on the network and responding to HTTP API calls
|
||||
- `./lib/bans/`: code implementing temporary bans of specific email or IP addresses and listening on the SQS API for requests
|
||||
- `./lib/config/config.js`: where all of the configuration options are defined
|
||||
- `./lib/email_record.js`, `./lib/ip_email_record.js` and `./lib/ip_record.js`: code implementing the various blocking and rate-limiting policies
|
||||
- `./scripts`: helper scripts only used for development/testing
|
||||
- `./test/local`: unit tests
|
||||
- `./test/remote`: tests exercising the HTTP API
|
||||
|
||||
### API
|
||||
|
||||
See our [detailed API spec](/docs/api.md).
|
||||
|
||||
### Policies
|
||||
|
||||
There are two types of policies:
|
||||
|
||||
* rate-limiting: slows down attackers by temporarily blocking requests for 15 minutes (see `config.limits.rateLimitIntervalSeconds`)
|
||||
* block / ban: stops attacks by temporarily blocking requests for 24 hours (see `config.limits.blockIntervalSeconds`)
|
||||
|
||||
We currently have the following policies in place:
|
||||
|
||||
* rate-limiting when too many emails (`config.limits.maxEmails` defaults to 3) have been sent to the same email address in a given time period (`config.limits.rateLimitIntervalSeconds` defaults to 15 minutes)
|
||||
* rate-limiting when too many requests to look up account status by email address (`config.limits.maxAccountStatusCheck`) have been sent from the same ip address during
|
||||
* rate-limiting when too many sms (`config.limits.smsRateLimit.maxSms`) have been sent from the same ip address during period (`config.limits.smsRateLimit.limitIntervalSeconds` defaults to 60 minutes)
|
||||
* rate-limiting when too many sms (`config.limits.smsRateLimit.maxSms`) have been sent from the same email address during period (`config.limits.smsRateLimit.limitIntervalSeconds` defaults to 60 minutes)
|
||||
* rate-limiting when too many sms (`config.limits.smsRateLimit.maxSms`) have been sent to the same phone number during period (`config.limits.smsRateLimit.limitIntervalSeconds` defaults to 60 minutes)
|
||||
* rate-limiting when too many failed login attempts (`config.limits.maxBadLogins` defaults to 2) have occurred for a given account and IP address, in a given time period (`config.limits.rateLimitIntervalSeconds` defaults to 15 minutes)
|
||||
* rate-limiting too many attempts to verify randomly-generated codes (`config.limits.maxVerifyCodes` defaults to 10) have occurred for a given account and IP address, in a given time period (`config.limits.rateLimitIntervalSeconds` defaults to 15 minutes)
|
||||
* manual blocking of an account (see `/blockEmail` API call)
|
||||
* manual blocking of an IP address (see `/blockIp` API call)
|
||||
|
||||
The data that these policies are based on is stored in a memcache instance (keyed by `email`, `ip` or `ip + email` depending on the policy) and the code that implements them is split across these three files:
|
||||
|
||||
* `email_record.js` handles blocking and rate-limiting based only on the email address
|
||||
* `ip_email_record.js` handles rate-limiting based on both the email and IP address of the request
|
||||
* `ip_record.js` handles blocking based only on the IP address
|
||||
|
||||
The rate-limiting and blocking policies are conveyed to the auth server via the `block` property in the response to `/check`.
|
||||
Please file issues and open pull requests against https://github.com/mozilla/fxa
|
||||
|
|
Загрузка…
Ссылка в новой задаче