Authentification via django-allauth #578

Open
delobell wants to merge 4 commits from aureplop/install-authens into master
delobell commented 2017-11-17 17:29:18 +01:00 (Migrated from git.eleves.ens.fr)

Important : Avant d'appliquer les nouvelles migrations à une BDD déjà existante, il faut s'assurer de l'unicité des CofProfile.login_clipper, et éventuellement fusionner les comptes problématiques.

Todos

  • Utiliser l'adapter LongTermClipper de authens.

Remarques

Déploiement

  • manage.py ... pour adapter la db

Description

Modes de connexion disponibles

  • En utilisant le mot de passe d'un User.
  • Par clipper (https://cas.eleves.ens.fr).
    Un compte est créé automatiquement si l'identifiant n'est pas déjà associé à un utilisateur, l'id est alors utilisé comme username (ou un dérivé s'il est déjà utilisé), <clipper_id>@clipper.ens.fr est utilisé comme email.

Refer to allauth doc for an accurate features list:
http://django-allauth.readthedocs.io/en/latest/

  • Users can now change their password, ask for a password reset, or set
    one if they don't have one. Fixes #177.
  • In particular, it allows users whose account has been created via a
    clipper authentication to configure a password before losing their
    clipper. Even if they have already lost it, they are able to get one
    using the "Reset password" functionality.
  • Allauth multiple emails management is deactivated. Requests to the
    related url redirect to the home page.
  • All the login and logout views are replaced by the allauth' ones. It
    also concerns the Django and Wagtail admin sites.
  • Note that users are no longer logged out of the clipper CAS server when
    they authenticated via this server. Instead a message suggests the user
    to disconnect.

Clipper connections and login_clipper

  • Non-empty login_clipper are now unique among CofProfile instances.
  • They are created once for users with a non-empty 'login_clipper' (with
    the data migration 0014_create_clipper_connections).
  • The login_clipper of CofProfile instances are sync with their
    clipper connections:
    • CofProfile.sync_clipper_connections method updates the
      connections based on login_clipper.
    • Signals receivers sync_clipper… update login_clipper based on
      connections creations/updates/deletions.

Misc

  • Add NullCharField (model field) which allows to use unique=True on
    CharField (even with empty strings).
  • Parts of kfet mixins for TestCase are now in shared.tests.testcase,
    as they are used elsewhere than in the kfet app.
  • La vue de connexion de l'utilisateur générique K-Fêt déconnecte l'utilisateur sans passer par une redirection vers la vue de déconnexion.
  • Les utilisateurs non-COF peuvent modifier les informations de leur compte. Fixes #178.
**Important :** Avant d'appliquer les nouvelles migrations à une BDD déjà existante, il faut s'assurer de l'unicité des `CofProfile.login_clipper`, et éventuellement fusionner les comptes problématiques. ### Todos - [ ] Utiliser l'adapter LongTermClipper de authens. *** ### Remarques #### Déploiement - [ ] manage.py ... pour adapter la db *** ### Description #### Modes de connexion disponibles - En utilisant le mot de passe d'un `User`. - Par clipper (`https://cas.eleves.ens.fr`). Un compte est créé automatiquement si l'identifiant n'est pas déjà associé à un utilisateur, l'id est alors utilisé comme `username` (ou un dérivé s'il est déjà utilisé), `<clipper_id>@clipper.ens.fr` est utilisé comme email. Refer to allauth doc for an accurate features list: http://django-allauth.readthedocs.io/en/latest/ - Users can now change their password, ask for a password reset, or set one if they don't have one. Fixes #177. - In particular, it allows users whose account has been created via a clipper authentication to configure a password before losing their clipper. Even if they have already lost it, they are able to get one using the "Reset password" functionality. - Allauth multiple emails management is deactivated. Requests to the related url redirect to the home page. - All the login and logout views are replaced by the allauth' ones. It also concerns the Django and Wagtail admin sites. - Note that users are no longer logged out of the clipper CAS server when they authenticated via this server. Instead a message suggests the user to disconnect. #### Clipper connections and `login_clipper` - Non-empty `login_clipper` are now unique among `CofProfile` instances. - They are created once for users with a non-empty 'login_clipper' (with the data migration 0014_create_clipper_connections). - The `login_clipper` of CofProfile instances are sync with their clipper connections: * `CofProfile.sync_clipper_connections` method updates the connections based on `login_clipper`. * Signals receivers `sync_clipper…` update `login_clipper` based on connections creations/updates/deletions. #### Misc - Add NullCharField (model field) which allows to use `unique=True` on CharField (even with empty strings). - Parts of kfet mixins for TestCase are now in shared.tests.testcase, as they are used elsewhere than in the kfet app. - La vue de connexion de l'utilisateur générique K-Fêt déconnecte l'utilisateur sans passer par une redirection vers la vue de déconnexion. - Les utilisateurs non-COF peuvent modifier les informations de leur compte. Fixes #178.
delobell commented 2017-11-17 17:32:22 +01:00 (Migrated from git.eleves.ens.fr)

