Système d'information du FAI Illyse

Baptiste Jonglez 1e7eb86a1b Don't throw an exception when the graphite server is unreachable 2 years ago
coin 1e7eb86a1b Don't throw an exception when the graphite server is unreachable 2 years ago
contrib 4389dc53ea Ajout du path pour python et de la suppression du pid après le kill 4 years ago
simple_dsl e2d21c21e9 Add a simple_dsl application 4 years ago
.gitignore 5a71dd3438 Make use of django-sendfile to have the possibility to make use of web serveur to send a private file to a client. 4 years ago 3171b18735 Hint on debuggin gunicorn 4 years ago 56c73f3576 Add documentation on extending Coin 4 years ago 759a90eb75 README: Email notification for membership reminder 3 years ago 8efe3fd1fb Add some default values 5 years ago
requirements.txt 1f63db1deb Update to Django 1.7.8 (porting to Django 1.8 probably requires some efforts) 3 years ago

The COIN project

Coin is Illyse's Information System, designed to manage both members and Internet accesses, such as through DSL, VPN, wireless…

It is written in Django, and features a generic configuration interface, which allows to implement custom backends for different technologies. Currently implemented is a LDAP-based backend for OpenVPN, and a very simple DSL backend, without any authentication (useful for "white label" DSL).

Coin currently only works with python2, because python-ldap is (as of 2013) not compatible with python3.

The project page (issue, wiki, etc) is here:

The code is available at:


A mirror of the code, with a web interface, is also available at:


A demo of COIN is publicly available at:

Login: ffdn Password: internet

This user account has access to the administration interface.

Extending Coin

If you want to write your own backend, see



Using a virtualenv is recommended. On Debian, install python-virtualenv. On Archlinux, the package is called python2-virtualenv, and you must replace the virtualenv command with virtualenv2 in the following.

To create the virtualenv (the first time):

virtualenv ~/tmp/venv-illyse

To activate the virtualenv (you need to do this each time you work on the project):

. ~/tmp/venv-illyse/bin/activate

Install dependencies. On Debian, you will probably need the python-dev, python-pip, libldap-dev, libpq-dev and libsasl2-dev packages.

sudo apt-get install python-dev python-pip libldap2-dev libpq-dev libsasl2-dev

Then run:

pip install -r requirements.txt

You may experience problems with SSL certificates du to self-signed cert used by You can temporarily disable certificate verification in git : git config --global http.sslVerify false

You should now be able to run python (within the virtualenv, obviously) without error.


The coin/ file is ignored by Git: feel free to override any setting by writing into that file. For example, to override the DEBUG settings:

echo '# -*- coding: utf-8 -*-' > coin/
echo 'DEBUG = TEMPLATE_DEBUG = True' >> coin/

If you don't want to use LDAP, just set in your


See the end of this README for a reference of available configuration settings.


At this point, you should setup your database: we highly recommend PostgreSQL. SQLite might work, but some features will not be available:

  • automatic allocation of IP subnets (needs proper subnet implementation in the database)
  • sending automated emails to remind of expiring membership fee (needs aggregation on date fields, see Django doc)

For more information on the database setup, see:

The first time, you need to create the database, create a superuser, and import some base data to play with:

python migrate
python createsuperuser
python loaddata offers ip_pool

Note that the superuser will be inserted into the LDAP backend exactly in the same way as all other members, so you should use a real account (not just admin/admin).

Then, at each code update, you will only need to update dependencies and apply new migrations:

pip install -r requirements.txt
python migrate

At this point, Django should run correctly:

python runserver

Available commands

Some useful administration commands are available via

python members_email: returns email addresses of all members, one per line. This may be useful to automatically feed a mailing list software. Note that membership is based on the status field of users, not on membership fees. That is, even if a member has forgot to renew his or her membership fee, his or her address will still show up in this list.

python charge_subscriptions: generate invoices (including a PDF version) for each subscriber. You probably want to run this command every month as a cron task, see below.

python call_for_membership_fees: send reminder emails to members whose membership fee is about to expire or is already expired (1 month before, on the day of expiration, 1 month after, 2 months after, and 3 months after). You should run this command in a cron job every day.


You should first setup the sites application, in the admin. The domain name configured there is used for outgoing emails.


By default, LDAP support is disabled. If you want to use LDAP (for instance for the OpenVPN/LDAP backend, or for your own backend), see the configuration file coin/

ISP-specific configuration

The main place to customize Coin for your ISP is the IspDatabase application, in the admin. Information entered in this application has two purposes:

1) generate a JSON file usable by

2) customize the user interface (postal address, bank account, ISP name & logo...)

Some bits of configuration are done in LDAP branches, RSS feeds to display on the home page, and so on.

Cron tasks

You may want to run cron jobs for repetitive tasks.

The command that generates invoices should be run every day, so that invoices for new subscriptions are created automatically. On the first day of each month, invoices will be generated for all subscriptions. This will run the command at 23:59 every day:

59 23 * * * /home/coin/venv/bin/python charge_subscriptions`

To send reminder emails for membership fee expiration:

42 3 * * * /home/coin/venv/bin/python call_for_membership_fees`

If you want to be notified by email each time a reminder email is sent, you can set an email address in the crontab:

More information

For the rest of the setup (database, LDAP), see

For real production deployment, see file