mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-22 03:13:12 +00:00
Merge branch 'dev' of https://gitlab.federez.net/re2o/re2o into new_radius_api
This commit is contained in:
commit
06b9f751b3
39 changed files with 9273 additions and 812 deletions
74
CHANGELOG.md
74
CHANGELOG.md
|
@ -1,3 +1,71 @@
|
|||
# Re2o 2.9
|
||||
|
||||
## Install steps
|
||||
|
||||
To install the latest version of Re2o, checkout the [dedicated wiki entry](https://gitlab.federez.net/re2o/re2o/-/wikis/User-Documentation/Quick-Start#update-re2o).
|
||||
|
||||
## Post-install steps
|
||||
|
||||
### MR 531: FreeRADIUS Python3 backend
|
||||
|
||||
On the Radius server, add `buster-backports` to your `/etc/apt/sources.list`:
|
||||
```bash
|
||||
echo "deb http://deb.debian.org/debian buster-backports main contrib" >> /etc/apt/sources.list
|
||||
```
|
||||
|
||||
**Note:** If you are running Debian Bullseye, the package should already be available without going through backports.
|
||||
|
||||
Then install the new required packages:
|
||||
```bash
|
||||
apt update
|
||||
apt install -t buster-backports freeradius
|
||||
cat apt_requirements_radius.txt | xargs sudo apt -y install
|
||||
```
|
||||
|
||||
### MR 582: Autocomplete light
|
||||
|
||||
On the Re2o server, install the new dependency and run `collectstatic`:
|
||||
```bash
|
||||
sudo pip3 install -r pip_requirements.txt
|
||||
python3 manage.py collectstatic
|
||||
```
|
||||
|
||||
### MR 589: Move ldap to optional app
|
||||
|
||||
Add `ldap_sync` to your optional apps in your local settings if you want to keep using the LDAP synchronisation.
|
||||
|
||||
### Final steps
|
||||
|
||||
As usual, run the following commands after updating:
|
||||
```bash
|
||||
python3 manage.py migrate
|
||||
sudo service apache2 reload
|
||||
```
|
||||
|
||||
## New features
|
||||
|
||||
Here is a list of noteworthy features brought by this update:
|
||||
|
||||
* [!488](https://gitlab.federez.net/re2o/re2o/-/merge_requests/488): Use `+` in searches to combine keywords (e.g. `John+Doe`).
|
||||
* [!495](https://gitlab.federez.net/re2o/re2o/-/merge_requests/495): Add optional behavior allowing users to override another user's room, if that user is no longer active.
|
||||
* [!496](https://gitlab.federez.net/re2o/re2o/-/merge_requests/496): Add option to allow users to choose their password during account creation. They will have to separately confirm their email address.
|
||||
* [!504](https://gitlab.federez.net/re2o/re2o/-/merge_requests/504): Add setting to change the minimum password length.
|
||||
* [!507](https://gitlab.federez.net/re2o/re2o/-/merge_requests/507): New form for editing lists of rights that should make everyone happier.
|
||||
* [!512](https://gitlab.federez.net/re2o/re2o/-/merge_requests/512): Add ability to comment on tickets.
|
||||
* [!513](https://gitlab.federez.net/re2o/re2o/-/merge_requests/513): IP and MAC address history (`Statistics > Machine history` tab) which also works for deleted interfaces. Uses already existing history so events before the upgrade are taken into account.
|
||||
* [!516](https://gitlab.federez.net/re2o/re2o/-/merge_requests/516): Detailed events in history views (e.g. show `old_email -> new_email`).
|
||||
* [!519](https://gitlab.federez.net/re2o/re2o/-/merge_requests/519): Add ability to filter event logs (e.g. to show all the subscriptions added by an admin).
|
||||
* [!569](https://gitlab.federez.net/re2o/re2o/-/merge_requests/569): Refactor navbar to make menu navigation easier.
|
||||
* [!569](https://gitlab.federez.net/re2o/re2o/-/merge_requests/569): Add ability to install custom themes.
|
||||
* [!578](https://gitlab.federez.net/re2o/re2o/-/merge_requests/578) : Migrations squashed to ease the installation process.
|
||||
* [!582](https://gitlab.federez.net/re2o/re2o/-/merge_requests/582): Improve autocomplete fields so they load faster and have a clearer behavior (no more entering a value without clicking and thinking it was taken into account).
|
||||
* [!589](https://gitlab.federez.net/re2o/re2o/-/merge_requests/589): Move LDAP to a separate optional app.
|
||||
* Plenty of bux fixes.
|
||||
|
||||
You can view the full list of closed issues [here](https://gitlab.federez.net/re2o/re2o/-/issues?scope=all&state=all&milestone_title=Re2o 2.9).
|
||||
|
||||
# Before Re2o 2.9
|
||||
|
||||
## MR 160: Datepicker
|
||||
|
||||
Install libjs-jquery libjs-jquery-ui libjs-jquery-timepicker libjs-bootstrap javascript-common
|
||||
|
@ -21,7 +89,6 @@ rm static_files/js/jquery-2.2.4.min.js
|
|||
rm static/css/jquery-ui-timepicker-addon.css
|
||||
```
|
||||
|
||||
|
||||
## MR 159: Graph topo & MR 164: branche de création de graph
|
||||
|
||||
Add a graph of the network topology
|
||||
|
@ -34,7 +101,6 @@ Create the *media/images* directory:
|
|||
mkdir -p media/images
|
||||
```
|
||||
|
||||
|
||||
## MR 163: Fix install re2o
|
||||
|
||||
Refactored install_re2o.sh script.
|
||||
|
@ -45,8 +111,6 @@ install_re2o.sh help
|
|||
|
||||
* The installation templates (LDIF files and `re2o/settings_locale.example.py`) have been changed to use `example.net` instead of `example.org` (more neutral and generic)
|
||||
|
||||
|
||||
|
||||
## MR 176: Add awesome Logo
|
||||
|
||||
Add the logo and fix somme issues on the navbar and home page. Only collecting the statics is needed:
|
||||
|
@ -54,7 +118,6 @@ Add the logo and fix somme issues on the navbar and home page. Only collecting t
|
|||
python3 manage.py collectstatic
|
||||
```
|
||||
|
||||
|
||||
## MR 172: Refactor API
|
||||
|
||||
Creates a new (nearly) REST API to expose all models of Re2o. See [the dedicated wiki page](https://gitlab.federez.net/federez/re2o/wikis/API/Raw-Usage) for more details on how to use it.
|
||||
|
@ -75,7 +138,6 @@ OPTIONAL_APPS = (
|
|||
)
|
||||
```
|
||||
|
||||
|
||||
## MR 177: Add django-debug-toolbar support
|
||||
|
||||
Add the possibility to enable `django-debug-toolbar` in debug mode. First install the APT package:
|
||||
|
|
25
api/acl.py
25
api/acl.py
|
@ -31,31 +31,6 @@ from django.contrib.contenttypes.models import ContentType
|
|||
from django.utils.translation import ugettext as _
|
||||
|
||||
|
||||
def _create_api_permission():
|
||||
"""Creates the 'use_api' permission if not created.
|
||||
|
||||
The 'use_api' is a fake permission in the sense it is not associated with an
|
||||
existing model and this ensure the permission is created every time this file
|
||||
is imported.
|
||||
"""
|
||||
api_content_type, created = ContentType.objects.get_or_create(
|
||||
app_label=settings.API_CONTENT_TYPE_APP_LABEL,
|
||||
model=settings.API_CONTENT_TYPE_MODEL,
|
||||
)
|
||||
if created:
|
||||
api_content_type.save()
|
||||
api_permission, created = Permission.objects.get_or_create(
|
||||
name=settings.API_PERMISSION_NAME,
|
||||
content_type=api_content_type,
|
||||
codename=settings.API_PERMISSION_CODENAME,
|
||||
)
|
||||
if created:
|
||||
api_permission.save()
|
||||
|
||||
|
||||
_create_api_permission()
|
||||
|
||||
|
||||
def can_view(user, *args, **kwargs):
|
||||
"""Check if an user can view the application.
|
||||
|
||||
|
|
34
api/migrations/0001_initial.py
Normal file
34
api/migrations/0001_initial.py
Normal file
|
@ -0,0 +1,34 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
from django.conf import settings
|
||||
|
||||
def create_api_permission(apps, schema_editor):
|
||||
"""Creates the 'use_api' permission if not created.
|
||||
|
||||
The 'use_api' is a fake permission in the sense it is not associated with an
|
||||
existing model and this ensure the permission is created.
|
||||
"""
|
||||
ContentType = apps.get_model("contenttypes", "ContentType")
|
||||
Permission = apps.get_model("auth", "Permission")
|
||||
api_content_type, created = ContentType.objects.get_or_create(
|
||||
app_label=settings.API_CONTENT_TYPE_APP_LABEL,
|
||||
model=settings.API_CONTENT_TYPE_MODEL,
|
||||
)
|
||||
if created:
|
||||
api_content_type.save()
|
||||
api_permission, created = Permission.objects.get_or_create(
|
||||
name=settings.API_PERMISSION_NAME,
|
||||
content_type=api_content_type,
|
||||
codename=settings.API_PERMISSION_CODENAME,
|
||||
)
|
||||
if created:
|
||||
api_permission.save()
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
initial = True
|
||||
dependencies = []
|
||||
operations = [
|
||||
migrations.RunPython(create_api_permission)
|
||||
]
|
0
api/migrations/__init__.py
Normal file
0
api/migrations/__init__.py
Normal file
970
cotisations/migrations/0001_model_creation.py
Normal file
970
cotisations/migrations/0001_model_creation.py
Normal file
|
@ -0,0 +1,970 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.core.validators
|
||||
import re2o.mixins
|
||||
import re2o.aes_field
|
||||
import re2o.field_permissions
|
||||
import cotisations.models
|
||||
import cotisations.payment_methods.mixins
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
initial = True
|
||||
dependencies = []
|
||||
replaces = [
|
||||
("users", "0001_initial"),
|
||||
("users", "0002_auto_20160630_2301"),
|
||||
("users", "0003_listrights_rights"),
|
||||
("users", "0004_auto_20160701_2312"),
|
||||
("users", "0005_auto_20160702_0006"),
|
||||
("users", "0006_ban"),
|
||||
("users", "0007_auto_20160702_2322"),
|
||||
("users", "0008_user_registered"),
|
||||
("users", "0009_user_room"),
|
||||
("users", "0010_auto_20160703_1226"),
|
||||
("users", "0011_auto_20160703_1227"),
|
||||
("users", "0012_auto_20160703_1230"),
|
||||
("users", "0013_auto_20160704_1547"),
|
||||
("users", "0014_auto_20160704_1548"),
|
||||
("users", "0015_whitelist"),
|
||||
("users", "0016_auto_20160706_1220"),
|
||||
("users", "0017_auto_20160707_0105"),
|
||||
("users", "0018_auto_20160707_0115"),
|
||||
("users", "0019_auto_20160708_1633"),
|
||||
("users", "0020_request"),
|
||||
("users", "0021_ldapuser"),
|
||||
("users", "0022_ldapuser_sambasid"),
|
||||
("users", "0023_auto_20160724_1908"),
|
||||
("users", "0024_remove_ldapuser_mac_list"),
|
||||
("users", "0025_listshell"),
|
||||
("users", "0026_user_shell"),
|
||||
("users", "0027_auto_20160726_0216"),
|
||||
("users", "0028_auto_20160726_0227"),
|
||||
("users", "0029_auto_20160726_0229"),
|
||||
("users", "0030_auto_20160726_0357"),
|
||||
("users", "0031_auto_20160726_0359"),
|
||||
("users", "0032_auto_20160727_2122"),
|
||||
("users", "0033_remove_ldapuser_loginshell"),
|
||||
("users", "0034_auto_20161018_0037"),
|
||||
("users", "0035_auto_20161018_0046"),
|
||||
("users", "0036_auto_20161022_2146"),
|
||||
("users", "0037_auto_20161028_1906"),
|
||||
("users", "0038_auto_20161031_0258"),
|
||||
("users", "0039_auto_20161119_0033"),
|
||||
("users", "0040_auto_20161119_1709"),
|
||||
("users", "0041_listright_details"),
|
||||
("users", "0042_auto_20161126_2028"),
|
||||
("users", "0043_auto_20161224_1156"),
|
||||
("users", "0043_ban_state"),
|
||||
("users", "0044_user_ssh_public_key"),
|
||||
("users", "0045_merge"),
|
||||
("users", "0046_auto_20170617_1433"),
|
||||
("users", "0047_auto_20170618_0156"),
|
||||
("users", "0048_auto_20170618_0210"),
|
||||
("users", "0049_auto_20170618_1424"),
|
||||
("users", "0050_serviceuser_comment"),
|
||||
("users", "0051_user_telephone"),
|
||||
("users", "0052_ldapuser_shadowexpire"),
|
||||
("users", "0053_auto_20170626_2105"),
|
||||
("users", "0054_auto_20170626_2219"),
|
||||
("users", "0055_auto_20171003_0556"),
|
||||
("users", "0056_auto_20171015_2033"),
|
||||
("users", "0057_auto_20171023_0301"),
|
||||
("users", "0058_auto_20171025_0154"),
|
||||
("users", "0059_auto_20171025_1854"),
|
||||
("users", "0060_auto_20171120_0317"),
|
||||
("users", "0061_auto_20171230_2033"),
|
||||
("users", "0062_auto_20171231_0056"),
|
||||
("users", "0063_auto_20171231_0140"),
|
||||
("users", "0064_auto_20171231_0150"),
|
||||
("users", "0065_auto_20171231_2053"),
|
||||
("users", "0066_grouppermissions"),
|
||||
("users", "0067_serveurpermission"),
|
||||
("users", "0068_auto_20180107_2245"),
|
||||
("users", "0069_club_mailing"),
|
||||
("users", "0070_auto_20180324_1906"),
|
||||
("users", "0071_auto_20180415_1252"),
|
||||
("users", "0072_auto_20180426_2021"),
|
||||
("users", "0073_auto_20180629_1614"),
|
||||
("users", "0074_auto_20180810_2104"),
|
||||
("users", "0074_auto_20180814_1059"),
|
||||
("users", "0075_merge_20180815_2202"),
|
||||
("users", "0076_auto_20180818_1321"),
|
||||
("users", "0077_auto_20180824_1750"),
|
||||
("users", "0078_auto_20181011_1405"),
|
||||
("users", "0079_auto_20181228_2039"),
|
||||
("users", "0080_auto_20190108_1726"),
|
||||
("users", "0081_auto_20190317_0302"),
|
||||
("users", "0082_auto_20190908_1338"),
|
||||
("users", "0083_user_shortcuts_enabled"),
|
||||
("users", "0084_auto_20191120_0159"),
|
||||
("users", "0085_user_email_state"),
|
||||
("users", "0086_user_email_change_date"),
|
||||
("users", "0087_request_email"),
|
||||
("users", "0088_auto_20200417_2312"),
|
||||
("users", "0089_auto_20200418_0112"),
|
||||
("users", "0090_auto_20200421_1825"),
|
||||
("users", "0091_auto_20200423_1256"),
|
||||
("users", "0092_auto_20200502_0057"),
|
||||
("users", "0093_user_profile_image"),
|
||||
("users", "0094_remove_user_profile_image"),
|
||||
("users", "0095_user_theme"),
|
||||
("users", "0096_auto_20210110_1811"),
|
||||
("cotisations", "0001_initial"),
|
||||
("cotisations", "0002_remove_facture_article"),
|
||||
("cotisations", "0003_auto_20160702_1448"),
|
||||
("cotisations", "0004_auto_20160702_1528"),
|
||||
("cotisations", "0005_auto_20160702_1532"),
|
||||
("cotisations", "0006_auto_20160702_1534"),
|
||||
("cotisations", "0007_auto_20160702_1543"),
|
||||
("cotisations", "0008_auto_20160702_1614"),
|
||||
("cotisations", "0009_remove_cotisation_user"),
|
||||
("cotisations", "0010_auto_20160702_1840"),
|
||||
("cotisations", "0011_auto_20160702_1911"),
|
||||
("cotisations", "0012_auto_20160704_0118"),
|
||||
("cotisations", "0013_auto_20160711_2240"),
|
||||
("cotisations", "0014_auto_20160712_0245"),
|
||||
("cotisations", "0015_auto_20160714_2142"),
|
||||
("cotisations", "0016_auto_20160715_0110"),
|
||||
("cotisations", "0017_auto_20170718_2329"),
|
||||
("cotisations", "0018_paiement_type_paiement"),
|
||||
("cotisations", "0019_auto_20170819_0055"),
|
||||
("cotisations", "0020_auto_20170819_0057"),
|
||||
("cotisations", "0021_auto_20170819_0104"),
|
||||
("cotisations", "0022_auto_20170824_0128"),
|
||||
("cotisations", "0023_auto_20170902_1303"),
|
||||
("cotisations", "0024_auto_20171015_2033"),
|
||||
("cotisations", "0025_article_type_user"),
|
||||
("cotisations", "0026_auto_20171028_0126"),
|
||||
("cotisations", "0027_auto_20171029_1156"),
|
||||
("cotisations", "0028_auto_20171231_0007"),
|
||||
("cotisations", "0029_auto_20180414_2056"),
|
||||
("cotisations", "0030_custom_payment"),
|
||||
("cotisations", "0031_comnpaypayment_production"),
|
||||
("cotisations", "0032_custom_invoice"),
|
||||
("cotisations", "0033_auto_20180818_1319"),
|
||||
("cotisations", "0034_auto_20180831_1532"),
|
||||
("cotisations", "0035_notepayment"),
|
||||
("cotisations", "0036_custominvoice_remark"),
|
||||
("cotisations", "0037_costestimate"),
|
||||
("cotisations", "0038_auto_20181231_1657"),
|
||||
("cotisations", "0039_freepayment"),
|
||||
("cotisations", "0040_auto_20191002_2335"),
|
||||
("cotisations", "0041_auto_20191103_2131"),
|
||||
("cotisations", "0042_auto_20191120_0159"),
|
||||
("cotisations", "0043_separation_membership_connection_p1"),
|
||||
("cotisations", "0044_separation_membership_connection_p2"),
|
||||
("cotisations", "0045_separation_membership_connection_p3"),
|
||||
("cotisations", "0046_article_need_membership"),
|
||||
("cotisations", "0047_article_need_membership_init"),
|
||||
("cotisations", "0048_auto_20201017_0018"),
|
||||
("cotisations", "0049_auto_20201102_2305"),
|
||||
("cotisations", "0050_auto_20201102_2342"),
|
||||
("cotisations", "0051_auto_20201228_1636"),
|
||||
("machines", "0001_initial"),
|
||||
("machines", "0002_auto_20160703_1444"),
|
||||
("machines", "0003_auto_20160703_1450"),
|
||||
("machines", "0004_auto_20160703_1451"),
|
||||
("machines", "0005_auto_20160703_1523"),
|
||||
("machines", "0006_auto_20160703_1813"),
|
||||
("machines", "0007_auto_20160703_1816"),
|
||||
("machines", "0008_remove_interface_ipv6"),
|
||||
("machines", "0009_auto_20160703_2358"),
|
||||
("machines", "0010_auto_20160704_0104"),
|
||||
("machines", "0011_auto_20160704_0105"),
|
||||
("machines", "0012_auto_20160704_0118"),
|
||||
("machines", "0013_auto_20160705_1014"),
|
||||
("machines", "0014_auto_20160706_1220"),
|
||||
("machines", "0015_auto_20160707_0105"),
|
||||
("machines", "0016_auto_20160708_1633"),
|
||||
("machines", "0017_auto_20160708_1645"),
|
||||
("machines", "0018_auto_20160708_1813"),
|
||||
("machines", "0019_auto_20160718_1141"),
|
||||
("machines", "0020_auto_20160718_1849"),
|
||||
("machines", "0021_auto_20161006_1943"),
|
||||
("machines", "0022_auto_20161011_1829"),
|
||||
("machines", "0023_iplist_ip_type"),
|
||||
("machines", "0024_machinetype_need_infra"),
|
||||
("machines", "0025_auto_20161023_0038"),
|
||||
("machines", "0026_auto_20161026_1348"),
|
||||
("machines", "0027_alias"),
|
||||
("machines", "0028_iptype_domaine_ip"),
|
||||
("machines", "0029_iptype_domaine_range"),
|
||||
("machines", "0030_auto_20161118_1730"),
|
||||
("machines", "0031_auto_20161119_1709"),
|
||||
("machines", "0032_auto_20161119_1850"),
|
||||
("machines", "0033_extension_need_infra"),
|
||||
("machines", "0034_iplist_need_infra"),
|
||||
("machines", "0035_auto_20161224_1201"),
|
||||
("machines", "0036_auto_20161224_1204"),
|
||||
("machines", "0037_domain_cname"),
|
||||
("machines", "0038_auto_20161224_1721"),
|
||||
("machines", "0039_auto_20161224_1732"),
|
||||
("machines", "0040_remove_interface_dns"),
|
||||
("machines", "0041_remove_ns_interface"),
|
||||
("machines", "0042_ns_ns"),
|
||||
("machines", "0043_auto_20170721_0350"),
|
||||
("machines", "0044_auto_20170808_0233"),
|
||||
("machines", "0045_auto_20170808_0348"),
|
||||
("machines", "0046_auto_20170808_1423"),
|
||||
("machines", "0047_auto_20170809_0606"),
|
||||
("machines", "0048_auto_20170823_2315"),
|
||||
("machines", "0049_vlan"),
|
||||
("machines", "0050_auto_20170826_0022"),
|
||||
("machines", "0051_iptype_vlan"),
|
||||
("machines", "0052_auto_20170828_2322"),
|
||||
("machines", "0053_text"),
|
||||
("machines", "0054_text_zone"),
|
||||
("machines", "0055_nas"),
|
||||
("machines", "0056_nas_port_access_mode"),
|
||||
("machines", "0057_nas_autocapture_mac"),
|
||||
("machines", "0058_auto_20171002_0350"),
|
||||
("machines", "0059_iptype_prefix_v6"),
|
||||
("machines", "0060_iptype_ouverture_ports"),
|
||||
("machines", "0061_auto_20171015_2033"),
|
||||
("machines", "0062_extension_origin_v6"),
|
||||
("machines", "0063_auto_20171020_0040"),
|
||||
("machines", "0064_auto_20171115_0253"),
|
||||
("machines", "0065_auto_20171115_1514"),
|
||||
("machines", "0066_srv"),
|
||||
("machines", "0067_auto_20171116_0152"),
|
||||
("machines", "0068_auto_20171116_0252"),
|
||||
("machines", "0069_auto_20171116_0822"),
|
||||
("machines", "0070_auto_20171231_1947"),
|
||||
("machines", "0071_auto_20171231_2100"),
|
||||
("machines", "0072_auto_20180108_1822"),
|
||||
("machines", "0073_auto_20180128_2203"),
|
||||
("machines", "0074_auto_20180129_0352"),
|
||||
("machines", "0075_auto_20180130_0052"),
|
||||
("machines", "0076_auto_20180130_1623"),
|
||||
("machines", "0077_auto_20180409_2243"),
|
||||
("machines", "0078_auto_20180415_1252"),
|
||||
("machines", "0079_auto_20180416_0107"),
|
||||
("machines", "0080_auto_20180502_2334"),
|
||||
("machines", "0081_auto_20180521_1413"),
|
||||
("machines", "0082_auto_20180525_2209"),
|
||||
("machines", "0083_remove_duplicate_rights"),
|
||||
("machines", "0084_dname"),
|
||||
("machines", "0085_sshfingerprint"),
|
||||
("machines", "0086_role"),
|
||||
("machines", "0087_dnssec"),
|
||||
("machines", "0088_iptype_prefix_v6_length"),
|
||||
("machines", "0089_auto_20180805_1148"),
|
||||
("machines", "0090_auto_20180805_1459"),
|
||||
("machines", "0091_auto_20180806_2310"),
|
||||
("machines", "0092_auto_20180807_0926"),
|
||||
("machines", "0093_auto_20180807_1115"),
|
||||
("machines", "0094_auto_20180815_1918"),
|
||||
("machines", "0095_auto_20180919_2225"),
|
||||
("machines", "0096_auto_20181013_1417"),
|
||||
("machines", "0097_extension_dnssec"),
|
||||
("machines", "0098_auto_20190102_1745"),
|
||||
("machines", "0099_role_recursive_dns"),
|
||||
("machines", "0100_auto_20190102_1753"),
|
||||
("machines", "0101_auto_20190108_1623"),
|
||||
("machines", "0102_auto_20190303_1611"),
|
||||
("machines", "0103_auto_20191002_2222"),
|
||||
("machines", "0104_auto_20191002_2231"),
|
||||
("machines", "0105_dname_ttl"),
|
||||
("machines", "0106_auto_20191120_0159"),
|
||||
("machines", "0107_fix_lowercase_domain"),
|
||||
("machines", "0108_ipv6list_active"),
|
||||
("preferences", "0001_initial"),
|
||||
("preferences", "0002_auto_20170625_1923"),
|
||||
("preferences", "0003_optionaluser_solde_negatif"),
|
||||
("preferences", "0004_assooption_services"),
|
||||
("preferences", "0005_auto_20170824_0139"),
|
||||
("preferences", "0006_auto_20170824_0143"),
|
||||
("preferences", "0007_auto_20170824_2056"),
|
||||
("preferences", "0008_auto_20170824_2122"),
|
||||
("preferences", "0009_assooption_utilisateur_asso"),
|
||||
("preferences", "0010_auto_20170825_0459"),
|
||||
("preferences", "0011_auto_20170825_2307"),
|
||||
("preferences", "0012_generaloption_req_expire_hrs"),
|
||||
("preferences", "0013_generaloption_site_name"),
|
||||
("preferences", "0014_generaloption_email_from"),
|
||||
("preferences", "0015_optionaltopologie_radius_general_policy"),
|
||||
("preferences", "0016_auto_20170902_1520"),
|
||||
("preferences", "0017_mailmessageoption"),
|
||||
("preferences", "0018_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0019_remove_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0020_optionalmachine_ipv6"),
|
||||
("preferences", "0021_auto_20171015_1741"),
|
||||
("preferences", "0022_auto_20171015_1758"),
|
||||
("preferences", "0023_auto_20171015_2033"),
|
||||
("preferences", "0024_optionaluser_all_can_create"),
|
||||
("preferences", "0025_auto_20171231_2142"),
|
||||
("preferences", "0025_generaloption_general_message"),
|
||||
("preferences", "0026_auto_20171216_0401"),
|
||||
("preferences", "0027_merge_20180106_2019"),
|
||||
("preferences", "0028_assooption_description"),
|
||||
("preferences", "0028_auto_20180111_1129"),
|
||||
("preferences", "0028_auto_20180128_2203"),
|
||||
("preferences", "0029_auto_20180111_1134"),
|
||||
("preferences", "0029_auto_20180318_0213"),
|
||||
("preferences", "0029_auto_20180318_1005"),
|
||||
("preferences", "0030_auto_20180111_2346"),
|
||||
("preferences", "0030_merge_20180320_1419"),
|
||||
("preferences", "0031_auto_20180323_0218"),
|
||||
("preferences", "0031_optionaluser_self_adhesion"),
|
||||
("preferences", "0032_optionaluser_min_online_payment"),
|
||||
("preferences", "0032_optionaluser_shell_default"),
|
||||
("preferences", "0033_accueiloption"),
|
||||
("preferences", "0033_generaloption_gtu_sum_up"),
|
||||
("preferences", "0034_auto_20180114_2025"),
|
||||
("preferences", "0034_auto_20180416_1120"),
|
||||
("preferences", "0035_auto_20180114_2132"),
|
||||
("preferences", "0035_optionaluser_allow_self_subscription"),
|
||||
("preferences", "0036_auto_20180114_2141"),
|
||||
("preferences", "0037_auto_20180114_2156"),
|
||||
("preferences", "0038_auto_20180114_2209"),
|
||||
("preferences", "0039_auto_20180115_0003"),
|
||||
("preferences", "0040_auto_20180129_1745"),
|
||||
("preferences", "0041_merge_20180130_0052"),
|
||||
("preferences", "0042_auto_20180222_1743"),
|
||||
("preferences", "0043_optionalmachine_create_machine"),
|
||||
("preferences", "0044_remove_payment_pass"),
|
||||
("preferences", "0045_remove_unused_payment_fields"),
|
||||
("preferences", "0046_optionaluser_mail_extension"),
|
||||
("preferences", "0047_mailcontact"),
|
||||
("preferences", "0048_auto_20180811_1515"),
|
||||
("preferences", "0049_optionaluser_self_change_shell"),
|
||||
("preferences", "0050_auto_20180818_1329"),
|
||||
("preferences", "0051_auto_20180919_2225"),
|
||||
("preferences", "0052_optionaluser_delete_notyetactive"),
|
||||
("preferences", "0053_optionaluser_self_change_room"),
|
||||
("preferences", "0055_generaloption_main_site_url"),
|
||||
("preferences", "0056_1_radiusoption"),
|
||||
("preferences", "0056_2_radiusoption"),
|
||||
("preferences", "0056_3_radiusoption"),
|
||||
("preferences", "0056_4_radiusoption"),
|
||||
("preferences", "0057_optionaluser_all_users_active"),
|
||||
("preferences", "0058_auto_20190108_1650"),
|
||||
("preferences", "0059_auto_20190120_1739"),
|
||||
("preferences", "0060_auto_20190712_1821"),
|
||||
("preferences", "0061_optionaluser_allow_archived_connexion"),
|
||||
("preferences", "0062_auto_20190910_1909"),
|
||||
("preferences", "0063_mandate"),
|
||||
("preferences", "0064_auto_20191008_1335"),
|
||||
("preferences", "0065_auto_20191010_1227"),
|
||||
("preferences", "0066_optionalmachine_default_dns_ttl"),
|
||||
("preferences", "0067_auto_20191120_0159"),
|
||||
("preferences", "0068_optionaluser_allow_set_password_during_user_creation"),
|
||||
("preferences", "0069_optionaluser_disable_emailnotyetconfirmed"),
|
||||
("preferences", "0070_auto_20200419_0225"),
|
||||
("preferences", "0071_optionaluser_self_change_pseudo"),
|
||||
("topologie", "0001_initial"),
|
||||
("topologie", "0002_auto_20160703_1118"),
|
||||
("topologie", "0003_room"),
|
||||
("topologie", "0004_auto_20160703_1122"),
|
||||
("topologie", "0005_auto_20160703_1123"),
|
||||
("topologie", "0006_auto_20160703_1129"),
|
||||
("topologie", "0007_auto_20160703_1148"),
|
||||
("topologie", "0008_port_room"),
|
||||
("topologie", "0009_auto_20160703_1200"),
|
||||
("topologie", "0010_auto_20160704_2148"),
|
||||
("topologie", "0011_auto_20160704_2153"),
|
||||
("topologie", "0012_port_machine_interface"),
|
||||
("topologie", "0013_port_related"),
|
||||
("topologie", "0014_auto_20160706_1238"),
|
||||
("topologie", "0015_auto_20160706_1452"),
|
||||
("topologie", "0016_auto_20160706_1531"),
|
||||
("topologie", "0017_auto_20160718_1141"),
|
||||
("topologie", "0018_room_details"),
|
||||
("topologie", "0019_auto_20161026_1348"),
|
||||
("topologie", "0020_auto_20161119_0033"),
|
||||
("topologie", "0021_port_radius"),
|
||||
("topologie", "0022_auto_20161211_1622"),
|
||||
("topologie", "0023_auto_20170817_1654"),
|
||||
("topologie", "0023_auto_20170826_1530"),
|
||||
("topologie", "0024_auto_20170818_1021"),
|
||||
("topologie", "0024_auto_20170826_1800"),
|
||||
("topologie", "0025_merge_20170902_1242"),
|
||||
("topologie", "0026_auto_20170902_1245"),
|
||||
("topologie", "0027_auto_20170905_1442"),
|
||||
("topologie", "0028_auto_20170913_1503"),
|
||||
("topologie", "0029_auto_20171002_0334"),
|
||||
("topologie", "0030_auto_20171004_0235"),
|
||||
("topologie", "0031_auto_20171015_2033"),
|
||||
("topologie", "0032_auto_20171026_0338"),
|
||||
("topologie", "0033_auto_20171231_1743"),
|
||||
("topologie", "0034_borne"),
|
||||
("topologie", "0035_auto_20180324_0023"),
|
||||
("topologie", "0036_transferborne"),
|
||||
("topologie", "0037_auto_20180325_0127"),
|
||||
("topologie", "0038_transfersw"),
|
||||
("topologie", "0039_port_new_switch"),
|
||||
("topologie", "0040_transferports"),
|
||||
("topologie", "0041_transferportsw"),
|
||||
("topologie", "0042_transferswitch"),
|
||||
("topologie", "0043_renamenewswitch"),
|
||||
("topologie", "0044_auto_20180326_0002"),
|
||||
("topologie", "0045_auto_20180326_0123"),
|
||||
("topologie", "0046_auto_20180326_0129"),
|
||||
("topologie", "0047_ap_machine"),
|
||||
("topologie", "0048_ap_machine"),
|
||||
("topologie", "0049_switchs_machine"),
|
||||
("topologie", "0050_port_new_switch"),
|
||||
("topologie", "0051_switchs_machine"),
|
||||
("topologie", "0052_transferports"),
|
||||
("topologie", "0053_finalsw"),
|
||||
("topologie", "0054_auto_20180326_1742"),
|
||||
("topologie", "0055_auto_20180329_0431"),
|
||||
("topologie", "0056_building_switchbay"),
|
||||
("topologie", "0057_auto_20180408_0316"),
|
||||
("topologie", "0058_remove_switch_location"),
|
||||
("topologie", "0059_auto_20180415_2249"),
|
||||
("topologie", "0060_server"),
|
||||
("topologie", "0061_portprofile"),
|
||||
("topologie", "0062_auto_20180815_1918"),
|
||||
("topologie", "0063_auto_20180919_2225"),
|
||||
("topologie", "0064_switch_automatic_provision"),
|
||||
("topologie", "0065_auto_20180927_1836"),
|
||||
("topologie", "0066_modelswitch_commercial_name"),
|
||||
("topologie", "0067_auto_20181230_1819"),
|
||||
("topologie", "0068_auto_20190102_1758"),
|
||||
("topologie", "0069_auto_20190108_1439"),
|
||||
("topologie", "0070_auto_20190218_1743"),
|
||||
("topologie", "0071_auto_20190218_1936"),
|
||||
("topologie", "0072_auto_20190720_2318"),
|
||||
("topologie", "0073_auto_20191120_0159"),
|
||||
("topologie", "0074_auto_20200419_1640"),
|
||||
]
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="BaseInvoice",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("date", models.DateTimeField(auto_now_add=True, verbose_name="date")),
|
||||
],
|
||||
bases=(
|
||||
re2o.mixins.RevMixin,
|
||||
re2o.mixins.AclMixin,
|
||||
re2o.field_permissions.FieldPermissionModelMixin,
|
||||
models.Model,
|
||||
),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Facture",
|
||||
fields=[
|
||||
(
|
||||
"baseinvoice_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="cotisations.BaseInvoice",
|
||||
),
|
||||
),
|
||||
(
|
||||
"cheque",
|
||||
models.CharField(
|
||||
max_length=255, blank=True, verbose_name="cheque number"
|
||||
),
|
||||
),
|
||||
("valid", models.BooleanField(default=False, verbose_name="validated")),
|
||||
(
|
||||
"control",
|
||||
models.BooleanField(default=False, verbose_name="controlled"),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("change_facture_control", 'Can edit the "controlled" state'),
|
||||
("view_facture", "Can view an invoice object"),
|
||||
("change_all_facture", "Can edit all the previous invoices"),
|
||||
),
|
||||
"verbose_name": "invoice",
|
||||
"verbose_name_plural": "invoices",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="CustomInvoice",
|
||||
fields=[
|
||||
(
|
||||
"baseinvoice_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="cotisations.BaseInvoice",
|
||||
),
|
||||
),
|
||||
(
|
||||
"recipient",
|
||||
models.CharField(max_length=255, verbose_name="recipient"),
|
||||
),
|
||||
(
|
||||
"payment",
|
||||
models.CharField(max_length=255, verbose_name="payment type"),
|
||||
),
|
||||
("address", models.CharField(max_length=255, verbose_name="address")),
|
||||
("paid", models.BooleanField(default=False, verbose_name="paid")),
|
||||
(
|
||||
"remark",
|
||||
models.TextField(verbose_name="remark", blank=True, null=True),
|
||||
),
|
||||
],
|
||||
bases=("cotisations.baseinvoice",),
|
||||
options={
|
||||
"permissions": (
|
||||
("view_custominvoice", "Can view a custom invoice object"),
|
||||
)
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="CostEstimate",
|
||||
fields=[
|
||||
(
|
||||
"custominvoice_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="cotisations.CustomInvoice",
|
||||
),
|
||||
),
|
||||
(
|
||||
"validity",
|
||||
models.DurationField(
|
||||
verbose_name="period of validity", help_text="DD HH:MM:SS"
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_costestimate", "Can view a cost estimate object"),
|
||||
)
|
||||
},
|
||||
bases=("cotisations.custominvoice",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Vente",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"number",
|
||||
models.IntegerField(
|
||||
validators=[django.core.validators.MinValueValidator(1)],
|
||||
verbose_name="amount",
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255, verbose_name="article")),
|
||||
(
|
||||
"prix",
|
||||
models.DecimalField(
|
||||
max_digits=5, decimal_places=2, verbose_name="price"
|
||||
),
|
||||
),
|
||||
(
|
||||
"duration_connection",
|
||||
models.PositiveIntegerField(
|
||||
default=0, verbose_name="duration of the connection (in months)"
|
||||
),
|
||||
),
|
||||
(
|
||||
"duration_days_connection",
|
||||
models.PositiveIntegerField(
|
||||
default=0,
|
||||
verbose_name="duration of the connection (in days, will be added to duration in months)",
|
||||
),
|
||||
),
|
||||
(
|
||||
"duration_membership",
|
||||
models.PositiveIntegerField(
|
||||
default=0, verbose_name="duration of the membership (in months)"
|
||||
),
|
||||
),
|
||||
(
|
||||
"duration_days_membership",
|
||||
models.PositiveIntegerField(
|
||||
default=0,
|
||||
verbose_name="duration of the membership (in days, will be added to duration in months)",
|
||||
),
|
||||
),
|
||||
],
|
||||
bases=(
|
||||
re2o.mixins.RevMixin,
|
||||
re2o.mixins.AclMixin,
|
||||
models.Model,
|
||||
),
|
||||
options={
|
||||
"permissions": (
|
||||
("view_vente", "Can view a purchase object"),
|
||||
("change_all_vente", "Can edit all the previous purchases"),
|
||||
),
|
||||
"verbose_name": "purchase",
|
||||
"verbose_name_plural": "purchases",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Article",
|
||||
bases=(
|
||||
re2o.mixins.RevMixin,
|
||||
re2o.mixins.AclMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(max_length=255, verbose_name="designation"),
|
||||
),
|
||||
(
|
||||
"prix",
|
||||
models.DecimalField(
|
||||
max_digits=5, decimal_places=2, verbose_name="unit price"
|
||||
),
|
||||
),
|
||||
(
|
||||
"duration_connection",
|
||||
models.PositiveIntegerField(
|
||||
verbose_name="duration of the connection (in months)"
|
||||
),
|
||||
),
|
||||
(
|
||||
"duration_days_connection",
|
||||
models.PositiveIntegerField(
|
||||
verbose_name="duration of the connection (in days, will be added to duration in months)",
|
||||
),
|
||||
),
|
||||
(
|
||||
"duration_membership",
|
||||
models.PositiveIntegerField(
|
||||
verbose_name="duration of the membership (in months)"
|
||||
),
|
||||
),
|
||||
(
|
||||
"duration_days_membership",
|
||||
models.PositiveIntegerField(
|
||||
verbose_name="duration of the membership (in days, will be added to duration in months)",
|
||||
),
|
||||
),
|
||||
(
|
||||
"need_membership",
|
||||
models.BooleanField(
|
||||
default=True, verbose_name="need membership to be purchased"
|
||||
),
|
||||
),
|
||||
(
|
||||
"type_user",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("Adherent", "Member"),
|
||||
("Club", "Club"),
|
||||
("All", "Both of them"),
|
||||
],
|
||||
default="All",
|
||||
max_length=255,
|
||||
verbose_name="type of users concerned",
|
||||
),
|
||||
),
|
||||
(
|
||||
"available_for_everyone",
|
||||
models.BooleanField(
|
||||
default=False, verbose_name="is available for every user"
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_article", "Can view an article object"),
|
||||
("buy_every_article", "Can buy every article"),
|
||||
),
|
||||
"verbose_name": "article",
|
||||
"verbose_name_plural": "articles",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Banque",
|
||||
bases=(
|
||||
re2o.mixins.RevMixin,
|
||||
re2o.mixins.AclMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255)),
|
||||
],
|
||||
options={
|
||||
"permissions": (("view_banque", "Can view a bank object"),),
|
||||
"verbose_name": "bank",
|
||||
"verbose_name_plural": "banks",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Paiement",
|
||||
bases=(
|
||||
re2o.mixins.RevMixin,
|
||||
re2o.mixins.AclMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("moyen", models.CharField(max_length=255, verbose_name="method")),
|
||||
(
|
||||
"available_for_everyone",
|
||||
models.BooleanField(
|
||||
default=False,
|
||||
verbose_name="is available for every user",
|
||||
),
|
||||
),
|
||||
(
|
||||
"is_balance",
|
||||
models.BooleanField(
|
||||
default=False,
|
||||
editable=False,
|
||||
verbose_name="is user balance",
|
||||
help_text="There should be only one balance payment method.",
|
||||
validators=[cotisations.models.check_no_balance],
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_paiement", "Can view a payment method object"),
|
||||
("use_every_payment", "Can use every payment method"),
|
||||
),
|
||||
"verbose_name": "payment method",
|
||||
"verbose_name_plural": "payment methods",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Cotisation",
|
||||
bases=(
|
||||
re2o.mixins.RevMixin,
|
||||
re2o.mixins.AclMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"date_start_con",
|
||||
models.DateTimeField(verbose_name="start date for the connection"),
|
||||
),
|
||||
(
|
||||
"date_end_con",
|
||||
models.DateTimeField(verbose_name="end date for the connection"),
|
||||
),
|
||||
(
|
||||
"date_start_memb",
|
||||
models.DateTimeField(verbose_name="start date for the membership"),
|
||||
),
|
||||
(
|
||||
"date_end_memb",
|
||||
models.DateTimeField(verbose_name="end date for the membership"),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_cotisation", "Can view a subscription object"),
|
||||
("change_all_cotisation", "Can edit the previous subscriptions"),
|
||||
),
|
||||
"verbose_name": "subscription",
|
||||
"verbose_name_plural": "subscriptions",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="BalancePayment",
|
||||
bases=(cotisations.payment_methods.mixins.PaymentMethodMixin, models.Model),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"minimum_balance",
|
||||
models.DecimalField(
|
||||
verbose_name="minimum balance",
|
||||
help_text="The minimal amount of money allowed for the balance at the end of a payment. You can specify a negative amount.",
|
||||
max_digits=5,
|
||||
decimal_places=2,
|
||||
default=0,
|
||||
),
|
||||
),
|
||||
(
|
||||
"maximum_balance",
|
||||
models.DecimalField(
|
||||
verbose_name="maximum balance",
|
||||
help_text="The maximal amount of money allowed for the balance.",
|
||||
max_digits=5,
|
||||
decimal_places=2,
|
||||
default=50,
|
||||
blank=True,
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"credit_balance_allowed",
|
||||
models.BooleanField(
|
||||
verbose_name="allow user to credit their balance", default=False
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "user balance"},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ChequePayment",
|
||||
bases=(cotisations.payment_methods.mixins.PaymentMethodMixin, models.Model),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "cheque"},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ComnpayPayment",
|
||||
bases=(cotisations.payment_methods.mixins.PaymentMethodMixin, models.Model),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"payment_credential",
|
||||
models.CharField(
|
||||
max_length=255,
|
||||
default="",
|
||||
blank=True,
|
||||
verbose_name="ComNpay VAT Number",
|
||||
),
|
||||
),
|
||||
(
|
||||
"payment_pass",
|
||||
re2o.aes_field.AESEncryptedField(
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name="ComNpay secret key",
|
||||
),
|
||||
),
|
||||
(
|
||||
"minimum_payment",
|
||||
models.DecimalField(
|
||||
verbose_name="minimum payment",
|
||||
help_text="The minimal amount of money you have to use when paying with ComNpay.",
|
||||
max_digits=5,
|
||||
decimal_places=2,
|
||||
default=1,
|
||||
),
|
||||
),
|
||||
(
|
||||
"production",
|
||||
models.BooleanField(
|
||||
default=True,
|
||||
verbose_name="production mode enabled (production URL, instead of homologation)",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "ComNpay"},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="FreePayment",
|
||||
bases=(cotisations.payment_methods.mixins.PaymentMethodMixin, models.Model),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "Free payment"},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="NotePayment",
|
||||
bases=(cotisations.payment_methods.mixins.PaymentMethodMixin, models.Model),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("server", models.CharField(max_length=255, verbose_name="server")),
|
||||
("port", models.PositiveIntegerField(blank=True, null=True)),
|
||||
("id_note", models.PositiveIntegerField(blank=True, null=True)),
|
||||
],
|
||||
options={"verbose_name": "NoteKfet"},
|
||||
),
|
||||
]
|
500
cotisations/migrations/0002_foreign_keys.py
Normal file
500
cotisations/migrations/0002_foreign_keys.py
Normal file
|
@ -0,0 +1,500 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.29 on 2020-12-30 15:27
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('cotisations', '0001_model_creation'),
|
||||
]
|
||||
replaces = [
|
||||
("users", "0001_initial"),
|
||||
("users", "0002_auto_20160630_2301"),
|
||||
("users", "0003_listrights_rights"),
|
||||
("users", "0004_auto_20160701_2312"),
|
||||
("users", "0005_auto_20160702_0006"),
|
||||
("users", "0006_ban"),
|
||||
("users", "0007_auto_20160702_2322"),
|
||||
("users", "0008_user_registered"),
|
||||
("users", "0009_user_room"),
|
||||
("users", "0010_auto_20160703_1226"),
|
||||
("users", "0011_auto_20160703_1227"),
|
||||
("users", "0012_auto_20160703_1230"),
|
||||
("users", "0013_auto_20160704_1547"),
|
||||
("users", "0014_auto_20160704_1548"),
|
||||
("users", "0015_whitelist"),
|
||||
("users", "0016_auto_20160706_1220"),
|
||||
("users", "0017_auto_20160707_0105"),
|
||||
("users", "0018_auto_20160707_0115"),
|
||||
("users", "0019_auto_20160708_1633"),
|
||||
("users", "0020_request"),
|
||||
("users", "0021_ldapuser"),
|
||||
("users", "0022_ldapuser_sambasid"),
|
||||
("users", "0023_auto_20160724_1908"),
|
||||
("users", "0024_remove_ldapuser_mac_list"),
|
||||
("users", "0025_listshell"),
|
||||
("users", "0026_user_shell"),
|
||||
("users", "0027_auto_20160726_0216"),
|
||||
("users", "0028_auto_20160726_0227"),
|
||||
("users", "0029_auto_20160726_0229"),
|
||||
("users", "0030_auto_20160726_0357"),
|
||||
("users", "0031_auto_20160726_0359"),
|
||||
("users", "0032_auto_20160727_2122"),
|
||||
("users", "0033_remove_ldapuser_loginshell"),
|
||||
("users", "0034_auto_20161018_0037"),
|
||||
("users", "0035_auto_20161018_0046"),
|
||||
("users", "0036_auto_20161022_2146"),
|
||||
("users", "0037_auto_20161028_1906"),
|
||||
("users", "0038_auto_20161031_0258"),
|
||||
("users", "0039_auto_20161119_0033"),
|
||||
("users", "0040_auto_20161119_1709"),
|
||||
("users", "0041_listright_details"),
|
||||
("users", "0042_auto_20161126_2028"),
|
||||
("users", "0043_auto_20161224_1156"),
|
||||
("users", "0043_ban_state"),
|
||||
("users", "0044_user_ssh_public_key"),
|
||||
("users", "0045_merge"),
|
||||
("users", "0046_auto_20170617_1433"),
|
||||
("users", "0047_auto_20170618_0156"),
|
||||
("users", "0048_auto_20170618_0210"),
|
||||
("users", "0049_auto_20170618_1424"),
|
||||
("users", "0050_serviceuser_comment"),
|
||||
("users", "0051_user_telephone"),
|
||||
("users", "0052_ldapuser_shadowexpire"),
|
||||
("users", "0053_auto_20170626_2105"),
|
||||
("users", "0054_auto_20170626_2219"),
|
||||
("users", "0055_auto_20171003_0556"),
|
||||
("users", "0056_auto_20171015_2033"),
|
||||
("users", "0057_auto_20171023_0301"),
|
||||
("users", "0058_auto_20171025_0154"),
|
||||
("users", "0059_auto_20171025_1854"),
|
||||
("users", "0060_auto_20171120_0317"),
|
||||
("users", "0061_auto_20171230_2033"),
|
||||
("users", "0062_auto_20171231_0056"),
|
||||
("users", "0063_auto_20171231_0140"),
|
||||
("users", "0064_auto_20171231_0150"),
|
||||
("users", "0065_auto_20171231_2053"),
|
||||
("users", "0066_grouppermissions"),
|
||||
("users", "0067_serveurpermission"),
|
||||
("users", "0068_auto_20180107_2245"),
|
||||
("users", "0069_club_mailing"),
|
||||
("users", "0070_auto_20180324_1906"),
|
||||
("users", "0071_auto_20180415_1252"),
|
||||
("users", "0072_auto_20180426_2021"),
|
||||
("users", "0073_auto_20180629_1614"),
|
||||
("users", "0074_auto_20180810_2104"),
|
||||
("users", "0074_auto_20180814_1059"),
|
||||
("users", "0075_merge_20180815_2202"),
|
||||
("users", "0076_auto_20180818_1321"),
|
||||
("users", "0077_auto_20180824_1750"),
|
||||
("users", "0078_auto_20181011_1405"),
|
||||
("users", "0079_auto_20181228_2039"),
|
||||
("users", "0080_auto_20190108_1726"),
|
||||
("users", "0081_auto_20190317_0302"),
|
||||
("users", "0082_auto_20190908_1338"),
|
||||
("users", "0083_user_shortcuts_enabled"),
|
||||
("users", "0084_auto_20191120_0159"),
|
||||
("users", "0085_user_email_state"),
|
||||
("users", "0086_user_email_change_date"),
|
||||
("users", "0087_request_email"),
|
||||
("users", "0088_auto_20200417_2312"),
|
||||
("users", "0089_auto_20200418_0112"),
|
||||
("users", "0090_auto_20200421_1825"),
|
||||
("users", "0091_auto_20200423_1256"),
|
||||
("users", "0092_auto_20200502_0057"),
|
||||
("users", "0093_user_profile_image"),
|
||||
("users", "0094_remove_user_profile_image"),
|
||||
("users", "0095_user_theme"),
|
||||
("users", "0096_auto_20210110_1811"),
|
||||
("cotisations", "0001_initial"),
|
||||
("cotisations", "0002_remove_facture_article"),
|
||||
("cotisations", "0003_auto_20160702_1448"),
|
||||
("cotisations", "0004_auto_20160702_1528"),
|
||||
("cotisations", "0005_auto_20160702_1532"),
|
||||
("cotisations", "0006_auto_20160702_1534"),
|
||||
("cotisations", "0007_auto_20160702_1543"),
|
||||
("cotisations", "0008_auto_20160702_1614"),
|
||||
("cotisations", "0009_remove_cotisation_user"),
|
||||
("cotisations", "0010_auto_20160702_1840"),
|
||||
("cotisations", "0011_auto_20160702_1911"),
|
||||
("cotisations", "0012_auto_20160704_0118"),
|
||||
("cotisations", "0013_auto_20160711_2240"),
|
||||
("cotisations", "0014_auto_20160712_0245"),
|
||||
("cotisations", "0015_auto_20160714_2142"),
|
||||
("cotisations", "0016_auto_20160715_0110"),
|
||||
("cotisations", "0017_auto_20170718_2329"),
|
||||
("cotisations", "0018_paiement_type_paiement"),
|
||||
("cotisations", "0019_auto_20170819_0055"),
|
||||
("cotisations", "0020_auto_20170819_0057"),
|
||||
("cotisations", "0021_auto_20170819_0104"),
|
||||
("cotisations", "0022_auto_20170824_0128"),
|
||||
("cotisations", "0023_auto_20170902_1303"),
|
||||
("cotisations", "0024_auto_20171015_2033"),
|
||||
("cotisations", "0025_article_type_user"),
|
||||
("cotisations", "0026_auto_20171028_0126"),
|
||||
("cotisations", "0027_auto_20171029_1156"),
|
||||
("cotisations", "0028_auto_20171231_0007"),
|
||||
("cotisations", "0029_auto_20180414_2056"),
|
||||
("cotisations", "0030_custom_payment"),
|
||||
("cotisations", "0031_comnpaypayment_production"),
|
||||
("cotisations", "0032_custom_invoice"),
|
||||
("cotisations", "0033_auto_20180818_1319"),
|
||||
("cotisations", "0034_auto_20180831_1532"),
|
||||
("cotisations", "0035_notepayment"),
|
||||
("cotisations", "0036_custominvoice_remark"),
|
||||
("cotisations", "0037_costestimate"),
|
||||
("cotisations", "0038_auto_20181231_1657"),
|
||||
("cotisations", "0039_freepayment"),
|
||||
("cotisations", "0040_auto_20191002_2335"),
|
||||
("cotisations", "0041_auto_20191103_2131"),
|
||||
("cotisations", "0042_auto_20191120_0159"),
|
||||
("cotisations", "0043_separation_membership_connection_p1"),
|
||||
("cotisations", "0044_separation_membership_connection_p2"),
|
||||
("cotisations", "0045_separation_membership_connection_p3"),
|
||||
("cotisations", "0046_article_need_membership"),
|
||||
("cotisations", "0047_article_need_membership_init"),
|
||||
("cotisations", "0048_auto_20201017_0018"),
|
||||
("cotisations", "0049_auto_20201102_2305"),
|
||||
("cotisations", "0050_auto_20201102_2342"),
|
||||
("cotisations", "0051_auto_20201228_1636"),
|
||||
("machines", "0001_initial"),
|
||||
("machines", "0002_auto_20160703_1444"),
|
||||
("machines", "0003_auto_20160703_1450"),
|
||||
("machines", "0004_auto_20160703_1451"),
|
||||
("machines", "0005_auto_20160703_1523"),
|
||||
("machines", "0006_auto_20160703_1813"),
|
||||
("machines", "0007_auto_20160703_1816"),
|
||||
("machines", "0008_remove_interface_ipv6"),
|
||||
("machines", "0009_auto_20160703_2358"),
|
||||
("machines", "0010_auto_20160704_0104"),
|
||||
("machines", "0011_auto_20160704_0105"),
|
||||
("machines", "0012_auto_20160704_0118"),
|
||||
("machines", "0013_auto_20160705_1014"),
|
||||
("machines", "0014_auto_20160706_1220"),
|
||||
("machines", "0015_auto_20160707_0105"),
|
||||
("machines", "0016_auto_20160708_1633"),
|
||||
("machines", "0017_auto_20160708_1645"),
|
||||
("machines", "0018_auto_20160708_1813"),
|
||||
("machines", "0019_auto_20160718_1141"),
|
||||
("machines", "0020_auto_20160718_1849"),
|
||||
("machines", "0021_auto_20161006_1943"),
|
||||
("machines", "0022_auto_20161011_1829"),
|
||||
("machines", "0023_iplist_ip_type"),
|
||||
("machines", "0024_machinetype_need_infra"),
|
||||
("machines", "0025_auto_20161023_0038"),
|
||||
("machines", "0026_auto_20161026_1348"),
|
||||
("machines", "0027_alias"),
|
||||
("machines", "0028_iptype_domaine_ip"),
|
||||
("machines", "0029_iptype_domaine_range"),
|
||||
("machines", "0030_auto_20161118_1730"),
|
||||
("machines", "0031_auto_20161119_1709"),
|
||||
("machines", "0032_auto_20161119_1850"),
|
||||
("machines", "0033_extension_need_infra"),
|
||||
("machines", "0034_iplist_need_infra"),
|
||||
("machines", "0035_auto_20161224_1201"),
|
||||
("machines", "0036_auto_20161224_1204"),
|
||||
("machines", "0037_domain_cname"),
|
||||
("machines", "0038_auto_20161224_1721"),
|
||||
("machines", "0039_auto_20161224_1732"),
|
||||
("machines", "0040_remove_interface_dns"),
|
||||
("machines", "0041_remove_ns_interface"),
|
||||
("machines", "0042_ns_ns"),
|
||||
("machines", "0043_auto_20170721_0350"),
|
||||
("machines", "0044_auto_20170808_0233"),
|
||||
("machines", "0045_auto_20170808_0348"),
|
||||
("machines", "0046_auto_20170808_1423"),
|
||||
("machines", "0047_auto_20170809_0606"),
|
||||
("machines", "0048_auto_20170823_2315"),
|
||||
("machines", "0049_vlan"),
|
||||
("machines", "0050_auto_20170826_0022"),
|
||||
("machines", "0051_iptype_vlan"),
|
||||
("machines", "0052_auto_20170828_2322"),
|
||||
("machines", "0053_text"),
|
||||
("machines", "0054_text_zone"),
|
||||
("machines", "0055_nas"),
|
||||
("machines", "0056_nas_port_access_mode"),
|
||||
("machines", "0057_nas_autocapture_mac"),
|
||||
("machines", "0058_auto_20171002_0350"),
|
||||
("machines", "0059_iptype_prefix_v6"),
|
||||
("machines", "0060_iptype_ouverture_ports"),
|
||||
("machines", "0061_auto_20171015_2033"),
|
||||
("machines", "0062_extension_origin_v6"),
|
||||
("machines", "0063_auto_20171020_0040"),
|
||||
("machines", "0064_auto_20171115_0253"),
|
||||
("machines", "0065_auto_20171115_1514"),
|
||||
("machines", "0066_srv"),
|
||||
("machines", "0067_auto_20171116_0152"),
|
||||
("machines", "0068_auto_20171116_0252"),
|
||||
("machines", "0069_auto_20171116_0822"),
|
||||
("machines", "0070_auto_20171231_1947"),
|
||||
("machines", "0071_auto_20171231_2100"),
|
||||
("machines", "0072_auto_20180108_1822"),
|
||||
("machines", "0073_auto_20180128_2203"),
|
||||
("machines", "0074_auto_20180129_0352"),
|
||||
("machines", "0075_auto_20180130_0052"),
|
||||
("machines", "0076_auto_20180130_1623"),
|
||||
("machines", "0077_auto_20180409_2243"),
|
||||
("machines", "0078_auto_20180415_1252"),
|
||||
("machines", "0079_auto_20180416_0107"),
|
||||
("machines", "0080_auto_20180502_2334"),
|
||||
("machines", "0081_auto_20180521_1413"),
|
||||
("machines", "0082_auto_20180525_2209"),
|
||||
("machines", "0083_remove_duplicate_rights"),
|
||||
("machines", "0084_dname"),
|
||||
("machines", "0085_sshfingerprint"),
|
||||
("machines", "0086_role"),
|
||||
("machines", "0087_dnssec"),
|
||||
("machines", "0088_iptype_prefix_v6_length"),
|
||||
("machines", "0089_auto_20180805_1148"),
|
||||
("machines", "0090_auto_20180805_1459"),
|
||||
("machines", "0091_auto_20180806_2310"),
|
||||
("machines", "0092_auto_20180807_0926"),
|
||||
("machines", "0093_auto_20180807_1115"),
|
||||
("machines", "0094_auto_20180815_1918"),
|
||||
("machines", "0095_auto_20180919_2225"),
|
||||
("machines", "0096_auto_20181013_1417"),
|
||||
("machines", "0097_extension_dnssec"),
|
||||
("machines", "0098_auto_20190102_1745"),
|
||||
("machines", "0099_role_recursive_dns"),
|
||||
("machines", "0100_auto_20190102_1753"),
|
||||
("machines", "0101_auto_20190108_1623"),
|
||||
("machines", "0102_auto_20190303_1611"),
|
||||
("machines", "0103_auto_20191002_2222"),
|
||||
("machines", "0104_auto_20191002_2231"),
|
||||
("machines", "0105_dname_ttl"),
|
||||
("machines", "0106_auto_20191120_0159"),
|
||||
("machines", "0107_fix_lowercase_domain"),
|
||||
("machines", "0108_ipv6list_active"),
|
||||
("preferences", "0001_initial"),
|
||||
("preferences", "0002_auto_20170625_1923"),
|
||||
("preferences", "0003_optionaluser_solde_negatif"),
|
||||
("preferences", "0004_assooption_services"),
|
||||
("preferences", "0005_auto_20170824_0139"),
|
||||
("preferences", "0006_auto_20170824_0143"),
|
||||
("preferences", "0007_auto_20170824_2056"),
|
||||
("preferences", "0008_auto_20170824_2122"),
|
||||
("preferences", "0009_assooption_utilisateur_asso"),
|
||||
("preferences", "0010_auto_20170825_0459"),
|
||||
("preferences", "0011_auto_20170825_2307"),
|
||||
("preferences", "0012_generaloption_req_expire_hrs"),
|
||||
("preferences", "0013_generaloption_site_name"),
|
||||
("preferences", "0014_generaloption_email_from"),
|
||||
("preferences", "0015_optionaltopologie_radius_general_policy"),
|
||||
("preferences", "0016_auto_20170902_1520"),
|
||||
("preferences", "0017_mailmessageoption"),
|
||||
("preferences", "0018_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0019_remove_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0020_optionalmachine_ipv6"),
|
||||
("preferences", "0021_auto_20171015_1741"),
|
||||
("preferences", "0022_auto_20171015_1758"),
|
||||
("preferences", "0023_auto_20171015_2033"),
|
||||
("preferences", "0024_optionaluser_all_can_create"),
|
||||
("preferences", "0025_auto_20171231_2142"),
|
||||
("preferences", "0025_generaloption_general_message"),
|
||||
("preferences", "0026_auto_20171216_0401"),
|
||||
("preferences", "0027_merge_20180106_2019"),
|
||||
("preferences", "0028_assooption_description"),
|
||||
("preferences", "0028_auto_20180111_1129"),
|
||||
("preferences", "0028_auto_20180128_2203"),
|
||||
("preferences", "0029_auto_20180111_1134"),
|
||||
("preferences", "0029_auto_20180318_0213"),
|
||||
("preferences", "0029_auto_20180318_1005"),
|
||||
("preferences", "0030_auto_20180111_2346"),
|
||||
("preferences", "0030_merge_20180320_1419"),
|
||||
("preferences", "0031_auto_20180323_0218"),
|
||||
("preferences", "0031_optionaluser_self_adhesion"),
|
||||
("preferences", "0032_optionaluser_min_online_payment"),
|
||||
("preferences", "0032_optionaluser_shell_default"),
|
||||
("preferences", "0033_accueiloption"),
|
||||
("preferences", "0033_generaloption_gtu_sum_up"),
|
||||
("preferences", "0034_auto_20180114_2025"),
|
||||
("preferences", "0034_auto_20180416_1120"),
|
||||
("preferences", "0035_auto_20180114_2132"),
|
||||
("preferences", "0035_optionaluser_allow_self_subscription"),
|
||||
("preferences", "0036_auto_20180114_2141"),
|
||||
("preferences", "0037_auto_20180114_2156"),
|
||||
("preferences", "0038_auto_20180114_2209"),
|
||||
("preferences", "0039_auto_20180115_0003"),
|
||||
("preferences", "0040_auto_20180129_1745"),
|
||||
("preferences", "0041_merge_20180130_0052"),
|
||||
("preferences", "0042_auto_20180222_1743"),
|
||||
("preferences", "0043_optionalmachine_create_machine"),
|
||||
("preferences", "0044_remove_payment_pass"),
|
||||
("preferences", "0045_remove_unused_payment_fields"),
|
||||
("preferences", "0046_optionaluser_mail_extension"),
|
||||
("preferences", "0047_mailcontact"),
|
||||
("preferences", "0048_auto_20180811_1515"),
|
||||
("preferences", "0049_optionaluser_self_change_shell"),
|
||||
("preferences", "0050_auto_20180818_1329"),
|
||||
("preferences", "0051_auto_20180919_2225"),
|
||||
("preferences", "0052_optionaluser_delete_notyetactive"),
|
||||
("preferences", "0053_optionaluser_self_change_room"),
|
||||
("preferences", "0055_generaloption_main_site_url"),
|
||||
("preferences", "0056_1_radiusoption"),
|
||||
("preferences", "0056_2_radiusoption"),
|
||||
("preferences", "0056_3_radiusoption"),
|
||||
("preferences", "0056_4_radiusoption"),
|
||||
("preferences", "0057_optionaluser_all_users_active"),
|
||||
("preferences", "0058_auto_20190108_1650"),
|
||||
("preferences", "0059_auto_20190120_1739"),
|
||||
("preferences", "0060_auto_20190712_1821"),
|
||||
("preferences", "0061_optionaluser_allow_archived_connexion"),
|
||||
("preferences", "0062_auto_20190910_1909"),
|
||||
("preferences", "0063_mandate"),
|
||||
("preferences", "0064_auto_20191008_1335"),
|
||||
("preferences", "0065_auto_20191010_1227"),
|
||||
("preferences", "0066_optionalmachine_default_dns_ttl"),
|
||||
("preferences", "0067_auto_20191120_0159"),
|
||||
("preferences", "0068_optionaluser_allow_set_password_during_user_creation"),
|
||||
("preferences", "0069_optionaluser_disable_emailnotyetconfirmed"),
|
||||
("preferences", "0070_auto_20200419_0225"),
|
||||
("preferences", "0071_optionaluser_self_change_pseudo"),
|
||||
("topologie", "0001_initial"),
|
||||
("topologie", "0002_auto_20160703_1118"),
|
||||
("topologie", "0003_room"),
|
||||
("topologie", "0004_auto_20160703_1122"),
|
||||
("topologie", "0005_auto_20160703_1123"),
|
||||
("topologie", "0006_auto_20160703_1129"),
|
||||
("topologie", "0007_auto_20160703_1148"),
|
||||
("topologie", "0008_port_room"),
|
||||
("topologie", "0009_auto_20160703_1200"),
|
||||
("topologie", "0010_auto_20160704_2148"),
|
||||
("topologie", "0011_auto_20160704_2153"),
|
||||
("topologie", "0012_port_machine_interface"),
|
||||
("topologie", "0013_port_related"),
|
||||
("topologie", "0014_auto_20160706_1238"),
|
||||
("topologie", "0015_auto_20160706_1452"),
|
||||
("topologie", "0016_auto_20160706_1531"),
|
||||
("topologie", "0017_auto_20160718_1141"),
|
||||
("topologie", "0018_room_details"),
|
||||
("topologie", "0019_auto_20161026_1348"),
|
||||
("topologie", "0020_auto_20161119_0033"),
|
||||
("topologie", "0021_port_radius"),
|
||||
("topologie", "0022_auto_20161211_1622"),
|
||||
("topologie", "0023_auto_20170817_1654"),
|
||||
("topologie", "0023_auto_20170826_1530"),
|
||||
("topologie", "0024_auto_20170818_1021"),
|
||||
("topologie", "0024_auto_20170826_1800"),
|
||||
("topologie", "0025_merge_20170902_1242"),
|
||||
("topologie", "0026_auto_20170902_1245"),
|
||||
("topologie", "0027_auto_20170905_1442"),
|
||||
("topologie", "0028_auto_20170913_1503"),
|
||||
("topologie", "0029_auto_20171002_0334"),
|
||||
("topologie", "0030_auto_20171004_0235"),
|
||||
("topologie", "0031_auto_20171015_2033"),
|
||||
("topologie", "0032_auto_20171026_0338"),
|
||||
("topologie", "0033_auto_20171231_1743"),
|
||||
("topologie", "0034_borne"),
|
||||
("topologie", "0035_auto_20180324_0023"),
|
||||
("topologie", "0036_transferborne"),
|
||||
("topologie", "0037_auto_20180325_0127"),
|
||||
("topologie", "0038_transfersw"),
|
||||
("topologie", "0039_port_new_switch"),
|
||||
("topologie", "0040_transferports"),
|
||||
("topologie", "0041_transferportsw"),
|
||||
("topologie", "0042_transferswitch"),
|
||||
("topologie", "0043_renamenewswitch"),
|
||||
("topologie", "0044_auto_20180326_0002"),
|
||||
("topologie", "0045_auto_20180326_0123"),
|
||||
("topologie", "0046_auto_20180326_0129"),
|
||||
("topologie", "0047_ap_machine"),
|
||||
("topologie", "0048_ap_machine"),
|
||||
("topologie", "0049_switchs_machine"),
|
||||
("topologie", "0050_port_new_switch"),
|
||||
("topologie", "0051_switchs_machine"),
|
||||
("topologie", "0052_transferports"),
|
||||
("topologie", "0053_finalsw"),
|
||||
("topologie", "0054_auto_20180326_1742"),
|
||||
("topologie", "0055_auto_20180329_0431"),
|
||||
("topologie", "0056_building_switchbay"),
|
||||
("topologie", "0057_auto_20180408_0316"),
|
||||
("topologie", "0058_remove_switch_location"),
|
||||
("topologie", "0059_auto_20180415_2249"),
|
||||
("topologie", "0060_server"),
|
||||
("topologie", "0061_portprofile"),
|
||||
("topologie", "0062_auto_20180815_1918"),
|
||||
("topologie", "0063_auto_20180919_2225"),
|
||||
("topologie", "0064_switch_automatic_provision"),
|
||||
("topologie", "0065_auto_20180927_1836"),
|
||||
("topologie", "0066_modelswitch_commercial_name"),
|
||||
("topologie", "0067_auto_20181230_1819"),
|
||||
("topologie", "0068_auto_20190102_1758"),
|
||||
("topologie", "0069_auto_20190108_1439"),
|
||||
("topologie", "0070_auto_20190218_1743"),
|
||||
("topologie", "0071_auto_20190218_1936"),
|
||||
("topologie", "0072_auto_20190720_2318"),
|
||||
("topologie", "0073_auto_20191120_0159"),
|
||||
("topologie", "0074_auto_20200419_1640"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='balancepayment',
|
||||
name='payment',
|
||||
field=models.OneToOneField(default=None, editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='payment_method_balance', to='cotisations.Paiement'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='chequepayment',
|
||||
name='payment',
|
||||
field=models.OneToOneField(default=None, editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='payment_method_cheque', to='cotisations.Paiement'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='comnpaypayment',
|
||||
name='payment',
|
||||
field=models.OneToOneField(default=None, editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='payment_method_comnpay', to='cotisations.Paiement'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='costestimate',
|
||||
name='final_invoice',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='origin_cost_estimate', to='cotisations.CustomInvoice'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cotisation',
|
||||
name='vente',
|
||||
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='cotisations.Vente', verbose_name='purchase'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='facture',
|
||||
name='banque',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='cotisations.Banque'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='facture',
|
||||
name='paiement',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='cotisations.Paiement'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='facture',
|
||||
name='user',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='freepayment',
|
||||
name='payment',
|
||||
field=models.OneToOneField(default=None, editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='payment_method_free', to='cotisations.Paiement'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='notepayment',
|
||||
name='payment',
|
||||
field=models.OneToOneField(default=None, editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='payment_method_note', to='cotisations.Paiement'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='vente',
|
||||
name='facture',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='cotisations.BaseInvoice', verbose_name='invoice'),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
|
@ -105,8 +105,8 @@ def send_mail_voucher(invoice, request=None):
|
|||
"lastname": invoice.user.surname,
|
||||
"email": invoice.user.email,
|
||||
"phone": invoice.user.telephone,
|
||||
"date_end": invoice.get_subscription().latest("date_end").date_end_memb,
|
||||
"date_begin": invoice.get_subscription().earliest("date_start").date_start_memb,
|
||||
"date_end": invoice.get_subscription().latest("date_end_memb").date_end_memb,
|
||||
"date_begin": invoice.get_subscription().earliest("date_start_memb").date_start_memb,
|
||||
}
|
||||
templatename = CotisationsOption.get_cached_value(
|
||||
"voucher_template"
|
||||
|
|
0
ldap_sync/__init__.py
Normal file
0
ldap_sync/__init__.py
Normal file
64
ldap_sync/admin.py
Normal file
64
ldap_sync/admin.py
Normal file
|
@ -0,0 +1,64 @@
|
|||
from django.contrib import admin
|
||||
|
||||
from .models import (
|
||||
LdapUser,
|
||||
LdapServiceUser,
|
||||
LdapServiceUserGroup,
|
||||
LdapUserGroup,
|
||||
)
|
||||
|
||||
class LdapUserAdmin(admin.ModelAdmin):
|
||||
"""LdapUser Admin view. Can't change password, manage
|
||||
by User General model.
|
||||
|
||||
Parameters:
|
||||
Django ModelAdmin: Apply on django ModelAdmin
|
||||
|
||||
"""
|
||||
list_display = ("name", "uidNumber", "login_shell")
|
||||
exclude = ("user_password", "sambat_nt_password")
|
||||
search_fields = ("name",)
|
||||
|
||||
|
||||
class LdapServiceUserAdmin(admin.ModelAdmin):
|
||||
"""LdapServiceUser Admin view. Can't change password, manage
|
||||
by User General model.
|
||||
|
||||
Parameters:
|
||||
Django ModelAdmin: Apply on django ModelAdmin
|
||||
|
||||
"""
|
||||
|
||||
list_display = ("name",)
|
||||
exclude = ("user_password",)
|
||||
search_fields = ("name",)
|
||||
|
||||
|
||||
class LdapUserGroupAdmin(admin.ModelAdmin):
|
||||
"""LdapUserGroup Admin view.
|
||||
|
||||
Parameters:
|
||||
Django ModelAdmin: Apply on django ModelAdmin
|
||||
|
||||
"""
|
||||
|
||||
list_display = ("name", "members", "gid")
|
||||
search_fields = ("name",)
|
||||
|
||||
|
||||
class LdapServiceUserGroupAdmin(admin.ModelAdmin):
|
||||
"""LdapServiceUserGroup Admin view.
|
||||
|
||||
Parameters:
|
||||
Django ModelAdmin: Apply on django ModelAdmin
|
||||
|
||||
"""
|
||||
|
||||
list_display = ("name",)
|
||||
search_fields = ("name",)
|
||||
|
||||
|
||||
admin.site.register(LdapUser, LdapUserAdmin)
|
||||
admin.site.register(LdapUserGroup, LdapUserGroupAdmin)
|
||||
admin.site.register(LdapServiceUser, LdapServiceUserAdmin)
|
||||
admin.site.register(LdapServiceUserGroup, LdapServiceUserGroupAdmin)
|
5
ldap_sync/apps.py
Normal file
5
ldap_sync/apps.py
Normal file
|
@ -0,0 +1,5 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class LdapSyncConfig(AppConfig):
|
||||
name = 'ldap_sync'
|
|
@ -1,4 +1,5 @@
|
|||
# Copyright © 2018 Maël Kervella
|
||||
# Copyright © 2021 Hugo Levy-Falk
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -21,6 +22,7 @@ from django.core.management.base import BaseCommand, CommandError
|
|||
from django.conf import settings
|
||||
|
||||
from users.models import User, ListRight
|
||||
from ldap_sync.models import synchronise_user, synchronise_serviceuser, synchronise_usergroup
|
||||
|
||||
|
||||
def split_lines(lines):
|
||||
|
@ -89,9 +91,9 @@ def flush_ldap(binddn, bindpass, server, usersdn, groupsdn):
|
|||
def sync_ldap():
|
||||
"""Syncrhonize the whole LDAP with the DB."""
|
||||
for u in User.objects.all():
|
||||
u.ldap_sync()
|
||||
synchronise_user(sender=User, instance=u)
|
||||
for lr in ListRight.objects.all():
|
||||
lr.ldap_sync()
|
||||
synchronise_usergroup(sender=ListRight, instance=lr)
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
|
@ -1,6 +1,7 @@
|
|||
# Copyright © 2017 Gabriel Détraz
|
||||
# Copyright © 2017 Lara Kermarec
|
||||
# Copyright © 2017 Augustin Lemesle
|
||||
# Copyright © 2020 Hugo Levy-Falk
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -19,6 +20,7 @@
|
|||
from django.core.management.base import BaseCommand, CommandError
|
||||
|
||||
from users.models import User
|
||||
from ldap_sync.models import synchronise_user
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
@ -36,5 +38,5 @@ class Command(BaseCommand):
|
|||
)
|
||||
|
||||
def handle(self, *args, **options):
|
||||
for usr in User.objects.all():
|
||||
usr.ldap_sync(mac_refresh=options["full"])
|
||||
for user in User.objects.all():
|
||||
synchronise_user(sender=User, instance=user)
|
108
ldap_sync/migrations/0001_initial.py
Normal file
108
ldap_sync/migrations/0001_initial.py
Normal file
|
@ -0,0 +1,108 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.29 on 2021-01-10 16:59
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
#from django.conf import settings
|
||||
import ldapdb.models.fields
|
||||
|
||||
#from ldap_sync.management.commands.ldap_rebuild import flush_ldap, sync_ldap
|
||||
|
||||
#def rebuild_ldap(apps, schema_editor):
|
||||
# usersdn = settings.LDAP["base_user_dn"]
|
||||
# groupsdn = settings.LDAP["base_usergroup_dn"]
|
||||
# binddn = settings.DATABASES["ldap"]["USER"]
|
||||
# bindpass = settings.DATABASES["ldap"]["PASSWORD"]
|
||||
# server = settings.DATABASES["ldap"]["NAME"]
|
||||
# flush_ldap(binddn, bindpass, server, usersdn, groupsdn)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('users', '0002_foreign_keys')
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='LdapServiceUser',
|
||||
fields=[
|
||||
('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False)),
|
||||
('name', ldapdb.models.fields.CharField(db_column='cn', max_length=200, primary_key=True, serialize=False)),
|
||||
('user_password', ldapdb.models.fields.CharField(blank=True, db_column='userPassword', max_length=200, null=True)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LdapServiceUserGroup',
|
||||
fields=[
|
||||
('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False)),
|
||||
('name', ldapdb.models.fields.CharField(db_column='cn', max_length=200, primary_key=True, serialize=False)),
|
||||
('members', ldapdb.models.fields.ListField(blank=True, db_column='member')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LdapUser',
|
||||
fields=[
|
||||
('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False)),
|
||||
('gid', ldapdb.models.fields.IntegerField(db_column='gidNumber')),
|
||||
('name', ldapdb.models.fields.CharField(db_column='cn', max_length=200, primary_key=True, serialize=False)),
|
||||
('uid', ldapdb.models.fields.CharField(db_column='uid', max_length=200)),
|
||||
('uidNumber', ldapdb.models.fields.IntegerField(db_column='uidNumber', unique=True)),
|
||||
('sn', ldapdb.models.fields.CharField(db_column='sn', max_length=200)),
|
||||
('login_shell', ldapdb.models.fields.CharField(blank=True, db_column='loginShell', max_length=200, null=True)),
|
||||
('mail', ldapdb.models.fields.CharField(db_column='mail', max_length=200)),
|
||||
('given_name', ldapdb.models.fields.CharField(db_column='givenName', max_length=200)),
|
||||
('home_directory', ldapdb.models.fields.CharField(db_column='homeDirectory', max_length=200)),
|
||||
('display_name', ldapdb.models.fields.CharField(blank=True, db_column='displayName', max_length=200, null=True)),
|
||||
('dialupAccess', ldapdb.models.fields.CharField(db_column='dialupAccess', max_length=200)),
|
||||
('sambaSID', ldapdb.models.fields.IntegerField(db_column='sambaSID', unique=True)),
|
||||
('user_password', ldapdb.models.fields.CharField(blank=True, db_column='userPassword', max_length=200, null=True)),
|
||||
('sambat_nt_password', ldapdb.models.fields.CharField(blank=True, db_column='sambaNTPassword', max_length=200, null=True)),
|
||||
('macs', ldapdb.models.fields.ListField(blank=True, db_column='radiusCallingStationId', max_length=200, null=True)),
|
||||
('shadowexpire', ldapdb.models.fields.CharField(blank=True, db_column='shadowExpire', max_length=200, null=True)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LdapUserGroup',
|
||||
fields=[
|
||||
('dn', ldapdb.models.fields.CharField(max_length=200, serialize=False)),
|
||||
('gid', ldapdb.models.fields.IntegerField(db_column='gidNumber')),
|
||||
('members', ldapdb.models.fields.ListField(blank=True, db_column='memberUid')),
|
||||
('name', ldapdb.models.fields.CharField(db_column='cn', max_length=200, primary_key=True, serialize=False)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='ldapserviceuser',
|
||||
name='dn',
|
||||
field=ldapdb.models.fields.CharField(max_length=200, primary_key=True, serialize=False),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='ldapserviceusergroup',
|
||||
name='dn',
|
||||
field=ldapdb.models.fields.CharField(max_length=200, primary_key=True, serialize=False),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='ldapuser',
|
||||
name='dn',
|
||||
field=ldapdb.models.fields.CharField(max_length=200, primary_key=True, serialize=False),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='ldapusergroup',
|
||||
name='dn',
|
||||
field=ldapdb.models.fields.CharField(max_length=200, primary_key=True, serialize=False),
|
||||
),
|
||||
]
|
0
ldap_sync/migrations/__init__.py
Normal file
0
ldap_sync/migrations/__init__.py
Normal file
334
ldap_sync/models.py
Normal file
334
ldap_sync/models.py
Normal file
|
@ -0,0 +1,334 @@
|
|||
import sys
|
||||
|
||||
from django.db import models
|
||||
from django.conf import settings
|
||||
from django.dispatch import receiver
|
||||
|
||||
from django.contrib.auth.models import Group
|
||||
|
||||
import ldapdb.models
|
||||
import ldapdb.models.fields
|
||||
|
||||
import users.signals
|
||||
import users.models
|
||||
|
||||
import machines.models
|
||||
|
||||
class LdapUser(ldapdb.models.Model):
|
||||
"""A class representing a LdapUser in LDAP, its LDAP conterpart.
|
||||
Synced from re2o django User model, (User django models),
|
||||
with a copy of its attributes/fields into LDAP, so this class is a mirror
|
||||
of the classic django User model.
|
||||
|
||||
The basedn userdn is specified in settings.
|
||||
|
||||
Attributes:
|
||||
name: The name of this User
|
||||
uid: The uid (login) for the unix user
|
||||
uidNumber: Linux uid number
|
||||
gid: The default gid number for this user
|
||||
sn: The user "str" pseudo
|
||||
login_shell: Linux shell for the user
|
||||
mail: Email address contact for this user
|
||||
display_name: Pretty display name for this user
|
||||
dialupAccess: Boolean, True for valid membership
|
||||
sambaSID: Identical id as uidNumber
|
||||
user_password: SSHA hashed password of user
|
||||
samba_nt_password: NTLM hashed password of user
|
||||
macs: Multivalued mac address
|
||||
shadowexpire: Set it to 0 to block access for this user and disabled
|
||||
account
|
||||
"""
|
||||
|
||||
# LDAP meta-data
|
||||
base_dn = settings.LDAP["base_user_dn"]
|
||||
object_classes = [
|
||||
"inetOrgPerson",
|
||||
"top",
|
||||
"posixAccount",
|
||||
"sambaSamAccount",
|
||||
"radiusprofile",
|
||||
"shadowAccount",
|
||||
]
|
||||
|
||||
# attributes
|
||||
gid = ldapdb.models.fields.IntegerField(db_column="gidNumber")
|
||||
name = ldapdb.models.fields.CharField(
|
||||
db_column="cn", max_length=200, primary_key=True
|
||||
)
|
||||
uid = ldapdb.models.fields.CharField(db_column="uid", max_length=200)
|
||||
uidNumber = ldapdb.models.fields.IntegerField(db_column="uidNumber", unique=True)
|
||||
sn = ldapdb.models.fields.CharField(db_column="sn", max_length=200)
|
||||
login_shell = ldapdb.models.fields.CharField(
|
||||
db_column="loginShell", max_length=200, blank=True, null=True
|
||||
)
|
||||
mail = ldapdb.models.fields.CharField(db_column="mail", max_length=200)
|
||||
given_name = ldapdb.models.fields.CharField(db_column="givenName", max_length=200)
|
||||
home_directory = ldapdb.models.fields.CharField(
|
||||
db_column="homeDirectory", max_length=200
|
||||
)
|
||||
display_name = ldapdb.models.fields.CharField(
|
||||
db_column="displayName", max_length=200, blank=True, null=True
|
||||
)
|
||||
dialupAccess = ldapdb.models.fields.CharField(db_column="dialupAccess")
|
||||
sambaSID = ldapdb.models.fields.IntegerField(db_column="sambaSID", unique=True)
|
||||
user_password = ldapdb.models.fields.CharField(
|
||||
db_column="userPassword", max_length=200, blank=True, null=True
|
||||
)
|
||||
sambat_nt_password = ldapdb.models.fields.CharField(
|
||||
db_column="sambaNTPassword", max_length=200, blank=True, null=True
|
||||
)
|
||||
macs = ldapdb.models.fields.ListField(
|
||||
db_column="radiusCallingStationId", max_length=200, blank=True, null=True
|
||||
)
|
||||
shadowexpire = ldapdb.models.fields.CharField(
|
||||
db_column="shadowExpire", blank=True, null=True
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.sn = self.name
|
||||
self.uid = self.name
|
||||
self.sambaSID = self.uidNumber
|
||||
super(LdapUser, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
@receiver(users.signals.synchronise, sender=users.models.User)
|
||||
def synchronise_user(sender, **kwargs):
|
||||
"""
|
||||
Synchronise an User to the LDAP.
|
||||
Args:
|
||||
* sender : The model class.
|
||||
* instance : The actual instance being synchronised.
|
||||
* base : Default `True`. When `True`, synchronise basic attributes.
|
||||
* access_refresh : Default `True`. When `True`, synchronise the access time.
|
||||
* mac_refresh : Default `True`. When True, synchronise the list of mac addresses.
|
||||
* group_refresh: Default `False`. When `True` synchronise the groups of the instance.
|
||||
"""
|
||||
base=kwargs.get('base', True)
|
||||
access_refresh=kwargs.get('access_refresh', True)
|
||||
mac_refresh=kwargs.get('mac_refresh', True )
|
||||
group_refresh=kwargs.get('group_refresh', False)
|
||||
|
||||
user=kwargs["instance"]
|
||||
|
||||
if sys.version_info[0] >= 3 and (
|
||||
user.state == user.STATE_ACTIVE
|
||||
or user.state == user.STATE_ARCHIVE
|
||||
or user.state == user.STATE_DISABLED
|
||||
):
|
||||
user.refresh_from_db()
|
||||
try:
|
||||
user_ldap = LdapUser.objects.get(uidNumber=user.uid_number)
|
||||
except LdapUser.DoesNotExist:
|
||||
user_ldap = LdapUser(uidNumber=user.uid_number)
|
||||
base = True
|
||||
access_refresh = True
|
||||
mac_refresh = True
|
||||
if base:
|
||||
user_ldap.name = user.pseudo
|
||||
user_ldap.sn = user.pseudo
|
||||
user_ldap.dialupAccess = str(user.has_access())
|
||||
user_ldap.home_directory = user.home_directory
|
||||
user_ldap.mail = user.get_mail
|
||||
user_ldap.given_name = (
|
||||
user.surname.lower() + "_" + user.name.lower()[:3]
|
||||
)
|
||||
user_ldap.gid = settings.LDAP["user_gid"]
|
||||
if "{SSHA}" in user.password or "{SMD5}" in user.password:
|
||||
# We remove the extra $ added at import from ldap
|
||||
user_ldap.user_password = user.password[:6] + user.password[7:]
|
||||
elif "{crypt}" in user.password:
|
||||
# depending on the length, we need to remove or not a $
|
||||
if len(user.password) == 41:
|
||||
user_ldap.user_password = user.password
|
||||
else:
|
||||
user_ldap.user_password = user.password[:7] + user.password[8:]
|
||||
|
||||
user_ldap.sambat_nt_password = user.pwd_ntlm.upper()
|
||||
if user.get_shell:
|
||||
user_ldap.login_shell = str(user.get_shell)
|
||||
user_ldap.shadowexpire = user.get_shadow_expire
|
||||
if access_refresh:
|
||||
user_ldap.dialupAccess = str(user.has_access())
|
||||
if mac_refresh:
|
||||
user_ldap.macs = [
|
||||
str(mac)
|
||||
for mac in machines.models.Interface.objects.filter(machine__user=user)
|
||||
.values_list("mac_address", flat=True)
|
||||
.distinct()
|
||||
]
|
||||
if group_refresh:
|
||||
# Need to refresh all groups because we don't know which groups
|
||||
# were updated during edition of groups and the user may no longer
|
||||
# be part of the updated group (case of group removal)
|
||||
for group in Group.objects.all():
|
||||
if hasattr(group, "listright"):
|
||||
synchronise_usergroup(users.models.ListRight, instance=group.listright)
|
||||
user_ldap.save()
|
||||
|
||||
@receiver(users.signals.remove, sender=users.models.User)
|
||||
def remove_user(sender, **kwargs):
|
||||
user = kwargs["instance"]
|
||||
try:
|
||||
user_ldap = LdapUser.objects.get(name=user.pseudo)
|
||||
user_ldap.delete()
|
||||
except LdapUser.DoesNotExist:
|
||||
pass
|
||||
|
||||
@receiver(users.signals.remove_mass, sender=users.models.User)
|
||||
def remove_users(sender, **kwargs):
|
||||
queryset_users = kwargs["queryset"]
|
||||
LdapUser.objects.filter(
|
||||
name__in=list(queryset_users.values_list("pseudo", flat=True))
|
||||
).delete()
|
||||
|
||||
|
||||
class LdapUserGroup(ldapdb.models.Model):
|
||||
"""A class representing a LdapUserGroup in LDAP, its LDAP conterpart.
|
||||
Synced from UserGroup, (ListRight/Group django models),
|
||||
with a copy of its attributes/fields into LDAP, so this class is a mirror
|
||||
of the classic django ListRight model.
|
||||
|
||||
The basedn usergroupdn is specified in settings.
|
||||
|
||||
Attributes:
|
||||
name: The name of this LdapUserGroup
|
||||
gid: The gid number for this unix group
|
||||
members: Users dn members of this LdapUserGroup
|
||||
"""
|
||||
|
||||
# LDAP meta-data
|
||||
base_dn = settings.LDAP["base_usergroup_dn"]
|
||||
object_classes = ["posixGroup"]
|
||||
|
||||
# attributes
|
||||
gid = ldapdb.models.fields.IntegerField(db_column="gidNumber")
|
||||
members = ldapdb.models.fields.ListField(db_column="memberUid", blank=True)
|
||||
name = ldapdb.models.fields.CharField(
|
||||
db_column="cn", max_length=200, primary_key=True
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
@receiver(users.signals.synchronise, sender=users.models.ListRight)
|
||||
def synchronise_usergroup(sender, **kwargs):
|
||||
group = kwargs["instance"]
|
||||
try:
|
||||
group_ldap = LdapUserGroup.objects.get(gid=group.gid)
|
||||
except LdapUserGroup.DoesNotExist:
|
||||
group_ldap = LdapUserGroup(gid=group.gid)
|
||||
group_ldap.name = group.unix_name
|
||||
group_ldap.members = [user.pseudo for user in group.user_set.all()]
|
||||
group_ldap.save()
|
||||
|
||||
@receiver(users.signals.remove, sender=users.models.ListRight)
|
||||
def remove_usergroup(sender, **kwargs):
|
||||
group = kwargs["instance"]
|
||||
try:
|
||||
group_ldap = LdapUserGroup.objects.get(gid=group.gid)
|
||||
group_ldap.delete()
|
||||
except LdapUserGroup.DoesNotExist:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
class LdapServiceUser(ldapdb.models.Model):
|
||||
"""A class representing a ServiceUser in LDAP, its LDAP conterpart.
|
||||
Synced from ServiceUser, with a copy of its attributes/fields into LDAP,
|
||||
so this class is a mirror of the classic django ServiceUser model.
|
||||
|
||||
The basedn userservicedn is specified in settings.
|
||||
|
||||
Attributes:
|
||||
name: The name of this ServiceUser
|
||||
user_password: The SSHA hashed password of this ServiceUser
|
||||
"""
|
||||
|
||||
# LDAP meta-data
|
||||
base_dn = settings.LDAP["base_userservice_dn"]
|
||||
object_classes = ["applicationProcess", "simpleSecurityObject"]
|
||||
|
||||
# attributes
|
||||
name = ldapdb.models.fields.CharField(
|
||||
db_column="cn", max_length=200, primary_key=True
|
||||
)
|
||||
user_password = ldapdb.models.fields.CharField(
|
||||
db_column="userPassword", max_length=200, blank=True, null=True
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
def synchronise_serviceuser_group(serviceuser):
|
||||
try:
|
||||
group = LdapServiceUserGroup.objects.get(name=serviceuser.access_group)
|
||||
except:
|
||||
group = LdapServiceUserGroup(name=serviceuser.access_group)
|
||||
group.members = list(
|
||||
LdapServiceUser.objects.filter(
|
||||
name__in=[
|
||||
user.pseudo
|
||||
for user in users.models.ServiceUser.objects.filter(
|
||||
access_group=serviceuser.access_group
|
||||
)
|
||||
]
|
||||
).values_list("dn", flat=True)
|
||||
)
|
||||
group.save()
|
||||
|
||||
|
||||
@receiver(users.signals.synchronise, sender=users.models.ServiceUser)
|
||||
def synchronise_serviceuser(sender, **kwargs):
|
||||
user = kwargs["instance"]
|
||||
try:
|
||||
user_ldap = LdapServiceUser.objects.get(name=user.pseudo)
|
||||
except LdapServiceUser.DoesNotExist:
|
||||
user_ldap = LdapServiceUser(name=user.pseudo)
|
||||
user_ldap.user_password = user.password[:6] + user.password[7:]
|
||||
user_ldap.save()
|
||||
synchronise_serviceuser_group(user)
|
||||
|
||||
@receiver(users.signals.remove, sender=users.models.ServiceUser)
|
||||
def remove_serviceuser(sender, **kwargs):
|
||||
user = kwargs["instance"]
|
||||
try:
|
||||
user_ldap = LdapServiceUser.objects.get(name=user.pseudo)
|
||||
user_ldap.delete()
|
||||
except LdapUser.DoesNotExist:
|
||||
pass
|
||||
synchronise_serviceuser_group(user)
|
||||
|
||||
|
||||
class LdapServiceUserGroup(ldapdb.models.Model):
|
||||
"""A class representing a ServiceUserGroup in LDAP, its LDAP conterpart.
|
||||
Synced from ServiceUserGroup, with a copy of its attributes/fields into LDAP,
|
||||
so this class is a mirror of the classic django ServiceUserGroup model.
|
||||
|
||||
The basedn userservicegroupdn is specified in settings.
|
||||
|
||||
Attributes:
|
||||
name: The name of this ServiceUserGroup
|
||||
members: ServiceUsers dn members of this ServiceUserGroup
|
||||
"""
|
||||
|
||||
# LDAP meta-data
|
||||
base_dn = settings.LDAP["base_userservicegroup_dn"]
|
||||
object_classes = ["groupOfNames"]
|
||||
|
||||
# attributes
|
||||
name = ldapdb.models.fields.CharField(
|
||||
db_column="cn", max_length=200, primary_key=True
|
||||
)
|
||||
members = ldapdb.models.fields.ListField(db_column="member", blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
3
ldap_sync/tests.py
Normal file
3
ldap_sync/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
4
ldap_sync/urls.py
Normal file
4
ldap_sync/urls.py
Normal file
|
@ -0,0 +1,4 @@
|
|||
from django.conf.urls import url
|
||||
from .import views
|
||||
|
||||
urlpatterns = []
|
3
ldap_sync/views.py
Normal file
3
ldap_sync/views.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
File diff suppressed because it is too large
Load diff
1347
machines/migrations/0001_model_creation.py
Normal file
1347
machines/migrations/0001_model_creation.py
Normal file
File diff suppressed because it is too large
Load diff
618
machines/migrations/0002_foreign_keys.py
Normal file
618
machines/migrations/0002_foreign_keys.py
Normal file
|
@ -0,0 +1,618 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.29 on 2020-12-30 15:27
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('machines', '0001_model_creation'),
|
||||
]
|
||||
replaces = [
|
||||
("users", "0001_initial"),
|
||||
("users", "0002_auto_20160630_2301"),
|
||||
("users", "0003_listrights_rights"),
|
||||
("users", "0004_auto_20160701_2312"),
|
||||
("users", "0005_auto_20160702_0006"),
|
||||
("users", "0006_ban"),
|
||||
("users", "0007_auto_20160702_2322"),
|
||||
("users", "0008_user_registered"),
|
||||
("users", "0009_user_room"),
|
||||
("users", "0010_auto_20160703_1226"),
|
||||
("users", "0011_auto_20160703_1227"),
|
||||
("users", "0012_auto_20160703_1230"),
|
||||
("users", "0013_auto_20160704_1547"),
|
||||
("users", "0014_auto_20160704_1548"),
|
||||
("users", "0015_whitelist"),
|
||||
("users", "0016_auto_20160706_1220"),
|
||||
("users", "0017_auto_20160707_0105"),
|
||||
("users", "0018_auto_20160707_0115"),
|
||||
("users", "0019_auto_20160708_1633"),
|
||||
("users", "0020_request"),
|
||||
("users", "0021_ldapuser"),
|
||||
("users", "0022_ldapuser_sambasid"),
|
||||
("users", "0023_auto_20160724_1908"),
|
||||
("users", "0024_remove_ldapuser_mac_list"),
|
||||
("users", "0025_listshell"),
|
||||
("users", "0026_user_shell"),
|
||||
("users", "0027_auto_20160726_0216"),
|
||||
("users", "0028_auto_20160726_0227"),
|
||||
("users", "0029_auto_20160726_0229"),
|
||||
("users", "0030_auto_20160726_0357"),
|
||||
("users", "0031_auto_20160726_0359"),
|
||||
("users", "0032_auto_20160727_2122"),
|
||||
("users", "0033_remove_ldapuser_loginshell"),
|
||||
("users", "0034_auto_20161018_0037"),
|
||||
("users", "0035_auto_20161018_0046"),
|
||||
("users", "0036_auto_20161022_2146"),
|
||||
("users", "0037_auto_20161028_1906"),
|
||||
("users", "0038_auto_20161031_0258"),
|
||||
("users", "0039_auto_20161119_0033"),
|
||||
("users", "0040_auto_20161119_1709"),
|
||||
("users", "0041_listright_details"),
|
||||
("users", "0042_auto_20161126_2028"),
|
||||
("users", "0043_auto_20161224_1156"),
|
||||
("users", "0043_ban_state"),
|
||||
("users", "0044_user_ssh_public_key"),
|
||||
("users", "0045_merge"),
|
||||
("users", "0046_auto_20170617_1433"),
|
||||
("users", "0047_auto_20170618_0156"),
|
||||
("users", "0048_auto_20170618_0210"),
|
||||
("users", "0049_auto_20170618_1424"),
|
||||
("users", "0050_serviceuser_comment"),
|
||||
("users", "0051_user_telephone"),
|
||||
("users", "0052_ldapuser_shadowexpire"),
|
||||
("users", "0053_auto_20170626_2105"),
|
||||
("users", "0054_auto_20170626_2219"),
|
||||
("users", "0055_auto_20171003_0556"),
|
||||
("users", "0056_auto_20171015_2033"),
|
||||
("users", "0057_auto_20171023_0301"),
|
||||
("users", "0058_auto_20171025_0154"),
|
||||
("users", "0059_auto_20171025_1854"),
|
||||
("users", "0060_auto_20171120_0317"),
|
||||
("users", "0061_auto_20171230_2033"),
|
||||
("users", "0062_auto_20171231_0056"),
|
||||
("users", "0063_auto_20171231_0140"),
|
||||
("users", "0064_auto_20171231_0150"),
|
||||
("users", "0065_auto_20171231_2053"),
|
||||
("users", "0066_grouppermissions"),
|
||||
("users", "0067_serveurpermission"),
|
||||
("users", "0068_auto_20180107_2245"),
|
||||
("users", "0069_club_mailing"),
|
||||
("users", "0070_auto_20180324_1906"),
|
||||
("users", "0071_auto_20180415_1252"),
|
||||
("users", "0072_auto_20180426_2021"),
|
||||
("users", "0073_auto_20180629_1614"),
|
||||
("users", "0074_auto_20180810_2104"),
|
||||
("users", "0074_auto_20180814_1059"),
|
||||
("users", "0075_merge_20180815_2202"),
|
||||
("users", "0076_auto_20180818_1321"),
|
||||
("users", "0077_auto_20180824_1750"),
|
||||
("users", "0078_auto_20181011_1405"),
|
||||
("users", "0079_auto_20181228_2039"),
|
||||
("users", "0080_auto_20190108_1726"),
|
||||
("users", "0081_auto_20190317_0302"),
|
||||
("users", "0082_auto_20190908_1338"),
|
||||
("users", "0083_user_shortcuts_enabled"),
|
||||
("users", "0084_auto_20191120_0159"),
|
||||
("users", "0085_user_email_state"),
|
||||
("users", "0086_user_email_change_date"),
|
||||
("users", "0087_request_email"),
|
||||
("users", "0088_auto_20200417_2312"),
|
||||
("users", "0089_auto_20200418_0112"),
|
||||
("users", "0090_auto_20200421_1825"),
|
||||
("users", "0091_auto_20200423_1256"),
|
||||
("users", "0092_auto_20200502_0057"),
|
||||
("users", "0093_user_profile_image"),
|
||||
("users", "0094_remove_user_profile_image"),
|
||||
("users", "0095_user_theme"),
|
||||
("users", "0096_auto_20210110_1811"),
|
||||
("cotisations", "0001_initial"),
|
||||
("cotisations", "0002_remove_facture_article"),
|
||||
("cotisations", "0003_auto_20160702_1448"),
|
||||
("cotisations", "0004_auto_20160702_1528"),
|
||||
("cotisations", "0005_auto_20160702_1532"),
|
||||
("cotisations", "0006_auto_20160702_1534"),
|
||||
("cotisations", "0007_auto_20160702_1543"),
|
||||
("cotisations", "0008_auto_20160702_1614"),
|
||||
("cotisations", "0009_remove_cotisation_user"),
|
||||
("cotisations", "0010_auto_20160702_1840"),
|
||||
("cotisations", "0011_auto_20160702_1911"),
|
||||
("cotisations", "0012_auto_20160704_0118"),
|
||||
("cotisations", "0013_auto_20160711_2240"),
|
||||
("cotisations", "0014_auto_20160712_0245"),
|
||||
("cotisations", "0015_auto_20160714_2142"),
|
||||
("cotisations", "0016_auto_20160715_0110"),
|
||||
("cotisations", "0017_auto_20170718_2329"),
|
||||
("cotisations", "0018_paiement_type_paiement"),
|
||||
("cotisations", "0019_auto_20170819_0055"),
|
||||
("cotisations", "0020_auto_20170819_0057"),
|
||||
("cotisations", "0021_auto_20170819_0104"),
|
||||
("cotisations", "0022_auto_20170824_0128"),
|
||||
("cotisations", "0023_auto_20170902_1303"),
|
||||
("cotisations", "0024_auto_20171015_2033"),
|
||||
("cotisations", "0025_article_type_user"),
|
||||
("cotisations", "0026_auto_20171028_0126"),
|
||||
("cotisations", "0027_auto_20171029_1156"),
|
||||
("cotisations", "0028_auto_20171231_0007"),
|
||||
("cotisations", "0029_auto_20180414_2056"),
|
||||
("cotisations", "0030_custom_payment"),
|
||||
("cotisations", "0031_comnpaypayment_production"),
|
||||
("cotisations", "0032_custom_invoice"),
|
||||
("cotisations", "0033_auto_20180818_1319"),
|
||||
("cotisations", "0034_auto_20180831_1532"),
|
||||
("cotisations", "0035_notepayment"),
|
||||
("cotisations", "0036_custominvoice_remark"),
|
||||
("cotisations", "0037_costestimate"),
|
||||
("cotisations", "0038_auto_20181231_1657"),
|
||||
("cotisations", "0039_freepayment"),
|
||||
("cotisations", "0040_auto_20191002_2335"),
|
||||
("cotisations", "0041_auto_20191103_2131"),
|
||||
("cotisations", "0042_auto_20191120_0159"),
|
||||
("cotisations", "0043_separation_membership_connection_p1"),
|
||||
("cotisations", "0044_separation_membership_connection_p2"),
|
||||
("cotisations", "0045_separation_membership_connection_p3"),
|
||||
("cotisations", "0046_article_need_membership"),
|
||||
("cotisations", "0047_article_need_membership_init"),
|
||||
("cotisations", "0048_auto_20201017_0018"),
|
||||
("cotisations", "0049_auto_20201102_2305"),
|
||||
("cotisations", "0050_auto_20201102_2342"),
|
||||
("cotisations", "0051_auto_20201228_1636"),
|
||||
("machines", "0001_initial"),
|
||||
("machines", "0002_auto_20160703_1444"),
|
||||
("machines", "0003_auto_20160703_1450"),
|
||||
("machines", "0004_auto_20160703_1451"),
|
||||
("machines", "0005_auto_20160703_1523"),
|
||||
("machines", "0006_auto_20160703_1813"),
|
||||
("machines", "0007_auto_20160703_1816"),
|
||||
("machines", "0008_remove_interface_ipv6"),
|
||||
("machines", "0009_auto_20160703_2358"),
|
||||
("machines", "0010_auto_20160704_0104"),
|
||||
("machines", "0011_auto_20160704_0105"),
|
||||
("machines", "0012_auto_20160704_0118"),
|
||||
("machines", "0013_auto_20160705_1014"),
|
||||
("machines", "0014_auto_20160706_1220"),
|
||||
("machines", "0015_auto_20160707_0105"),
|
||||
("machines", "0016_auto_20160708_1633"),
|
||||
("machines", "0017_auto_20160708_1645"),
|
||||
("machines", "0018_auto_20160708_1813"),
|
||||
("machines", "0019_auto_20160718_1141"),
|
||||
("machines", "0020_auto_20160718_1849"),
|
||||
("machines", "0021_auto_20161006_1943"),
|
||||
("machines", "0022_auto_20161011_1829"),
|
||||
("machines", "0023_iplist_ip_type"),
|
||||
("machines", "0024_machinetype_need_infra"),
|
||||
("machines", "0025_auto_20161023_0038"),
|
||||
("machines", "0026_auto_20161026_1348"),
|
||||
("machines", "0027_alias"),
|
||||
("machines", "0028_iptype_domaine_ip"),
|
||||
("machines", "0029_iptype_domaine_range"),
|
||||
("machines", "0030_auto_20161118_1730"),
|
||||
("machines", "0031_auto_20161119_1709"),
|
||||
("machines", "0032_auto_20161119_1850"),
|
||||
("machines", "0033_extension_need_infra"),
|
||||
("machines", "0034_iplist_need_infra"),
|
||||
("machines", "0035_auto_20161224_1201"),
|
||||
("machines", "0036_auto_20161224_1204"),
|
||||
("machines", "0037_domain_cname"),
|
||||
("machines", "0038_auto_20161224_1721"),
|
||||
("machines", "0039_auto_20161224_1732"),
|
||||
("machines", "0040_remove_interface_dns"),
|
||||
("machines", "0041_remove_ns_interface"),
|
||||
("machines", "0042_ns_ns"),
|
||||
("machines", "0043_auto_20170721_0350"),
|
||||
("machines", "0044_auto_20170808_0233"),
|
||||
("machines", "0045_auto_20170808_0348"),
|
||||
("machines", "0046_auto_20170808_1423"),
|
||||
("machines", "0047_auto_20170809_0606"),
|
||||
("machines", "0048_auto_20170823_2315"),
|
||||
("machines", "0049_vlan"),
|
||||
("machines", "0050_auto_20170826_0022"),
|
||||
("machines", "0051_iptype_vlan"),
|
||||
("machines", "0052_auto_20170828_2322"),
|
||||
("machines", "0053_text"),
|
||||
("machines", "0054_text_zone"),
|
||||
("machines", "0055_nas"),
|
||||
("machines", "0056_nas_port_access_mode"),
|
||||
("machines", "0057_nas_autocapture_mac"),
|
||||
("machines", "0058_auto_20171002_0350"),
|
||||
("machines", "0059_iptype_prefix_v6"),
|
||||
("machines", "0060_iptype_ouverture_ports"),
|
||||
("machines", "0061_auto_20171015_2033"),
|
||||
("machines", "0062_extension_origin_v6"),
|
||||
("machines", "0063_auto_20171020_0040"),
|
||||
("machines", "0064_auto_20171115_0253"),
|
||||
("machines", "0065_auto_20171115_1514"),
|
||||
("machines", "0066_srv"),
|
||||
("machines", "0067_auto_20171116_0152"),
|
||||
("machines", "0068_auto_20171116_0252"),
|
||||
("machines", "0069_auto_20171116_0822"),
|
||||
("machines", "0070_auto_20171231_1947"),
|
||||
("machines", "0071_auto_20171231_2100"),
|
||||
("machines", "0072_auto_20180108_1822"),
|
||||
("machines", "0073_auto_20180128_2203"),
|
||||
("machines", "0074_auto_20180129_0352"),
|
||||
("machines", "0075_auto_20180130_0052"),
|
||||
("machines", "0076_auto_20180130_1623"),
|
||||
("machines", "0077_auto_20180409_2243"),
|
||||
("machines", "0078_auto_20180415_1252"),
|
||||
("machines", "0079_auto_20180416_0107"),
|
||||
("machines", "0080_auto_20180502_2334"),
|
||||
("machines", "0081_auto_20180521_1413"),
|
||||
("machines", "0082_auto_20180525_2209"),
|
||||
("machines", "0083_remove_duplicate_rights"),
|
||||
("machines", "0084_dname"),
|
||||
("machines", "0085_sshfingerprint"),
|
||||
("machines", "0086_role"),
|
||||
("machines", "0087_dnssec"),
|
||||
("machines", "0088_iptype_prefix_v6_length"),
|
||||
("machines", "0089_auto_20180805_1148"),
|
||||
("machines", "0090_auto_20180805_1459"),
|
||||
("machines", "0091_auto_20180806_2310"),
|
||||
("machines", "0092_auto_20180807_0926"),
|
||||
("machines", "0093_auto_20180807_1115"),
|
||||
("machines", "0094_auto_20180815_1918"),
|
||||
("machines", "0095_auto_20180919_2225"),
|
||||
("machines", "0096_auto_20181013_1417"),
|
||||
("machines", "0097_extension_dnssec"),
|
||||
("machines", "0098_auto_20190102_1745"),
|
||||
("machines", "0099_role_recursive_dns"),
|
||||
("machines", "0100_auto_20190102_1753"),
|
||||
("machines", "0101_auto_20190108_1623"),
|
||||
("machines", "0102_auto_20190303_1611"),
|
||||
("machines", "0103_auto_20191002_2222"),
|
||||
("machines", "0104_auto_20191002_2231"),
|
||||
("machines", "0105_dname_ttl"),
|
||||
("machines", "0106_auto_20191120_0159"),
|
||||
("machines", "0107_fix_lowercase_domain"),
|
||||
("machines", "0108_ipv6list_active"),
|
||||
("preferences", "0001_initial"),
|
||||
("preferences", "0002_auto_20170625_1923"),
|
||||
("preferences", "0003_optionaluser_solde_negatif"),
|
||||
("preferences", "0004_assooption_services"),
|
||||
("preferences", "0005_auto_20170824_0139"),
|
||||
("preferences", "0006_auto_20170824_0143"),
|
||||
("preferences", "0007_auto_20170824_2056"),
|
||||
("preferences", "0008_auto_20170824_2122"),
|
||||
("preferences", "0009_assooption_utilisateur_asso"),
|
||||
("preferences", "0010_auto_20170825_0459"),
|
||||
("preferences", "0011_auto_20170825_2307"),
|
||||
("preferences", "0012_generaloption_req_expire_hrs"),
|
||||
("preferences", "0013_generaloption_site_name"),
|
||||
("preferences", "0014_generaloption_email_from"),
|
||||
("preferences", "0015_optionaltopologie_radius_general_policy"),
|
||||
("preferences", "0016_auto_20170902_1520"),
|
||||
("preferences", "0017_mailmessageoption"),
|
||||
("preferences", "0018_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0019_remove_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0020_optionalmachine_ipv6"),
|
||||
("preferences", "0021_auto_20171015_1741"),
|
||||
("preferences", "0022_auto_20171015_1758"),
|
||||
("preferences", "0023_auto_20171015_2033"),
|
||||
("preferences", "0024_optionaluser_all_can_create"),
|
||||
("preferences", "0025_auto_20171231_2142"),
|
||||
("preferences", "0025_generaloption_general_message"),
|
||||
("preferences", "0026_auto_20171216_0401"),
|
||||
("preferences", "0027_merge_20180106_2019"),
|
||||
("preferences", "0028_assooption_description"),
|
||||
("preferences", "0028_auto_20180111_1129"),
|
||||
("preferences", "0028_auto_20180128_2203"),
|
||||
("preferences", "0029_auto_20180111_1134"),
|
||||
("preferences", "0029_auto_20180318_0213"),
|
||||
("preferences", "0029_auto_20180318_1005"),
|
||||
("preferences", "0030_auto_20180111_2346"),
|
||||
("preferences", "0030_merge_20180320_1419"),
|
||||
("preferences", "0031_auto_20180323_0218"),
|
||||
("preferences", "0031_optionaluser_self_adhesion"),
|
||||
("preferences", "0032_optionaluser_min_online_payment"),
|
||||
("preferences", "0032_optionaluser_shell_default"),
|
||||
("preferences", "0033_accueiloption"),
|
||||
("preferences", "0033_generaloption_gtu_sum_up"),
|
||||
("preferences", "0034_auto_20180114_2025"),
|
||||
("preferences", "0034_auto_20180416_1120"),
|
||||
("preferences", "0035_auto_20180114_2132"),
|
||||
("preferences", "0035_optionaluser_allow_self_subscription"),
|
||||
("preferences", "0036_auto_20180114_2141"),
|
||||
("preferences", "0037_auto_20180114_2156"),
|
||||
("preferences", "0038_auto_20180114_2209"),
|
||||
("preferences", "0039_auto_20180115_0003"),
|
||||
("preferences", "0040_auto_20180129_1745"),
|
||||
("preferences", "0041_merge_20180130_0052"),
|
||||
("preferences", "0042_auto_20180222_1743"),
|
||||
("preferences", "0043_optionalmachine_create_machine"),
|
||||
("preferences", "0044_remove_payment_pass"),
|
||||
("preferences", "0045_remove_unused_payment_fields"),
|
||||
("preferences", "0046_optionaluser_mail_extension"),
|
||||
("preferences", "0047_mailcontact"),
|
||||
("preferences", "0048_auto_20180811_1515"),
|
||||
("preferences", "0049_optionaluser_self_change_shell"),
|
||||
("preferences", "0050_auto_20180818_1329"),
|
||||
("preferences", "0051_auto_20180919_2225"),
|
||||
("preferences", "0052_optionaluser_delete_notyetactive"),
|
||||
("preferences", "0053_optionaluser_self_change_room"),
|
||||
("preferences", "0055_generaloption_main_site_url"),
|
||||
("preferences", "0056_1_radiusoption"),
|
||||
("preferences", "0056_2_radiusoption"),
|
||||
("preferences", "0056_3_radiusoption"),
|
||||
("preferences", "0056_4_radiusoption"),
|
||||
("preferences", "0057_optionaluser_all_users_active"),
|
||||
("preferences", "0058_auto_20190108_1650"),
|
||||
("preferences", "0059_auto_20190120_1739"),
|
||||
("preferences", "0060_auto_20190712_1821"),
|
||||
("preferences", "0061_optionaluser_allow_archived_connexion"),
|
||||
("preferences", "0062_auto_20190910_1909"),
|
||||
("preferences", "0063_mandate"),
|
||||
("preferences", "0064_auto_20191008_1335"),
|
||||
("preferences", "0065_auto_20191010_1227"),
|
||||
("preferences", "0066_optionalmachine_default_dns_ttl"),
|
||||
("preferences", "0067_auto_20191120_0159"),
|
||||
("preferences", "0068_optionaluser_allow_set_password_during_user_creation"),
|
||||
("preferences", "0069_optionaluser_disable_emailnotyetconfirmed"),
|
||||
("preferences", "0070_auto_20200419_0225"),
|
||||
("preferences", "0071_optionaluser_self_change_pseudo"),
|
||||
("topologie", "0001_initial"),
|
||||
("topologie", "0002_auto_20160703_1118"),
|
||||
("topologie", "0003_room"),
|
||||
("topologie", "0004_auto_20160703_1122"),
|
||||
("topologie", "0005_auto_20160703_1123"),
|
||||
("topologie", "0006_auto_20160703_1129"),
|
||||
("topologie", "0007_auto_20160703_1148"),
|
||||
("topologie", "0008_port_room"),
|
||||
("topologie", "0009_auto_20160703_1200"),
|
||||
("topologie", "0010_auto_20160704_2148"),
|
||||
("topologie", "0011_auto_20160704_2153"),
|
||||
("topologie", "0012_port_machine_interface"),
|
||||
("topologie", "0013_port_related"),
|
||||
("topologie", "0014_auto_20160706_1238"),
|
||||
("topologie", "0015_auto_20160706_1452"),
|
||||
("topologie", "0016_auto_20160706_1531"),
|
||||
("topologie", "0017_auto_20160718_1141"),
|
||||
("topologie", "0018_room_details"),
|
||||
("topologie", "0019_auto_20161026_1348"),
|
||||
("topologie", "0020_auto_20161119_0033"),
|
||||
("topologie", "0021_port_radius"),
|
||||
("topologie", "0022_auto_20161211_1622"),
|
||||
("topologie", "0023_auto_20170817_1654"),
|
||||
("topologie", "0023_auto_20170826_1530"),
|
||||
("topologie", "0024_auto_20170818_1021"),
|
||||
("topologie", "0024_auto_20170826_1800"),
|
||||
("topologie", "0025_merge_20170902_1242"),
|
||||
("topologie", "0026_auto_20170902_1245"),
|
||||
("topologie", "0027_auto_20170905_1442"),
|
||||
("topologie", "0028_auto_20170913_1503"),
|
||||
("topologie", "0029_auto_20171002_0334"),
|
||||
("topologie", "0030_auto_20171004_0235"),
|
||||
("topologie", "0031_auto_20171015_2033"),
|
||||
("topologie", "0032_auto_20171026_0338"),
|
||||
("topologie", "0033_auto_20171231_1743"),
|
||||
("topologie", "0034_borne"),
|
||||
("topologie", "0035_auto_20180324_0023"),
|
||||
("topologie", "0036_transferborne"),
|
||||
("topologie", "0037_auto_20180325_0127"),
|
||||
("topologie", "0038_transfersw"),
|
||||
("topologie", "0039_port_new_switch"),
|
||||
("topologie", "0040_transferports"),
|
||||
("topologie", "0041_transferportsw"),
|
||||
("topologie", "0042_transferswitch"),
|
||||
("topologie", "0043_renamenewswitch"),
|
||||
("topologie", "0044_auto_20180326_0002"),
|
||||
("topologie", "0045_auto_20180326_0123"),
|
||||
("topologie", "0046_auto_20180326_0129"),
|
||||
("topologie", "0047_ap_machine"),
|
||||
("topologie", "0048_ap_machine"),
|
||||
("topologie", "0049_switchs_machine"),
|
||||
("topologie", "0050_port_new_switch"),
|
||||
("topologie", "0051_switchs_machine"),
|
||||
("topologie", "0052_transferports"),
|
||||
("topologie", "0053_finalsw"),
|
||||
("topologie", "0054_auto_20180326_1742"),
|
||||
("topologie", "0055_auto_20180329_0431"),
|
||||
("topologie", "0056_building_switchbay"),
|
||||
("topologie", "0057_auto_20180408_0316"),
|
||||
("topologie", "0058_remove_switch_location"),
|
||||
("topologie", "0059_auto_20180415_2249"),
|
||||
("topologie", "0060_server"),
|
||||
("topologie", "0061_portprofile"),
|
||||
("topologie", "0062_auto_20180815_1918"),
|
||||
("topologie", "0063_auto_20180919_2225"),
|
||||
("topologie", "0064_switch_automatic_provision"),
|
||||
("topologie", "0065_auto_20180927_1836"),
|
||||
("topologie", "0066_modelswitch_commercial_name"),
|
||||
("topologie", "0067_auto_20181230_1819"),
|
||||
("topologie", "0068_auto_20190102_1758"),
|
||||
("topologie", "0069_auto_20190108_1439"),
|
||||
("topologie", "0070_auto_20190218_1743"),
|
||||
("topologie", "0071_auto_20190218_1936"),
|
||||
("topologie", "0072_auto_20190720_2318"),
|
||||
("topologie", "0073_auto_20191120_0159"),
|
||||
("topologie", "0074_auto_20200419_1640"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dname',
|
||||
name='zone',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='machines.Extension'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='domain',
|
||||
name='extension',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='machines.Extension'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='domain',
|
||||
name='interface_parent',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='machines.Interface'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='extension',
|
||||
name='origin',
|
||||
field=models.ForeignKey(blank=True, help_text='A record associated with the zone.', null=True, on_delete=django.db.models.deletion.PROTECT, to='machines.IpList'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='extension',
|
||||
name='soa',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='machines.SOA'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='interface',
|
||||
name='ipv4',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='machines.IpList'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='interface',
|
||||
name='machine',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='machines.Machine'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='interface',
|
||||
name='machine_type',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='machines.MachineType'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='interface',
|
||||
name='port_lists',
|
||||
field=models.ManyToManyField(blank=True, to='machines.OuverturePortList'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='iplist',
|
||||
name='ip_type',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='machines.IpType'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='iptype',
|
||||
name='extension',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='machines.Extension'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='iptype',
|
||||
name='ouverture_ports',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='machines.OuverturePortList'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='iptype',
|
||||
name='vlan',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='machines.Vlan'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='ipv6list',
|
||||
name='interface',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='ipv6list', to='machines.Interface'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='machine',
|
||||
name='user',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='machinetype',
|
||||
name='ip_type',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='machines.IpType'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='mx',
|
||||
name='name',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='machines.Domain'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='mx',
|
||||
name='zone',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='machines.Extension'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='nas',
|
||||
name='machine_type',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, related_name='machinetype_on_nas', to='machines.MachineType'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='nas',
|
||||
name='nas_type',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, related_name='nas_type', to='machines.MachineType'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='ns',
|
||||
name='ns',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='machines.Domain'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='ns',
|
||||
name='zone',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='machines.Extension'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='ouvertureport',
|
||||
name='port_list',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='machines.OuverturePortList'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='role',
|
||||
name='servers',
|
||||
field=models.ManyToManyField(to='machines.Interface'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='service',
|
||||
name='servers',
|
||||
field=models.ManyToManyField(through='machines.Service_link', to='machines.Interface'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='service_link',
|
||||
name='server',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='machines.Interface'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='service_link',
|
||||
name='service',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='machines.Service'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='srv',
|
||||
name='extension',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='machines.Extension'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='srv',
|
||||
name='target',
|
||||
field=models.ForeignKey(default=None, help_text='Target server.', on_delete=django.db.models.deletion.PROTECT, to='machines.Domain'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sshfp',
|
||||
name='machine',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='machines.Machine'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='txt',
|
||||
name='zone',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='machines.Extension'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='domain',
|
||||
unique_together=set([('name', 'extension')]),
|
||||
),
|
||||
]
|
|
@ -11,7 +11,6 @@ class Migration(migrations.Migration):
|
|||
|
||||
dependencies = [
|
||||
("machines", "0062_extension_origin_v6"),
|
||||
("reversion", "0001_squashed_0004_auto_20160611_1202"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
|
|
@ -1277,9 +1277,10 @@ class SshFp(RevMixin, AclMixin, models.Model):
|
|||
|
||||
See RFC: 1 is sha1 , 2 is sha256.
|
||||
"""
|
||||
pubkey = self.base64_pubkey()
|
||||
return {
|
||||
"1": hashlib.sha1(base64.b64decode(self.pub_key_entry)).hexdigest(),
|
||||
"2": hashlib.sha256(base64.b64decode(self.pub_key_entry)).hexdigest(),
|
||||
"1": hashlib.sha1(pubkey).hexdigest(),
|
||||
"2": hashlib.sha256(pubkey).hexdigest(),
|
||||
}
|
||||
|
||||
class Meta:
|
||||
|
@ -1296,6 +1297,31 @@ class SshFp(RevMixin, AclMixin, models.Model):
|
|||
def can_delete(self, user_request, *args, **kwargs):
|
||||
return self.machine.can_delete(user_request, *args, **kwargs)
|
||||
|
||||
def base64_pubkey(self):
|
||||
"""Function to decode in base64 the pub key entry
|
||||
|
||||
Returns:
|
||||
Base64 decoded value of pub_key_entry
|
||||
|
||||
Because of b64 MUST be divided by 4, we add a "padding" = carracter 3 times.
|
||||
This padding is then ignored if the pubkey is greater than a multiple of 4.
|
||||
More informations on : https://gist.github.com/perrygeo/ee7c65bb1541ff6ac770
|
||||
As said in the thread, this fix is not optimal, however it is very simple as
|
||||
no options on b64decode function exists."""
|
||||
return base64.b64decode(self.pub_key_entry + "===")
|
||||
|
||||
def clean(self, *args, **kwargs):
|
||||
"""Check if the pub_key_entry is a valid base64 entry.
|
||||
|
||||
Raises:
|
||||
ValidationError: the pub key entry is not a valid base64 enty.
|
||||
"""
|
||||
try:
|
||||
self.base64_pubkey()
|
||||
except ValueError:
|
||||
raise ValidationError(_("Ssh pub key entry is incorrect base64 entry"))
|
||||
super(SshFp, self).clean(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.algo) + " " + str(self.comment)
|
||||
|
||||
|
|
29
multi_op/migrations/0001_squashed_0003_auto_20200904_1938.py
Normal file
29
multi_op/migrations/0001_squashed_0003_auto_20200904_1938.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.29 on 2020-12-30 17:32
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
replaces = [('multi_op', '0001_initial'), ('multi_op', '0002_auto_20200904_1905'), ('multi_op', '0003_auto_20200904_1938')]
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('topologie', '0002_foreign_keys'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='MultiopOption',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('enabled_dorm', models.ManyToManyField(blank=True, related_name='enabled_dorm_multiop', to='topologie.Dormitory', verbose_name='enabled dorm')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'dormitories preferences',
|
||||
},
|
||||
),
|
||||
]
|
1218
preferences/migrations/0001_model_creation.py
Normal file
1218
preferences/migrations/0001_model_creation.py
Normal file
File diff suppressed because it is too large
Load diff
532
preferences/migrations/0002_foreign_keys.py
Normal file
532
preferences/migrations/0002_foreign_keys.py
Normal file
|
@ -0,0 +1,532 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.29 on 2020-12-30 15:27
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import preferences.models
|
||||
import re2o.aes_field
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('machines', '0001_model_creation'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('users', '0001_model_creation'),
|
||||
('preferences', '0001_model_creation'),
|
||||
('reversion', '0001_squashed_0004_auto_20160611_1202'),
|
||||
]
|
||||
replaces = [
|
||||
("users", "0001_initial"),
|
||||
("users", "0002_auto_20160630_2301"),
|
||||
("users", "0003_listrights_rights"),
|
||||
("users", "0004_auto_20160701_2312"),
|
||||
("users", "0005_auto_20160702_0006"),
|
||||
("users", "0006_ban"),
|
||||
("users", "0007_auto_20160702_2322"),
|
||||
("users", "0008_user_registered"),
|
||||
("users", "0009_user_room"),
|
||||
("users", "0010_auto_20160703_1226"),
|
||||
("users", "0011_auto_20160703_1227"),
|
||||
("users", "0012_auto_20160703_1230"),
|
||||
("users", "0013_auto_20160704_1547"),
|
||||
("users", "0014_auto_20160704_1548"),
|
||||
("users", "0015_whitelist"),
|
||||
("users", "0016_auto_20160706_1220"),
|
||||
("users", "0017_auto_20160707_0105"),
|
||||
("users", "0018_auto_20160707_0115"),
|
||||
("users", "0019_auto_20160708_1633"),
|
||||
("users", "0020_request"),
|
||||
("users", "0021_ldapuser"),
|
||||
("users", "0022_ldapuser_sambasid"),
|
||||
("users", "0023_auto_20160724_1908"),
|
||||
("users", "0024_remove_ldapuser_mac_list"),
|
||||
("users", "0025_listshell"),
|
||||
("users", "0026_user_shell"),
|
||||
("users", "0027_auto_20160726_0216"),
|
||||
("users", "0028_auto_20160726_0227"),
|
||||
("users", "0029_auto_20160726_0229"),
|
||||
("users", "0030_auto_20160726_0357"),
|
||||
("users", "0031_auto_20160726_0359"),
|
||||
("users", "0032_auto_20160727_2122"),
|
||||
("users", "0033_remove_ldapuser_loginshell"),
|
||||
("users", "0034_auto_20161018_0037"),
|
||||
("users", "0035_auto_20161018_0046"),
|
||||
("users", "0036_auto_20161022_2146"),
|
||||
("users", "0037_auto_20161028_1906"),
|
||||
("users", "0038_auto_20161031_0258"),
|
||||
("users", "0039_auto_20161119_0033"),
|
||||
("users", "0040_auto_20161119_1709"),
|
||||
("users", "0041_listright_details"),
|
||||
("users", "0042_auto_20161126_2028"),
|
||||
("users", "0043_auto_20161224_1156"),
|
||||
("users", "0043_ban_state"),
|
||||
("users", "0044_user_ssh_public_key"),
|
||||
("users", "0045_merge"),
|
||||
("users", "0046_auto_20170617_1433"),
|
||||
("users", "0047_auto_20170618_0156"),
|
||||
("users", "0048_auto_20170618_0210"),
|
||||
("users", "0049_auto_20170618_1424"),
|
||||
("users", "0050_serviceuser_comment"),
|
||||
("users", "0051_user_telephone"),
|
||||
("users", "0052_ldapuser_shadowexpire"),
|
||||
("users", "0053_auto_20170626_2105"),
|
||||
("users", "0054_auto_20170626_2219"),
|
||||
("users", "0055_auto_20171003_0556"),
|
||||
("users", "0056_auto_20171015_2033"),
|
||||
("users", "0057_auto_20171023_0301"),
|
||||
("users", "0058_auto_20171025_0154"),
|
||||
("users", "0059_auto_20171025_1854"),
|
||||
("users", "0060_auto_20171120_0317"),
|
||||
("users", "0061_auto_20171230_2033"),
|
||||
("users", "0062_auto_20171231_0056"),
|
||||
("users", "0063_auto_20171231_0140"),
|
||||
("users", "0064_auto_20171231_0150"),
|
||||
("users", "0065_auto_20171231_2053"),
|
||||
("users", "0066_grouppermissions"),
|
||||
("users", "0067_serveurpermission"),
|
||||
("users", "0068_auto_20180107_2245"),
|
||||
("users", "0069_club_mailing"),
|
||||
("users", "0070_auto_20180324_1906"),
|
||||
("users", "0071_auto_20180415_1252"),
|
||||
("users", "0072_auto_20180426_2021"),
|
||||
("users", "0073_auto_20180629_1614"),
|
||||
("users", "0074_auto_20180810_2104"),
|
||||
("users", "0074_auto_20180814_1059"),
|
||||
("users", "0075_merge_20180815_2202"),
|
||||
("users", "0076_auto_20180818_1321"),
|
||||
("users", "0077_auto_20180824_1750"),
|
||||
("users", "0078_auto_20181011_1405"),
|
||||
("users", "0079_auto_20181228_2039"),
|
||||
("users", "0080_auto_20190108_1726"),
|
||||
("users", "0081_auto_20190317_0302"),
|
||||
("users", "0082_auto_20190908_1338"),
|
||||
("users", "0083_user_shortcuts_enabled"),
|
||||
("users", "0084_auto_20191120_0159"),
|
||||
("users", "0085_user_email_state"),
|
||||
("users", "0086_user_email_change_date"),
|
||||
("users", "0087_request_email"),
|
||||
("users", "0088_auto_20200417_2312"),
|
||||
("users", "0089_auto_20200418_0112"),
|
||||
("users", "0090_auto_20200421_1825"),
|
||||
("users", "0091_auto_20200423_1256"),
|
||||
("users", "0092_auto_20200502_0057"),
|
||||
("users", "0093_user_profile_image"),
|
||||
("users", "0094_remove_user_profile_image"),
|
||||
("users", "0095_user_theme"),
|
||||
("users", "0096_auto_20210110_1811"),
|
||||
("cotisations", "0001_initial"),
|
||||
("cotisations", "0002_remove_facture_article"),
|
||||
("cotisations", "0003_auto_20160702_1448"),
|
||||
("cotisations", "0004_auto_20160702_1528"),
|
||||
("cotisations", "0005_auto_20160702_1532"),
|
||||
("cotisations", "0006_auto_20160702_1534"),
|
||||
("cotisations", "0007_auto_20160702_1543"),
|
||||
("cotisations", "0008_auto_20160702_1614"),
|
||||
("cotisations", "0009_remove_cotisation_user"),
|
||||
("cotisations", "0010_auto_20160702_1840"),
|
||||
("cotisations", "0011_auto_20160702_1911"),
|
||||
("cotisations", "0012_auto_20160704_0118"),
|
||||
("cotisations", "0013_auto_20160711_2240"),
|
||||
("cotisations", "0014_auto_20160712_0245"),
|
||||
("cotisations", "0015_auto_20160714_2142"),
|
||||
("cotisations", "0016_auto_20160715_0110"),
|
||||
("cotisations", "0017_auto_20170718_2329"),
|
||||
("cotisations", "0018_paiement_type_paiement"),
|
||||
("cotisations", "0019_auto_20170819_0055"),
|
||||
("cotisations", "0020_auto_20170819_0057"),
|
||||
("cotisations", "0021_auto_20170819_0104"),
|
||||
("cotisations", "0022_auto_20170824_0128"),
|
||||
("cotisations", "0023_auto_20170902_1303"),
|
||||
("cotisations", "0024_auto_20171015_2033"),
|
||||
("cotisations", "0025_article_type_user"),
|
||||
("cotisations", "0026_auto_20171028_0126"),
|
||||
("cotisations", "0027_auto_20171029_1156"),
|
||||
("cotisations", "0028_auto_20171231_0007"),
|
||||
("cotisations", "0029_auto_20180414_2056"),
|
||||
("cotisations", "0030_custom_payment"),
|
||||
("cotisations", "0031_comnpaypayment_production"),
|
||||
("cotisations", "0032_custom_invoice"),
|
||||
("cotisations", "0033_auto_20180818_1319"),
|
||||
("cotisations", "0034_auto_20180831_1532"),
|
||||
("cotisations", "0035_notepayment"),
|
||||
("cotisations", "0036_custominvoice_remark"),
|
||||
("cotisations", "0037_costestimate"),
|
||||
("cotisations", "0038_auto_20181231_1657"),
|
||||
("cotisations", "0039_freepayment"),
|
||||
("cotisations", "0040_auto_20191002_2335"),
|
||||
("cotisations", "0041_auto_20191103_2131"),
|
||||
("cotisations", "0042_auto_20191120_0159"),
|
||||
("cotisations", "0043_separation_membership_connection_p1"),
|
||||
("cotisations", "0044_separation_membership_connection_p2"),
|
||||
("cotisations", "0045_separation_membership_connection_p3"),
|
||||
("cotisations", "0046_article_need_membership"),
|
||||
("cotisations", "0047_article_need_membership_init"),
|
||||
("cotisations", "0048_auto_20201017_0018"),
|
||||
("cotisations", "0049_auto_20201102_2305"),
|
||||
("cotisations", "0050_auto_20201102_2342"),
|
||||
("cotisations", "0051_auto_20201228_1636"),
|
||||
("machines", "0001_initial"),
|
||||
("machines", "0002_auto_20160703_1444"),
|
||||
("machines", "0003_auto_20160703_1450"),
|
||||
("machines", "0004_auto_20160703_1451"),
|
||||
("machines", "0005_auto_20160703_1523"),
|
||||
("machines", "0006_auto_20160703_1813"),
|
||||
("machines", "0007_auto_20160703_1816"),
|
||||
("machines", "0008_remove_interface_ipv6"),
|
||||
("machines", "0009_auto_20160703_2358"),
|
||||
("machines", "0010_auto_20160704_0104"),
|
||||
("machines", "0011_auto_20160704_0105"),
|
||||
("machines", "0012_auto_20160704_0118"),
|
||||
("machines", "0013_auto_20160705_1014"),
|
||||
("machines", "0014_auto_20160706_1220"),
|
||||
("machines", "0015_auto_20160707_0105"),
|
||||
("machines", "0016_auto_20160708_1633"),
|
||||
("machines", "0017_auto_20160708_1645"),
|
||||
("machines", "0018_auto_20160708_1813"),
|
||||
("machines", "0019_auto_20160718_1141"),
|
||||
("machines", "0020_auto_20160718_1849"),
|
||||
("machines", "0021_auto_20161006_1943"),
|
||||
("machines", "0022_auto_20161011_1829"),
|
||||
("machines", "0023_iplist_ip_type"),
|
||||
("machines", "0024_machinetype_need_infra"),
|
||||
("machines", "0025_auto_20161023_0038"),
|
||||
("machines", "0026_auto_20161026_1348"),
|
||||
("machines", "0027_alias"),
|
||||
("machines", "0028_iptype_domaine_ip"),
|
||||
("machines", "0029_iptype_domaine_range"),
|
||||
("machines", "0030_auto_20161118_1730"),
|
||||
("machines", "0031_auto_20161119_1709"),
|
||||
("machines", "0032_auto_20161119_1850"),
|
||||
("machines", "0033_extension_need_infra"),
|
||||
("machines", "0034_iplist_need_infra"),
|
||||
("machines", "0035_auto_20161224_1201"),
|
||||
("machines", "0036_auto_20161224_1204"),
|
||||
("machines", "0037_domain_cname"),
|
||||
("machines", "0038_auto_20161224_1721"),
|
||||
("machines", "0039_auto_20161224_1732"),
|
||||
("machines", "0040_remove_interface_dns"),
|
||||
("machines", "0041_remove_ns_interface"),
|
||||
("machines", "0042_ns_ns"),
|
||||
("machines", "0043_auto_20170721_0350"),
|
||||
("machines", "0044_auto_20170808_0233"),
|
||||
("machines", "0045_auto_20170808_0348"),
|
||||
("machines", "0046_auto_20170808_1423"),
|
||||
("machines", "0047_auto_20170809_0606"),
|
||||
("machines", "0048_auto_20170823_2315"),
|
||||
("machines", "0049_vlan"),
|
||||
("machines", "0050_auto_20170826_0022"),
|
||||
("machines", "0051_iptype_vlan"),
|
||||
("machines", "0052_auto_20170828_2322"),
|
||||
("machines", "0053_text"),
|
||||
("machines", "0054_text_zone"),
|
||||
("machines", "0055_nas"),
|
||||
("machines", "0056_nas_port_access_mode"),
|
||||
("machines", "0057_nas_autocapture_mac"),
|
||||
("machines", "0058_auto_20171002_0350"),
|
||||
("machines", "0059_iptype_prefix_v6"),
|
||||
("machines", "0060_iptype_ouverture_ports"),
|
||||
("machines", "0061_auto_20171015_2033"),
|
||||
("machines", "0062_extension_origin_v6"),
|
||||
("machines", "0063_auto_20171020_0040"),
|
||||
("machines", "0064_auto_20171115_0253"),
|
||||
("machines", "0065_auto_20171115_1514"),
|
||||
("machines", "0066_srv"),
|
||||
("machines", "0067_auto_20171116_0152"),
|
||||
("machines", "0068_auto_20171116_0252"),
|
||||
("machines", "0069_auto_20171116_0822"),
|
||||
("machines", "0070_auto_20171231_1947"),
|
||||
("machines", "0071_auto_20171231_2100"),
|
||||
("machines", "0072_auto_20180108_1822"),
|
||||
("machines", "0073_auto_20180128_2203"),
|
||||
("machines", "0074_auto_20180129_0352"),
|
||||
("machines", "0075_auto_20180130_0052"),
|
||||
("machines", "0076_auto_20180130_1623"),
|
||||
("machines", "0077_auto_20180409_2243"),
|
||||
("machines", "0078_auto_20180415_1252"),
|
||||
("machines", "0079_auto_20180416_0107"),
|
||||
("machines", "0080_auto_20180502_2334"),
|
||||
("machines", "0081_auto_20180521_1413"),
|
||||
("machines", "0082_auto_20180525_2209"),
|
||||
("machines", "0083_remove_duplicate_rights"),
|
||||
("machines", "0084_dname"),
|
||||
("machines", "0085_sshfingerprint"),
|
||||
("machines", "0086_role"),
|
||||
("machines", "0087_dnssec"),
|
||||
("machines", "0088_iptype_prefix_v6_length"),
|
||||
("machines", "0089_auto_20180805_1148"),
|
||||
("machines", "0090_auto_20180805_1459"),
|
||||
("machines", "0091_auto_20180806_2310"),
|
||||
("machines", "0092_auto_20180807_0926"),
|
||||
("machines", "0093_auto_20180807_1115"),
|
||||
("machines", "0094_auto_20180815_1918"),
|
||||
("machines", "0095_auto_20180919_2225"),
|
||||
("machines", "0096_auto_20181013_1417"),
|
||||
("machines", "0097_extension_dnssec"),
|
||||
("machines", "0098_auto_20190102_1745"),
|
||||
("machines", "0099_role_recursive_dns"),
|
||||
("machines", "0100_auto_20190102_1753"),
|
||||
("machines", "0101_auto_20190108_1623"),
|
||||
("machines", "0102_auto_20190303_1611"),
|
||||
("machines", "0103_auto_20191002_2222"),
|
||||
("machines", "0104_auto_20191002_2231"),
|
||||
("machines", "0105_dname_ttl"),
|
||||
("machines", "0106_auto_20191120_0159"),
|
||||
("machines", "0107_fix_lowercase_domain"),
|
||||
("machines", "0108_ipv6list_active"),
|
||||
("preferences", "0001_initial"),
|
||||
("preferences", "0002_auto_20170625_1923"),
|
||||
("preferences", "0003_optionaluser_solde_negatif"),
|
||||
("preferences", "0004_assooption_services"),
|
||||
("preferences", "0005_auto_20170824_0139"),
|
||||
("preferences", "0006_auto_20170824_0143"),
|
||||
("preferences", "0007_auto_20170824_2056"),
|
||||
("preferences", "0008_auto_20170824_2122"),
|
||||
("preferences", "0009_assooption_utilisateur_asso"),
|
||||
("preferences", "0010_auto_20170825_0459"),
|
||||
("preferences", "0011_auto_20170825_2307"),
|
||||
("preferences", "0012_generaloption_req_expire_hrs"),
|
||||
("preferences", "0013_generaloption_site_name"),
|
||||
("preferences", "0014_generaloption_email_from"),
|
||||
("preferences", "0015_optionaltopologie_radius_general_policy"),
|
||||
("preferences", "0016_auto_20170902_1520"),
|
||||
("preferences", "0017_mailmessageoption"),
|
||||
("preferences", "0018_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0019_remove_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0020_optionalmachine_ipv6"),
|
||||
("preferences", "0021_auto_20171015_1741"),
|
||||
("preferences", "0022_auto_20171015_1758"),
|
||||
("preferences", "0023_auto_20171015_2033"),
|
||||
("preferences", "0024_optionaluser_all_can_create"),
|
||||
("preferences", "0025_auto_20171231_2142"),
|
||||
("preferences", "0025_generaloption_general_message"),
|
||||
("preferences", "0026_auto_20171216_0401"),
|
||||
("preferences", "0027_merge_20180106_2019"),
|
||||
("preferences", "0028_assooption_description"),
|
||||
("preferences", "0028_auto_20180111_1129"),
|
||||
("preferences", "0028_auto_20180128_2203"),
|
||||
("preferences", "0029_auto_20180111_1134"),
|
||||
("preferences", "0029_auto_20180318_0213"),
|
||||
("preferences", "0029_auto_20180318_1005"),
|
||||
("preferences", "0030_auto_20180111_2346"),
|
||||
("preferences", "0030_merge_20180320_1419"),
|
||||
("preferences", "0031_auto_20180323_0218"),
|
||||
("preferences", "0031_optionaluser_self_adhesion"),
|
||||
("preferences", "0032_optionaluser_min_online_payment"),
|
||||
("preferences", "0032_optionaluser_shell_default"),
|
||||
("preferences", "0033_accueiloption"),
|
||||
("preferences", "0033_generaloption_gtu_sum_up"),
|
||||
("preferences", "0034_auto_20180114_2025"),
|
||||
("preferences", "0034_auto_20180416_1120"),
|
||||
("preferences", "0035_auto_20180114_2132"),
|
||||
("preferences", "0035_optionaluser_allow_self_subscription"),
|
||||
("preferences", "0036_auto_20180114_2141"),
|
||||
("preferences", "0037_auto_20180114_2156"),
|
||||
("preferences", "0038_auto_20180114_2209"),
|
||||
("preferences", "0039_auto_20180115_0003"),
|
||||
("preferences", "0040_auto_20180129_1745"),
|
||||
("preferences", "0041_merge_20180130_0052"),
|
||||
("preferences", "0042_auto_20180222_1743"),
|
||||
("preferences", "0043_optionalmachine_create_machine"),
|
||||
("preferences", "0044_remove_payment_pass"),
|
||||
("preferences", "0045_remove_unused_payment_fields"),
|
||||
("preferences", "0046_optionaluser_mail_extension"),
|
||||
("preferences", "0047_mailcontact"),
|
||||
("preferences", "0048_auto_20180811_1515"),
|
||||
("preferences", "0049_optionaluser_self_change_shell"),
|
||||
("preferences", "0050_auto_20180818_1329"),
|
||||
("preferences", "0051_auto_20180919_2225"),
|
||||
("preferences", "0052_optionaluser_delete_notyetactive"),
|
||||
("preferences", "0053_optionaluser_self_change_room"),
|
||||
("preferences", "0055_generaloption_main_site_url"),
|
||||
("preferences", "0056_1_radiusoption"),
|
||||
("preferences", "0056_2_radiusoption"),
|
||||
("preferences", "0056_3_radiusoption"),
|
||||
("preferences", "0056_4_radiusoption"),
|
||||
("preferences", "0057_optionaluser_all_users_active"),
|
||||
("preferences", "0058_auto_20190108_1650"),
|
||||
("preferences", "0059_auto_20190120_1739"),
|
||||
("preferences", "0060_auto_20190712_1821"),
|
||||
("preferences", "0061_optionaluser_allow_archived_connexion"),
|
||||
("preferences", "0062_auto_20190910_1909"),
|
||||
("preferences", "0063_mandate"),
|
||||
("preferences", "0064_auto_20191008_1335"),
|
||||
("preferences", "0065_auto_20191010_1227"),
|
||||
("preferences", "0066_optionalmachine_default_dns_ttl"),
|
||||
("preferences", "0067_auto_20191120_0159"),
|
||||
("preferences", "0068_optionaluser_allow_set_password_during_user_creation"),
|
||||
("preferences", "0069_optionaluser_disable_emailnotyetconfirmed"),
|
||||
("preferences", "0070_auto_20200419_0225"),
|
||||
("preferences", "0071_optionaluser_self_change_pseudo"),
|
||||
("topologie", "0001_initial"),
|
||||
("topologie", "0002_auto_20160703_1118"),
|
||||
("topologie", "0003_room"),
|
||||
("topologie", "0004_auto_20160703_1122"),
|
||||
("topologie", "0005_auto_20160703_1123"),
|
||||
("topologie", "0006_auto_20160703_1129"),
|
||||
("topologie", "0007_auto_20160703_1148"),
|
||||
("topologie", "0008_port_room"),
|
||||
("topologie", "0009_auto_20160703_1200"),
|
||||
("topologie", "0010_auto_20160704_2148"),
|
||||
("topologie", "0011_auto_20160704_2153"),
|
||||
("topologie", "0012_port_machine_interface"),
|
||||
("topologie", "0013_port_related"),
|
||||
("topologie", "0014_auto_20160706_1238"),
|
||||
("topologie", "0015_auto_20160706_1452"),
|
||||
("topologie", "0016_auto_20160706_1531"),
|
||||
("topologie", "0017_auto_20160718_1141"),
|
||||
("topologie", "0018_room_details"),
|
||||
("topologie", "0019_auto_20161026_1348"),
|
||||
("topologie", "0020_auto_20161119_0033"),
|
||||
("topologie", "0021_port_radius"),
|
||||
("topologie", "0022_auto_20161211_1622"),
|
||||
("topologie", "0023_auto_20170817_1654"),
|
||||
("topologie", "0023_auto_20170826_1530"),
|
||||
("topologie", "0024_auto_20170818_1021"),
|
||||
("topologie", "0024_auto_20170826_1800"),
|
||||
("topologie", "0025_merge_20170902_1242"),
|
||||
("topologie", "0026_auto_20170902_1245"),
|
||||
("topologie", "0027_auto_20170905_1442"),
|
||||
("topologie", "0028_auto_20170913_1503"),
|
||||
("topologie", "0029_auto_20171002_0334"),
|
||||
("topologie", "0030_auto_20171004_0235"),
|
||||
("topologie", "0031_auto_20171015_2033"),
|
||||
("topologie", "0032_auto_20171026_0338"),
|
||||
("topologie", "0033_auto_20171231_1743"),
|
||||
("topologie", "0034_borne"),
|
||||
("topologie", "0035_auto_20180324_0023"),
|
||||
("topologie", "0036_transferborne"),
|
||||
("topologie", "0037_auto_20180325_0127"),
|
||||
("topologie", "0038_transfersw"),
|
||||
("topologie", "0039_port_new_switch"),
|
||||
("topologie", "0040_transferports"),
|
||||
("topologie", "0041_transferportsw"),
|
||||
("topologie", "0042_transferswitch"),
|
||||
("topologie", "0043_renamenewswitch"),
|
||||
("topologie", "0044_auto_20180326_0002"),
|
||||
("topologie", "0045_auto_20180326_0123"),
|
||||
("topologie", "0046_auto_20180326_0129"),
|
||||
("topologie", "0047_ap_machine"),
|
||||
("topologie", "0048_ap_machine"),
|
||||
("topologie", "0049_switchs_machine"),
|
||||
("topologie", "0050_port_new_switch"),
|
||||
("topologie", "0051_switchs_machine"),
|
||||
("topologie", "0052_transferports"),
|
||||
("topologie", "0053_finalsw"),
|
||||
("topologie", "0054_auto_20180326_1742"),
|
||||
("topologie", "0055_auto_20180329_0431"),
|
||||
("topologie", "0056_building_switchbay"),
|
||||
("topologie", "0057_auto_20180408_0316"),
|
||||
("topologie", "0058_remove_switch_location"),
|
||||
("topologie", "0059_auto_20180415_2249"),
|
||||
("topologie", "0060_server"),
|
||||
("topologie", "0061_portprofile"),
|
||||
("topologie", "0062_auto_20180815_1918"),
|
||||
("topologie", "0063_auto_20180919_2225"),
|
||||
("topologie", "0064_switch_automatic_provision"),
|
||||
("topologie", "0065_auto_20180927_1836"),
|
||||
("topologie", "0066_modelswitch_commercial_name"),
|
||||
("topologie", "0067_auto_20181230_1819"),
|
||||
("topologie", "0068_auto_20190102_1758"),
|
||||
("topologie", "0069_auto_20190108_1439"),
|
||||
("topologie", "0070_auto_20190218_1743"),
|
||||
("topologie", "0071_auto_20190218_1936"),
|
||||
("topologie", "0072_auto_20190720_2318"),
|
||||
("topologie", "0073_auto_20191120_0159"),
|
||||
("topologie", "0074_auto_20200419_1640"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='assooption',
|
||||
name='utilisateur_asso',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cotisationsoption',
|
||||
name='invoice_template',
|
||||
field=models.OneToOneField(default=preferences.models.default_invoice, on_delete=django.db.models.deletion.PROTECT, related_name='invoice_template', to='preferences.DocumentTemplate', verbose_name='template for invoices'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cotisationsoption',
|
||||
name='voucher_template',
|
||||
field=models.OneToOneField(default=preferences.models.default_voucher, on_delete=django.db.models.deletion.PROTECT, related_name='voucher_template', to='preferences.DocumentTemplate', verbose_name='template for subscription vouchers'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='mandate',
|
||||
name='president',
|
||||
field=models.ForeignKey(blank=True, help_text='Displayed on subscription vouchers.', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='president of the association'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='optionaltopologie',
|
||||
name='switchs_ip_type',
|
||||
field=models.OneToOneField(blank=True, help_text='IP range for the management of switches.', null=True, on_delete=django.db.models.deletion.PROTECT, to='machines.IpType'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='optionaluser',
|
||||
name='shell_default',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='users.ListShell'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='banned_attributes',
|
||||
field=models.ManyToManyField(blank=True, help_text='Answer attributes for banned users.', related_name='banned_attribute', to='preferences.RadiusAttribute', verbose_name='banned users attributes'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='banned_vlan',
|
||||
field=models.ForeignKey(blank=True, help_text='VLAN for banned users if not rejected.', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='banned_vlan', to='machines.Vlan', verbose_name='banned users VLAN'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='non_member_attributes',
|
||||
field=models.ManyToManyField(blank=True, help_text='Answer attributes for non members.', related_name='non_member_attribute', to='preferences.RadiusAttribute', verbose_name='non members attributes'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='non_member_vlan',
|
||||
field=models.ForeignKey(blank=True, help_text='VLAN for non members if not rejected.', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='non_member_vlan', to='machines.Vlan', verbose_name='non members VLAN'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='ok_attributes',
|
||||
field=models.ManyToManyField(blank=True, help_text='Answer attributes for accepted users.', related_name='ok_attribute', to='preferences.RadiusAttribute', verbose_name='accepted users attributes'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='unknown_machine_attributes',
|
||||
field=models.ManyToManyField(blank=True, help_text='Answer attributes for unknown machines.', related_name='unknown_machine_attribute', to='preferences.RadiusAttribute', verbose_name='unknown machines attributes'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='unknown_machine_vlan',
|
||||
field=models.ForeignKey(blank=True, help_text='VLAN for unknown machines if not rejected.', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='unknown_machine_vlan', to='machines.Vlan', verbose_name='unknown machines VLAN'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='unknown_port_attributes',
|
||||
field=models.ManyToManyField(blank=True, help_text='Answer attributes for unknown ports.', related_name='unknown_port_attribute', to='preferences.RadiusAttribute', verbose_name='unknown ports attributes'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='unknown_port_vlan',
|
||||
field=models.ForeignKey(blank=True, help_text='VLAN for unknown ports if not rejected.', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='unknown_port_vlan', to='machines.Vlan', verbose_name='unknown ports VLAN'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='unknown_room_attributes',
|
||||
field=models.ManyToManyField(blank=True, help_text='Answer attributes for unknown rooms.', related_name='unknown_room_attribute', to='preferences.RadiusAttribute', verbose_name='unknown rooms attributes'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='unknown_room_vlan',
|
||||
field=models.ForeignKey(blank=True, help_text='VLAN for unknown rooms if not rejected.', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='unknown_room_vlan', to='machines.Vlan', verbose_name='unknown rooms VLAN'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='radiusoption',
|
||||
name='vlan_decision_ok',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vlan_ok_option', to='machines.Vlan'),
|
||||
),
|
||||
]
|
|
@ -79,12 +79,12 @@ def context_optionnal_apps(request):
|
|||
optionnal_templates_navbar_user_list = [
|
||||
app.views.navbar_user()
|
||||
for app in optionnal_apps
|
||||
if hasattr(app.views, "navbar_user")
|
||||
if hasattr(app, "views") and hasattr(app.views, "navbar_user")
|
||||
]
|
||||
optionnal_templates_navbar_logout_list = [
|
||||
app.views.navbar_logout()
|
||||
for app in optionnal_apps
|
||||
if hasattr(app.views, "navbar_logout")
|
||||
if hasattr(app, "views") and hasattr(app.views, "navbar_logout")
|
||||
]
|
||||
return {
|
||||
"optionnal_templates_navbar_user_list": optionnal_templates_navbar_user_list,
|
||||
|
|
|
@ -148,6 +148,7 @@ a > i.fa {
|
|||
|
||||
.table-responsive {
|
||||
overflow: visible;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
|
||||
/* Make modal wider on wide screens */
|
||||
|
|
|
@ -82,18 +82,19 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
|
||||
<div class="container-fluid text-center content">
|
||||
<div class="row content">
|
||||
<div class="col-sm-2 sidenav-left pt4">
|
||||
{% include 'sidebar.html' %}
|
||||
|
||||
{% block sidebar %}
|
||||
{% endblock %}
|
||||
<div class="col-lg-2 pt4">
|
||||
</div>
|
||||
<div class="col-sm-offset-2 col-sm-10 col-lg-8 text-left pt4">
|
||||
<div class="col-sm-10 col-lg-8 text-left pt4">
|
||||
{# Display django.contrib.messages as Bootstrap alerts #}
|
||||
{% bootstrap_messages %}
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
<div class="col-lg-2 pt4">
|
||||
|
||||
<div class="col-sm-2 sidenav-right pt4">
|
||||
{% include 'sidebar.html' %}
|
||||
|
||||
{% block sidebar %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
81
tickets/migrations/0001_squashed_0007.py
Normal file
81
tickets/migrations/0001_squashed_0007.py
Normal file
|
@ -0,0 +1,81 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.29 on 2020-12-30 16:53
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import re2o.mixins
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
replaces = [
|
||||
("tickets", "0001_initial"),
|
||||
("tickets", "0002_auto_20191120_0159"),
|
||||
("tickets", "0003_auto_20200422_1839"),
|
||||
("tickets", "0004_auto_20200422_2127"),
|
||||
("tickets", "0005_auto_20200422_2309"),
|
||||
("tickets", "0006_auto_20200423_0202"),
|
||||
("tickets", "0007_ticket_language"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CommentTicket',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('date', models.DateTimeField(auto_now_add=True)),
|
||||
('comment', models.TextField(max_length=4095)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ticket_comment', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'ticket',
|
||||
'verbose_name_plural': 'tickets',
|
||||
'permissions': (('view_commentticket', 'Can view a ticket object'),),
|
||||
},
|
||||
bases=(re2o.mixins.AclMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Ticket',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(help_text='Title of the ticket.', max_length=255)),
|
||||
('description', models.TextField(max_length=3000)),
|
||||
('date', models.DateTimeField(auto_now_add=True)),
|
||||
('email', models.EmailField(help_text='An email address to get back to you.', max_length=100, null=True)),
|
||||
('solved', models.BooleanField(default=False)),
|
||||
('language', models.CharField(default='en', help_text='Language of the ticket.', max_length=16)),
|
||||
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='tickets', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'ticket',
|
||||
'verbose_name_plural': 'tickets',
|
||||
'permissions': (('view_ticket', 'Can view a ticket object'),),
|
||||
},
|
||||
bases=(re2o.mixins.AclMixin, models.Model),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TicketOption',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('publish_address', models.EmailField(help_text='Email address to publish the new tickets (leave empty for no publication).', max_length=1000, null=True)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'tickets options',
|
||||
'permissions': (('view_ticketoption', 'Can view tickets options'),),
|
||||
},
|
||||
bases=(re2o.mixins.AclMixin, models.Model),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='commentticket',
|
||||
name='parent_ticket',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tickets.Ticket'),
|
||||
),
|
||||
]
|
954
topologie/migrations/0001_model_creation.py
Normal file
954
topologie/migrations/0001_model_creation.py
Normal file
|
@ -0,0 +1,954 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
import django.contrib.auth.models
|
||||
import django.core.validators
|
||||
import re2o.mixins
|
||||
import re2o.field_permissions
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
initial = True
|
||||
dependencies = [("machines", "0001_model_creation")]
|
||||
replaces = [
|
||||
("users", "0001_initial"),
|
||||
("users", "0002_auto_20160630_2301"),
|
||||
("users", "0003_listrights_rights"),
|
||||
("users", "0004_auto_20160701_2312"),
|
||||
("users", "0005_auto_20160702_0006"),
|
||||
("users", "0006_ban"),
|
||||
("users", "0007_auto_20160702_2322"),
|
||||
("users", "0008_user_registered"),
|
||||
("users", "0009_user_room"),
|
||||
("users", "0010_auto_20160703_1226"),
|
||||
("users", "0011_auto_20160703_1227"),
|
||||
("users", "0012_auto_20160703_1230"),
|
||||
("users", "0013_auto_20160704_1547"),
|
||||
("users", "0014_auto_20160704_1548"),
|
||||
("users", "0015_whitelist"),
|
||||
("users", "0016_auto_20160706_1220"),
|
||||
("users", "0017_auto_20160707_0105"),
|
||||
("users", "0018_auto_20160707_0115"),
|
||||
("users", "0019_auto_20160708_1633"),
|
||||
("users", "0020_request"),
|
||||
("users", "0021_ldapuser"),
|
||||
("users", "0022_ldapuser_sambasid"),
|
||||
("users", "0023_auto_20160724_1908"),
|
||||
("users", "0024_remove_ldapuser_mac_list"),
|
||||
("users", "0025_listshell"),
|
||||
("users", "0026_user_shell"),
|
||||
("users", "0027_auto_20160726_0216"),
|
||||
("users", "0028_auto_20160726_0227"),
|
||||
("users", "0029_auto_20160726_0229"),
|
||||
("users", "0030_auto_20160726_0357"),
|
||||
("users", "0031_auto_20160726_0359"),
|
||||
("users", "0032_auto_20160727_2122"),
|
||||
("users", "0033_remove_ldapuser_loginshell"),
|
||||
("users", "0034_auto_20161018_0037"),
|
||||
("users", "0035_auto_20161018_0046"),
|
||||
("users", "0036_auto_20161022_2146"),
|
||||
("users", "0037_auto_20161028_1906"),
|
||||
("users", "0038_auto_20161031_0258"),
|
||||
("users", "0039_auto_20161119_0033"),
|
||||
("users", "0040_auto_20161119_1709"),
|
||||
("users", "0041_listright_details"),
|
||||
("users", "0042_auto_20161126_2028"),
|
||||
("users", "0043_auto_20161224_1156"),
|
||||
("users", "0043_ban_state"),
|
||||
("users", "0044_user_ssh_public_key"),
|
||||
("users", "0045_merge"),
|
||||
("users", "0046_auto_20170617_1433"),
|
||||
("users", "0047_auto_20170618_0156"),
|
||||
("users", "0048_auto_20170618_0210"),
|
||||
("users", "0049_auto_20170618_1424"),
|
||||
("users", "0050_serviceuser_comment"),
|
||||
("users", "0051_user_telephone"),
|
||||
("users", "0052_ldapuser_shadowexpire"),
|
||||
("users", "0053_auto_20170626_2105"),
|
||||
("users", "0054_auto_20170626_2219"),
|
||||
("users", "0055_auto_20171003_0556"),
|
||||
("users", "0056_auto_20171015_2033"),
|
||||
("users", "0057_auto_20171023_0301"),
|
||||
("users", "0058_auto_20171025_0154"),
|
||||
("users", "0059_auto_20171025_1854"),
|
||||
("users", "0060_auto_20171120_0317"),
|
||||
("users", "0061_auto_20171230_2033"),
|
||||
("users", "0062_auto_20171231_0056"),
|
||||
("users", "0063_auto_20171231_0140"),
|
||||
("users", "0064_auto_20171231_0150"),
|
||||
("users", "0065_auto_20171231_2053"),
|
||||
("users", "0066_grouppermissions"),
|
||||
("users", "0067_serveurpermission"),
|
||||
("users", "0068_auto_20180107_2245"),
|
||||
("users", "0069_club_mailing"),
|
||||
("users", "0070_auto_20180324_1906"),
|
||||
("users", "0071_auto_20180415_1252"),
|
||||
("users", "0072_auto_20180426_2021"),
|
||||
("users", "0073_auto_20180629_1614"),
|
||||
("users", "0074_auto_20180810_2104"),
|
||||
("users", "0074_auto_20180814_1059"),
|
||||
("users", "0075_merge_20180815_2202"),
|
||||
("users", "0076_auto_20180818_1321"),
|
||||
("users", "0077_auto_20180824_1750"),
|
||||
("users", "0078_auto_20181011_1405"),
|
||||
("users", "0079_auto_20181228_2039"),
|
||||
("users", "0080_auto_20190108_1726"),
|
||||
("users", "0081_auto_20190317_0302"),
|
||||
("users", "0082_auto_20190908_1338"),
|
||||
("users", "0083_user_shortcuts_enabled"),
|
||||
("users", "0084_auto_20191120_0159"),
|
||||
("users", "0085_user_email_state"),
|
||||
("users", "0086_user_email_change_date"),
|
||||
("users", "0087_request_email"),
|
||||
("users", "0088_auto_20200417_2312"),
|
||||
("users", "0089_auto_20200418_0112"),
|
||||
("users", "0090_auto_20200421_1825"),
|
||||
("users", "0091_auto_20200423_1256"),
|
||||
("users", "0092_auto_20200502_0057"),
|
||||
("users", "0093_user_profile_image"),
|
||||
("users", "0094_remove_user_profile_image"),
|
||||
("users", "0095_user_theme"),
|
||||
("users", "0096_auto_20210110_1811"),
|
||||
("cotisations", "0001_initial"),
|
||||
("cotisations", "0002_remove_facture_article"),
|
||||
("cotisations", "0003_auto_20160702_1448"),
|
||||
("cotisations", "0004_auto_20160702_1528"),
|
||||
("cotisations", "0005_auto_20160702_1532"),
|
||||
("cotisations", "0006_auto_20160702_1534"),
|
||||
("cotisations", "0007_auto_20160702_1543"),
|
||||
("cotisations", "0008_auto_20160702_1614"),
|
||||
("cotisations", "0009_remove_cotisation_user"),
|
||||
("cotisations", "0010_auto_20160702_1840"),
|
||||
("cotisations", "0011_auto_20160702_1911"),
|
||||
("cotisations", "0012_auto_20160704_0118"),
|
||||
("cotisations", "0013_auto_20160711_2240"),
|
||||
("cotisations", "0014_auto_20160712_0245"),
|
||||
("cotisations", "0015_auto_20160714_2142"),
|
||||
("cotisations", "0016_auto_20160715_0110"),
|
||||
("cotisations", "0017_auto_20170718_2329"),
|
||||
("cotisations", "0018_paiement_type_paiement"),
|
||||
("cotisations", "0019_auto_20170819_0055"),
|
||||
("cotisations", "0020_auto_20170819_0057"),
|
||||
("cotisations", "0021_auto_20170819_0104"),
|
||||
("cotisations", "0022_auto_20170824_0128"),
|
||||
("cotisations", "0023_auto_20170902_1303"),
|
||||
("cotisations", "0024_auto_20171015_2033"),
|
||||
("cotisations", "0025_article_type_user"),
|
||||
("cotisations", "0026_auto_20171028_0126"),
|
||||
("cotisations", "0027_auto_20171029_1156"),
|
||||
("cotisations", "0028_auto_20171231_0007"),
|
||||
("cotisations", "0029_auto_20180414_2056"),
|
||||
("cotisations", "0030_custom_payment"),
|
||||
("cotisations", "0031_comnpaypayment_production"),
|
||||
("cotisations", "0032_custom_invoice"),
|
||||
("cotisations", "0033_auto_20180818_1319"),
|
||||
("cotisations", "0034_auto_20180831_1532"),
|
||||
("cotisations", "0035_notepayment"),
|
||||
("cotisations", "0036_custominvoice_remark"),
|
||||
("cotisations", "0037_costestimate"),
|
||||
("cotisations", "0038_auto_20181231_1657"),
|
||||
("cotisations", "0039_freepayment"),
|
||||
("cotisations", "0040_auto_20191002_2335"),
|
||||
("cotisations", "0041_auto_20191103_2131"),
|
||||
("cotisations", "0042_auto_20191120_0159"),
|
||||
("cotisations", "0043_separation_membership_connection_p1"),
|
||||
("cotisations", "0044_separation_membership_connection_p2"),
|
||||
("cotisations", "0045_separation_membership_connection_p3"),
|
||||
("cotisations", "0046_article_need_membership"),
|
||||
("cotisations", "0047_article_need_membership_init"),
|
||||
("cotisations", "0048_auto_20201017_0018"),
|
||||
("cotisations", "0049_auto_20201102_2305"),
|
||||
("cotisations", "0050_auto_20201102_2342"),
|
||||
("cotisations", "0051_auto_20201228_1636"),
|
||||
("machines", "0001_initial"),
|
||||
("machines", "0002_auto_20160703_1444"),
|
||||
("machines", "0003_auto_20160703_1450"),
|
||||
("machines", "0004_auto_20160703_1451"),
|
||||
("machines", "0005_auto_20160703_1523"),
|
||||
("machines", "0006_auto_20160703_1813"),
|
||||
("machines", "0007_auto_20160703_1816"),
|
||||
("machines", "0008_remove_interface_ipv6"),
|
||||
("machines", "0009_auto_20160703_2358"),
|
||||
("machines", "0010_auto_20160704_0104"),
|
||||
("machines", "0011_auto_20160704_0105"),
|
||||
("machines", "0012_auto_20160704_0118"),
|
||||
("machines", "0013_auto_20160705_1014"),
|
||||
("machines", "0014_auto_20160706_1220"),
|
||||
("machines", "0015_auto_20160707_0105"),
|
||||
("machines", "0016_auto_20160708_1633"),
|
||||
("machines", "0017_auto_20160708_1645"),
|
||||
("machines", "0018_auto_20160708_1813"),
|
||||
("machines", "0019_auto_20160718_1141"),
|
||||
("machines", "0020_auto_20160718_1849"),
|
||||
("machines", "0021_auto_20161006_1943"),
|
||||
("machines", "0022_auto_20161011_1829"),
|
||||
("machines", "0023_iplist_ip_type"),
|
||||
("machines", "0024_machinetype_need_infra"),
|
||||
("machines", "0025_auto_20161023_0038"),
|
||||
("machines", "0026_auto_20161026_1348"),
|
||||
("machines", "0027_alias"),
|
||||
("machines", "0028_iptype_domaine_ip"),
|
||||
("machines", "0029_iptype_domaine_range"),
|
||||
("machines", "0030_auto_20161118_1730"),
|
||||
("machines", "0031_auto_20161119_1709"),
|
||||
("machines", "0032_auto_20161119_1850"),
|
||||
("machines", "0033_extension_need_infra"),
|
||||
("machines", "0034_iplist_need_infra"),
|
||||
("machines", "0035_auto_20161224_1201"),
|
||||
("machines", "0036_auto_20161224_1204"),
|
||||
("machines", "0037_domain_cname"),
|
||||
("machines", "0038_auto_20161224_1721"),
|
||||
("machines", "0039_auto_20161224_1732"),
|
||||
("machines", "0040_remove_interface_dns"),
|
||||
("machines", "0041_remove_ns_interface"),
|
||||
("machines", "0042_ns_ns"),
|
||||
("machines", "0043_auto_20170721_0350"),
|
||||
("machines", "0044_auto_20170808_0233"),
|
||||
("machines", "0045_auto_20170808_0348"),
|
||||
("machines", "0046_auto_20170808_1423"),
|
||||
("machines", "0047_auto_20170809_0606"),
|
||||
("machines", "0048_auto_20170823_2315"),
|
||||
("machines", "0049_vlan"),
|
||||
("machines", "0050_auto_20170826_0022"),
|
||||
("machines", "0051_iptype_vlan"),
|
||||
("machines", "0052_auto_20170828_2322"),
|
||||
("machines", "0053_text"),
|
||||
("machines", "0054_text_zone"),
|
||||
("machines", "0055_nas"),
|
||||
("machines", "0056_nas_port_access_mode"),
|
||||
("machines", "0057_nas_autocapture_mac"),
|
||||
("machines", "0058_auto_20171002_0350"),
|
||||
("machines", "0059_iptype_prefix_v6"),
|
||||
("machines", "0060_iptype_ouverture_ports"),
|
||||
("machines", "0061_auto_20171015_2033"),
|
||||
("machines", "0062_extension_origin_v6"),
|
||||
("machines", "0063_auto_20171020_0040"),
|
||||
("machines", "0064_auto_20171115_0253"),
|
||||
("machines", "0065_auto_20171115_1514"),
|
||||
("machines", "0066_srv"),
|
||||
("machines", "0067_auto_20171116_0152"),
|
||||
("machines", "0068_auto_20171116_0252"),
|
||||
("machines", "0069_auto_20171116_0822"),
|
||||
("machines", "0070_auto_20171231_1947"),
|
||||
("machines", "0071_auto_20171231_2100"),
|
||||
("machines", "0072_auto_20180108_1822"),
|
||||
("machines", "0073_auto_20180128_2203"),
|
||||
("machines", "0074_auto_20180129_0352"),
|
||||
("machines", "0075_auto_20180130_0052"),
|
||||
("machines", "0076_auto_20180130_1623"),
|
||||
("machines", "0077_auto_20180409_2243"),
|
||||
("machines", "0078_auto_20180415_1252"),
|
||||
("machines", "0079_auto_20180416_0107"),
|
||||
("machines", "0080_auto_20180502_2334"),
|
||||
("machines", "0081_auto_20180521_1413"),
|
||||
("machines", "0082_auto_20180525_2209"),
|
||||
("machines", "0083_remove_duplicate_rights"),
|
||||
("machines", "0084_dname"),
|
||||
("machines", "0085_sshfingerprint"),
|
||||
("machines", "0086_role"),
|
||||
("machines", "0087_dnssec"),
|
||||
("machines", "0088_iptype_prefix_v6_length"),
|
||||
("machines", "0089_auto_20180805_1148"),
|
||||
("machines", "0090_auto_20180805_1459"),
|
||||
("machines", "0091_auto_20180806_2310"),
|
||||
("machines", "0092_auto_20180807_0926"),
|
||||
("machines", "0093_auto_20180807_1115"),
|
||||
("machines", "0094_auto_20180815_1918"),
|
||||
("machines", "0095_auto_20180919_2225"),
|
||||
("machines", "0096_auto_20181013_1417"),
|
||||
("machines", "0097_extension_dnssec"),
|
||||
("machines", "0098_auto_20190102_1745"),
|
||||
("machines", "0099_role_recursive_dns"),
|
||||
("machines", "0100_auto_20190102_1753"),
|
||||
("machines", "0101_auto_20190108_1623"),
|
||||
("machines", "0102_auto_20190303_1611"),
|
||||
("machines", "0103_auto_20191002_2222"),
|
||||
("machines", "0104_auto_20191002_2231"),
|
||||
("machines", "0105_dname_ttl"),
|
||||
("machines", "0106_auto_20191120_0159"),
|
||||
("machines", "0107_fix_lowercase_domain"),
|
||||
("machines", "0108_ipv6list_active"),
|
||||
("preferences", "0001_initial"),
|
||||
("preferences", "0002_auto_20170625_1923"),
|
||||
("preferences", "0003_optionaluser_solde_negatif"),
|
||||
("preferences", "0004_assooption_services"),
|
||||
("preferences", "0005_auto_20170824_0139"),
|
||||
("preferences", "0006_auto_20170824_0143"),
|
||||
("preferences", "0007_auto_20170824_2056"),
|
||||
("preferences", "0008_auto_20170824_2122"),
|
||||
("preferences", "0009_assooption_utilisateur_asso"),
|
||||
("preferences", "0010_auto_20170825_0459"),
|
||||
("preferences", "0011_auto_20170825_2307"),
|
||||
("preferences", "0012_generaloption_req_expire_hrs"),
|
||||
("preferences", "0013_generaloption_site_name"),
|
||||
("preferences", "0014_generaloption_email_from"),
|
||||
("preferences", "0015_optionaltopologie_radius_general_policy"),
|
||||
("preferences", "0016_auto_20170902_1520"),
|
||||
("preferences", "0017_mailmessageoption"),
|
||||
("preferences", "0018_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0019_remove_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0020_optionalmachine_ipv6"),
|
||||
("preferences", "0021_auto_20171015_1741"),
|
||||
("preferences", "0022_auto_20171015_1758"),
|
||||
("preferences", "0023_auto_20171015_2033"),
|
||||
("preferences", "0024_optionaluser_all_can_create"),
|
||||
("preferences", "0025_auto_20171231_2142"),
|
||||
("preferences", "0025_generaloption_general_message"),
|
||||
("preferences", "0026_auto_20171216_0401"),
|
||||
("preferences", "0027_merge_20180106_2019"),
|
||||
("preferences", "0028_assooption_description"),
|
||||
("preferences", "0028_auto_20180111_1129"),
|
||||
("preferences", "0028_auto_20180128_2203"),
|
||||
("preferences", "0029_auto_20180111_1134"),
|
||||
("preferences", "0029_auto_20180318_0213"),
|
||||
("preferences", "0029_auto_20180318_1005"),
|
||||
("preferences", "0030_auto_20180111_2346"),
|
||||
("preferences", "0030_merge_20180320_1419"),
|
||||
("preferences", "0031_auto_20180323_0218"),
|
||||
("preferences", "0031_optionaluser_self_adhesion"),
|
||||
("preferences", "0032_optionaluser_min_online_payment"),
|
||||
("preferences", "0032_optionaluser_shell_default"),
|
||||
("preferences", "0033_accueiloption"),
|
||||
("preferences", "0033_generaloption_gtu_sum_up"),
|
||||
("preferences", "0034_auto_20180114_2025"),
|
||||
("preferences", "0034_auto_20180416_1120"),
|
||||
("preferences", "0035_auto_20180114_2132"),
|
||||
("preferences", "0035_optionaluser_allow_self_subscription"),
|
||||
("preferences", "0036_auto_20180114_2141"),
|
||||
("preferences", "0037_auto_20180114_2156"),
|
||||
("preferences", "0038_auto_20180114_2209"),
|
||||
("preferences", "0039_auto_20180115_0003"),
|
||||
("preferences", "0040_auto_20180129_1745"),
|
||||
("preferences", "0041_merge_20180130_0052"),
|
||||
("preferences", "0042_auto_20180222_1743"),
|
||||
("preferences", "0043_optionalmachine_create_machine"),
|
||||
("preferences", "0044_remove_payment_pass"),
|
||||
("preferences", "0045_remove_unused_payment_fields"),
|
||||
("preferences", "0046_optionaluser_mail_extension"),
|
||||
("preferences", "0047_mailcontact"),
|
||||
("preferences", "0048_auto_20180811_1515"),
|
||||
("preferences", "0049_optionaluser_self_change_shell"),
|
||||
("preferences", "0050_auto_20180818_1329"),
|
||||
("preferences", "0051_auto_20180919_2225"),
|
||||
("preferences", "0052_optionaluser_delete_notyetactive"),
|
||||
("preferences", "0053_optionaluser_self_change_room"),
|
||||
("preferences", "0055_generaloption_main_site_url"),
|
||||
("preferences", "0056_1_radiusoption"),
|
||||
("preferences", "0056_2_radiusoption"),
|
||||
("preferences", "0056_3_radiusoption"),
|
||||
("preferences", "0056_4_radiusoption"),
|
||||
("preferences", "0057_optionaluser_all_users_active"),
|
||||
("preferences", "0058_auto_20190108_1650"),
|
||||
("preferences", "0059_auto_20190120_1739"),
|
||||
("preferences", "0060_auto_20190712_1821"),
|
||||
("preferences", "0061_optionaluser_allow_archived_connexion"),
|
||||
("preferences", "0062_auto_20190910_1909"),
|
||||
("preferences", "0063_mandate"),
|
||||
("preferences", "0064_auto_20191008_1335"),
|
||||
("preferences", "0065_auto_20191010_1227"),
|
||||
("preferences", "0066_optionalmachine_default_dns_ttl"),
|
||||
("preferences", "0067_auto_20191120_0159"),
|
||||
("preferences", "0068_optionaluser_allow_set_password_during_user_creation"),
|
||||
("preferences", "0069_optionaluser_disable_emailnotyetconfirmed"),
|
||||
("preferences", "0070_auto_20200419_0225"),
|
||||
("preferences", "0071_optionaluser_self_change_pseudo"),
|
||||
("topologie", "0001_initial"),
|
||||
("topologie", "0002_auto_20160703_1118"),
|
||||
("topologie", "0003_room"),
|
||||
("topologie", "0004_auto_20160703_1122"),
|
||||
("topologie", "0005_auto_20160703_1123"),
|
||||
("topologie", "0006_auto_20160703_1129"),
|
||||
("topologie", "0007_auto_20160703_1148"),
|
||||
("topologie", "0008_port_room"),
|
||||
("topologie", "0009_auto_20160703_1200"),
|
||||
("topologie", "0010_auto_20160704_2148"),
|
||||
("topologie", "0011_auto_20160704_2153"),
|
||||
("topologie", "0012_port_machine_interface"),
|
||||
("topologie", "0013_port_related"),
|
||||
("topologie", "0014_auto_20160706_1238"),
|
||||
("topologie", "0015_auto_20160706_1452"),
|
||||
("topologie", "0016_auto_20160706_1531"),
|
||||
("topologie", "0017_auto_20160718_1141"),
|
||||
("topologie", "0018_room_details"),
|
||||
("topologie", "0019_auto_20161026_1348"),
|
||||
("topologie", "0020_auto_20161119_0033"),
|
||||
("topologie", "0021_port_radius"),
|
||||
("topologie", "0022_auto_20161211_1622"),
|
||||
("topologie", "0023_auto_20170817_1654"),
|
||||
("topologie", "0023_auto_20170826_1530"),
|
||||
("topologie", "0024_auto_20170818_1021"),
|
||||
("topologie", "0024_auto_20170826_1800"),
|
||||
("topologie", "0025_merge_20170902_1242"),
|
||||
("topologie", "0026_auto_20170902_1245"),
|
||||
("topologie", "0027_auto_20170905_1442"),
|
||||
("topologie", "0028_auto_20170913_1503"),
|
||||
("topologie", "0029_auto_20171002_0334"),
|
||||
("topologie", "0030_auto_20171004_0235"),
|
||||
("topologie", "0031_auto_20171015_2033"),
|
||||
("topologie", "0032_auto_20171026_0338"),
|
||||
("topologie", "0033_auto_20171231_1743"),
|
||||
("topologie", "0034_borne"),
|
||||
("topologie", "0035_auto_20180324_0023"),
|
||||
("topologie", "0036_transferborne"),
|
||||
("topologie", "0037_auto_20180325_0127"),
|
||||
("topologie", "0038_transfersw"),
|
||||
("topologie", "0039_port_new_switch"),
|
||||
("topologie", "0040_transferports"),
|
||||
("topologie", "0041_transferportsw"),
|
||||
("topologie", "0042_transferswitch"),
|
||||
("topologie", "0043_renamenewswitch"),
|
||||
("topologie", "0044_auto_20180326_0002"),
|
||||
("topologie", "0045_auto_20180326_0123"),
|
||||
("topologie", "0046_auto_20180326_0129"),
|
||||
("topologie", "0047_ap_machine"),
|
||||
("topologie", "0048_ap_machine"),
|
||||
("topologie", "0049_switchs_machine"),
|
||||
("topologie", "0050_port_new_switch"),
|
||||
("topologie", "0051_switchs_machine"),
|
||||
("topologie", "0052_transferports"),
|
||||
("topologie", "0053_finalsw"),
|
||||
("topologie", "0054_auto_20180326_1742"),
|
||||
("topologie", "0055_auto_20180329_0431"),
|
||||
("topologie", "0056_building_switchbay"),
|
||||
("topologie", "0057_auto_20180408_0316"),
|
||||
("topologie", "0058_remove_switch_location"),
|
||||
("topologie", "0059_auto_20180415_2249"),
|
||||
("topologie", "0060_server"),
|
||||
("topologie", "0061_portprofile"),
|
||||
("topologie", "0062_auto_20180815_1918"),
|
||||
("topologie", "0063_auto_20180919_2225"),
|
||||
("topologie", "0064_switch_automatic_provision"),
|
||||
("topologie", "0065_auto_20180927_1836"),
|
||||
("topologie", "0066_modelswitch_commercial_name"),
|
||||
("topologie", "0067_auto_20181230_1819"),
|
||||
("topologie", "0068_auto_20190102_1758"),
|
||||
("topologie", "0069_auto_20190108_1439"),
|
||||
("topologie", "0070_auto_20190218_1743"),
|
||||
("topologie", "0071_auto_20190218_1936"),
|
||||
("topologie", "0072_auto_20190720_2318"),
|
||||
("topologie", "0073_auto_20191120_0159"),
|
||||
("topologie", "0074_auto_20200419_1640"),
|
||||
]
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="Stack",
|
||||
bases=(
|
||||
re2o.mixins.AclMixin,
|
||||
re2o.mixins.RevMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=32, blank=True, null=True)),
|
||||
("stack_id", models.CharField(max_length=32, unique=True)),
|
||||
("details", models.CharField(max_length=255, blank=True, null=True)),
|
||||
("member_id_min", models.PositiveIntegerField()),
|
||||
("member_id_max", models.PositiveIntegerField()),
|
||||
],
|
||||
options={
|
||||
"permissions": (("view_stack", "Can view a stack object"),),
|
||||
"verbose_name": "switches stack",
|
||||
"verbose_name_plural": "switches stacks",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="AccessPoint",
|
||||
bases=("machines.machine",),
|
||||
fields=[
|
||||
(
|
||||
"machine_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="machines.Machine",
|
||||
),
|
||||
),
|
||||
(
|
||||
"location",
|
||||
models.CharField(
|
||||
max_length=255,
|
||||
help_text="Details about the AP's location.",
|
||||
blank=True,
|
||||
null=True,
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_accesspoint", "Can view an access point object"),
|
||||
),
|
||||
"verbose_name": "access point",
|
||||
"verbose_name_plural": "access points",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Server",
|
||||
bases=("machines.machine",),
|
||||
fields=[],
|
||||
options={"proxy": True},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Switch",
|
||||
bases=("machines.machine",),
|
||||
fields=[
|
||||
(
|
||||
"machine_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="machines.Machine",
|
||||
),
|
||||
),
|
||||
("number", models.PositiveIntegerField(help_text="Number of ports.")),
|
||||
("stack_member_id", models.PositiveIntegerField(blank=True, null=True)),
|
||||
(
|
||||
"automatic_provision",
|
||||
models.BooleanField(
|
||||
default=False, help_text="Automatic provision for the switch."
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (("view_switch", "Can view a switch object"),),
|
||||
"verbose_name": "switch",
|
||||
"verbose_name_plural": "switches",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ModelSwitch",
|
||||
bases=(
|
||||
re2o.mixins.AclMixin,
|
||||
re2o.mixins.RevMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("reference", models.CharField(max_length=255)),
|
||||
(
|
||||
"commercial_name",
|
||||
models.CharField(max_length=255, null=True, blank=True),
|
||||
),
|
||||
("firmware", models.CharField(max_length=255, null=True, blank=True)),
|
||||
(
|
||||
"is_modular",
|
||||
models.BooleanField(
|
||||
default=False, help_text="The switch model is modular."
|
||||
),
|
||||
),
|
||||
(
|
||||
"is_itself_module",
|
||||
models.BooleanField(
|
||||
default=False, help_text="The switch is considered as a module."
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_modelswitch", "Can view a switch model object"),
|
||||
),
|
||||
"verbose_name": "switch model",
|
||||
"verbose_name_plural": "switch models",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ModuleSwitch",
|
||||
bases=(
|
||||
re2o.mixins.AclMixin,
|
||||
re2o.mixins.RevMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"reference",
|
||||
models.CharField(
|
||||
max_length=255,
|
||||
help_text="Reference of a module.",
|
||||
verbose_name="module reference",
|
||||
),
|
||||
),
|
||||
(
|
||||
"comment",
|
||||
models.CharField(
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text="Comment.",
|
||||
verbose_name="comment",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_moduleswitch", "Can view a switch module object"),
|
||||
),
|
||||
"verbose_name": "switch module",
|
||||
"verbose_name_plural": "switch modules",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ModuleOnSwitch",
|
||||
bases=(
|
||||
re2o.mixins.AclMixin,
|
||||
re2o.mixins.RevMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"slot",
|
||||
models.CharField(
|
||||
max_length=15, help_text="Slot on switch.", verbose_name="slot"
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
(
|
||||
"view_moduleonswitch",
|
||||
"Can view a link between switch and module object",
|
||||
),
|
||||
),
|
||||
"verbose_name": "link between switch and module",
|
||||
"verbose_name_plural": "links between switch and module",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ConstructorSwitch",
|
||||
bases=(
|
||||
re2o.mixins.AclMixin,
|
||||
re2o.mixins.RevMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255)),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_constructorswitch", "Can view a switch constructor object"),
|
||||
),
|
||||
"verbose_name": "switch constructor",
|
||||
"verbose_name_plural": "switch constructors",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="SwitchBay",
|
||||
bases=(
|
||||
re2o.mixins.AclMixin,
|
||||
re2o.mixins.RevMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255)),
|
||||
("info", models.CharField(max_length=255, blank=True, null=True)),
|
||||
],
|
||||
options={
|
||||
"permissions": (("view_switchbay", "Can view a switch bay object"),),
|
||||
"verbose_name": "switch bay",
|
||||
"verbose_name_plural": "switch bays",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Dormitory",
|
||||
bases=(
|
||||
re2o.mixins.AclMixin,
|
||||
re2o.mixins.RevMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255)),
|
||||
],
|
||||
options={
|
||||
"permissions": (("view_dormitory", "Can view a dormitory object"),),
|
||||
"verbose_name": "dormitory",
|
||||
"verbose_name_plural": "dormitories",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Building",
|
||||
bases=(
|
||||
re2o.mixins.AclMixin,
|
||||
re2o.mixins.RevMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255)),
|
||||
],
|
||||
options={
|
||||
"permissions": (("view_building", "Can view a building object"),),
|
||||
"verbose_name": "building",
|
||||
"verbose_name_plural": "buildings",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Port",
|
||||
bases=(
|
||||
re2o.mixins.AclMixin,
|
||||
re2o.mixins.RevMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("port", models.PositiveIntegerField()),
|
||||
(
|
||||
"state",
|
||||
models.BooleanField(
|
||||
default=True,
|
||||
help_text="Port state Active.",
|
||||
verbose_name="port state Active",
|
||||
),
|
||||
),
|
||||
("details", models.CharField(max_length=255, blank=True)),
|
||||
],
|
||||
options={
|
||||
"permissions": (("view_port", "Can view a port object"),),
|
||||
"verbose_name": "port",
|
||||
"verbose_name_plural": "ports",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="PortProfile",
|
||||
bases=(
|
||||
re2o.mixins.AclMixin,
|
||||
re2o.mixins.RevMixin,
|
||||
models.Model,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255, verbose_name="name")),
|
||||
(
|
||||
"profil_default",
|
||||
models.CharField(
|
||||
max_length=32,
|
||||
choices=(
|
||||
("room", "Room"),
|
||||
("access_point", "Access point"),
|
||||
("uplink", "Uplink"),
|
||||
("asso_machine", "Organisation machine"),
|
||||
("nothing", "Nothing"),
|
||||
),
|
||||
blank=True,
|
||||
null=True,
|
||||
verbose_name="default profile",
|
||||
),
|
||||
),
|
||||
(
|
||||
"radius_type",
|
||||
models.CharField(
|
||||
max_length=32,
|
||||
choices=(
|
||||
("NO", "NO"),
|
||||
("802.1X", "802.1X"),
|
||||
("MAC-radius", "MAC-RADIUS"),
|
||||
),
|
||||
help_text="Type of RADIUS authentication: inactive, MAC-address or 802.1X.",
|
||||
verbose_name="RADIUS type",
|
||||
),
|
||||
),
|
||||
(
|
||||
"radius_mode",
|
||||
models.CharField(
|
||||
max_length=32,
|
||||
choices=(("STRICT", "STRICT"), ("COMMON", "COMMON")),
|
||||
default="COMMON",
|
||||
help_text="In case of MAC-authentication: mode COMMON or STRICT on this port.",
|
||||
verbose_name="RADIUS mode",
|
||||
),
|
||||
),
|
||||
(
|
||||
"speed",
|
||||
models.CharField(
|
||||
max_length=32,
|
||||
choices=(
|
||||
("10-half", "10-half"),
|
||||
("100-half", "100-half"),
|
||||
("10-full", "10-full"),
|
||||
("100-full", "100-full"),
|
||||
("1000-full", "1000-full"),
|
||||
("auto", "auto"),
|
||||
("auto-10", "auto-10"),
|
||||
("auto-100", "auto-100"),
|
||||
),
|
||||
default="auto",
|
||||
help_text="Port speed limit.",
|
||||
),
|
||||
),
|
||||
(
|
||||
"mac_limit",
|
||||
models.IntegerField(
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text="Limit of MAC-address on this port.",
|
||||
verbose_name="MAC limit",
|
||||
),
|
||||
),
|
||||
(
|
||||
"flow_control",
|
||||
models.BooleanField(default=False, help_text="Flow control."),
|
||||
),
|
||||
(
|
||||
"dhcp_snooping",
|
||||
models.BooleanField(
|
||||
default=False,
|
||||
help_text="Protect against rogue DHCP.",
|
||||
verbose_name="DHCP snooping",
|
||||
),
|
||||
),
|
||||
(
|
||||
"dhcpv6_snooping",
|
||||
models.BooleanField(
|
||||
default=False,
|
||||
help_text="Protect against rogue DHCPv6.",
|
||||
verbose_name="DHCPv6 snooping",
|
||||
),
|
||||
),
|
||||
(
|
||||
"arp_protect",
|
||||
models.BooleanField(
|
||||
default=False,
|
||||
help_text="Check if IP address is DHCP assigned.",
|
||||
verbose_name="ARP protection",
|
||||
),
|
||||
),
|
||||
(
|
||||
"ra_guard",
|
||||
models.BooleanField(
|
||||
default=False,
|
||||
help_text="Protect against rogue RA.",
|
||||
verbose_name="RA guard",
|
||||
),
|
||||
),
|
||||
(
|
||||
"loop_protect",
|
||||
models.BooleanField(
|
||||
default=False,
|
||||
help_text="Protect against loop.",
|
||||
verbose_name="loop protection",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_portprofile", "Can view a port profile object"),
|
||||
),
|
||||
"verbose_name": "port profile",
|
||||
"verbose_name_plural": "port profiles",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Room",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255)),
|
||||
("details", models.CharField(blank=True, max_length=255)),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "room",
|
||||
"verbose_name_plural": "rooms",
|
||||
"ordering": ["building__name"],
|
||||
"permissions": (("view_room", "Can view a room object"),),
|
||||
},
|
||||
bases=(re2o.mixins.AclMixin, re2o.mixins.RevMixin, models.Model),
|
||||
),
|
||||
]
|
559
topologie/migrations/0002_foreign_keys.py
Normal file
559
topologie/migrations/0002_foreign_keys.py
Normal file
|
@ -0,0 +1,559 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.29 on 2020-12-30 15:27
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import re2o.mixins
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('machines', '0002_foreign_keys'),
|
||||
('preferences', '0001_model_creation'),
|
||||
('topologie', '0001_model_creation'),
|
||||
]
|
||||
replaces = [
|
||||
("users", "0001_initial"),
|
||||
("users", "0002_auto_20160630_2301"),
|
||||
("users", "0003_listrights_rights"),
|
||||
("users", "0004_auto_20160701_2312"),
|
||||
("users", "0005_auto_20160702_0006"),
|
||||
("users", "0006_ban"),
|
||||
("users", "0007_auto_20160702_2322"),
|
||||
("users", "0008_user_registered"),
|
||||
("users", "0009_user_room"),
|
||||
("users", "0010_auto_20160703_1226"),
|
||||
("users", "0011_auto_20160703_1227"),
|
||||
("users", "0012_auto_20160703_1230"),
|
||||
("users", "0013_auto_20160704_1547"),
|
||||
("users", "0014_auto_20160704_1548"),
|
||||
("users", "0015_whitelist"),
|
||||
("users", "0016_auto_20160706_1220"),
|
||||
("users", "0017_auto_20160707_0105"),
|
||||
("users", "0018_auto_20160707_0115"),
|
||||
("users", "0019_auto_20160708_1633"),
|
||||
("users", "0020_request"),
|
||||
("users", "0021_ldapuser"),
|
||||
("users", "0022_ldapuser_sambasid"),
|
||||
("users", "0023_auto_20160724_1908"),
|
||||
("users", "0024_remove_ldapuser_mac_list"),
|
||||
("users", "0025_listshell"),
|
||||
("users", "0026_user_shell"),
|
||||
("users", "0027_auto_20160726_0216"),
|
||||
("users", "0028_auto_20160726_0227"),
|
||||
("users", "0029_auto_20160726_0229"),
|
||||
("users", "0030_auto_20160726_0357"),
|
||||
("users", "0031_auto_20160726_0359"),
|
||||
("users", "0032_auto_20160727_2122"),
|
||||
("users", "0033_remove_ldapuser_loginshell"),
|
||||
("users", "0034_auto_20161018_0037"),
|
||||
("users", "0035_auto_20161018_0046"),
|
||||
("users", "0036_auto_20161022_2146"),
|
||||
("users", "0037_auto_20161028_1906"),
|
||||
("users", "0038_auto_20161031_0258"),
|
||||
("users", "0039_auto_20161119_0033"),
|
||||
("users", "0040_auto_20161119_1709"),
|
||||
("users", "0041_listright_details"),
|
||||
("users", "0042_auto_20161126_2028"),
|
||||
("users", "0043_auto_20161224_1156"),
|
||||
("users", "0043_ban_state"),
|
||||
("users", "0044_user_ssh_public_key"),
|
||||
("users", "0045_merge"),
|
||||
("users", "0046_auto_20170617_1433"),
|
||||
("users", "0047_auto_20170618_0156"),
|
||||
("users", "0048_auto_20170618_0210"),
|
||||
("users", "0049_auto_20170618_1424"),
|
||||
("users", "0050_serviceuser_comment"),
|
||||
("users", "0051_user_telephone"),
|
||||
("users", "0052_ldapuser_shadowexpire"),
|
||||
("users", "0053_auto_20170626_2105"),
|
||||
("users", "0054_auto_20170626_2219"),
|
||||
("users", "0055_auto_20171003_0556"),
|
||||
("users", "0056_auto_20171015_2033"),
|
||||
("users", "0057_auto_20171023_0301"),
|
||||
("users", "0058_auto_20171025_0154"),
|
||||
("users", "0059_auto_20171025_1854"),
|
||||
("users", "0060_auto_20171120_0317"),
|
||||
("users", "0061_auto_20171230_2033"),
|
||||
("users", "0062_auto_20171231_0056"),
|
||||
("users", "0063_auto_20171231_0140"),
|
||||
("users", "0064_auto_20171231_0150"),
|
||||
("users", "0065_auto_20171231_2053"),
|
||||
("users", "0066_grouppermissions"),
|
||||
("users", "0067_serveurpermission"),
|
||||
("users", "0068_auto_20180107_2245"),
|
||||
("users", "0069_club_mailing"),
|
||||
("users", "0070_auto_20180324_1906"),
|
||||
("users", "0071_auto_20180415_1252"),
|
||||
("users", "0072_auto_20180426_2021"),
|
||||
("users", "0073_auto_20180629_1614"),
|
||||
("users", "0074_auto_20180810_2104"),
|
||||
("users", "0074_auto_20180814_1059"),
|
||||
("users", "0075_merge_20180815_2202"),
|
||||
("users", "0076_auto_20180818_1321"),
|
||||
("users", "0077_auto_20180824_1750"),
|
||||
("users", "0078_auto_20181011_1405"),
|
||||
("users", "0079_auto_20181228_2039"),
|
||||
("users", "0080_auto_20190108_1726"),
|
||||
("users", "0081_auto_20190317_0302"),
|
||||
("users", "0082_auto_20190908_1338"),
|
||||
("users", "0083_user_shortcuts_enabled"),
|
||||
("users", "0084_auto_20191120_0159"),
|
||||
("users", "0085_user_email_state"),
|
||||
("users", "0086_user_email_change_date"),
|
||||
("users", "0087_request_email"),
|
||||
("users", "0088_auto_20200417_2312"),
|
||||
("users", "0089_auto_20200418_0112"),
|
||||
("users", "0090_auto_20200421_1825"),
|
||||
("users", "0091_auto_20200423_1256"),
|
||||
("users", "0092_auto_20200502_0057"),
|
||||
("users", "0093_user_profile_image"),
|
||||
("users", "0094_remove_user_profile_image"),
|
||||
("users", "0095_user_theme"),
|
||||
("users", "0096_auto_20210110_1811"),
|
||||
("cotisations", "0001_initial"),
|
||||
("cotisations", "0002_remove_facture_article"),
|
||||
("cotisations", "0003_auto_20160702_1448"),
|
||||
("cotisations", "0004_auto_20160702_1528"),
|
||||
("cotisations", "0005_auto_20160702_1532"),
|
||||
("cotisations", "0006_auto_20160702_1534"),
|
||||
("cotisations", "0007_auto_20160702_1543"),
|
||||
("cotisations", "0008_auto_20160702_1614"),
|
||||
("cotisations", "0009_remove_cotisation_user"),
|
||||
("cotisations", "0010_auto_20160702_1840"),
|
||||
("cotisations", "0011_auto_20160702_1911"),
|
||||
("cotisations", "0012_auto_20160704_0118"),
|
||||
("cotisations", "0013_auto_20160711_2240"),
|
||||
("cotisations", "0014_auto_20160712_0245"),
|
||||
("cotisations", "0015_auto_20160714_2142"),
|
||||
("cotisations", "0016_auto_20160715_0110"),
|
||||
("cotisations", "0017_auto_20170718_2329"),
|
||||
("cotisations", "0018_paiement_type_paiement"),
|
||||
("cotisations", "0019_auto_20170819_0055"),
|
||||
("cotisations", "0020_auto_20170819_0057"),
|
||||
("cotisations", "0021_auto_20170819_0104"),
|
||||
("cotisations", "0022_auto_20170824_0128"),
|
||||
("cotisations", "0023_auto_20170902_1303"),
|
||||
("cotisations", "0024_auto_20171015_2033"),
|
||||
("cotisations", "0025_article_type_user"),
|
||||
("cotisations", "0026_auto_20171028_0126"),
|
||||
("cotisations", "0027_auto_20171029_1156"),
|
||||
("cotisations", "0028_auto_20171231_0007"),
|
||||
("cotisations", "0029_auto_20180414_2056"),
|
||||
("cotisations", "0030_custom_payment"),
|
||||
("cotisations", "0031_comnpaypayment_production"),
|
||||
("cotisations", "0032_custom_invoice"),
|
||||
("cotisations", "0033_auto_20180818_1319"),
|
||||
("cotisations", "0034_auto_20180831_1532"),
|
||||
("cotisations", "0035_notepayment"),
|
||||
("cotisations", "0036_custominvoice_remark"),
|
||||
("cotisations", "0037_costestimate"),
|
||||
("cotisations", "0038_auto_20181231_1657"),
|
||||
("cotisations", "0039_freepayment"),
|
||||
("cotisations", "0040_auto_20191002_2335"),
|
||||
("cotisations", "0041_auto_20191103_2131"),
|
||||
("cotisations", "0042_auto_20191120_0159"),
|
||||
("cotisations", "0043_separation_membership_connection_p1"),
|
||||
("cotisations", "0044_separation_membership_connection_p2"),
|
||||
("cotisations", "0045_separation_membership_connection_p3"),
|
||||
("cotisations", "0046_article_need_membership"),
|
||||
("cotisations", "0047_article_need_membership_init"),
|
||||
("cotisations", "0048_auto_20201017_0018"),
|
||||
("cotisations", "0049_auto_20201102_2305"),
|
||||
("cotisations", "0050_auto_20201102_2342"),
|
||||
("cotisations", "0051_auto_20201228_1636"),
|
||||
("machines", "0001_initial"),
|
||||
("machines", "0002_auto_20160703_1444"),
|
||||
("machines", "0003_auto_20160703_1450"),
|
||||
("machines", "0004_auto_20160703_1451"),
|
||||
("machines", "0005_auto_20160703_1523"),
|
||||
("machines", "0006_auto_20160703_1813"),
|
||||
("machines", "0007_auto_20160703_1816"),
|
||||
("machines", "0008_remove_interface_ipv6"),
|
||||
("machines", "0009_auto_20160703_2358"),
|
||||
("machines", "0010_auto_20160704_0104"),
|
||||
("machines", "0011_auto_20160704_0105"),
|
||||
("machines", "0012_auto_20160704_0118"),
|
||||
("machines", "0013_auto_20160705_1014"),
|
||||
("machines", "0014_auto_20160706_1220"),
|
||||
("machines", "0015_auto_20160707_0105"),
|
||||
("machines", "0016_auto_20160708_1633"),
|
||||
("machines", "0017_auto_20160708_1645"),
|
||||
("machines", "0018_auto_20160708_1813"),
|
||||
("machines", "0019_auto_20160718_1141"),
|
||||
("machines", "0020_auto_20160718_1849"),
|
||||
("machines", "0021_auto_20161006_1943"),
|
||||
("machines", "0022_auto_20161011_1829"),
|
||||
("machines", "0023_iplist_ip_type"),
|
||||
("machines", "0024_machinetype_need_infra"),
|
||||
("machines", "0025_auto_20161023_0038"),
|
||||
("machines", "0026_auto_20161026_1348"),
|
||||
("machines", "0027_alias"),
|
||||
("machines", "0028_iptype_domaine_ip"),
|
||||
("machines", "0029_iptype_domaine_range"),
|
||||
("machines", "0030_auto_20161118_1730"),
|
||||
("machines", "0031_auto_20161119_1709"),
|
||||
("machines", "0032_auto_20161119_1850"),
|
||||
("machines", "0033_extension_need_infra"),
|
||||
("machines", "0034_iplist_need_infra"),
|
||||
("machines", "0035_auto_20161224_1201"),
|
||||
("machines", "0036_auto_20161224_1204"),
|
||||
("machines", "0037_domain_cname"),
|
||||
("machines", "0038_auto_20161224_1721"),
|
||||
("machines", "0039_auto_20161224_1732"),
|
||||
("machines", "0040_remove_interface_dns"),
|
||||
("machines", "0041_remove_ns_interface"),
|
||||
("machines", "0042_ns_ns"),
|
||||
("machines", "0043_auto_20170721_0350"),
|
||||
("machines", "0044_auto_20170808_0233"),
|
||||
("machines", "0045_auto_20170808_0348"),
|
||||
("machines", "0046_auto_20170808_1423"),
|
||||
("machines", "0047_auto_20170809_0606"),
|
||||
("machines", "0048_auto_20170823_2315"),
|
||||
("machines", "0049_vlan"),
|
||||
("machines", "0050_auto_20170826_0022"),
|
||||
("machines", "0051_iptype_vlan"),
|
||||
("machines", "0052_auto_20170828_2322"),
|
||||
("machines", "0053_text"),
|
||||
("machines", "0054_text_zone"),
|
||||
("machines", "0055_nas"),
|
||||
("machines", "0056_nas_port_access_mode"),
|
||||
("machines", "0057_nas_autocapture_mac"),
|
||||
("machines", "0058_auto_20171002_0350"),
|
||||
("machines", "0059_iptype_prefix_v6"),
|
||||
("machines", "0060_iptype_ouverture_ports"),
|
||||
("machines", "0061_auto_20171015_2033"),
|
||||
("machines", "0062_extension_origin_v6"),
|
||||
("machines", "0063_auto_20171020_0040"),
|
||||
("machines", "0064_auto_20171115_0253"),
|
||||
("machines", "0065_auto_20171115_1514"),
|
||||
("machines", "0066_srv"),
|
||||
("machines", "0067_auto_20171116_0152"),
|
||||
("machines", "0068_auto_20171116_0252"),
|
||||
("machines", "0069_auto_20171116_0822"),
|
||||
("machines", "0070_auto_20171231_1947"),
|
||||
("machines", "0071_auto_20171231_2100"),
|
||||
("machines", "0072_auto_20180108_1822"),
|
||||
("machines", "0073_auto_20180128_2203"),
|
||||
("machines", "0074_auto_20180129_0352"),
|
||||
("machines", "0075_auto_20180130_0052"),
|
||||
("machines", "0076_auto_20180130_1623"),
|
||||
("machines", "0077_auto_20180409_2243"),
|
||||
("machines", "0078_auto_20180415_1252"),
|
||||
("machines", "0079_auto_20180416_0107"),
|
||||
("machines", "0080_auto_20180502_2334"),
|
||||
("machines", "0081_auto_20180521_1413"),
|
||||
("machines", "0082_auto_20180525_2209"),
|
||||
("machines", "0083_remove_duplicate_rights"),
|
||||
("machines", "0084_dname"),
|
||||
("machines", "0085_sshfingerprint"),
|
||||
("machines", "0086_role"),
|
||||
("machines", "0087_dnssec"),
|
||||
("machines", "0088_iptype_prefix_v6_length"),
|
||||
("machines", "0089_auto_20180805_1148"),
|
||||
("machines", "0090_auto_20180805_1459"),
|
||||
("machines", "0091_auto_20180806_2310"),
|
||||
("machines", "0092_auto_20180807_0926"),
|
||||
("machines", "0093_auto_20180807_1115"),
|
||||
("machines", "0094_auto_20180815_1918"),
|
||||
("machines", "0095_auto_20180919_2225"),
|
||||
("machines", "0096_auto_20181013_1417"),
|
||||
("machines", "0097_extension_dnssec"),
|
||||
("machines", "0098_auto_20190102_1745"),
|
||||
("machines", "0099_role_recursive_dns"),
|
||||
("machines", "0100_auto_20190102_1753"),
|
||||
("machines", "0101_auto_20190108_1623"),
|
||||
("machines", "0102_auto_20190303_1611"),
|
||||
("machines", "0103_auto_20191002_2222"),
|
||||
("machines", "0104_auto_20191002_2231"),
|
||||
("machines", "0105_dname_ttl"),
|
||||
("machines", "0106_auto_20191120_0159"),
|
||||
("machines", "0107_fix_lowercase_domain"),
|
||||
("machines", "0108_ipv6list_active"),
|
||||
("preferences", "0001_initial"),
|
||||
("preferences", "0002_auto_20170625_1923"),
|
||||
("preferences", "0003_optionaluser_solde_negatif"),
|
||||
("preferences", "0004_assooption_services"),
|
||||
("preferences", "0005_auto_20170824_0139"),
|
||||
("preferences", "0006_auto_20170824_0143"),
|
||||
("preferences", "0007_auto_20170824_2056"),
|
||||
("preferences", "0008_auto_20170824_2122"),
|
||||
("preferences", "0009_assooption_utilisateur_asso"),
|
||||
("preferences", "0010_auto_20170825_0459"),
|
||||
("preferences", "0011_auto_20170825_2307"),
|
||||
("preferences", "0012_generaloption_req_expire_hrs"),
|
||||
("preferences", "0013_generaloption_site_name"),
|
||||
("preferences", "0014_generaloption_email_from"),
|
||||
("preferences", "0015_optionaltopologie_radius_general_policy"),
|
||||
("preferences", "0016_auto_20170902_1520"),
|
||||
("preferences", "0017_mailmessageoption"),
|
||||
("preferences", "0018_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0019_remove_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0020_optionalmachine_ipv6"),
|
||||
("preferences", "0021_auto_20171015_1741"),
|
||||
("preferences", "0022_auto_20171015_1758"),
|
||||
("preferences", "0023_auto_20171015_2033"),
|
||||
("preferences", "0024_optionaluser_all_can_create"),
|
||||
("preferences", "0025_auto_20171231_2142"),
|
||||
("preferences", "0025_generaloption_general_message"),
|
||||
("preferences", "0026_auto_20171216_0401"),
|
||||
("preferences", "0027_merge_20180106_2019"),
|
||||
("preferences", "0028_assooption_description"),
|
||||
("preferences", "0028_auto_20180111_1129"),
|
||||
("preferences", "0028_auto_20180128_2203"),
|
||||
("preferences", "0029_auto_20180111_1134"),
|
||||
("preferences", "0029_auto_20180318_0213"),
|
||||
("preferences", "0029_auto_20180318_1005"),
|
||||
("preferences", "0030_auto_20180111_2346"),
|
||||
("preferences", "0030_merge_20180320_1419"),
|
||||
("preferences", "0031_auto_20180323_0218"),
|
||||
("preferences", "0031_optionaluser_self_adhesion"),
|
||||
("preferences", "0032_optionaluser_min_online_payment"),
|
||||
("preferences", "0032_optionaluser_shell_default"),
|
||||
("preferences", "0033_accueiloption"),
|
||||
("preferences", "0033_generaloption_gtu_sum_up"),
|
||||
("preferences", "0034_auto_20180114_2025"),
|
||||
("preferences", "0034_auto_20180416_1120"),
|
||||
("preferences", "0035_auto_20180114_2132"),
|
||||
("preferences", "0035_optionaluser_allow_self_subscription"),
|
||||
("preferences", "0036_auto_20180114_2141"),
|
||||
("preferences", "0037_auto_20180114_2156"),
|
||||
("preferences", "0038_auto_20180114_2209"),
|
||||
("preferences", "0039_auto_20180115_0003"),
|
||||
("preferences", "0040_auto_20180129_1745"),
|
||||
("preferences", "0041_merge_20180130_0052"),
|
||||
("preferences", "0042_auto_20180222_1743"),
|
||||
("preferences", "0043_optionalmachine_create_machine"),
|
||||
("preferences", "0044_remove_payment_pass"),
|
||||
("preferences", "0045_remove_unused_payment_fields"),
|
||||
("preferences", "0046_optionaluser_mail_extension"),
|
||||
("preferences", "0047_mailcontact"),
|
||||
("preferences", "0048_auto_20180811_1515"),
|
||||
("preferences", "0049_optionaluser_self_change_shell"),
|
||||
("preferences", "0050_auto_20180818_1329"),
|
||||
("preferences", "0051_auto_20180919_2225"),
|
||||
("preferences", "0052_optionaluser_delete_notyetactive"),
|
||||
("preferences", "0053_optionaluser_self_change_room"),
|
||||
("preferences", "0055_generaloption_main_site_url"),
|
||||
("preferences", "0056_1_radiusoption"),
|
||||
("preferences", "0056_2_radiusoption"),
|
||||
("preferences", "0056_3_radiusoption"),
|
||||
("preferences", "0056_4_radiusoption"),
|
||||
("preferences", "0057_optionaluser_all_users_active"),
|
||||
("preferences", "0058_auto_20190108_1650"),
|
||||
("preferences", "0059_auto_20190120_1739"),
|
||||
("preferences", "0060_auto_20190712_1821"),
|
||||
("preferences", "0061_optionaluser_allow_archived_connexion"),
|
||||
("preferences", "0062_auto_20190910_1909"),
|
||||
("preferences", "0063_mandate"),
|
||||
("preferences", "0064_auto_20191008_1335"),
|
||||
("preferences", "0065_auto_20191010_1227"),
|
||||
("preferences", "0066_optionalmachine_default_dns_ttl"),
|
||||
("preferences", "0067_auto_20191120_0159"),
|
||||
("preferences", "0068_optionaluser_allow_set_password_during_user_creation"),
|
||||
("preferences", "0069_optionaluser_disable_emailnotyetconfirmed"),
|
||||
("preferences", "0070_auto_20200419_0225"),
|
||||
("preferences", "0071_optionaluser_self_change_pseudo"),
|
||||
("topologie", "0001_initial"),
|
||||
("topologie", "0002_auto_20160703_1118"),
|
||||
("topologie", "0003_room"),
|
||||
("topologie", "0004_auto_20160703_1122"),
|
||||
("topologie", "0005_auto_20160703_1123"),
|
||||
("topologie", "0006_auto_20160703_1129"),
|
||||
("topologie", "0007_auto_20160703_1148"),
|
||||
("topologie", "0008_port_room"),
|
||||
("topologie", "0009_auto_20160703_1200"),
|
||||
("topologie", "0010_auto_20160704_2148"),
|
||||
("topologie", "0011_auto_20160704_2153"),
|
||||
("topologie", "0012_port_machine_interface"),
|
||||
("topologie", "0013_port_related"),
|
||||
("topologie", "0014_auto_20160706_1238"),
|
||||
("topologie", "0015_auto_20160706_1452"),
|
||||
("topologie", "0016_auto_20160706_1531"),
|
||||
("topologie", "0017_auto_20160718_1141"),
|
||||
("topologie", "0018_room_details"),
|
||||
("topologie", "0019_auto_20161026_1348"),
|
||||
("topologie", "0020_auto_20161119_0033"),
|
||||
("topologie", "0021_port_radius"),
|
||||
("topologie", "0022_auto_20161211_1622"),
|
||||
("topologie", "0023_auto_20170817_1654"),
|
||||
("topologie", "0023_auto_20170826_1530"),
|
||||
("topologie", "0024_auto_20170818_1021"),
|
||||
("topologie", "0024_auto_20170826_1800"),
|
||||
("topologie", "0025_merge_20170902_1242"),
|
||||
("topologie", "0026_auto_20170902_1245"),
|
||||
("topologie", "0027_auto_20170905_1442"),
|
||||
("topologie", "0028_auto_20170913_1503"),
|
||||
("topologie", "0029_auto_20171002_0334"),
|
||||
("topologie", "0030_auto_20171004_0235"),
|
||||
("topologie", "0031_auto_20171015_2033"),
|
||||
("topologie", "0032_auto_20171026_0338"),
|
||||
("topologie", "0033_auto_20171231_1743"),
|
||||
("topologie", "0034_borne"),
|
||||
("topologie", "0035_auto_20180324_0023"),
|
||||
("topologie", "0036_transferborne"),
|
||||
("topologie", "0037_auto_20180325_0127"),
|
||||
("topologie", "0038_transfersw"),
|
||||
("topologie", "0039_port_new_switch"),
|
||||
("topologie", "0040_transferports"),
|
||||
("topologie", "0041_transferportsw"),
|
||||
("topologie", "0042_transferswitch"),
|
||||
("topologie", "0043_renamenewswitch"),
|
||||
("topologie", "0044_auto_20180326_0002"),
|
||||
("topologie", "0045_auto_20180326_0123"),
|
||||
("topologie", "0046_auto_20180326_0129"),
|
||||
("topologie", "0047_ap_machine"),
|
||||
("topologie", "0048_ap_machine"),
|
||||
("topologie", "0049_switchs_machine"),
|
||||
("topologie", "0050_port_new_switch"),
|
||||
("topologie", "0051_switchs_machine"),
|
||||
("topologie", "0052_transferports"),
|
||||
("topologie", "0053_finalsw"),
|
||||
("topologie", "0054_auto_20180326_1742"),
|
||||
("topologie", "0055_auto_20180329_0431"),
|
||||
("topologie", "0056_building_switchbay"),
|
||||
("topologie", "0057_auto_20180408_0316"),
|
||||
("topologie", "0058_remove_switch_location"),
|
||||
("topologie", "0059_auto_20180415_2249"),
|
||||
("topologie", "0060_server"),
|
||||
("topologie", "0061_portprofile"),
|
||||
("topologie", "0062_auto_20180815_1918"),
|
||||
("topologie", "0063_auto_20180919_2225"),
|
||||
("topologie", "0064_switch_automatic_provision"),
|
||||
("topologie", "0065_auto_20180927_1836"),
|
||||
("topologie", "0066_modelswitch_commercial_name"),
|
||||
("topologie", "0067_auto_20181230_1819"),
|
||||
("topologie", "0068_auto_20190102_1758"),
|
||||
("topologie", "0069_auto_20190108_1439"),
|
||||
("topologie", "0070_auto_20190218_1743"),
|
||||
("topologie", "0071_auto_20190218_1936"),
|
||||
("topologie", "0072_auto_20190720_2318"),
|
||||
("topologie", "0073_auto_20191120_0159"),
|
||||
("topologie", "0074_auto_20200419_1640"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='building',
|
||||
name='dormitory',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='topologie.Dormitory'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='modelswitch',
|
||||
name='constructor',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='topologie.ConstructorSwitch'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='moduleonswitch',
|
||||
name='module',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='topologie.ModuleSwitch'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='moduleonswitch',
|
||||
name='switch',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='topologie.Switch'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='port',
|
||||
name='custom_profile',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='topologie.PortProfile'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='port',
|
||||
name='machine_interface',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='machines.Interface'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='port',
|
||||
name='related',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='related_port', to='topologie.Port'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='port',
|
||||
name='switch',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='ports', to='topologie.Switch'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='portprofile',
|
||||
name='on_dormitory',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dormitory_ofprofil', to='topologie.Dormitory', verbose_name='profile on dormitory'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='portprofile',
|
||||
name='vlan_tagged',
|
||||
field=models.ManyToManyField(blank=True, related_name='vlan_tagged', to='machines.Vlan', verbose_name='VLAN(s) tagged'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='portprofile',
|
||||
name='vlan_untagged',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vlan_untagged', to='machines.Vlan', verbose_name='VLAN untagged'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='switch',
|
||||
name='management_creds',
|
||||
field=models.ForeignKey(blank=True, help_text='Management credentials for the switch.', null=True, on_delete=django.db.models.deletion.PROTECT, to='preferences.SwitchManagementCred'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='switch',
|
||||
name='model',
|
||||
field=models.ForeignKey(blank=True, help_text='Switch model.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='topologie.ModelSwitch'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='switch',
|
||||
name='radius_key',
|
||||
field=models.ForeignKey(blank=True, help_text='RADIUS key of the switch.', null=True, on_delete=django.db.models.deletion.PROTECT, to='preferences.RadiusKey'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='switch',
|
||||
name='stack',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='topologie.Stack'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='switch',
|
||||
name='switchbay',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='topologie.SwitchBay'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='switchbay',
|
||||
name='building',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='topologie.Building'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='moduleonswitch',
|
||||
unique_together=set([('slot', 'switch')]),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='port',
|
||||
name='room',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='topologie.Room'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='port',
|
||||
unique_together=set([('switch', 'port')]),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='portprofile',
|
||||
unique_together=set([('on_dormitory', 'profil_default')]),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='switch',
|
||||
unique_together=set([('stack', 'stack_member_id')]),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='room',
|
||||
name='building',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='topologie.Building'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='room',
|
||||
unique_together=set([('name', 'building')]),
|
||||
),
|
||||
]
|
|
@ -46,10 +46,6 @@ from .models import (
|
|||
Ban,
|
||||
Whitelist,
|
||||
Request,
|
||||
LdapUser,
|
||||
LdapServiceUser,
|
||||
LdapServiceUserGroup,
|
||||
LdapUserGroup,
|
||||
)
|
||||
from .forms import (
|
||||
UserAdminForm,
|
||||
|
@ -57,57 +53,6 @@ from .forms import (
|
|||
)
|
||||
|
||||
|
||||
class LdapUserAdmin(admin.ModelAdmin):
|
||||
"""LdapUser Admin view. Can't change password, manage
|
||||
by User General model.
|
||||
|
||||
Parameters:
|
||||
Django ModelAdmin: Apply on django ModelAdmin
|
||||
|
||||
"""
|
||||
list_display = ("name", "uidNumber", "login_shell")
|
||||
exclude = ("user_password", "sambat_nt_password")
|
||||
search_fields = ("name",)
|
||||
|
||||
|
||||
class LdapServiceUserAdmin(admin.ModelAdmin):
|
||||
"""LdapServiceUser Admin view. Can't change password, manage
|
||||
by User General model.
|
||||
|
||||
Parameters:
|
||||
Django ModelAdmin: Apply on django ModelAdmin
|
||||
|
||||
"""
|
||||
|
||||
list_display = ("name",)
|
||||
exclude = ("user_password",)
|
||||
search_fields = ("name",)
|
||||
|
||||
|
||||
class LdapUserGroupAdmin(admin.ModelAdmin):
|
||||
"""LdapUserGroup Admin view.
|
||||
|
||||
Parameters:
|
||||
Django ModelAdmin: Apply on django ModelAdmin
|
||||
|
||||
"""
|
||||
|
||||
list_display = ("name", "members", "gid")
|
||||
search_fields = ("name",)
|
||||
|
||||
|
||||
class LdapServiceUserGroupAdmin(admin.ModelAdmin):
|
||||
"""LdapServiceUserGroup Admin view.
|
||||
|
||||
Parameters:
|
||||
Django ModelAdmin: Apply on django ModelAdmin
|
||||
|
||||
"""
|
||||
|
||||
list_display = ("name",)
|
||||
search_fields = ("name",)
|
||||
|
||||
|
||||
class SchoolAdmin(VersionAdmin):
|
||||
"""School Admin view and management.
|
||||
|
||||
|
@ -338,10 +283,6 @@ class ServiceUserAdmin(VersionAdmin, BaseUserAdmin):
|
|||
admin.site.register(Adherent, AdherentAdmin)
|
||||
admin.site.register(Club, ClubAdmin)
|
||||
admin.site.register(ServiceUser, ServiceUserAdmin)
|
||||
admin.site.register(LdapUser, LdapUserAdmin)
|
||||
admin.site.register(LdapUserGroup, LdapUserGroupAdmin)
|
||||
admin.site.register(LdapServiceUser, LdapServiceUserAdmin)
|
||||
admin.site.register(LdapServiceUserGroup, LdapServiceUserGroupAdmin)
|
||||
admin.site.register(School, SchoolAdmin)
|
||||
admin.site.register(ListRight, ListRightAdmin)
|
||||
admin.site.register(ListShell, ListShellAdmin)
|
||||
|
|
898
users/migrations/0001_model_creation.py
Normal file
898
users/migrations/0001_model_creation.py
Normal file
|
@ -0,0 +1,898 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
import django.contrib.auth.models
|
||||
import django.core.validators
|
||||
import re2o.mixins
|
||||
import re2o.field_permissions
|
||||
import users.models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [('auth', '0008_alter_user_username_max_length')]
|
||||
initial = True
|
||||
# We replace everything.
|
||||
replaces = [
|
||||
("users", "0001_initial"),
|
||||
("users", "0002_auto_20160630_2301"),
|
||||
("users", "0003_listrights_rights"),
|
||||
("users", "0004_auto_20160701_2312"),
|
||||
("users", "0005_auto_20160702_0006"),
|
||||
("users", "0006_ban"),
|
||||
("users", "0007_auto_20160702_2322"),
|
||||
("users", "0008_user_registered"),
|
||||
("users", "0009_user_room"),
|
||||
("users", "0010_auto_20160703_1226"),
|
||||
("users", "0011_auto_20160703_1227"),
|
||||
("users", "0012_auto_20160703_1230"),
|
||||
("users", "0013_auto_20160704_1547"),
|
||||
("users", "0014_auto_20160704_1548"),
|
||||
("users", "0015_whitelist"),
|
||||
("users", "0016_auto_20160706_1220"),
|
||||
("users", "0017_auto_20160707_0105"),
|
||||
("users", "0018_auto_20160707_0115"),
|
||||
("users", "0019_auto_20160708_1633"),
|
||||
("users", "0020_request"),
|
||||
("users", "0021_ldapuser"),
|
||||
("users", "0022_ldapuser_sambasid"),
|
||||
("users", "0023_auto_20160724_1908"),
|
||||
("users", "0024_remove_ldapuser_mac_list"),
|
||||
("users", "0025_listshell"),
|
||||
("users", "0026_user_shell"),
|
||||
("users", "0027_auto_20160726_0216"),
|
||||
("users", "0028_auto_20160726_0227"),
|
||||
("users", "0029_auto_20160726_0229"),
|
||||
("users", "0030_auto_20160726_0357"),
|
||||
("users", "0031_auto_20160726_0359"),
|
||||
("users", "0032_auto_20160727_2122"),
|
||||
("users", "0033_remove_ldapuser_loginshell"),
|
||||
("users", "0034_auto_20161018_0037"),
|
||||
("users", "0035_auto_20161018_0046"),
|
||||
("users", "0036_auto_20161022_2146"),
|
||||
("users", "0037_auto_20161028_1906"),
|
||||
("users", "0038_auto_20161031_0258"),
|
||||
("users", "0039_auto_20161119_0033"),
|
||||
("users", "0040_auto_20161119_1709"),
|
||||
("users", "0041_listright_details"),
|
||||
("users", "0042_auto_20161126_2028"),
|
||||
("users", "0043_auto_20161224_1156"),
|
||||
("users", "0043_ban_state"),
|
||||
("users", "0044_user_ssh_public_key"),
|
||||
("users", "0045_merge"),
|
||||
("users", "0046_auto_20170617_1433"),
|
||||
("users", "0047_auto_20170618_0156"),
|
||||
("users", "0048_auto_20170618_0210"),
|
||||
("users", "0049_auto_20170618_1424"),
|
||||
("users", "0050_serviceuser_comment"),
|
||||
("users", "0051_user_telephone"),
|
||||
("users", "0052_ldapuser_shadowexpire"),
|
||||
("users", "0053_auto_20170626_2105"),
|
||||
("users", "0054_auto_20170626_2219"),
|
||||
("users", "0055_auto_20171003_0556"),
|
||||
("users", "0056_auto_20171015_2033"),
|
||||
("users", "0057_auto_20171023_0301"),
|
||||
("users", "0058_auto_20171025_0154"),
|
||||
("users", "0059_auto_20171025_1854"),
|
||||
("users", "0060_auto_20171120_0317"),
|
||||
("users", "0061_auto_20171230_2033"),
|
||||
("users", "0062_auto_20171231_0056"),
|
||||
("users", "0063_auto_20171231_0140"),
|
||||
("users", "0064_auto_20171231_0150"),
|
||||
("users", "0065_auto_20171231_2053"),
|
||||
("users", "0066_grouppermissions"),
|
||||
("users", "0067_serveurpermission"),
|
||||
("users", "0068_auto_20180107_2245"),
|
||||
("users", "0069_club_mailing"),
|
||||
("users", "0070_auto_20180324_1906"),
|
||||
("users", "0071_auto_20180415_1252"),
|
||||
("users", "0072_auto_20180426_2021"),
|
||||
("users", "0073_auto_20180629_1614"),
|
||||
("users", "0074_auto_20180810_2104"),
|
||||
("users", "0074_auto_20180814_1059"),
|
||||
("users", "0075_merge_20180815_2202"),
|
||||
("users", "0076_auto_20180818_1321"),
|
||||
("users", "0077_auto_20180824_1750"),
|
||||
("users", "0078_auto_20181011_1405"),
|
||||
("users", "0079_auto_20181228_2039"),
|
||||
("users", "0080_auto_20190108_1726"),
|
||||
("users", "0081_auto_20190317_0302"),
|
||||
("users", "0082_auto_20190908_1338"),
|
||||
("users", "0083_user_shortcuts_enabled"),
|
||||
("users", "0084_auto_20191120_0159"),
|
||||
("users", "0085_user_email_state"),
|
||||
("users", "0086_user_email_change_date"),
|
||||
("users", "0087_request_email"),
|
||||
("users", "0088_auto_20200417_2312"),
|
||||
("users", "0089_auto_20200418_0112"),
|
||||
("users", "0090_auto_20200421_1825"),
|
||||
("users", "0091_auto_20200423_1256"),
|
||||
("users", "0092_auto_20200502_0057"),
|
||||
("users", "0093_user_profile_image"),
|
||||
("users", "0094_remove_user_profile_image"),
|
||||
("users", "0095_user_theme"),
|
||||
("users", "0096_auto_20210110_1811"),
|
||||
("cotisations", "0001_initial"),
|
||||
("cotisations", "0002_remove_facture_article"),
|
||||
("cotisations", "0003_auto_20160702_1448"),
|
||||
("cotisations", "0004_auto_20160702_1528"),
|
||||
("cotisations", "0005_auto_20160702_1532"),
|
||||
("cotisations", "0006_auto_20160702_1534"),
|
||||
("cotisations", "0007_auto_20160702_1543"),
|
||||
("cotisations", "0008_auto_20160702_1614"),
|
||||
("cotisations", "0009_remove_cotisation_user"),
|
||||
("cotisations", "0010_auto_20160702_1840"),
|
||||
("cotisations", "0011_auto_20160702_1911"),
|
||||
("cotisations", "0012_auto_20160704_0118"),
|
||||
("cotisations", "0013_auto_20160711_2240"),
|
||||
("cotisations", "0014_auto_20160712_0245"),
|
||||
("cotisations", "0015_auto_20160714_2142"),
|
||||
("cotisations", "0016_auto_20160715_0110"),
|
||||
("cotisations", "0017_auto_20170718_2329"),
|
||||
("cotisations", "0018_paiement_type_paiement"),
|
||||
("cotisations", "0019_auto_20170819_0055"),
|
||||
("cotisations", "0020_auto_20170819_0057"),
|
||||
("cotisations", "0021_auto_20170819_0104"),
|
||||
("cotisations", "0022_auto_20170824_0128"),
|
||||
("cotisations", "0023_auto_20170902_1303"),
|
||||
("cotisations", "0024_auto_20171015_2033"),
|
||||
("cotisations", "0025_article_type_user"),
|
||||
("cotisations", "0026_auto_20171028_0126"),
|
||||
("cotisations", "0027_auto_20171029_1156"),
|
||||
("cotisations", "0028_auto_20171231_0007"),
|
||||
("cotisations", "0029_auto_20180414_2056"),
|
||||
("cotisations", "0030_custom_payment"),
|
||||
("cotisations", "0031_comnpaypayment_production"),
|
||||
("cotisations", "0032_custom_invoice"),
|
||||
("cotisations", "0033_auto_20180818_1319"),
|
||||
("cotisations", "0034_auto_20180831_1532"),
|
||||
("cotisations", "0035_notepayment"),
|
||||
("cotisations", "0036_custominvoice_remark"),
|
||||
("cotisations", "0037_costestimate"),
|
||||
("cotisations", "0038_auto_20181231_1657"),
|
||||
("cotisations", "0039_freepayment"),
|
||||
("cotisations", "0040_auto_20191002_2335"),
|
||||
("cotisations", "0041_auto_20191103_2131"),
|
||||
("cotisations", "0042_auto_20191120_0159"),
|
||||
("cotisations", "0043_separation_membership_connection_p1"),
|
||||
("cotisations", "0044_separation_membership_connection_p2"),
|
||||
("cotisations", "0045_separation_membership_connection_p3"),
|
||||
("cotisations", "0046_article_need_membership"),
|
||||
("cotisations", "0047_article_need_membership_init"),
|
||||
("cotisations", "0048_auto_20201017_0018"),
|
||||
("cotisations", "0049_auto_20201102_2305"),
|
||||
("cotisations", "0050_auto_20201102_2342"),
|
||||
("cotisations", "0051_auto_20201228_1636"),
|
||||
("machines", "0001_initial"),
|
||||
("machines", "0002_auto_20160703_1444"),
|
||||
("machines", "0003_auto_20160703_1450"),
|
||||
("machines", "0004_auto_20160703_1451"),
|
||||
("machines", "0005_auto_20160703_1523"),
|
||||
("machines", "0006_auto_20160703_1813"),
|
||||
("machines", "0007_auto_20160703_1816"),
|
||||
("machines", "0008_remove_interface_ipv6"),
|
||||
("machines", "0009_auto_20160703_2358"),
|
||||
("machines", "0010_auto_20160704_0104"),
|
||||
("machines", "0011_auto_20160704_0105"),
|
||||
("machines", "0012_auto_20160704_0118"),
|
||||
("machines", "0013_auto_20160705_1014"),
|
||||
("machines", "0014_auto_20160706_1220"),
|
||||
("machines", "0015_auto_20160707_0105"),
|
||||
("machines", "0016_auto_20160708_1633"),
|
||||
("machines", "0017_auto_20160708_1645"),
|
||||
("machines", "0018_auto_20160708_1813"),
|
||||
("machines", "0019_auto_20160718_1141"),
|
||||
("machines", "0020_auto_20160718_1849"),
|
||||
("machines", "0021_auto_20161006_1943"),
|
||||
("machines", "0022_auto_20161011_1829"),
|
||||
("machines", "0023_iplist_ip_type"),
|
||||
("machines", "0024_machinetype_need_infra"),
|
||||
("machines", "0025_auto_20161023_0038"),
|
||||
("machines", "0026_auto_20161026_1348"),
|
||||
("machines", "0027_alias"),
|
||||
("machines", "0028_iptype_domaine_ip"),
|
||||
("machines", "0029_iptype_domaine_range"),
|
||||
("machines", "0030_auto_20161118_1730"),
|
||||
("machines", "0031_auto_20161119_1709"),
|
||||
("machines", "0032_auto_20161119_1850"),
|
||||
("machines", "0033_extension_need_infra"),
|
||||
("machines", "0034_iplist_need_infra"),
|
||||
("machines", "0035_auto_20161224_1201"),
|
||||
("machines", "0036_auto_20161224_1204"),
|
||||
("machines", "0037_domain_cname"),
|
||||
("machines", "0038_auto_20161224_1721"),
|
||||
("machines", "0039_auto_20161224_1732"),
|
||||
("machines", "0040_remove_interface_dns"),
|
||||
("machines", "0041_remove_ns_interface"),
|
||||
("machines", "0042_ns_ns"),
|
||||
("machines", "0043_auto_20170721_0350"),
|
||||
("machines", "0044_auto_20170808_0233"),
|
||||
("machines", "0045_auto_20170808_0348"),
|
||||
("machines", "0046_auto_20170808_1423"),
|
||||
("machines", "0047_auto_20170809_0606"),
|
||||
("machines", "0048_auto_20170823_2315"),
|
||||
("machines", "0049_vlan"),
|
||||
("machines", "0050_auto_20170826_0022"),
|
||||
("machines", "0051_iptype_vlan"),
|
||||
("machines", "0052_auto_20170828_2322"),
|
||||
("machines", "0053_text"),
|
||||
("machines", "0054_text_zone"),
|
||||
("machines", "0055_nas"),
|
||||
("machines", "0056_nas_port_access_mode"),
|
||||
("machines", "0057_nas_autocapture_mac"),
|
||||
("machines", "0058_auto_20171002_0350"),
|
||||
("machines", "0059_iptype_prefix_v6"),
|
||||
("machines", "0060_iptype_ouverture_ports"),
|
||||
("machines", "0061_auto_20171015_2033"),
|
||||
("machines", "0062_extension_origin_v6"),
|
||||
("machines", "0063_auto_20171020_0040"),
|
||||
("machines", "0064_auto_20171115_0253"),
|
||||
("machines", "0065_auto_20171115_1514"),
|
||||
("machines", "0066_srv"),
|
||||
("machines", "0067_auto_20171116_0152"),
|
||||
("machines", "0068_auto_20171116_0252"),
|
||||
("machines", "0069_auto_20171116_0822"),
|
||||
("machines", "0070_auto_20171231_1947"),
|
||||
("machines", "0071_auto_20171231_2100"),
|
||||
("machines", "0072_auto_20180108_1822"),
|
||||
("machines", "0073_auto_20180128_2203"),
|
||||
("machines", "0074_auto_20180129_0352"),
|
||||
("machines", "0075_auto_20180130_0052"),
|
||||
("machines", "0076_auto_20180130_1623"),
|
||||
("machines", "0077_auto_20180409_2243"),
|
||||
("machines", "0078_auto_20180415_1252"),
|
||||
("machines", "0079_auto_20180416_0107"),
|
||||
("machines", "0080_auto_20180502_2334"),
|
||||
("machines", "0081_auto_20180521_1413"),
|
||||
("machines", "0082_auto_20180525_2209"),
|
||||
("machines", "0083_remove_duplicate_rights"),
|
||||
("machines", "0084_dname"),
|
||||
("machines", "0085_sshfingerprint"),
|
||||
("machines", "0086_role"),
|
||||
("machines", "0087_dnssec"),
|
||||
("machines", "0088_iptype_prefix_v6_length"),
|
||||
("machines", "0089_auto_20180805_1148"),
|
||||
("machines", "0090_auto_20180805_1459"),
|
||||
("machines", "0091_auto_20180806_2310"),
|
||||
("machines", "0092_auto_20180807_0926"),
|
||||
("machines", "0093_auto_20180807_1115"),
|
||||
("machines", "0094_auto_20180815_1918"),
|
||||
("machines", "0095_auto_20180919_2225"),
|
||||
("machines", "0096_auto_20181013_1417"),
|
||||
("machines", "0097_extension_dnssec"),
|
||||
("machines", "0098_auto_20190102_1745"),
|
||||
("machines", "0099_role_recursive_dns"),
|
||||
("machines", "0100_auto_20190102_1753"),
|
||||
("machines", "0101_auto_20190108_1623"),
|
||||
("machines", "0102_auto_20190303_1611"),
|
||||
("machines", "0103_auto_20191002_2222"),
|
||||
("machines", "0104_auto_20191002_2231"),
|
||||
("machines", "0105_dname_ttl"),
|
||||
("machines", "0106_auto_20191120_0159"),
|
||||
("machines", "0107_fix_lowercase_domain"),
|
||||
("machines", "0108_ipv6list_active"),
|
||||
("preferences", "0001_initial"),
|
||||
("preferences", "0002_auto_20170625_1923"),
|
||||
("preferences", "0003_optionaluser_solde_negatif"),
|
||||
("preferences", "0004_assooption_services"),
|
||||
("preferences", "0005_auto_20170824_0139"),
|
||||
("preferences", "0006_auto_20170824_0143"),
|
||||
("preferences", "0007_auto_20170824_2056"),
|
||||
("preferences", "0008_auto_20170824_2122"),
|
||||
("preferences", "0009_assooption_utilisateur_asso"),
|
||||
("preferences", "0010_auto_20170825_0459"),
|
||||
("preferences", "0011_auto_20170825_2307"),
|
||||
("preferences", "0012_generaloption_req_expire_hrs"),
|
||||
("preferences", "0013_generaloption_site_name"),
|
||||
("preferences", "0014_generaloption_email_from"),
|
||||
("preferences", "0015_optionaltopologie_radius_general_policy"),
|
||||
("preferences", "0016_auto_20170902_1520"),
|
||||
("preferences", "0017_mailmessageoption"),
|
||||
("preferences", "0018_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0019_remove_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0020_optionalmachine_ipv6"),
|
||||
("preferences", "0021_auto_20171015_1741"),
|
||||
("preferences", "0022_auto_20171015_1758"),
|
||||
("preferences", "0023_auto_20171015_2033"),
|
||||
("preferences", "0024_optionaluser_all_can_create"),
|
||||
("preferences", "0025_auto_20171231_2142"),
|
||||
("preferences", "0025_generaloption_general_message"),
|
||||
("preferences", "0026_auto_20171216_0401"),
|
||||
("preferences", "0027_merge_20180106_2019"),
|
||||
("preferences", "0028_assooption_description"),
|
||||
("preferences", "0028_auto_20180111_1129"),
|
||||
("preferences", "0028_auto_20180128_2203"),
|
||||
("preferences", "0029_auto_20180111_1134"),
|
||||
("preferences", "0029_auto_20180318_0213"),
|
||||
("preferences", "0029_auto_20180318_1005"),
|
||||
("preferences", "0030_auto_20180111_2346"),
|
||||
("preferences", "0030_merge_20180320_1419"),
|
||||
("preferences", "0031_auto_20180323_0218"),
|
||||
("preferences", "0031_optionaluser_self_adhesion"),
|
||||
("preferences", "0032_optionaluser_min_online_payment"),
|
||||
("preferences", "0032_optionaluser_shell_default"),
|
||||
("preferences", "0033_accueiloption"),
|
||||
("preferences", "0033_generaloption_gtu_sum_up"),
|
||||
("preferences", "0034_auto_20180114_2025"),
|
||||
("preferences", "0034_auto_20180416_1120"),
|
||||
("preferences", "0035_auto_20180114_2132"),
|
||||
("preferences", "0035_optionaluser_allow_self_subscription"),
|
||||
("preferences", "0036_auto_20180114_2141"),
|
||||
("preferences", "0037_auto_20180114_2156"),
|
||||
("preferences", "0038_auto_20180114_2209"),
|
||||
("preferences", "0039_auto_20180115_0003"),
|
||||
("preferences", "0040_auto_20180129_1745"),
|
||||
("preferences", "0041_merge_20180130_0052"),
|
||||
("preferences", "0042_auto_20180222_1743"),
|
||||
("preferences", "0043_optionalmachine_create_machine"),
|
||||
("preferences", "0044_remove_payment_pass"),
|
||||
("preferences", "0045_remove_unused_payment_fields"),
|
||||
("preferences", "0046_optionaluser_mail_extension"),
|
||||
("preferences", "0047_mailcontact"),
|
||||
("preferences", "0048_auto_20180811_1515"),
|
||||
("preferences", "0049_optionaluser_self_change_shell"),
|
||||
("preferences", "0050_auto_20180818_1329"),
|
||||
("preferences", "0051_auto_20180919_2225"),
|
||||
("preferences", "0052_optionaluser_delete_notyetactive"),
|
||||
("preferences", "0053_optionaluser_self_change_room"),
|
||||
("preferences", "0055_generaloption_main_site_url"),
|
||||
("preferences", "0056_1_radiusoption"),
|
||||
("preferences", "0056_2_radiusoption"),
|
||||
("preferences", "0056_3_radiusoption"),
|
||||
("preferences", "0056_4_radiusoption"),
|
||||
("preferences", "0057_optionaluser_all_users_active"),
|
||||
("preferences", "0058_auto_20190108_1650"),
|
||||
("preferences", "0059_auto_20190120_1739"),
|
||||
("preferences", "0060_auto_20190712_1821"),
|
||||
("preferences", "0061_optionaluser_allow_archived_connexion"),
|
||||
("preferences", "0062_auto_20190910_1909"),
|
||||
("preferences", "0063_mandate"),
|
||||
("preferences", "0064_auto_20191008_1335"),
|
||||
("preferences", "0065_auto_20191010_1227"),
|
||||
("preferences", "0066_optionalmachine_default_dns_ttl"),
|
||||
("preferences", "0067_auto_20191120_0159"),
|
||||
("preferences", "0068_optionaluser_allow_set_password_during_user_creation"),
|
||||
("preferences", "0069_optionaluser_disable_emailnotyetconfirmed"),
|
||||
("preferences", "0070_auto_20200419_0225"),
|
||||
("preferences", "0071_optionaluser_self_change_pseudo"),
|
||||
("topologie", "0001_initial"),
|
||||
("topologie", "0002_auto_20160703_1118"),
|
||||
("topologie", "0003_room"),
|
||||
("topologie", "0004_auto_20160703_1122"),
|
||||
("topologie", "0005_auto_20160703_1123"),
|
||||
("topologie", "0006_auto_20160703_1129"),
|
||||
("topologie", "0007_auto_20160703_1148"),
|
||||
("topologie", "0008_port_room"),
|
||||
("topologie", "0009_auto_20160703_1200"),
|
||||
("topologie", "0010_auto_20160704_2148"),
|
||||
("topologie", "0011_auto_20160704_2153"),
|
||||
("topologie", "0012_port_machine_interface"),
|
||||
("topologie", "0013_port_related"),
|
||||
("topologie", "0014_auto_20160706_1238"),
|
||||
("topologie", "0015_auto_20160706_1452"),
|
||||
("topologie", "0016_auto_20160706_1531"),
|
||||
("topologie", "0017_auto_20160718_1141"),
|
||||
("topologie", "0018_room_details"),
|
||||
("topologie", "0019_auto_20161026_1348"),
|
||||
("topologie", "0020_auto_20161119_0033"),
|
||||
("topologie", "0021_port_radius"),
|
||||
("topologie", "0022_auto_20161211_1622"),
|
||||
("topologie", "0023_auto_20170817_1654"),
|
||||
("topologie", "0023_auto_20170826_1530"),
|
||||
("topologie", "0024_auto_20170818_1021"),
|
||||
("topologie", "0024_auto_20170826_1800"),
|
||||
("topologie", "0025_merge_20170902_1242"),
|
||||
("topologie", "0026_auto_20170902_1245"),
|
||||
("topologie", "0027_auto_20170905_1442"),
|
||||
("topologie", "0028_auto_20170913_1503"),
|
||||
("topologie", "0029_auto_20171002_0334"),
|
||||
("topologie", "0030_auto_20171004_0235"),
|
||||
("topologie", "0031_auto_20171015_2033"),
|
||||
("topologie", "0032_auto_20171026_0338"),
|
||||
("topologie", "0033_auto_20171231_1743"),
|
||||
("topologie", "0034_borne"),
|
||||
("topologie", "0035_auto_20180324_0023"),
|
||||
("topologie", "0036_transferborne"),
|
||||
("topologie", "0037_auto_20180325_0127"),
|
||||
("topologie", "0038_transfersw"),
|
||||
("topologie", "0039_port_new_switch"),
|
||||
("topologie", "0040_transferports"),
|
||||
("topologie", "0041_transferportsw"),
|
||||
("topologie", "0042_transferswitch"),
|
||||
("topologie", "0043_renamenewswitch"),
|
||||
("topologie", "0044_auto_20180326_0002"),
|
||||
("topologie", "0045_auto_20180326_0123"),
|
||||
("topologie", "0046_auto_20180326_0129"),
|
||||
("topologie", "0047_ap_machine"),
|
||||
("topologie", "0048_ap_machine"),
|
||||
("topologie", "0049_switchs_machine"),
|
||||
("topologie", "0050_port_new_switch"),
|
||||
("topologie", "0051_switchs_machine"),
|
||||
("topologie", "0052_transferports"),
|
||||
("topologie", "0053_finalsw"),
|
||||
("topologie", "0054_auto_20180326_1742"),
|
||||
("topologie", "0055_auto_20180329_0431"),
|
||||
("topologie", "0056_building_switchbay"),
|
||||
("topologie", "0057_auto_20180408_0316"),
|
||||
("topologie", "0058_remove_switch_location"),
|
||||
("topologie", "0059_auto_20180415_2249"),
|
||||
("topologie", "0060_server"),
|
||||
("topologie", "0061_portprofile"),
|
||||
("topologie", "0062_auto_20180815_1918"),
|
||||
("topologie", "0063_auto_20180919_2225"),
|
||||
("topologie", "0064_switch_automatic_provision"),
|
||||
("topologie", "0065_auto_20180927_1836"),
|
||||
("topologie", "0066_modelswitch_commercial_name"),
|
||||
("topologie", "0067_auto_20181230_1819"),
|
||||
("topologie", "0068_auto_20190102_1758"),
|
||||
("topologie", "0069_auto_20190108_1439"),
|
||||
("topologie", "0070_auto_20190218_1743"),
|
||||
("topologie", "0071_auto_20190218_1936"),
|
||||
("topologie", "0072_auto_20190720_2318"),
|
||||
("topologie", "0073_auto_20191120_0159"),
|
||||
("topologie", "0074_auto_20200419_1640"),
|
||||
]
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="User",
|
||||
bases=(
|
||||
re2o.mixins.RevMixin,
|
||||
re2o.field_permissions.FieldPermissionModelMixin,
|
||||
django.contrib.auth.models.AbstractBaseUser,
|
||||
django.contrib.auth.models.PermissionsMixin,
|
||||
re2o.mixins.AclMixin,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("surname", models.CharField(max_length=255)),
|
||||
(
|
||||
"pseudo",
|
||||
models.CharField(
|
||||
max_length=32,
|
||||
unique=True,
|
||||
help_text="Must only contain letters, numerals or dashes.",
|
||||
validators=[users.models.linux_user_validator],
|
||||
),
|
||||
),
|
||||
(
|
||||
"email",
|
||||
models.EmailField(
|
||||
blank=True,
|
||||
default="",
|
||||
help_text="External email address allowing us to contact you.",
|
||||
),
|
||||
),
|
||||
(
|
||||
"local_email_redirect",
|
||||
models.BooleanField(
|
||||
default=False,
|
||||
help_text="Enable redirection of the local email messages to the main email address.",
|
||||
),
|
||||
),
|
||||
(
|
||||
"local_email_enabled",
|
||||
models.BooleanField(
|
||||
default=False, help_text="Enable the local email account."
|
||||
),
|
||||
),
|
||||
(
|
||||
"comment",
|
||||
models.CharField(
|
||||
help_text="Comment, school year.", max_length=255, blank=True
|
||||
),
|
||||
),
|
||||
("pwd_ntlm", models.CharField(max_length=255)),
|
||||
(
|
||||
"state",
|
||||
models.IntegerField(
|
||||
choices=(
|
||||
(0, "Active"),
|
||||
(1, "Disabled"),
|
||||
(2, "Archived"),
|
||||
(3, "Not yet active"),
|
||||
(4, "Fully archived"),
|
||||
),
|
||||
default=3,
|
||||
help_text="Account state.",
|
||||
),
|
||||
),
|
||||
(
|
||||
"email_state",
|
||||
models.IntegerField(
|
||||
choices=(
|
||||
(0, "Confirmed"),
|
||||
(1, "Not confirmed"),
|
||||
(2, "Waiting for email confirmation"),
|
||||
),
|
||||
default=2,
|
||||
),
|
||||
),
|
||||
("registered", models.DateTimeField(auto_now_add=True)),
|
||||
("telephone", models.CharField(max_length=15, blank=True, null=True)),
|
||||
(
|
||||
"uid_number",
|
||||
models.PositiveIntegerField(
|
||||
default=users.models.get_fresh_user_uid, unique=True
|
||||
),
|
||||
),
|
||||
(
|
||||
"legacy_uid",
|
||||
models.PositiveIntegerField(
|
||||
unique=True,
|
||||
blank=True,
|
||||
null=True,
|
||||
help_text="Optionnal legacy uid, for import and transition purpose",
|
||||
),
|
||||
),
|
||||
(
|
||||
"shortcuts_enabled",
|
||||
models.BooleanField(
|
||||
verbose_name="enable shortcuts on Re2o website", default=True
|
||||
),
|
||||
),
|
||||
("email_change_date", models.DateTimeField(auto_now_add=True)),
|
||||
("theme", models.CharField(max_length=255, default="default.css")),
|
||||
(
|
||||
"is_superuser",
|
||||
models.BooleanField(
|
||||
default=False,
|
||||
help_text="Designates that this user has all permissions without explicitly assigning them.",
|
||||
verbose_name="superuser status",
|
||||
),
|
||||
),
|
||||
(
|
||||
"last_login",
|
||||
models.DateTimeField(
|
||||
blank=True, null=True, verbose_name="last login"
|
||||
),
|
||||
),
|
||||
(
|
||||
"password",
|
||||
models.CharField(
|
||||
max_length=128, verbose_name="password"
|
||||
),
|
||||
),
|
||||
("groups", models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
|
||||
("user_permissions", models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'))
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("change_user_password", "Can change the password of a user"),
|
||||
("change_user_state", "Can edit the state of a user"),
|
||||
("change_user_force", "Can force the move"),
|
||||
("change_user_shell", "Can edit the shell of a user"),
|
||||
("change_user_pseudo", "Can edit the pseudo of a user"),
|
||||
(
|
||||
"change_user_groups",
|
||||
"Can edit the groups of rights of a user (critical permission)",
|
||||
),
|
||||
(
|
||||
"change_all_users",
|
||||
"Can edit all users, including those with rights",
|
||||
),
|
||||
("view_user", "Can view a user object"),
|
||||
),
|
||||
"verbose_name": "user (member or club)",
|
||||
"verbose_name_plural": "users (members or clubs)",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Adherent",
|
||||
fields=[
|
||||
(
|
||||
"user_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255)),
|
||||
(
|
||||
"gpg_fingerprint",
|
||||
models.CharField(max_length=49, blank=True, null=True),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "member", "verbose_name_plural": "members"},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Club",
|
||||
fields=[
|
||||
(
|
||||
"user_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
("mailing", models.BooleanField(default=False)),
|
||||
],
|
||||
options={"verbose_name": "club", "verbose_name_plural": "clubs"},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ServiceUser",
|
||||
bases=(
|
||||
re2o.mixins.RevMixin,
|
||||
re2o.mixins.AclMixin,
|
||||
django.contrib.auth.models.AbstractBaseUser,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"pseudo",
|
||||
models.CharField(
|
||||
max_length=32,
|
||||
unique=True,
|
||||
help_text="Must only contain letters, numerals or dashes.",
|
||||
validators=[users.models.linux_user_validator],
|
||||
),
|
||||
),
|
||||
(
|
||||
"access_group",
|
||||
models.CharField(
|
||||
choices=(
|
||||
("auth", "auth"),
|
||||
("readonly", "readonly"),
|
||||
("usermgmt", "usermgmt"),
|
||||
),
|
||||
default="readonly",
|
||||
max_length=32,
|
||||
),
|
||||
),
|
||||
(
|
||||
"comment",
|
||||
models.CharField(help_text="Comment.", max_length=255, blank=True),
|
||||
),
|
||||
(
|
||||
"last_login",
|
||||
models.DateTimeField(
|
||||
blank=True, null=True, verbose_name="last login"
|
||||
),
|
||||
),
|
||||
(
|
||||
"password",
|
||||
models.CharField(
|
||||
max_length=128, verbose_name="password"
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_serviceuser", "Can view a service user object"),
|
||||
),
|
||||
"verbose_name": "service user",
|
||||
"verbose_name_plural": "service users",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="School",
|
||||
bases=(re2o.mixins.RevMixin, re2o.mixins.AclMixin, models.Model),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255)),
|
||||
],
|
||||
options={
|
||||
"permissions": (("view_school", "Can view a school object"),),
|
||||
"verbose_name": "school",
|
||||
"verbose_name_plural": "schools",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ListRight",
|
||||
bases=(
|
||||
re2o.mixins.RevMixin,
|
||||
re2o.mixins.AclMixin,
|
||||
django.contrib.auth.models.Group,
|
||||
),
|
||||
fields=[
|
||||
(
|
||||
"group_ptr",
|
||||
models.OneToOneField(
|
||||
parent_link=True,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
serialize=False,
|
||||
to="auth.Group",
|
||||
),
|
||||
),
|
||||
(
|
||||
"unix_name",
|
||||
models.CharField(
|
||||
max_length=255,
|
||||
unique=True,
|
||||
validators=[
|
||||
django.core.validators.RegexValidator(
|
||||
"^[a-z]+$",
|
||||
message=(
|
||||
"UNIX group names can only contain lower case letters."
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
("gid", models.PositiveIntegerField(unique=True, null=True)),
|
||||
("critical", models.BooleanField(default=False)),
|
||||
(
|
||||
"details",
|
||||
models.CharField(
|
||||
help_text="Description.", max_length=255, blank=True
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_listright", "Can view a group of rights object"),
|
||||
),
|
||||
"verbose_name": "group of rights",
|
||||
"verbose_name_plural": "groups of rights",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ListShell",
|
||||
bases=(re2o.mixins.RevMixin, re2o.mixins.AclMixin, models.Model),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("shell", models.CharField(max_length=255, unique=True)),
|
||||
],
|
||||
options={
|
||||
"permissions": (("view_listshell", "Can view a shell object"),),
|
||||
"verbose_name": "shell",
|
||||
"verbose_name_plural": "shells",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Ban",
|
||||
bases=(re2o.mixins.RevMixin, re2o.mixins.AclMixin, models.Model),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("raison", models.CharField(max_length=255)),
|
||||
("date_start", models.DateTimeField(auto_now_add=True)),
|
||||
("date_end", models.DateTimeField()),
|
||||
(
|
||||
"state",
|
||||
models.IntegerField(
|
||||
choices=(
|
||||
(0, "HARD (no access)"),
|
||||
(1, "SOFT (local access only)"),
|
||||
(2, "RESTRICTED (speed limitation)"),
|
||||
),
|
||||
default=0,
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (("view_ban", "Can view a ban object"),),
|
||||
"verbose_name": "ban",
|
||||
"verbose_name_plural": "bans",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Whitelist",
|
||||
bases=(re2o.mixins.RevMixin, re2o.mixins.AclMixin, models.Model),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("raison", models.CharField(max_length=255)),
|
||||
("date_start", models.DateTimeField(auto_now_add=True)),
|
||||
("date_end", models.DateTimeField()),
|
||||
],
|
||||
options={
|
||||
"permissions": (("view_whitelist", "Can view a whitelist object"),),
|
||||
"verbose_name": "whitelist (free of charge access)",
|
||||
"verbose_name_plural": "whitelists (free of charge access)",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Request",
|
||||
bases=(models.Model,),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"type",
|
||||
models.CharField(
|
||||
max_length=2,
|
||||
choices=(("PW", "Password"), ("EM", "Email address")),
|
||||
),
|
||||
),
|
||||
("token", models.CharField(max_length=32)),
|
||||
("email", models.EmailField(blank=True, null=True)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True, editable=False)),
|
||||
("expires_at", models.DateTimeField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="EMailAddress",
|
||||
bases=(re2o.mixins.RevMixin, re2o.mixins.AclMixin, models.Model),
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"local_part",
|
||||
models.CharField(
|
||||
unique=True,
|
||||
max_length=128,
|
||||
help_text="Local part of the email address.",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"permissions": (
|
||||
("view_emailaddress", "Can view a local email account object"),
|
||||
),
|
||||
"verbose_name": "local email account",
|
||||
"verbose_name_plural": "local email accounts",
|
||||
},
|
||||
),
|
||||
]
|
494
users/migrations/0002_foreign_keys.py
Normal file
494
users/migrations/0002_foreign_keys.py
Normal file
|
@ -0,0 +1,494 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.29 on 2020-12-30 15:27
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import ldapdb.models.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('auth', '0008_alter_user_username_max_length'),
|
||||
('topologie', '0001_model_creation'),
|
||||
('users', '0001_model_creation'),
|
||||
]
|
||||
|
||||
replaces = [
|
||||
("users", "0001_initial"),
|
||||
("users", "0002_auto_20160630_2301"),
|
||||
("users", "0003_listrights_rights"),
|
||||
("users", "0004_auto_20160701_2312"),
|
||||
("users", "0005_auto_20160702_0006"),
|
||||
("users", "0006_ban"),
|
||||
("users", "0007_auto_20160702_2322"),
|
||||
("users", "0008_user_registered"),
|
||||
("users", "0009_user_room"),
|
||||
("users", "0010_auto_20160703_1226"),
|
||||
("users", "0011_auto_20160703_1227"),
|
||||
("users", "0012_auto_20160703_1230"),
|
||||
("users", "0013_auto_20160704_1547"),
|
||||
("users", "0014_auto_20160704_1548"),
|
||||
("users", "0015_whitelist"),
|
||||
("users", "0016_auto_20160706_1220"),
|
||||
("users", "0017_auto_20160707_0105"),
|
||||
("users", "0018_auto_20160707_0115"),
|
||||
("users", "0019_auto_20160708_1633"),
|
||||
("users", "0020_request"),
|
||||
("users", "0021_ldapuser"),
|
||||
("users", "0022_ldapuser_sambasid"),
|
||||
("users", "0023_auto_20160724_1908"),
|
||||
("users", "0024_remove_ldapuser_mac_list"),
|
||||
("users", "0025_listshell"),
|
||||
("users", "0026_user_shell"),
|
||||
("users", "0027_auto_20160726_0216"),
|
||||
("users", "0028_auto_20160726_0227"),
|
||||
("users", "0029_auto_20160726_0229"),
|
||||
("users", "0030_auto_20160726_0357"),
|
||||
("users", "0031_auto_20160726_0359"),
|
||||
("users", "0032_auto_20160727_2122"),
|
||||
("users", "0033_remove_ldapuser_loginshell"),
|
||||
("users", "0034_auto_20161018_0037"),
|
||||
("users", "0035_auto_20161018_0046"),
|
||||
("users", "0036_auto_20161022_2146"),
|
||||
("users", "0037_auto_20161028_1906"),
|
||||
("users", "0038_auto_20161031_0258"),
|
||||
("users", "0039_auto_20161119_0033"),
|
||||
("users", "0040_auto_20161119_1709"),
|
||||
("users", "0041_listright_details"),
|
||||
("users", "0042_auto_20161126_2028"),
|
||||
("users", "0043_auto_20161224_1156"),
|
||||
("users", "0043_ban_state"),
|
||||
("users", "0044_user_ssh_public_key"),
|
||||
("users", "0045_merge"),
|
||||
("users", "0046_auto_20170617_1433"),
|
||||
("users", "0047_auto_20170618_0156"),
|
||||
("users", "0048_auto_20170618_0210"),
|
||||
("users", "0049_auto_20170618_1424"),
|
||||
("users", "0050_serviceuser_comment"),
|
||||
("users", "0051_user_telephone"),
|
||||
("users", "0052_ldapuser_shadowexpire"),
|
||||
("users", "0053_auto_20170626_2105"),
|
||||
("users", "0054_auto_20170626_2219"),
|
||||
("users", "0055_auto_20171003_0556"),
|
||||
("users", "0056_auto_20171015_2033"),
|
||||
("users", "0057_auto_20171023_0301"),
|
||||
("users", "0058_auto_20171025_0154"),
|
||||
("users", "0059_auto_20171025_1854"),
|
||||
("users", "0060_auto_20171120_0317"),
|
||||
("users", "0061_auto_20171230_2033"),
|
||||
("users", "0062_auto_20171231_0056"),
|
||||
("users", "0063_auto_20171231_0140"),
|
||||
("users", "0064_auto_20171231_0150"),
|
||||
("users", "0065_auto_20171231_2053"),
|
||||
("users", "0066_grouppermissions"),
|
||||
("users", "0067_serveurpermission"),
|
||||
("users", "0068_auto_20180107_2245"),
|
||||
("users", "0069_club_mailing"),
|
||||
("users", "0070_auto_20180324_1906"),
|
||||
("users", "0071_auto_20180415_1252"),
|
||||
("users", "0072_auto_20180426_2021"),
|
||||
("users", "0073_auto_20180629_1614"),
|
||||
("users", "0074_auto_20180810_2104"),
|
||||
("users", "0074_auto_20180814_1059"),
|
||||
("users", "0075_merge_20180815_2202"),
|
||||
("users", "0076_auto_20180818_1321"),
|
||||
("users", "0077_auto_20180824_1750"),
|
||||
("users", "0078_auto_20181011_1405"),
|
||||
("users", "0079_auto_20181228_2039"),
|
||||
("users", "0080_auto_20190108_1726"),
|
||||
("users", "0081_auto_20190317_0302"),
|
||||
("users", "0082_auto_20190908_1338"),
|
||||
("users", "0083_user_shortcuts_enabled"),
|
||||
("users", "0084_auto_20191120_0159"),
|
||||
("users", "0085_user_email_state"),
|
||||
("users", "0086_user_email_change_date"),
|
||||
("users", "0087_request_email"),
|
||||
("users", "0088_auto_20200417_2312"),
|
||||
("users", "0089_auto_20200418_0112"),
|
||||
("users", "0090_auto_20200421_1825"),
|
||||
("users", "0091_auto_20200423_1256"),
|
||||
("users", "0092_auto_20200502_0057"),
|
||||
("users", "0093_user_profile_image"),
|
||||
("users", "0094_remove_user_profile_image"),
|
||||
("users", "0095_user_theme"),
|
||||
("users", "0096_auto_20210110_1811"),
|
||||
("cotisations", "0001_initial"),
|
||||
("cotisations", "0002_remove_facture_article"),
|
||||
("cotisations", "0003_auto_20160702_1448"),
|
||||
("cotisations", "0004_auto_20160702_1528"),
|
||||
("cotisations", "0005_auto_20160702_1532"),
|
||||
("cotisations", "0006_auto_20160702_1534"),
|
||||
("cotisations", "0007_auto_20160702_1543"),
|
||||
("cotisations", "0008_auto_20160702_1614"),
|
||||
("cotisations", "0009_remove_cotisation_user"),
|
||||
("cotisations", "0010_auto_20160702_1840"),
|
||||
("cotisations", "0011_auto_20160702_1911"),
|
||||
("cotisations", "0012_auto_20160704_0118"),
|
||||
("cotisations", "0013_auto_20160711_2240"),
|
||||
("cotisations", "0014_auto_20160712_0245"),
|
||||
("cotisations", "0015_auto_20160714_2142"),
|
||||
("cotisations", "0016_auto_20160715_0110"),
|
||||
("cotisations", "0017_auto_20170718_2329"),
|
||||
("cotisations", "0018_paiement_type_paiement"),
|
||||
("cotisations", "0019_auto_20170819_0055"),
|
||||
("cotisations", "0020_auto_20170819_0057"),
|
||||
("cotisations", "0021_auto_20170819_0104"),
|
||||
("cotisations", "0022_auto_20170824_0128"),
|
||||
("cotisations", "0023_auto_20170902_1303"),
|
||||
("cotisations", "0024_auto_20171015_2033"),
|
||||
("cotisations", "0025_article_type_user"),
|
||||
("cotisations", "0026_auto_20171028_0126"),
|
||||
("cotisations", "0027_auto_20171029_1156"),
|
||||
("cotisations", "0028_auto_20171231_0007"),
|
||||
("cotisations", "0029_auto_20180414_2056"),
|
||||
("cotisations", "0030_custom_payment"),
|
||||
("cotisations", "0031_comnpaypayment_production"),
|
||||
("cotisations", "0032_custom_invoice"),
|
||||
("cotisations", "0033_auto_20180818_1319"),
|
||||
("cotisations", "0034_auto_20180831_1532"),
|
||||
("cotisations", "0035_notepayment"),
|
||||
("cotisations", "0036_custominvoice_remark"),
|
||||
("cotisations", "0037_costestimate"),
|
||||
("cotisations", "0038_auto_20181231_1657"),
|
||||
("cotisations", "0039_freepayment"),
|
||||
("cotisations", "0040_auto_20191002_2335"),
|
||||
("cotisations", "0041_auto_20191103_2131"),
|
||||
("cotisations", "0042_auto_20191120_0159"),
|
||||
("cotisations", "0043_separation_membership_connection_p1"),
|
||||
("cotisations", "0044_separation_membership_connection_p2"),
|
||||
("cotisations", "0045_separation_membership_connection_p3"),
|
||||
("cotisations", "0046_article_need_membership"),
|
||||
("cotisations", "0047_article_need_membership_init"),
|
||||
("cotisations", "0048_auto_20201017_0018"),
|
||||
("cotisations", "0049_auto_20201102_2305"),
|
||||
("cotisations", "0050_auto_20201102_2342"),
|
||||
("cotisations", "0051_auto_20201228_1636"),
|
||||
("machines", "0001_initial"),
|
||||
("machines", "0002_auto_20160703_1444"),
|
||||
("machines", "0003_auto_20160703_1450"),
|
||||
("machines", "0004_auto_20160703_1451"),
|
||||
("machines", "0005_auto_20160703_1523"),
|
||||
("machines", "0006_auto_20160703_1813"),
|
||||
("machines", "0007_auto_20160703_1816"),
|
||||
("machines", "0008_remove_interface_ipv6"),
|
||||
("machines", "0009_auto_20160703_2358"),
|
||||
("machines", "0010_auto_20160704_0104"),
|
||||
("machines", "0011_auto_20160704_0105"),
|
||||
("machines", "0012_auto_20160704_0118"),
|
||||
("machines", "0013_auto_20160705_1014"),
|
||||
("machines", "0014_auto_20160706_1220"),
|
||||
("machines", "0015_auto_20160707_0105"),
|
||||
("machines", "0016_auto_20160708_1633"),
|
||||
("machines", "0017_auto_20160708_1645"),
|
||||
("machines", "0018_auto_20160708_1813"),
|
||||
("machines", "0019_auto_20160718_1141"),
|
||||
("machines", "0020_auto_20160718_1849"),
|
||||
("machines", "0021_auto_20161006_1943"),
|
||||
("machines", "0022_auto_20161011_1829"),
|
||||
("machines", "0023_iplist_ip_type"),
|
||||
("machines", "0024_machinetype_need_infra"),
|
||||
("machines", "0025_auto_20161023_0038"),
|
||||
("machines", "0026_auto_20161026_1348"),
|
||||
("machines", "0027_alias"),
|
||||
("machines", "0028_iptype_domaine_ip"),
|
||||
("machines", "0029_iptype_domaine_range"),
|
||||
("machines", "0030_auto_20161118_1730"),
|
||||
("machines", "0031_auto_20161119_1709"),
|
||||
("machines", "0032_auto_20161119_1850"),
|
||||
("machines", "0033_extension_need_infra"),
|
||||
("machines", "0034_iplist_need_infra"),
|
||||
("machines", "0035_auto_20161224_1201"),
|
||||
("machines", "0036_auto_20161224_1204"),
|
||||
("machines", "0037_domain_cname"),
|
||||
("machines", "0038_auto_20161224_1721"),
|
||||
("machines", "0039_auto_20161224_1732"),
|
||||
("machines", "0040_remove_interface_dns"),
|
||||
("machines", "0041_remove_ns_interface"),
|
||||
("machines", "0042_ns_ns"),
|
||||
("machines", "0043_auto_20170721_0350"),
|
||||
("machines", "0044_auto_20170808_0233"),
|
||||
("machines", "0045_auto_20170808_0348"),
|
||||
("machines", "0046_auto_20170808_1423"),
|
||||
("machines", "0047_auto_20170809_0606"),
|
||||
("machines", "0048_auto_20170823_2315"),
|
||||
("machines", "0049_vlan"),
|
||||
("machines", "0050_auto_20170826_0022"),
|
||||
("machines", "0051_iptype_vlan"),
|
||||
("machines", "0052_auto_20170828_2322"),
|
||||
("machines", "0053_text"),
|
||||
("machines", "0054_text_zone"),
|
||||
("machines", "0055_nas"),
|
||||
("machines", "0056_nas_port_access_mode"),
|
||||
("machines", "0057_nas_autocapture_mac"),
|
||||
("machines", "0058_auto_20171002_0350"),
|
||||
("machines", "0059_iptype_prefix_v6"),
|
||||
("machines", "0060_iptype_ouverture_ports"),
|
||||
("machines", "0061_auto_20171015_2033"),
|
||||
("machines", "0062_extension_origin_v6"),
|
||||
("machines", "0063_auto_20171020_0040"),
|
||||
("machines", "0064_auto_20171115_0253"),
|
||||
("machines", "0065_auto_20171115_1514"),
|
||||
("machines", "0066_srv"),
|
||||
("machines", "0067_auto_20171116_0152"),
|
||||
("machines", "0068_auto_20171116_0252"),
|
||||
("machines", "0069_auto_20171116_0822"),
|
||||
("machines", "0070_auto_20171231_1947"),
|
||||
("machines", "0071_auto_20171231_2100"),
|
||||
("machines", "0072_auto_20180108_1822"),
|
||||
("machines", "0073_auto_20180128_2203"),
|
||||
("machines", "0074_auto_20180129_0352"),
|
||||
("machines", "0075_auto_20180130_0052"),
|
||||
("machines", "0076_auto_20180130_1623"),
|
||||
("machines", "0077_auto_20180409_2243"),
|
||||
("machines", "0078_auto_20180415_1252"),
|
||||
("machines", "0079_auto_20180416_0107"),
|
||||
("machines", "0080_auto_20180502_2334"),
|
||||
("machines", "0081_auto_20180521_1413"),
|
||||
("machines", "0082_auto_20180525_2209"),
|
||||
("machines", "0083_remove_duplicate_rights"),
|
||||
("machines", "0084_dname"),
|
||||
("machines", "0085_sshfingerprint"),
|
||||
("machines", "0086_role"),
|
||||
("machines", "0087_dnssec"),
|
||||
("machines", "0088_iptype_prefix_v6_length"),
|
||||
("machines", "0089_auto_20180805_1148"),
|
||||
("machines", "0090_auto_20180805_1459"),
|
||||
("machines", "0091_auto_20180806_2310"),
|
||||
("machines", "0092_auto_20180807_0926"),
|
||||
("machines", "0093_auto_20180807_1115"),
|
||||
("machines", "0094_auto_20180815_1918"),
|
||||
("machines", "0095_auto_20180919_2225"),
|
||||
("machines", "0096_auto_20181013_1417"),
|
||||
("machines", "0097_extension_dnssec"),
|
||||
("machines", "0098_auto_20190102_1745"),
|
||||
("machines", "0099_role_recursive_dns"),
|
||||
("machines", "0100_auto_20190102_1753"),
|
||||
("machines", "0101_auto_20190108_1623"),
|
||||
("machines", "0102_auto_20190303_1611"),
|
||||
("machines", "0103_auto_20191002_2222"),
|
||||
("machines", "0104_auto_20191002_2231"),
|
||||
("machines", "0105_dname_ttl"),
|
||||
("machines", "0106_auto_20191120_0159"),
|
||||
("machines", "0107_fix_lowercase_domain"),
|
||||
("machines", "0108_ipv6list_active"),
|
||||
("preferences", "0001_initial"),
|
||||
("preferences", "0002_auto_20170625_1923"),
|
||||
("preferences", "0003_optionaluser_solde_negatif"),
|
||||
("preferences", "0004_assooption_services"),
|
||||
("preferences", "0005_auto_20170824_0139"),
|
||||
("preferences", "0006_auto_20170824_0143"),
|
||||
("preferences", "0007_auto_20170824_2056"),
|
||||
("preferences", "0008_auto_20170824_2122"),
|
||||
("preferences", "0009_assooption_utilisateur_asso"),
|
||||
("preferences", "0010_auto_20170825_0459"),
|
||||
("preferences", "0011_auto_20170825_2307"),
|
||||
("preferences", "0012_generaloption_req_expire_hrs"),
|
||||
("preferences", "0013_generaloption_site_name"),
|
||||
("preferences", "0014_generaloption_email_from"),
|
||||
("preferences", "0015_optionaltopologie_radius_general_policy"),
|
||||
("preferences", "0016_auto_20170902_1520"),
|
||||
("preferences", "0017_mailmessageoption"),
|
||||
("preferences", "0018_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0019_remove_optionaltopologie_mac_autocapture"),
|
||||
("preferences", "0020_optionalmachine_ipv6"),
|
||||
("preferences", "0021_auto_20171015_1741"),
|
||||
("preferences", "0022_auto_20171015_1758"),
|
||||
("preferences", "0023_auto_20171015_2033"),
|
||||
("preferences", "0024_optionaluser_all_can_create"),
|
||||
("preferences", "0025_auto_20171231_2142"),
|
||||
("preferences", "0025_generaloption_general_message"),
|
||||
("preferences", "0026_auto_20171216_0401"),
|
||||
("preferences", "0027_merge_20180106_2019"),
|
||||
("preferences", "0028_assooption_description"),
|
||||
("preferences", "0028_auto_20180111_1129"),
|
||||
("preferences", "0028_auto_20180128_2203"),
|
||||
("preferences", "0029_auto_20180111_1134"),
|
||||
("preferences", "0029_auto_20180318_0213"),
|
||||
("preferences", "0029_auto_20180318_1005"),
|
||||
("preferences", "0030_auto_20180111_2346"),
|
||||
("preferences", "0030_merge_20180320_1419"),
|
||||
("preferences", "0031_auto_20180323_0218"),
|
||||
("preferences", "0031_optionaluser_self_adhesion"),
|
||||
("preferences", "0032_optionaluser_min_online_payment"),
|
||||
("preferences", "0032_optionaluser_shell_default"),
|
||||
("preferences", "0033_accueiloption"),
|
||||
("preferences", "0033_generaloption_gtu_sum_up"),
|
||||
("preferences", "0034_auto_20180114_2025"),
|
||||
("preferences", "0034_auto_20180416_1120"),
|
||||
("preferences", "0035_auto_20180114_2132"),
|
||||
("preferences", "0035_optionaluser_allow_self_subscription"),
|
||||
("preferences", "0036_auto_20180114_2141"),
|
||||
("preferences", "0037_auto_20180114_2156"),
|
||||
("preferences", "0038_auto_20180114_2209"),
|
||||
("preferences", "0039_auto_20180115_0003"),
|
||||
("preferences", "0040_auto_20180129_1745"),
|
||||
("preferences", "0041_merge_20180130_0052"),
|
||||
("preferences", "0042_auto_20180222_1743"),
|
||||
("preferences", "0043_optionalmachine_create_machine"),
|
||||
("preferences", "0044_remove_payment_pass"),
|
||||
("preferences", "0045_remove_unused_payment_fields"),
|
||||
("preferences", "0046_optionaluser_mail_extension"),
|
||||
("preferences", "0047_mailcontact"),
|
||||
("preferences", "0048_auto_20180811_1515"),
|
||||
("preferences", "0049_optionaluser_self_change_shell"),
|
||||
("preferences", "0050_auto_20180818_1329"),
|
||||
("preferences", "0051_auto_20180919_2225"),
|
||||
("preferences", "0052_optionaluser_delete_notyetactive"),
|
||||
("preferences", "0053_optionaluser_self_change_room"),
|
||||
("preferences", "0055_generaloption_main_site_url"),
|
||||
("preferences", "0056_1_radiusoption"),
|
||||
("preferences", "0056_2_radiusoption"),
|
||||
("preferences", "0056_3_radiusoption"),
|
||||
("preferences", "0056_4_radiusoption"),
|
||||
("preferences", "0057_optionaluser_all_users_active"),
|
||||
("preferences", "0058_auto_20190108_1650"),
|
||||
("preferences", "0059_auto_20190120_1739"),
|
||||
("preferences", "0060_auto_20190712_1821"),
|
||||
("preferences", "0061_optionaluser_allow_archived_connexion"),
|
||||
("preferences", "0062_auto_20190910_1909"),
|
||||
("preferences", "0063_mandate"),
|
||||
("preferences", "0064_auto_20191008_1335"),
|
||||
("preferences", "0065_auto_20191010_1227"),
|
||||
("preferences", "0066_optionalmachine_default_dns_ttl"),
|
||||
("preferences", "0067_auto_20191120_0159"),
|
||||
("preferences", "0068_optionaluser_allow_set_password_during_user_creation"),
|
||||
("preferences", "0069_optionaluser_disable_emailnotyetconfirmed"),
|
||||
("preferences", "0070_auto_20200419_0225"),
|
||||
("preferences", "0071_optionaluser_self_change_pseudo"),
|
||||
("topologie", "0001_initial"),
|
||||
("topologie", "0002_auto_20160703_1118"),
|
||||
("topologie", "0003_room"),
|
||||
("topologie", "0004_auto_20160703_1122"),
|
||||
("topologie", "0005_auto_20160703_1123"),
|
||||
("topologie", "0006_auto_20160703_1129"),
|
||||
("topologie", "0007_auto_20160703_1148"),
|
||||
("topologie", "0008_port_room"),
|
||||
("topologie", "0009_auto_20160703_1200"),
|
||||
("topologie", "0010_auto_20160704_2148"),
|
||||
("topologie", "0011_auto_20160704_2153"),
|
||||
("topologie", "0012_port_machine_interface"),
|
||||
("topologie", "0013_port_related"),
|
||||
("topologie", "0014_auto_20160706_1238"),
|
||||
("topologie", "0015_auto_20160706_1452"),
|
||||
("topologie", "0016_auto_20160706_1531"),
|
||||
("topologie", "0017_auto_20160718_1141"),
|
||||
("topologie", "0018_room_details"),
|
||||
("topologie", "0019_auto_20161026_1348"),
|
||||
("topologie", "0020_auto_20161119_0033"),
|
||||
("topologie", "0021_port_radius"),
|
||||
("topologie", "0022_auto_20161211_1622"),
|
||||
("topologie", "0023_auto_20170817_1654"),
|
||||
("topologie", "0023_auto_20170826_1530"),
|
||||
("topologie", "0024_auto_20170818_1021"),
|
||||
("topologie", "0024_auto_20170826_1800"),
|
||||
("topologie", "0025_merge_20170902_1242"),
|
||||
("topologie", "0026_auto_20170902_1245"),
|
||||
("topologie", "0027_auto_20170905_1442"),
|
||||
("topologie", "0028_auto_20170913_1503"),
|
||||
("topologie", "0029_auto_20171002_0334"),
|
||||
("topologie", "0030_auto_20171004_0235"),
|
||||
("topologie", "0031_auto_20171015_2033"),
|
||||
("topologie", "0032_auto_20171026_0338"),
|
||||
("topologie", "0033_auto_20171231_1743"),
|
||||
("topologie", "0034_borne"),
|
||||
("topologie", "0035_auto_20180324_0023"),
|
||||
("topologie", "0036_transferborne"),
|
||||
("topologie", "0037_auto_20180325_0127"),
|
||||
("topologie", "0038_transfersw"),
|
||||
("topologie", "0039_port_new_switch"),
|
||||
("topologie", "0040_transferports"),
|
||||
("topologie", "0041_transferportsw"),
|
||||
("topologie", "0042_transferswitch"),
|
||||
("topologie", "0043_renamenewswitch"),
|
||||
("topologie", "0044_auto_20180326_0002"),
|
||||
("topologie", "0045_auto_20180326_0123"),
|
||||
("topologie", "0046_auto_20180326_0129"),
|
||||
("topologie", "0047_ap_machine"),
|
||||
("topologie", "0048_ap_machine"),
|
||||
("topologie", "0049_switchs_machine"),
|
||||
("topologie", "0050_port_new_switch"),
|
||||
("topologie", "0051_switchs_machine"),
|
||||
("topologie", "0052_transferports"),
|
||||
("topologie", "0053_finalsw"),
|
||||
("topologie", "0054_auto_20180326_1742"),
|
||||
("topologie", "0055_auto_20180329_0431"),
|
||||
("topologie", "0056_building_switchbay"),
|
||||
("topologie", "0057_auto_20180408_0316"),
|
||||
("topologie", "0058_remove_switch_location"),
|
||||
("topologie", "0059_auto_20180415_2249"),
|
||||
("topologie", "0060_server"),
|
||||
("topologie", "0061_portprofile"),
|
||||
("topologie", "0062_auto_20180815_1918"),
|
||||
("topologie", "0063_auto_20180919_2225"),
|
||||
("topologie", "0064_switch_automatic_provision"),
|
||||
("topologie", "0065_auto_20180927_1836"),
|
||||
("topologie", "0066_modelswitch_commercial_name"),
|
||||
("topologie", "0067_auto_20181230_1819"),
|
||||
("topologie", "0068_auto_20190102_1758"),
|
||||
("topologie", "0069_auto_20190108_1439"),
|
||||
("topologie", "0070_auto_20190218_1743"),
|
||||
("topologie", "0071_auto_20190218_1936"),
|
||||
("topologie", "0072_auto_20190720_2318"),
|
||||
("topologie", "0073_auto_20191120_0159"),
|
||||
("topologie", "0074_auto_20200419_1640"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='adherent',
|
||||
name='room',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='topologie.Room'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='ban',
|
||||
name='user',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='club',
|
||||
name='administrators',
|
||||
field=models.ManyToManyField(blank=True, related_name='club_administrator', to='users.Adherent'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='club',
|
||||
name='members',
|
||||
field=models.ManyToManyField(blank=True, related_name='club_members', to='users.Adherent'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='club',
|
||||
name='room',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='topologie.Room'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='emailaddress',
|
||||
name='user',
|
||||
field=models.ForeignKey(default=None, help_text='User of the local email account.', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='request',
|
||||
name='user',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='school',
|
||||
field=models.ForeignKey(blank=True, help_text='Education institute.', null=True, on_delete=django.db.models.deletion.PROTECT, to='users.School'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='shell',
|
||||
field=models.ForeignKey(blank=True, help_text='Unix shell.', null=True, on_delete=django.db.models.deletion.PROTECT, to='users.ListShell'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='whitelist',
|
||||
name='user',
|
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
27
users/migrations/0096_auto_20210110_1811.py
Normal file
27
users/migrations/0096_auto_20210110_1811.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.29 on 2021-01-10 17:11
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0095_user_theme'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.DeleteModel(
|
||||
name='LdapServiceUser',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='LdapServiceUserGroup',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='LdapUser',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='LdapUserGroup',
|
||||
),
|
||||
]
|
435
users/models.py
435
users/models.py
|
@ -39,14 +39,6 @@ Here are defined the following django models :
|
|||
* Schools (teaching structures)
|
||||
* Rights (Groups and ListRight)
|
||||
* ServiceUser (for ldap connexions)
|
||||
|
||||
Also define django-ldapdb models :
|
||||
* LdapUser
|
||||
* LdapGroup
|
||||
* LdapServiceUser
|
||||
|
||||
These objects are sync from django regular models as auxiliary models from
|
||||
sql data into ldap.
|
||||
"""
|
||||
|
||||
|
||||
|
@ -82,8 +74,6 @@ from django.core.files.uploadedfile import InMemoryUploadedFile
|
|||
|
||||
from reversion import revisions as reversion
|
||||
|
||||
import ldapdb.models
|
||||
import ldapdb.models.fields
|
||||
|
||||
from re2o.settings import LDAP, GID_RANGES, UID_RANGES
|
||||
from re2o.field_permissions import FieldPermissionModelMixin
|
||||
|
@ -96,6 +86,8 @@ from machines.models import Domain, Interface, Machine, regen
|
|||
from preferences.models import GeneralOption, AssoOption, OptionalUser
|
||||
from preferences.models import OptionalMachine, MailMessageOption
|
||||
|
||||
from users import signals
|
||||
|
||||
from PIL import Image
|
||||
from io import BytesIO
|
||||
import sys
|
||||
|
@ -1042,7 +1034,7 @@ class User(
|
|||
"""
|
||||
cls.mass_disable_email(queryset_users)
|
||||
Machine.mass_delete(Machine.objects.filter(user__in=queryset_users))
|
||||
cls.ldap_delete_users(queryset_users)
|
||||
signals.remove_mass.send(sender=cls, queryset=queryset_users)
|
||||
|
||||
def archive(self):
|
||||
"""Method, archive user by unassigning ips.
|
||||
|
@ -1072,7 +1064,7 @@ class User(
|
|||
|
||||
def full_archive(self):
|
||||
"""Method, full archive an user by unassigning ips, deleting data
|
||||
and ldap deletion.
|
||||
and authentication deletion.
|
||||
|
||||
Parameters:
|
||||
self (user instance): user to full archive.
|
||||
|
@ -1080,7 +1072,7 @@ class User(
|
|||
"""
|
||||
self.archive()
|
||||
self.delete_data()
|
||||
self.ldap_del()
|
||||
signals.remove.send(sender=User, instance=self)
|
||||
|
||||
@classmethod
|
||||
def mass_full_archive(cls, users_list):
|
||||
|
@ -1102,14 +1094,14 @@ class User(
|
|||
|
||||
def unarchive(self):
|
||||
"""Method, unarchive an user by assigning ips, and recreating
|
||||
ldap user associated.
|
||||
authentication user associated.
|
||||
|
||||
Parameters:
|
||||
self (user instance): user to unarchive.
|
||||
|
||||
"""
|
||||
self.assign_ips()
|
||||
self.ldap_sync()
|
||||
signals.synchronise.send(sender=self.__class__, instance=self)
|
||||
|
||||
def state_sync(self):
|
||||
"""Master Method, call unarchive, full_archive or archive method
|
||||
|
@ -1135,109 +1127,6 @@ class User(
|
|||
):
|
||||
self.full_archive()
|
||||
|
||||
def ldap_sync(
|
||||
self, base=True, access_refresh=True, mac_refresh=True, group_refresh=False
|
||||
):
|
||||
"""Method ldap_sync, sync in ldap with self user attributes.
|
||||
Each User instance is copy into ldap, via a LdapUser virtual objects.
|
||||
This method performs a copy of several attributes (name, surname, mail,
|
||||
hashed SSHA password, ntlm password, shell, homedirectory).
|
||||
|
||||
Update, or create if needed a ldap entry related with the User instance.
|
||||
|
||||
Parameters:
|
||||
self (user instance): user to sync in ldap.
|
||||
base (boolean): Default true, if base is true, perform a basic
|
||||
sync of basic attributes.
|
||||
access_refresh (boolean): Default true, if access_refresh is true,
|
||||
update the dialup_access attributes based on has_access (is this user
|
||||
has a valid internet access).
|
||||
mac_refresh (boolean): Default true, if mac_refresh, update the mac_address
|
||||
list of the user.
|
||||
group_refresh (boolean): Default False, if true, update the groups membership
|
||||
of this user. Onerous option, call ldap_sync() on every groups of the user.
|
||||
|
||||
"""
|
||||
if sys.version_info[0] >= 3 and (
|
||||
self.state == self.STATE_ACTIVE
|
||||
or self.state == self.STATE_ARCHIVE
|
||||
or self.state == self.STATE_DISABLED
|
||||
):
|
||||
self.refresh_from_db()
|
||||
try:
|
||||
user_ldap = LdapUser.objects.get(uidNumber=self.uid_number)
|
||||
except LdapUser.DoesNotExist:
|
||||
user_ldap = LdapUser(uidNumber=self.uid_number)
|
||||
base = True
|
||||
access_refresh = True
|
||||
mac_refresh = True
|
||||
if base:
|
||||
user_ldap.name = self.pseudo
|
||||
user_ldap.sn = self.pseudo
|
||||
user_ldap.dialupAccess = str(self.has_access())
|
||||
user_ldap.home_directory = self.home_directory
|
||||
user_ldap.mail = self.get_mail
|
||||
user_ldap.given_name = (
|
||||
self.surname.lower() + "_" + self.name.lower()[:3]
|
||||
)
|
||||
user_ldap.gid = LDAP["user_gid"]
|
||||
if "{SSHA}" in self.password or "{SMD5}" in self.password:
|
||||
# We remove the extra $ added at import from ldap
|
||||
user_ldap.user_password = self.password[:6] + self.password[7:]
|
||||
elif "{crypt}" in self.password:
|
||||
# depending on the length, we need to remove or not a $
|
||||
if len(self.password) == 41:
|
||||
user_ldap.user_password = self.password
|
||||
else:
|
||||
user_ldap.user_password = self.password[:7] + self.password[8:]
|
||||
|
||||
user_ldap.sambat_nt_password = self.pwd_ntlm.upper()
|
||||
if self.get_shell:
|
||||
user_ldap.login_shell = str(self.get_shell)
|
||||
user_ldap.shadowexpire = self.get_shadow_expire
|
||||
if access_refresh:
|
||||
user_ldap.dialupAccess = str(self.has_access())
|
||||
if mac_refresh:
|
||||
user_ldap.macs = [
|
||||
str(mac)
|
||||
for mac in Interface.objects.filter(machine__user=self)
|
||||
.values_list("mac_address", flat=True)
|
||||
.distinct()
|
||||
]
|
||||
if group_refresh:
|
||||
# Need to refresh all groups because we don't know which groups
|
||||
# were updated during edition of groups and the user may no longer
|
||||
# be part of the updated group (case of group removal)
|
||||
for group in Group.objects.all():
|
||||
if hasattr(group, "listright"):
|
||||
group.listright.ldap_sync()
|
||||
user_ldap.save()
|
||||
|
||||
def ldap_del(self):
|
||||
"""Method, delete an user in ldap.
|
||||
|
||||
Parameters:
|
||||
self (user instance): user to delete in Ldap.
|
||||
|
||||
"""
|
||||
try:
|
||||
user_ldap = LdapUser.objects.get(name=self.pseudo)
|
||||
user_ldap.delete()
|
||||
except LdapUser.DoesNotExist:
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def ldap_delete_users(cls, queryset_users):
|
||||
"""Class method, delete several users in ldap (queryset).
|
||||
|
||||
Parameters:
|
||||
queryset_users (list of users queryset): users to delete
|
||||
in ldap.
|
||||
"""
|
||||
LdapUser.objects.filter(
|
||||
name__in=list(queryset_users.values_list("pseudo", flat=True))
|
||||
)
|
||||
|
||||
###### Send mail functions ######
|
||||
|
||||
def notif_inscription(self, request=None):
|
||||
|
@ -2195,7 +2084,7 @@ class Club(User):
|
|||
@receiver(post_save, sender=User)
|
||||
def user_post_save(**kwargs):
|
||||
"""Django signal, post save operations on Adherent, Club and User.
|
||||
Sync pseudo, sync ldap, create mailalias and send welcome email if needed
|
||||
Sync pseudo, sync authentication, create mailalias and send welcome email if needed
|
||||
(new user)
|
||||
|
||||
"""
|
||||
|
@ -2207,8 +2096,7 @@ def user_post_save(**kwargs):
|
|||
user.notif_inscription(user.request)
|
||||
user.set_active()
|
||||
user.state_sync()
|
||||
user.ldap_sync(
|
||||
base=True, access_refresh=True, mac_refresh=False, group_refresh=True
|
||||
signals.synchronise.send(sender=User, instance=user, base=True, access_refresh=True, mac_refresh=False, group_refresh=True
|
||||
)
|
||||
regen("mailing")
|
||||
|
||||
|
@ -2216,14 +2104,13 @@ def user_post_save(**kwargs):
|
|||
@receiver(m2m_changed, sender=User.groups.through)
|
||||
def user_group_relation_changed(**kwargs):
|
||||
"""Django signal, used for User Groups change (related models).
|
||||
Sync ldap, with calling group_refresh.
|
||||
Sync authentication, with calling group_refresh.
|
||||
|
||||
"""
|
||||
action = kwargs["action"]
|
||||
if action in ("post_add", "post_remove", "post_clear"):
|
||||
user = kwargs["instance"]
|
||||
user.ldap_sync(
|
||||
base=False, access_refresh=False, mac_refresh=False, group_refresh=True
|
||||
signals.synchronise.send(sender=User, instance=user, base=False, access_refresh=False, mac_refresh=False, group_refresh=True
|
||||
)
|
||||
|
||||
|
||||
|
@ -2232,20 +2119,20 @@ def user_group_relation_changed(**kwargs):
|
|||
@receiver(post_delete, sender=User)
|
||||
def user_post_delete(**kwargs):
|
||||
"""Django signal, post delete operations on Adherent, Club and User.
|
||||
Delete user in ldap.
|
||||
Delete user in authentication.
|
||||
|
||||
"""
|
||||
user = kwargs["instance"]
|
||||
user.ldap_del()
|
||||
signals.remove.send(sender=User, instance=user)
|
||||
regen("mailing")
|
||||
|
||||
|
||||
class ServiceUser(RevMixin, AclMixin, AbstractBaseUser):
|
||||
"""A class representing a serviceuser (it is considered as a user
|
||||
with special informations).
|
||||
The serviceuser is a special user used with special access to ldap tree. It is
|
||||
The serviceuser is a special user used with special access to authentication tree. It is
|
||||
its only usefullness, and service user can't connect to re2o.
|
||||
Each service connected to ldap for auth (ex dokuwiki, owncloud, etc) should
|
||||
Each service connected to authentication for auth (ex dokuwiki, owncloud, etc) should
|
||||
have a different service user with special acl (readonly, auth) and password.
|
||||
|
||||
Attributes:
|
||||
|
@ -2293,65 +2180,6 @@ class ServiceUser(RevMixin, AclMixin, AbstractBaseUser):
|
|||
"""
|
||||
return self.pseudo
|
||||
|
||||
def ldap_sync(self):
|
||||
"""Method ldap_sync, sync the serviceuser in ldap with its attributes.
|
||||
Each ServiceUser instance is copy into ldap, via a LdapServiceUser virtual object.
|
||||
This method performs a copy of several attributes (pseudo, access).
|
||||
|
||||
Update, or create if needed a mirror ldap entry related with the ServiceUserinstance.
|
||||
|
||||
Parameters:
|
||||
self (serviceuser instance): ServiceUser to sync in ldap.
|
||||
|
||||
"""
|
||||
try:
|
||||
user_ldap = LdapServiceUser.objects.get(name=self.pseudo)
|
||||
except LdapServiceUser.DoesNotExist:
|
||||
user_ldap = LdapServiceUser(name=self.pseudo)
|
||||
user_ldap.user_password = self.password[:6] + self.password[7:]
|
||||
user_ldap.save()
|
||||
self.serviceuser_group_sync()
|
||||
|
||||
def ldap_del(self):
|
||||
"""Method, delete an ServiceUser in ldap.
|
||||
|
||||
Parameters:
|
||||
self (ServiceUser instance): serviceuser to delete in Ldap.
|
||||
|
||||
"""
|
||||
try:
|
||||
user_ldap = LdapServiceUser.objects.get(name=self.pseudo)
|
||||
user_ldap.delete()
|
||||
except LdapUser.DoesNotExist:
|
||||
pass
|
||||
self.serviceuser_group_sync()
|
||||
|
||||
def serviceuser_group_sync(self):
|
||||
"""Method, update serviceuser group sync in ldap.
|
||||
In LDAP, Acl depends on the ldapgroup (readonly, auth, or usermgt),
|
||||
so the ldap group need to be synced with the accessgroup field on ServiceUser.
|
||||
Called by ldap_sync and ldap_del.
|
||||
|
||||
Parameters:
|
||||
self (ServiceUser instance): serviceuser to update groups in LDAP.
|
||||
|
||||
"""
|
||||
try:
|
||||
group = LdapServiceUserGroup.objects.get(name=self.access_group)
|
||||
except:
|
||||
group = LdapServiceUserGroup(name=self.access_group)
|
||||
group.members = list(
|
||||
LdapServiceUser.objects.filter(
|
||||
name__in=[
|
||||
user.pseudo
|
||||
for user in ServiceUser.objects.filter(
|
||||
access_group=self.access_group
|
||||
)
|
||||
]
|
||||
).values_list("dn", flat=True)
|
||||
)
|
||||
group.save()
|
||||
|
||||
def __str__(self):
|
||||
return self.pseudo
|
||||
|
||||
|
@ -2359,21 +2187,21 @@ class ServiceUser(RevMixin, AclMixin, AbstractBaseUser):
|
|||
@receiver(post_save, sender=ServiceUser)
|
||||
def service_user_post_save(**kwargs):
|
||||
"""Django signal, post save operations on ServiceUser.
|
||||
Sync or create serviceuser in ldap.
|
||||
Sync or create serviceuser in authentication.
|
||||
|
||||
"""
|
||||
service_user = kwargs["instance"]
|
||||
service_user.ldap_sync()
|
||||
signals.synchronise.send(sender=ServiceUser, instance=service_user)
|
||||
|
||||
|
||||
@receiver(post_delete, sender=ServiceUser)
|
||||
def service_user_post_delete(**kwargs):
|
||||
"""Django signal, post delete operations on ServiceUser.
|
||||
Delete service user in ldap.
|
||||
Delete service user in authentication.
|
||||
|
||||
"""
|
||||
service_user = kwargs["instance"]
|
||||
service_user.ldap_del()
|
||||
signals.remove.send(sender=ServiceUser, instance=service_user)
|
||||
|
||||
|
||||
class School(RevMixin, AclMixin, models.Model):
|
||||
|
@ -2448,58 +2276,25 @@ class ListRight(RevMixin, AclMixin, Group):
|
|||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def ldap_sync(self):
|
||||
"""Method ldap_sync, sync the listright/group in ldap with its listright attributes.
|
||||
Each ListRight/Group instance is copy into ldap, via a LdapUserGroup virtual objects.
|
||||
This method performs a copy of several attributes (name, members, gid, etc).
|
||||
The primary key is the gid, and should never change.
|
||||
|
||||
Update, or create if needed a ldap entry related with the ListRight/Group instance.
|
||||
|
||||
Parameters:
|
||||
self (listright instance): ListRight/Group to sync in ldap.
|
||||
|
||||
"""
|
||||
try:
|
||||
group_ldap = LdapUserGroup.objects.get(gid=self.gid)
|
||||
except LdapUserGroup.DoesNotExist:
|
||||
group_ldap = LdapUserGroup(gid=self.gid)
|
||||
group_ldap.name = self.unix_name
|
||||
group_ldap.members = [user.pseudo for user in self.user_set.all()]
|
||||
group_ldap.save()
|
||||
|
||||
def ldap_del(self):
|
||||
"""Method, delete an ListRight/Group in ldap.
|
||||
|
||||
Parameters:
|
||||
self (listright/Group instance): group to delete in Ldap.
|
||||
|
||||
"""
|
||||
try:
|
||||
group_ldap = LdapUserGroup.objects.get(gid=self.gid)
|
||||
group_ldap.delete()
|
||||
except LdapUserGroup.DoesNotExist:
|
||||
pass
|
||||
|
||||
|
||||
@receiver(post_save, sender=ListRight)
|
||||
def listright_post_save(**kwargs):
|
||||
"""Django signal, post save operations on ListRight/Group objects.
|
||||
Sync or create group in ldap.
|
||||
Sync or create group in authentication.
|
||||
|
||||
"""
|
||||
right = kwargs["instance"]
|
||||
right.ldap_sync()
|
||||
signals.synchronise.send(sender=ListRight, instance=right)
|
||||
|
||||
|
||||
@receiver(post_delete, sender=ListRight)
|
||||
def listright_post_delete(**kwargs):
|
||||
"""Django signal, post delete operations on ListRight/Group objects.
|
||||
Delete group in ldap.
|
||||
Delete group in authentication.
|
||||
|
||||
"""
|
||||
right = kwargs["instance"]
|
||||
right.ldap_del()
|
||||
signals.remove.send(sender=ListRight, instance=right)
|
||||
|
||||
|
||||
class ListShell(RevMixin, AclMixin, models.Model):
|
||||
|
@ -2649,13 +2444,13 @@ class Ban(RevMixin, AclMixin, models.Model):
|
|||
@receiver(post_save, sender=Ban)
|
||||
def ban_post_save(**kwargs):
|
||||
"""Django signal, post save operations on Ban objects.
|
||||
Sync user's access state in ldap, call email notification if needed.
|
||||
Sync user's access state in authentication, call email notification if needed.
|
||||
|
||||
"""
|
||||
ban = kwargs["instance"]
|
||||
is_created = kwargs["created"]
|
||||
user = ban.user
|
||||
user.ldap_sync(base=False, access_refresh=True, mac_refresh=False)
|
||||
signals.synchronise.send(sender=User, instance=user, base=False, access_refresh=True, mac_refresh=False)
|
||||
regen("mailing")
|
||||
if is_created:
|
||||
ban.notif_ban(ban.request)
|
||||
|
@ -2669,11 +2464,11 @@ def ban_post_save(**kwargs):
|
|||
@receiver(post_delete, sender=Ban)
|
||||
def ban_post_delete(**kwargs):
|
||||
"""Django signal, post delete operations on Ban objects.
|
||||
Sync user's access state in ldap.
|
||||
Sync user's access state in authentication.
|
||||
|
||||
"""
|
||||
user = kwargs["instance"].user
|
||||
user.ldap_sync(base=False, access_refresh=True, mac_refresh=False)
|
||||
signals.synchronise.send(sender=User, instance=user, base=False, access_refresh=True, mac_refresh=False)
|
||||
regen("mailing")
|
||||
regen("dhcp")
|
||||
regen("mac_ip_list")
|
||||
|
@ -2740,12 +2535,12 @@ class Whitelist(RevMixin, AclMixin, models.Model):
|
|||
@receiver(post_save, sender=Whitelist)
|
||||
def whitelist_post_save(**kwargs):
|
||||
"""Django signal, post save operations on Whitelist objects.
|
||||
Sync user's access state in ldap.
|
||||
Sync user's access state in authentication.
|
||||
|
||||
"""
|
||||
whitelist = kwargs["instance"]
|
||||
user = whitelist.user
|
||||
user.ldap_sync(base=False, access_refresh=True, mac_refresh=False)
|
||||
signals.synchronise.send(sender=User, instance=user, base=False, access_refresh=True, mac_refresh=False)
|
||||
is_created = kwargs["created"]
|
||||
regen("mailing")
|
||||
if is_created:
|
||||
|
@ -2759,11 +2554,11 @@ def whitelist_post_save(**kwargs):
|
|||
@receiver(post_delete, sender=Whitelist)
|
||||
def whitelist_post_delete(**kwargs):
|
||||
"""Django signal, post delete operations on Whitelist objects.
|
||||
Sync user's access state in ldap.
|
||||
Sync user's access state in authentication.
|
||||
|
||||
"""
|
||||
user = kwargs["instance"].user
|
||||
user.ldap_sync(base=False, access_refresh=True, mac_refresh=False)
|
||||
signals.synchronise.send(sender=User, instance=user, base=False, access_refresh=True, mac_refresh=False)
|
||||
regen("mailing")
|
||||
regen("dhcp")
|
||||
regen("mac_ip_list")
|
||||
|
@ -2996,171 +2791,3 @@ class EMailAddress(RevMixin, AclMixin, models.Model):
|
|||
raise ValidationError(reason)
|
||||
super(EMailAddress, self).clean(*args, **kwargs)
|
||||
|
||||
|
||||
class LdapUser(ldapdb.models.Model):
|
||||
"""A class representing a LdapUser in LDAP, its LDAP conterpart.
|
||||
Synced from re2o django User model, (User django models),
|
||||
with a copy of its attributes/fields into LDAP, so this class is a mirror
|
||||
of the classic django User model.
|
||||
|
||||
The basedn userdn is specified in settings.
|
||||
|
||||
Attributes:
|
||||
name: The name of this User
|
||||
uid: The uid (login) for the unix user
|
||||
uidNumber: Linux uid number
|
||||
gid: The default gid number for this user
|
||||
sn: The user "str" pseudo
|
||||
login_shell: Linux shell for the user
|
||||
mail: Email address contact for this user
|
||||
display_name: Pretty display name for this user
|
||||
dialupAccess: Boolean, True for valid membership
|
||||
sambaSID: Identical id as uidNumber
|
||||
user_password: SSHA hashed password of user
|
||||
samba_nt_password: NTLM hashed password of user
|
||||
macs: Multivalued mac address
|
||||
shadowexpire: Set it to 0 to block access for this user and disabled
|
||||
account
|
||||
"""
|
||||
|
||||
# LDAP meta-data
|
||||
base_dn = LDAP["base_user_dn"]
|
||||
object_classes = [
|
||||
"inetOrgPerson",
|
||||
"top",
|
||||
"posixAccount",
|
||||
"sambaSamAccount",
|
||||
"radiusprofile",
|
||||
"shadowAccount",
|
||||
]
|
||||
|
||||
# attributes
|
||||
gid = ldapdb.models.fields.IntegerField(db_column="gidNumber")
|
||||
name = ldapdb.models.fields.CharField(
|
||||
db_column="cn", max_length=200, primary_key=True
|
||||
)
|
||||
uid = ldapdb.models.fields.CharField(db_column="uid", max_length=200)
|
||||
uidNumber = ldapdb.models.fields.IntegerField(db_column="uidNumber", unique=True)
|
||||
sn = ldapdb.models.fields.CharField(db_column="sn", max_length=200)
|
||||
login_shell = ldapdb.models.fields.CharField(
|
||||
db_column="loginShell", max_length=200, blank=True, null=True
|
||||
)
|
||||
mail = ldapdb.models.fields.CharField(db_column="mail", max_length=200)
|
||||
given_name = ldapdb.models.fields.CharField(db_column="givenName", max_length=200)
|
||||
home_directory = ldapdb.models.fields.CharField(
|
||||
db_column="homeDirectory", max_length=200
|
||||
)
|
||||
display_name = ldapdb.models.fields.CharField(
|
||||
db_column="displayName", max_length=200, blank=True, null=True
|
||||
)
|
||||
dialupAccess = ldapdb.models.fields.CharField(db_column="dialupAccess")
|
||||
sambaSID = ldapdb.models.fields.IntegerField(db_column="sambaSID", unique=True)
|
||||
user_password = ldapdb.models.fields.CharField(
|
||||
db_column="userPassword", max_length=200, blank=True, null=True
|
||||
)
|
||||
sambat_nt_password = ldapdb.models.fields.CharField(
|
||||
db_column="sambaNTPassword", max_length=200, blank=True, null=True
|
||||
)
|
||||
macs = ldapdb.models.fields.ListField(
|
||||
db_column="radiusCallingStationId", max_length=200, blank=True, null=True
|
||||
)
|
||||
shadowexpire = ldapdb.models.fields.CharField(
|
||||
db_column="shadowExpire", blank=True, null=True
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.sn = self.name
|
||||
self.uid = self.name
|
||||
self.sambaSID = self.uidNumber
|
||||
super(LdapUser, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class LdapUserGroup(ldapdb.models.Model):
|
||||
"""A class representing a LdapUserGroup in LDAP, its LDAP conterpart.
|
||||
Synced from UserGroup, (ListRight/Group django models),
|
||||
with a copy of its attributes/fields into LDAP, so this class is a mirror
|
||||
of the classic django ListRight model.
|
||||
|
||||
The basedn usergroupdn is specified in settings.
|
||||
|
||||
Attributes:
|
||||
name: The name of this LdapUserGroup
|
||||
gid: The gid number for this unix group
|
||||
members: Users dn members of this LdapUserGroup
|
||||
"""
|
||||
|
||||
# LDAP meta-data
|
||||
base_dn = LDAP["base_usergroup_dn"]
|
||||
object_classes = ["posixGroup"]
|
||||
|
||||
# attributes
|
||||
gid = ldapdb.models.fields.IntegerField(db_column="gidNumber")
|
||||
members = ldapdb.models.fields.ListField(db_column="memberUid", blank=True)
|
||||
name = ldapdb.models.fields.CharField(
|
||||
db_column="cn", max_length=200, primary_key=True
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class LdapServiceUser(ldapdb.models.Model):
|
||||
"""A class representing a ServiceUser in LDAP, its LDAP conterpart.
|
||||
Synced from ServiceUser, with a copy of its attributes/fields into LDAP,
|
||||
so this class is a mirror of the classic django ServiceUser model.
|
||||
|
||||
The basedn userservicedn is specified in settings.
|
||||
|
||||
Attributes:
|
||||
name: The name of this ServiceUser
|
||||
user_password: The SSHA hashed password of this ServiceUser
|
||||
"""
|
||||
|
||||
# LDAP meta-data
|
||||
base_dn = LDAP["base_userservice_dn"]
|
||||
object_classes = ["applicationProcess", "simpleSecurityObject"]
|
||||
|
||||
# attributes
|
||||
name = ldapdb.models.fields.CharField(
|
||||
db_column="cn", max_length=200, primary_key=True
|
||||
)
|
||||
user_password = ldapdb.models.fields.CharField(
|
||||
db_column="userPassword", max_length=200, blank=True, null=True
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class LdapServiceUserGroup(ldapdb.models.Model):
|
||||
"""A class representing a ServiceUserGroup in LDAP, its LDAP conterpart.
|
||||
Synced from ServiceUserGroup, with a copy of its attributes/fields into LDAP,
|
||||
so this class is a mirror of the classic django ServiceUserGroup model.
|
||||
|
||||
The basedn userservicegroupdn is specified in settings.
|
||||
|
||||
Attributes:
|
||||
name: The name of this ServiceUserGroup
|
||||
members: ServiceUsers dn members of this ServiceUserGroup
|
||||
"""
|
||||
|
||||
# LDAP meta-data
|
||||
base_dn = LDAP["base_userservicegroup_dn"]
|
||||
object_classes = ["groupOfNames"]
|
||||
|
||||
# attributes
|
||||
name = ldapdb.models.fields.CharField(
|
||||
db_column="cn", max_length=200, primary_key=True
|
||||
)
|
||||
members = ldapdb.models.fields.ListField(db_column="member", blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
|
|
33
users/signals.py
Normal file
33
users/signals.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
"""
|
||||
A set of signals used by users. Various classes in users emit these signals to signal the need to sync or
|
||||
remove an object from optionnal authentication backends, e.g. LDAP.
|
||||
|
||||
* `users.signals.synchronise`:
|
||||
Expresses the need for an instance of a users class to be synchronised. `sender` and `instance` are
|
||||
always set. It is up to the receiver to ensure the others are set correctly if they make sense.
|
||||
Arguments:
|
||||
* `sender` : The model class.
|
||||
* `instance` : The actual instance being synchronised.
|
||||
* `base` : Default `True`. When `True`, synchronise basic attributes.
|
||||
* `access_refresh` : Default `True`. When `True`, synchronise the access time.
|
||||
* `mac_refresh` : Default `True`. When True, synchronise the list of mac addresses.
|
||||
* `group_refresh`: Default `False`. When `True` synchronise the groups of the instance.
|
||||
* `users.signals.remove`:
|
||||
Expresses the need for an instance of a users class to be removed.
|
||||
Arguments:
|
||||
* `sender` : The model class.
|
||||
* `instance` : The actual instance being removed.
|
||||
* `users.signals.remove_mass`:
|
||||
Same as `users.signals.remove` except it removes a queryset. For now it is only used by `users.models.User`.
|
||||
Arguments:
|
||||
* `sender` : The model class.
|
||||
* `queryset` : The actual instances being removed.
|
||||
|
||||
"""
|
||||
|
||||
import django.dispatch
|
||||
|
||||
synchronise = django.dispatch.Signal(providing_args=["sender", "instance", "base", "access_refresh", "mac_refresh", "group_refresh"])
|
||||
remove = django.dispatch.Signal(providing_args=["sender", "instance"])
|
||||
remove_mass = django.dispatch.Signal(providing_args=["sender", "queryset"])
|
||||
|
|
@ -54,6 +54,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
:data="treeData"
|
||||
:options="treeOptions"
|
||||
@node:checked="onNodeChecked"
|
||||
@node:unchecked="onNodeUnchecked"
|
||||
/>
|
||||
</div>
|
||||
<div id="legacy_form">
|
||||
|
|
Loading…
Reference in a new issue