added 2 commits

  • b1e10a82 - Install django-allauth-ens
  • 4030547d - kfet -- LoginGenericView directly disconnects users.

Compare with previous version

added 2 commits * b1e10a82 - Install django-allauth-ens * 4030547d - kfet -- LoginGenericView directly disconnects users. [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=711&start_sha=16b92fd275b773829cdde816456ab0ba3c1be09c)
delobell commented 2017-11-17 19:44:00 +01:00 (Migrated from git.eleves.ens.fr)

changed the description

changed the description
delobell commented 2018-01-16 17:29:48 +01:00 (Migrated from git.eleves.ens.fr)

added 9 commits

  • 4030547d...44eee9be - 6 commits from branch master
  • 49d01c18 - Install django-allauth-ens
  • 02368608 - kfet -- LoginGenericView directly disconnects users.
  • a8089272 - Merge branch 'master' into aureplop/install-authens

Compare with previous version

added 9 commits * 4030547d...44eee9be - 6 commits from branch `master` * 49d01c18 - Install django-allauth-ens * 02368608 - kfet -- LoginGenericView directly disconnects users. * a8089272 - Merge branch &#x27;master&#x27; into aureplop&#x2F;install-authens [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=751&start_sha=4030547d7be292a281a96be0c713571a796c1150)
delobell commented 2018-01-16 17:57:26 +01:00 (Migrated from git.eleves.ens.fr)

added 1 commit

  • bac1bca8 - Fix incorrect merging

Compare with previous version

added 1 commit * bac1bca8 - Fix incorrect merging [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=752&start_sha=a8089272233d6edcdb5b2070e547e7615f9245de)
delobell commented 2018-01-17 15:45:38 +01:00 (Migrated from git.eleves.ens.fr)

added 1 commit

  • f4472337 - Fix & clean login/logout urls

Compare with previous version

added 1 commit * f4472337 - Fix &amp; clean login&#x2F;logout urls [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=754&start_sha=bac1bca87f107d9c1b44d5409bc8ccf90325b21a)
delobell commented 2018-01-17 20:09:59 +01:00 (Migrated from git.eleves.ens.fr)

mentioned in merge request !280

mentioned in merge request !280
delobell commented 2018-09-30 14:50:44 +02:00 (Migrated from git.eleves.ens.fr)
  • reste à utiliser la 1.1.0 de djauth-ens pour avoir le LongTermClipperAdapter,
  • aux dernières nouvelles martin avait réussi à merge tous les clipper en doublon, est-ce que c'est encore le cas avec la rentrée qui vient d'avoir lieu ?

@mpepin @champeno faut en discuter sérieusement de ça, c'est un poil risqué entre les migrations à faire & co
On fait ça un matin/une aprem prochainement ? On part pas tant que c'est pas deploy en prod, seems legit ?

- reste à utiliser la 1.1.0 de djauth-ens pour avoir le LongTermClipperAdapter, - aux dernières nouvelles martin avait réussi à merge tous les clipper en doublon, est-ce que c'est encore le cas avec la rentrée qui vient d'avoir lieu ? @mpepin @champeno faut en discuter sérieusement de ça, c'est un poil risqué entre les migrations à faire & co On fait ça un matin/une aprem prochainement ? On part pas tant que c'est pas deploy en prod, seems legit ?
delobell commented 2018-09-30 14:52:19 +02:00 (Migrated from git.eleves.ens.fr)

added ~62 ~64 ~30 ~26 labels

added ~62 ~64 ~30 ~26 labels
delobell commented 2018-10-01 01:29:04 +02:00 (Migrated from git.eleves.ens.fr)

C'est #190 qui nous dit de fix les doublons de login_clipper, et donc des doublons de User & cie :-(

C'est #190 qui nous dit de fix les doublons de `login_clipper`, et donc des doublons de `User` & cie :-(
delobell commented 2018-10-03 23:07:20 +02:00 (Migrated from git.eleves.ens.fr)

mentioned in merge request !261

mentioned in merge request !261
delobell commented 2018-10-03 23:07:28 +02:00 (Migrated from git.eleves.ens.fr)

mentioned in issue #190

mentioned in issue #190
delobell commented 2018-10-03 23:07:39 +02:00 (Migrated from git.eleves.ens.fr)

mentioned in issue #178

mentioned in issue #178
delobell commented 2018-10-03 23:07:40 +02:00 (Migrated from git.eleves.ens.fr)

mentioned in issue #177

mentioned in issue #177
mpepin commented 2018-10-04 16:21:12 +02:00 (Migrated from git.eleves.ens.fr)

Mauvaise nouvelle : on a 5 doublons alors que j'avais fait le vide. Ça veut dire que ça revient et je ne sais pas trop pourquoi…

Mauvaise nouvelle : on a 5 doublons alors que j'avais fait le vide. Ça veut dire que ça revient et je ne sais pas trop pourquoi…
mpepin commented 2018-10-04 16:23:17 +02:00 (Migrated from git.eleves.ens.fr)

NB: commande python pour récupérer la liste des doublons :

from django.contrib.auth.models import User
from django.db.models import Count

User.objects.values("profile__login_clipper").annotate(nb=Count("profile__login_clipper")).exclude(nb=1).exclude(profile__login_clipper="")
NB: commande python pour récupérer la liste des doublons : ```python from django.contrib.auth.models import User from django.db.models import Count User.objects.values("profile__login_clipper").annotate(nb=Count("profile__login_clipper")).exclude(nb=1).exclude(profile__login_clipper="") ```
delobell commented 2018-10-06 15:31:00 +02:00 (Migrated from git.eleves.ens.fr)

added 160 commits

  • f4472337...b39b6d6b - 157 commits from branch master
  • a935a04f - Install django-allauth-ens
  • e6a18ef8 - kfet -- LoginGenericView directly disconnects users.
  • d045e4ec - Fix & clean login/logout urls

Compare with previous version

added 160 commits <ul><li>f4472337...b39b6d6b - 157 commits from branch <code>master</code></li><li>a935a04f - Install django-allauth-ens</li><li>e6a18ef8 - kfet -- LoginGenericView directly disconnects users.</li><li>d045e4ec - Fix &amp; clean login/logout urls</li></ul> [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=976&start_sha=f4472337a9ca40aa918b516197153c595dfec3d1)
delobell commented 2018-10-06 15:37:49 +02:00 (Migrated from git.eleves.ens.fr)

added 3 commits

  • db1b98c3 - core -- Install django-allauth-ens
  • e6c341e7 - kfet -- LoginGenericView directly disconnects users.
  • 04787092 - Fix & clean login/logout urls

Compare with previous version

added 3 commits <ul><li>db1b98c3 - core -- Install django-allauth-ens</li><li>e6c341e7 - kfet -- LoginGenericView directly disconnects users.</li><li>04787092 - Fix &amp; clean login/logout urls</li></ul> [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=977&start_sha=d045e4ec8b509aac3fcbad014e3fcd871e4ea71b)
delobell commented 2018-10-06 15:41:30 +02:00 (Migrated from git.eleves.ens.fr)

changed the description

changed the description
delobell commented 2018-10-06 15:48:23 +02:00 (Migrated from git.eleves.ens.fr)

added 3 commits

  • 956465a1 - core -- Install django-allauth-ens
  • c3fcd2fe - kfet -- LoginGenericView directly disconnects users.
  • d5bb505e - Fix & clean login/logout urls

Compare with previous version

added 3 commits <ul><li>956465a1 - core -- Install django-allauth-ens</li><li>c3fcd2fe - kfet -- LoginGenericView directly disconnects users.</li><li>d5bb505e - Fix &amp; clean login/logout urls</li></ul> [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=978&start_sha=04787092090a4732dc4245ba47830cb817c68376)
delobell commented 2018-10-06 16:07:19 +02:00 (Migrated from git.eleves.ens.fr)

added 3 commits

  • 946f4b8f - core -- Install django-allauth-ens
  • 63021c74 - kfet -- LoginGenericView directly disconnects users.
  • 7edb25e1 - Fix & clean login/logout urls

Compare with previous version

added 3 commits <ul><li>946f4b8f - core -- Install django-allauth-ens</li><li>63021c74 - kfet -- LoginGenericView directly disconnects users.</li><li>7edb25e1 - Fix &amp; clean login/logout urls</li></ul> [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=981&start_sha=d5bb505e2d3ba1d607cb1def7264ace3f95eaf4c)
delobell commented 2018-10-06 16:59:22 +02:00 (Migrated from git.eleves.ens.fr)

added 11 commits

  • 7edb25e1...ec287c8a - 8 commits from branch master
  • bd588849 - core -- Install django-allauth-ens
  • d0935668 - kfet -- LoginGenericView directly disconnects users.
  • 15c801e6 - Fix & clean login/logout urls

Compare with previous version

added 11 commits <ul><li>7edb25e1...ec287c8a - 8 commits from branch <code>master</code></li><li>bd588849 - core -- Install django-allauth-ens</li><li>d0935668 - kfet -- LoginGenericView directly disconnects users.</li><li>15c801e6 - Fix &amp; clean login/logout urls</li></ul> [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=983&start_sha=7edb25e1d581d304fe564bfc48a6891a48cf6272)
delobell commented 2018-10-06 17:01:40 +02:00 (Migrated from git.eleves.ens.fr)

J'ai push -f : rebase master, résolution de conflits en tout genre, commit blackifiés, rebase master

Y'a pu y avoir des erreurs. Faudrait que je vérifie...

J'ai push -f : rebase master, résolution de conflits en tout genre, commit blackifiés, rebase master Y'a pu y avoir des erreurs. Faudrait que je vérifie...
delobell commented 2018-10-06 17:07:02 +02:00 (Migrated from git.eleves.ens.fr)

added 3 commits

  • 0686e9c5 - core -- Install django-allauth-ens
  • 2160f668 - kfet -- LoginGenericView directly disconnects users.
  • 73e4d938 - Fix & clean login/logout urls

Compare with previous version

added 3 commits <ul><li>0686e9c5 - core -- Install django-allauth-ens</li><li>2160f668 - kfet -- LoginGenericView directly disconnects users.</li><li>73e4d938 - Fix &amp; clean login/logout urls</li></ul> [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=984&start_sha=15c801e674dab00ee8d28dc1b551660022bfd40e)
delobell commented 2018-10-06 17:12:42 +02:00 (Migrated from git.eleves.ens.fr)

added 3 commits

  • 84bf973d - core -- Install django-allauth-ens
  • a3fb5553 - kfet -- LoginGenericView directly disconnects users.
  • bd7f1f7d - Fix & clean login/logout urls

Compare with previous version

added 3 commits <ul><li>84bf973d - core -- Install django-allauth-ens</li><li>a3fb5553 - kfet -- LoginGenericView directly disconnects users.</li><li>bd7f1f7d - Fix &amp; clean login/logout urls</li></ul> [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=985&start_sha=73e4d938cf6b8e18f514bc5f8093f059d71896c1)
delobell commented 2018-10-06 17:17:24 +02:00 (Migrated from git.eleves.ens.fr)

added 3 commits

  • c4f82e2a - core -- Install django-allauth-ens
  • 1b243460 - kfet -- LoginGenericView directly disconnects users.
  • 76193c94 - Fix & clean login/logout urls

Compare with previous version

added 3 commits <ul><li>c4f82e2a - core -- Install django-allauth-ens</li><li>1b243460 - kfet -- LoginGenericView directly disconnects users.</li><li>76193c94 - Fix &amp; clean login/logout urls</li></ul> [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=986&start_sha=bd7f1f7da0fe43c6ae7a3af04bdbe0d1c3c27328)
delobell commented 2018-10-06 17:29:09 +02:00 (Migrated from git.eleves.ens.fr)

added 3 commits

  • 5a7e2c9d - core -- Install django-allauth-ens
  • d4c8ada3 - kfet -- LoginGenericView directly disconnects users.
  • 7d5a52f8 - Fix & clean login/logout urls

Compare with previous version

added 3 commits <ul><li>5a7e2c9d - core -- Install django-allauth-ens</li><li>d4c8ada3 - kfet -- LoginGenericView directly disconnects users.</li><li>7d5a52f8 - Fix &amp; clean login/logout urls</li></ul> [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=987&start_sha=76193c94ff827b621a128787a72829577ab728f2)
mpepin commented 2018-10-08 08:19:12 +02:00 (Migrated from git.eleves.ens.fr)

J'observe le même problème que sur GestioPEI et WikiENS, je commence à penser qu'il y a un problème du côté de django-allauth-cas ou python-cas:

[2018/10/08 08:17:01] HTTP GET /profil/login/?next=/ 200 [4.46, 127.0.0.1:54094]
[2018/10/08 08:17:01] HTTP GET /static/allauth_ens/screen.css 200 [0.03, 127.0.0.1:54094]
[2018/10/08 08:17:01] HTTP GET /static/allauth_ens/authens.js 200 [0.03, 127.0.0.1:54096]
[2018/10/08 08:17:04] HTTP GET /profil/clipper/login/?next=%2F&process=login 302 [1.01, 127.0.0.1:54094]
Internal Server Error: /profil/clipper/login/callback/
Traceback (most recent call last):
  File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/channels/handler.py", line 243, in process_exception_by_middleware
    return super(AsgiHandler, self).process_exception_by_middleware(exception, request)
  File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/allauth_cas/views.py", line 140, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/allauth_cas/views.py", line 208, in dispatch
    response = client.verify_ticket(ticket)
  File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/cas.py", line 160, in verify_ticket
    return self.verify_response(response)
  File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/cas.py", line 249, in verify_response
    return cls.parse_response_xml(response)
  File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/cas.py", line 213, in parse_response_xml
    tree = ElementTree.fromstring(response)
  File "/home/martin/.local/opt/python35-3.5.5-1/pkg/python35/usr/lib/python3.5/xml/etree/ElementTree.py", line 1344, in XML
    parser.feed(text)
  File "<string>", line None
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 89, column 182
J'observe le même problème que sur GestioPEI et WikiENS, je commence à penser qu'il y a un problème du côté de `django-allauth-cas` ou `python-cas`: ``` [2018/10/08 08:17:01] HTTP GET /profil/login/?next=/ 200 [4.46, 127.0.0.1:54094] [2018/10/08 08:17:01] HTTP GET /static/allauth_ens/screen.css 200 [0.03, 127.0.0.1:54094] [2018/10/08 08:17:01] HTTP GET /static/allauth_ens/authens.js 200 [0.03, 127.0.0.1:54096] [2018/10/08 08:17:04] HTTP GET /profil/clipper/login/?next=%2F&process=login 302 [1.01, 127.0.0.1:54094] Internal Server Error: /profil/clipper/login/callback/ Traceback (most recent call last): File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner response = get_response(request) File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response response = self.process_exception_by_middleware(e, request) File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/channels/handler.py", line 243, in process_exception_by_middleware return super(AsgiHandler, self).process_exception_by_middleware(exception, request) File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/allauth_cas/views.py", line 140, in view return self.dispatch(request, *args, **kwargs) File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/allauth_cas/views.py", line 208, in dispatch response = client.verify_ticket(ticket) File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/cas.py", line 160, in verify_ticket return self.verify_response(response) File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/cas.py", line 249, in verify_response return cls.parse_response_xml(response) File "/home/martin/git/gestioCOF/venv/lib/python3.5/site-packages/cas.py", line 213, in parse_response_xml tree = ElementTree.fromstring(response) File "/home/martin/.local/opt/python35-3.5.5-1/pkg/python35/usr/lib/python3.5/xml/etree/ElementTree.py", line 1344, in XML parser.feed(text) File "<string>", line None xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 89, column 182 ```
mpepin commented 2018-10-08 08:23:09 +02:00 (Migrated from git.eleves.ens.fr)

Pour info le xml dont le parsing échoue est la page d'accueil du cas.

Une requête doit être mal faite à un endroit pour qu'on reçoive ça au lieu d'un ticket

Pour info le xml dont le parsing échoue est la [page d'accueil du cas](https://cas.eleves.ens.fr). Une requête doit être mal faite à un endroit pour qu'on reçoive ça au lieu d'un ticket
delobell commented 2018-10-21 17:09:23 +02:00 (Migrated from git.eleves.ens.fr)

added 15 commits

  • 7d5a52f8...49a74e8e - 12 commits from branch master
  • 05eeb6a2 - core -- Install django-allauth-ens
  • e56200a5 - kfet -- LoginGenericView directly disconnects users.
  • 030a0237 - Fix & clean login/logout urls

Compare with previous version

added 15 commits <ul><li>7d5a52f8...49a74e8e - 12 commits from branch <code>master</code></li><li>05eeb6a2 - core -- Install django-allauth-ens</li><li>e56200a5 - kfet -- LoginGenericView directly disconnects users.</li><li>030a0237 - Fix &amp; clean login/logout urls</li></ul> [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=1009&start_sha=7d5a52f8d79a39162f81c57b8e77e2ec1b8aeb78)
delobell commented 2018-10-21 17:14:20 +02:00 (Migrated from git.eleves.ens.fr)

added 1 commit

  • a4be431c - core.ci -- Add dependencies for LDAP stuff

Compare with previous version

added 1 commit <ul><li>a4be431c - core.ci -- Add dependencies for LDAP stuff</li></ul> [Compare with previous version](https://git.eleves.ens.fr/cof-geek/gestioCOF/merge_requests/274/diffs?diff_id=1010&start_sha=030a02375c423f3820480afc2abd7a86fcc102b7)
delobell commented 2018-10-21 17:21:16 +02:00 (Migrated from git.eleves.ens.fr)

C'est update avec django-allauth-ens 1.1.1, qui fixe le problème exposé par @mpepin.

Reste à passer au LongTermAdapter. On peut le faire en 2 parties non : merge ça, puis passer au LongTermAdapater dans une autre PR.
Un avis @champeno sur ce changement (l'adapter) ?
On part sur une nouvelle installation de allauth avec script qui crée des connexions à partir des infos déjà connues (des login clipper seulement). Sans toucher à la migration, je crois qu'on peut lancer la MAJ du code en prod avec la migration, puis run la commande de allauth-ens pour convertir vers le nouveau système.

C'est update avec django-allauth-ens 1.1.1, qui fixe le problème exposé par @mpepin. Reste à passer au LongTermAdapter. On peut le faire en 2 parties non : merge ça, puis passer au LongTermAdapater dans une autre PR. Un avis @champeno sur ce changement (l'adapter) ? On part sur une nouvelle installation de allauth avec [script](https://git.eleves.ens.fr/cof-geek/gestioCOF/blob/a4be431c4fd2aa3b23ca195cf1e70188cd0b6e9e/gestioncof/migrations/0016_create_clipper_conns.py) qui crée des connexions à partir des infos déjà connues (des login clipper seulement). Sans toucher à la migration, je crois qu'on peut lancer la MAJ du code en prod avec la migration, puis run la commande de `allauth-ens` pour convertir vers le nouveau système.
champeno commented 2018-10-21 17:32:32 +02:00 (Migrated from git.eleves.ens.fr)

Pour la migration, le LongTermAdapter faut tout en un avec python manage.py install_longterm (la création des connexions quand un clipper existe et le remplissage des infos ldap). Donc c'est peut-être plus pertinent de l'utiliser non ?

Pour la migration, le LongTermAdapter faut tout en un avec `python manage.py install_longterm` (la création des connexions *quand un clipper existe* et le remplissage des infos ldap). Donc c'est peut-être plus pertinent de l'utiliser non ?
delobell commented 2018-10-21 17:35:50 +02:00 (Migrated from git.eleves.ens.fr)

Ah pardon, j'ai cru que y'avait que la partie "auth-ens sans longterm" → "auth-ens avec longterm".
Question du coup : où install_longterm récupère le login clipper d'un utilisateur ?

Ah pardon, j'ai cru que y'avait que la partie "auth-ens sans longterm" → "auth-ens avec longterm". Question du coup : où `install_longterm` récupère le login clipper d'un utilisateur ?
champeno commented 2018-10-21 17:49:13 +02:00 (Migrated from git.eleves.ens.fr)
Il suppose que c'est le username https://git.eleves.ens.fr/cof-geek/django-allauth-ens/blob/master/allauth_ens/adapter.py#L156
delobell commented 2018-10-21 17:54:28 +02:00 (Migrated from git.eleves.ens.fr)

@mpepin t'as rendu unique la colonne CofProfile.login_clipper ?
@champeno Si oui, comment ça se passe si on laisse la migration faire la partie CofProfile.login_clipper → SocialAccount, et install_longterm la partie qui ajoute la promo en demandant au LDAP ? (Est-ce que ça tente encore de créer des SocialAccount à partir des username ?)

Ou alors on remplace les usernames par les login clipper mais ça semble plus hardcore que d'éventuellement ajouter un flag pour désactiver le comportement évoqué juste au-dessus.

@mpepin t'as rendu unique la colonne CofProfile.login_clipper ? @champeno Si oui, comment ça se passe si on laisse la migration faire la partie CofProfile.login_clipper → SocialAccount, et install_longterm la partie qui ajoute la promo en demandant au LDAP ? (Est-ce que ça tente encore de créer des SocialAccount à partir des username ?) Ou alors on remplace les usernames par les login clipper mais ça semble plus hardcore que d'éventuellement ajouter un flag pour désactiver le comportement évoqué juste au-dessus.
champeno commented 2018-10-21 18:01:45 +02:00 (Migrated from git.eleves.ens.fr)

Euh hum visiblement mon code va créer des SocialAccount à partir des usernames, cf https://git.eleves.ens.fr/cof-geek/django-allauth-ens/blob/master/allauth_ens/adapter.py#L189

Je peux rajouter un paramètre à la commande qui dise quel champ utiliser à install_longterm (username ou cofprofile.login_clipper ou autre) éventuellement ? Comme ça tout roule direct.

Euh hum visiblement mon code va créer des SocialAccount à partir des usernames, cf https://git.eleves.ens.fr/cof-geek/django-allauth-ens/blob/master/allauth_ens/adapter.py#L189 Je peux rajouter un paramètre à la commande qui dise quel champ utiliser à `install_longterm` (username ou cofprofile.login_clipper ou autre) éventuellement ? Comme ça tout roule direct.
delobell commented 2018-10-21 18:05:16 +02:00 (Migrated from git.eleves.ens.fr)

@champeno J'ai ouvert le lien :P Effectivement, on peut lui mettre un paramètre pour lui dire de manger les username ou bien les SocialAccount.objects.filter(provider="clipper").values("uid") par exemple ?

On pourrait éventuellement affiner le premier en lui donnant un moyen de customiser le getter, mais le second cas a l'air pratique pour d'éventuelles autres migrations "auth-ens sans longterm" → "auth-ens avec longterm".

@champeno J'ai ouvert le lien :P Effectivement, on peut lui mettre un paramètre pour lui dire de manger les username ou bien les `SocialAccount.objects.filter(provider="clipper").values("uid")` par exemple ? On pourrait éventuellement affiner le premier en lui donnant un moyen de customiser le getter, mais le second cas a l'air pratique pour d'éventuelles autres migrations "auth-ens sans longterm" → "auth-ens avec longterm".
champeno commented 2018-10-21 18:12:53 +02:00 (Migrated from git.eleves.ens.fr)

Je linkais pas la même ligne ^^. Dans la pratique on va plus souvent vouloir faire django-cas -> allauth+longterm que allauth -> allauth+longterm non ?

Enfin sinon on mets un flag --use-socialaccounts pour un cas et un paramètre --clipper-field pour l'autre ?

Je linkais pas la même ligne ^^. Dans la pratique on va plus souvent vouloir faire django-cas -> allauth+longterm que allauth -> allauth+longterm non ? Enfin sinon on mets un flag `--use-socialaccounts` pour un cas et un paramètre `--clipper-field` pour l'autre ?
delobell commented 2018-10-21 19:29:34 +02:00 (Migrated from git.eleves.ens.fr)

A priori plus de nouvelles installations devraient avoir de django-cas, donc je pense que le second cas risque plus d'arriver.

Sinon va pour ces flags. Tu t'en occupes ou j'y vais ?

A priori plus de nouvelles installations devraient avoir de django-cas, donc je pense que le second cas risque plus d'arriver. Sinon va pour ces flags. Tu t'en occupes ou j'y vais ?
champeno commented 2018-10-21 20:36:48 +02:00 (Migrated from git.eleves.ens.fr)

Je fais ça en vitesse :)

Je fais ça en vitesse :)
mpepin commented 2018-10-21 20:43:39 +02:00 (Migrated from git.eleves.ens.fr)

Non on a toujours des problèmes de doublons, apparus récemment, que je n'ai pas réglés.

Pour éviter les mauvaises surprises, la migration pourrait, avant de commencer à faire des modifs dans la bdd, checker qu'il n'y a plus de doublons et crasher si c'est le cas. Ça vous parrait overkill ?
Je peux écrire le bout de code qui fait ça

Non on a toujours des problèmes de doublons, apparus récemment, que je n'ai pas réglés. Pour éviter les mauvaises surprises, la migration pourrait, avant de commencer à faire des modifs dans la bdd, checker qu'il n'y a plus de doublons et crasher si c'est le cas. Ça vous parrait overkill ? Je peux écrire le bout de code qui fait ça
delobell commented 2018-10-21 21:28:57 +02:00 (Migrated from git.eleves.ens.fr)

La migration 0015 passe CofProfile.login_clipper en unique=True, donc elle plantera si y'a problème.
Faudra revert le commit de merge ou corriger et réessayer si besoin.

La [migration 0015](https://git.eleves.ens.fr/cof-geek/gestioCOF/blob/a4be431c4fd2aa3b23ca195cf1e70188cd0b6e9e/gestioncof/migrations/0015_unique_login_clipper.py) passe CofProfile.login_clipper en unique=True, donc elle plantera si y'a problème. Faudra revert le commit de merge ou corriger et réessayer si besoin.
champeno commented 2018-10-21 21:36:59 +02:00 (Migrated from git.eleves.ens.fr)

Ah mais attends, install_longterm renomme les username de tous les Users concernés par clipper@promo. Est-ce qu'on veut ça sur gestioCOF ?

Ah mais attends, `install_longterm` renomme les username de tous les Users concernés par `clipper@promo`. Est-ce qu'on veut ça sur gestioCOF ?
champeno commented 2018-10-21 22:38:02 +02:00 (Migrated from git.eleves.ens.fr)

mentioned in merge request django-allauth-ens!18

mentioned in merge request django-allauth-ens!18
champeno commented 2018-10-21 22:38:28 +02:00 (Migrated from git.eleves.ens.fr)
https://git.eleves.ens.fr/cof-geek/django-allauth-ens/merge_requests/18 @delobell
delobell commented 2018-10-21 22:41:07 +02:00 (Migrated from git.eleves.ens.fr)

Bien vu pour le username modifié aussi. Un flag en plus ?

Bien vu pour le username modifié aussi. Un flag en plus ?
champeno commented 2018-10-21 23:22:09 +02:00 (Migrated from git.eleves.ens.fr)

Voilà~

Voilà~
delobell commented 2019-01-06 10:43:41 +01:00 (Migrated from git.eleves.ens.fr)

@champeno On peut quand même se faire cette transition sans longterm ? Comme ça on passe déjà ça :)
On voit l'installation de longterm ensuite.

@champeno On peut quand même se faire cette transition sans longterm ? Comme ça on passe déjà ça :) On voit l'installation de longterm ensuite.
delobell commented 2019-01-06 10:45:21 +01:00 (Migrated from git.eleves.ens.fr)

@mpepin Tu peux donner les différentes étapes pour fusionner les doublons de compte ?
Je peux aller me les faire ;)

@mpepin Tu peux donner les différentes étapes pour fusionner les doublons de compte ? Je peux aller me les faire ;)
champeno commented 2019-01-06 11:02:30 +01:00 (Migrated from git.eleves.ens.fr)

Hmmm je crois que si on fait ça il faut créer tous les SocialAccount à la main quand même, sinon les gens ne pourront pas se connecter (ce qui revient à peu de choses près à faire install_longterm)
Pour avoir fait la transition cas -> allauth sur ExperiENS pendant ces vacances, ça marchait correctement, à un détail près : le compte conscrit qui n'a pas de promo (il suffit de le supprimer ou de changer son username)

Hmmm je crois que si on fait ça il faut créer tous les `SocialAccount` à la main quand même, sinon les gens ne pourront pas se connecter (ce qui revient à peu de choses près à faire `install_longterm`) Pour avoir fait la transition cas -> allauth sur ExperiENS pendant ces vacances, ça marchait correctement, à un détail près : le compte `conscrit` qui n'a pas de promo (il suffit de le supprimer ou de changer son username)
delobell commented 2019-01-06 11:13:33 +01:00 (Migrated from git.eleves.ens.fr)

On a déjà ça en fait :

def create_clipper_connections(...):
    profiles = CofProfile.objects.exclude(login_clipper="").values("user_id", "login_clipper")
    SocialAccount.objects.bulk_create(
        [
            SocialAccount(provider="clipper", user_id=p["user_id"], uid=p["login_clipper"]) for p in profiles
        ]
    )

a4be431c4f/gestioncof/migrations/0016_create_clipper_conns.py

On a déjà ça en fait : ``` def create_clipper_connections(...): profiles = CofProfile.objects.exclude(login_clipper="").values("user_id", "login_clipper") SocialAccount.objects.bulk_create( [ SocialAccount(provider="clipper", user_id=p["user_id"], uid=p["login_clipper"]) for p in profiles ] ) ``` https://git.eleves.ens.fr/klub-dev-ens/gestioCOF/blob/a4be431c4fd2aa3b23ca195cf1e70188cd0b6e9e/gestioncof/migrations/0016_create_clipper_conns.py
champeno commented 2019-01-06 11:48:53 +01:00 (Migrated from git.eleves.ens.fr)

Ah oui. Il y a un truc qu'on ne fait pas d'ailleurs (et qu'il serait bien de faire) : créer les EmailAddress (initialisées avec les adresses clipper)

Ah oui. Il y a un truc qu'on ne fait pas d'ailleurs (et qu'il serait bien de faire) : créer les `EmailAddress` (initialisées avec les adresses clipper)
delobell commented 2019-01-06 11:56:57 +01:00 (Migrated from git.eleves.ens.fr)

Alors côté GestioCOF, on utilise pas les EmailAddress. On s'évite un peu de complexité comme ça.
J'espère que ça va pas nous porter préjudice, mais je crois qu'on peut s'en passer.

Alors côté GestioCOF, on utilise pas les `EmailAddress`. On s'évite un peu de complexité comme ça. J'espère que ça va pas nous porter préjudice, mais je crois qu'on peut s'en passer.
champeno commented 2019-01-06 11:59:25 +01:00 (Migrated from git.eleves.ens.fr)

Allauth les utilise pas pour les "mot de passe oublié" ? Mais du coup ça ne servira que pour les auths non-clipper.

Allauth les utilise pas pour les "mot de passe oublié" ? Mais du coup ça ne servira que pour les auths non-clipper.
delobell commented 2019-01-06 13:28:31 +01:00 (Migrated from git.eleves.ens.fr)
allauth utilise l'adresse donnée par l'utilisateur dans le formulaire : https://github.com/pennersr/django-allauth/blob/master/allauth/account/forms.py#L510 et https://github.com/pennersr/django-allauth/blob/master/allauth/account/forms.py#L539 Pour savoir si l'utilisateur correspond à un email, il prend en compte les `EmailAddress` mais aussi les `User.email` : https://github.com/pennersr/django-allauth/blob/master/allauth/account/utils.py#L386 https://github.com/pennersr/django-allauth/blob/master/allauth/account/app_settings.py#L238 Donc on a l'air bon
mpepin commented 2019-01-14 20:38:09 +01:00 (Migrated from git.eleves.ens.fr)

copy-paste depuis merle :


Il faut commencer par chercher la liste des doublons :

from django.contrib.auth.models import User
from django.db.models import Count

User.objects.values("profile__login_clipper").annotate(nb=Count("profile__login_clipper")).exclude(nb=1).exclude(profile__login_clipper="")

Ensuite tu te mets superuser, tu vas dans l'admin

Si t'as de la chance, il y a un compte avec rien dessus (pas statut COF, pas d'événements, de tirages etc), auquel cas faut juste le virer et vérifier que le compte qui reste a username == clipper

Si t'as pas de bol, il y aura des événements / sondages attachés aux deux comptes et il faudra dans un shell python basculer tout sur un compte avant de supprimer l'autre

pour savoir tu cliques sur "supprimer" dans l'admin et dans la fenêtre de confirmation il te dit ce qui risque d'être supprimé en cascade

copy-paste depuis merle : --- Il faut commencer par chercher la liste des doublons : ```python from django.contrib.auth.models import User from django.db.models import Count User.objects.values("profile__login_clipper").annotate(nb=Count("profile__login_clipper")).exclude(nb=1).exclude(profile__login_clipper="") ``` Ensuite tu te mets superuser, tu vas dans l'admin Si t'as de la chance, il y a un compte avec rien dessus (pas statut COF, pas d'événements, de tirages etc), auquel cas faut juste le virer et vérifier que le compte qui reste a `username == clipper` Si t'as pas de bol, il y aura des événements / sondages attachés aux deux comptes et il faudra dans un shell python basculer tout sur un compte avant de supprimer l'autre pour savoir tu cliques sur "supprimer" dans l'admin et dans la fenêtre de confirmation il te dit ce qui risque d'être supprimé en cascade
delobell commented 2019-01-14 23:24:31 +01:00 (Migrated from git.eleves.ens.fr)

mentioned in merge request !346

mentioned in merge request !346
This pull request has changes conflicting with the target branch.
  • .gitlab-ci.yml
  • bda/tests/test_views.py
  • cof/settings/common.py
  • cof/urls.py
  • gestioncof/models.py
  • gestioncof/petits_cours_views.py
  • gestioncof/signals.py
  • gestioncof/static/css/cof.css
  • gestioncof/templates/home.html
  • gestioncof/tests/test_views.py
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin aureplop/install-authens:aureplop/install-authens
git checkout aureplop/install-authens
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: DGNum/gestioCOF#578
No description provided.