edumfa 2.0.3__tar.gz → 2.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {edumfa-2.0.3/edumfa.egg-info → edumfa-2.2.0}/PKG-INFO +49 -48
- {edumfa-2.0.3/tests/testdata → edumfa-2.2.0/deploy/edumfa}/dictionary +3 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu/changelog +54 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/changelog +12 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/doc/conf.py +1 -1
- edumfa-2.2.0/edumfa/api/lib/policyhelper.py +198 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/lib/prepolicy.py +40 -9
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/radiusserver.py +5 -2
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/validate.py +2 -1
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/config.py +1 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/tokenhandler.py +3 -1
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/radiusserver.py +30 -8
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/resolvers/SQLIdResolver.py +1 -3
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/sqlutils.py +1 -1
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/token.py +1 -1
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/certificatetoken.py +14 -7
- edumfa-2.2.0/edumfa/lib/tokens/legacypushtoken.py +116 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/pushtoken.py +284 -158
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/webauthn.py +20 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/webauthntoken.py +36 -19
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/utils/__init__.py +4 -2
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/models.py +4 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.radius.edit.html +14 -1
- edumfa-2.2.0/edumfa/static/components/token/views/token.enroll.push.html +12 -0
- edumfa-2.2.0/edumfa/static/components/token/views/token.enrolled.edupush.html +26 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/package-lock.json +19 -19
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/package.json +11 -11
- {edumfa-2.0.3 → edumfa-2.2.0/edumfa.egg-info}/PKG-INFO +49 -48
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa.egg-info/SOURCES.txt +4 -0
- edumfa-2.2.0/edumfa.egg-info/requires.txt +58 -0
- edumfa-2.2.0/migrations/versions/7d82d8b680a9_.py +29 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/fa07bd604a75.py +4 -3
- {edumfa-2.0.3 → edumfa-2.2.0}/requirements.txt +23 -23
- {edumfa-2.0.3 → edumfa-2.2.0}/setup.py +49 -48
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/radiusmock.py +12 -1
- edumfa-2.2.0/tests/requirements.txt +14 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_lib_policy.py +114 -49
- edumfa-2.2.0/tests/test_api_push_validate.py +993 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_radiusserver.py +1 -1
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_token.py +1 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_ttype.py +337 -16
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_validate.py +6 -6
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_radiusserver.py +38 -2
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_certificate.py +1 -1
- edumfa-2.2.0/tests/test_lib_tokens_push.py +2684 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_utils.py +1 -1
- {edumfa-2.0.3/deploy/edumfa → edumfa-2.2.0/tests/testdata}/dictionary +3 -0
- edumfa-2.0.3/edumfa/api/lib/policyhelper.py +0 -125
- edumfa-2.0.3/edumfa.egg-info/requires.txt +0 -57
- edumfa-2.0.3/tests/requirements.txt +0 -15
- edumfa-2.0.3/tests/test_api_push_validate.py +0 -510
- edumfa-2.0.3/tests/test_lib_tokens_push.py +0 -1378
- {edumfa-2.0.3 → edumfa-2.2.0}/AUTHORS.md +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/LICENSE +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/MANIFEST.in +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/README.rst +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/README.md +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/apache/edumfaapp.wsgi +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/apache/sites-available/edumfa-venv.conf +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/apache/sites-available/edumfa.conf +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/config/freeradius2/edumfa +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/config/freeradius2/mods-perl-edumfa +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/config/freeradius3/edumfa +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/config/freeradius3/mods-perl-edumfa +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/crontab/edumfa +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/docker-compose-example.yml +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/docker-example/edumfa-policy.conf +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/docker-example/edumfa-setup.sh +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/docker-example/edumfa.cfg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/docker-setup.sh +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/edumfa/edumfa.cfg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/edumfa_radius.pm +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/gunicorn/edumfaapp.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/logging.cfg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/nginx/edumfaapp.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/nginx/sites-available/edumfa +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/rlm_perl.ini +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu/clean +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu/compat +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu/control +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu/copyright +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu/rules +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu/source/format +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu/source/options +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-radius/changelog +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-radius/compat +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-radius/control +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-radius/copyright +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-radius/edumfa-radius.install +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-radius/edumfa-radius.postinst +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-radius/edumfa-radius.postrm +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-radius/rules +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-radius/source/format +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/clean +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/compat +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/control +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/edumfa-apache2.install +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/edumfa-apache2.postinst +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/edumfa-apache2.postrm +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/edumfa-nginx.install +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/edumfa-nginx.postinst +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/edumfa-nginx.postrm +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/rules +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/source/format +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/ubuntu-server/source/options +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/deploy/uwsgi/apps-available/edumfa.xml +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/application.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/audit.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/auth.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/before_after.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/caconnector.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/clienttype.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/edumfaserver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/event.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/lib/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/lib/decorators.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/lib/postpolicy.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/lib/utils.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/machine.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/machineresolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/monitoring.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/periodictask.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/policy.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/realm.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/recover.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/register.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/resolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/serviceid.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/smsgateway.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/smtpserver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/system.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/token.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/tokengroup.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/ttype.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/api/user.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/app.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/babel.cfg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/admin.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/api.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/audit.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/authcache.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/backup.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/ca.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/config.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/core.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/event.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/helper.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/hsm.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/main.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/policy.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/realm.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/resolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/commands/manage/token.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/config.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/applications/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/applications/base.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/applications/luks.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/applications/offline.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/applications/ssh.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/apps.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/audit.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/auditmodules/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/auditmodules/base.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/auditmodules/containeraudit.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/auditmodules/loggeraudit.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/auditmodules/sqlaudit.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/auth.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/authcache.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/cache/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/caconnector.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/caconnectors/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/caconnectors/baseca.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/caconnectors/caservice_pb2.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/caconnectors/caservice_pb2_grpc.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/caconnectors/localca.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/caconnectors/msca.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/challenge.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/challengeresponsedecorators.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/clientapplication.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/counter.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/crypto.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/decorators.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/edumfaserver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/error.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/event.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/base.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/counterhandler.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/customuserattributeshandler.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/federationhandler.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/logginghandler.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/requestmangler.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/responsemangler.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/scripthandler.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/usernotification.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/eventhandler/webhookeventhandler.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/framework.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/importotp.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/lifecycle.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/log.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/machine.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/machineresolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/machines/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/machines/base.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/machines/hosts.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/machines/ldap.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/monitoringmodules/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/monitoringmodules/base.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/monitoringmodules/sqlstats.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/monitoringstats.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/passwordreset.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/periodictask.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/pinhandling/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/pinhandling/base.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/policy.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/policydecorators.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/pooling.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/queue.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/queues/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/queues/base.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/queues/huey_queue.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/realm.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/resolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/resolvers/HTTPResolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/resolvers/LDAPIdResolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/resolvers/PasswdIdResolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/resolvers/SCIMIdResolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/resolvers/UserIdResolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/resolvers/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/security/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/security/aeshsm.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/security/default.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/security/encryptkey.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/security/password/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/serviceid.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/smsprovider/FirebaseProvider.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/smsprovider/HttpMessageToUidProvider.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/smsprovider/HttpSMSProvider.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/smsprovider/SMSProvider.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/smsprovider/ScriptSMSProvider.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/smsprovider/SipgateSMSProvider.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/smsprovider/SmppSMSProvider.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/smsprovider/SmtpSMSProvider.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/smsprovider/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/smtpserver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/subscriptions.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/task/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/task/base.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/task/eventcounter.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/task/simplestats.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokenclass.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokengroup.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/HMAC.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/applicationspecificpasswordtoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/daplugtoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/daypasswordtoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/emailtoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/foureyestoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/hotptoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/indexedsecrettoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/mOTP.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/motptoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/ocra.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/ocratoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/papertoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/passwordtoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/questionnairetoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/radiustoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/registrationtoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/remotetoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/smstoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/spasstoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/sshkeytoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/tantoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/tiqrtoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/totptoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/u2f.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/u2ftoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/vasco.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/vascotoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/yubicotoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/tokens/yubikeytoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/user.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/usercache.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/utils/compare.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/lib/utils/export.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/messages.pot +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/README.md +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/app.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/audit/controllers/auditControllers.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/audit/factories/audit.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/audit/states/states.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/audit/views/audit.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/audit/views/audit.log.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/components/controllers/componentControllers.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/components/factories/component.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/components/states/states.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/components/views/component.clienttype.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/components/views/component.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/controllers/configControllers.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/controllers/eduMfaServerController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/controllers/eventController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/controllers/ldapMachineResolverController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/controllers/periodicTaskController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/controllers/radiusServerController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/controllers/serviceidController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/controllers/smsgatewayController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/controllers/smtpServerController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/controllers/tokengroupController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/factories/config.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/states/states.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.caconnectors.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.caconnectors.local.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.caconnectors.microsoft.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.edumfaserver.edit.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.edumfaserver.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.events.details.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.events.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.events.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.machineresolvers.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.mresolvers.hosts.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.mresolvers.ldap.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.mresolvers.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.periodictasks.details.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.periodictasks.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.periodictasks.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.policies.details.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.policies.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.policies.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.radius.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.realms.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.realms.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.resolvers.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.resolvers.http.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.resolvers.ldap.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.resolvers.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.resolvers.passwd.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.resolvers.scim.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.resolvers.sql.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.serviceid.edit.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.serviceid.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.smsgateway.edit.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.smsgateway.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.smtp.edit.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.smtp.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.system.doc.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.system.edit.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.system.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.daypassword.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.email.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.hotp.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.question.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.radius.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.remote.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.sms.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.tiqr.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.totp.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.u2f.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.webauthn.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.yubico.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.token.yubikey.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.tokengroup.edit.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.tokengroup.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/config.tokens.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/config/views/dialog.confirm_delete.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/dashboard/controllers/dashboardControllers.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/dashboard/states/states.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/dashboard/views/dashboard.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/dialogs/views/dialog.about.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/dialogs/views/dialog.autocreate_realm.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/dialogs/views/dialog.lock.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/dialogs/views/dialog.no.token.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/dialogs/views/dialog.welcome.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/directives/controllers/directives.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/directives/views/directive.assigntoken.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/directives/views/directive.assignuser.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/directives/views/directive.attachmachine.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/directives/views/directive.attachtoken.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/directives/views/directive.csvdownload.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/directives/views/directive.filter.table.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/directives/views/directive.policyconditions.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/directives/views/directive.tokendata.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/filters/filters.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/login/controllers/loginControllers.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/login/factories/auth.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/login/factories/u2f.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/login/factories/webauthn.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/login/states/states.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/login/views/enter-response.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/login/views/login.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/login/views/offline.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/login/views/pinchange.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/machine/controllers/machineController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/machine/controllers/machineDetailsController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/machine/factories/machine.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/machine/states/states.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/machine/views/machine.details.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/machine/views/machine.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/machine/views/machine.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/recovery/controllers/recoveryControllers.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/recovery/factories/recoveryFactory.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/recovery/states/states.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/recovery/views/recovery.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/recovery/views/recovery.reset.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/register/controllers/registerControllers.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/register/factories/registerFactory.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/register/states/states.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/register/views/register.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/controllers/tokenApplicationsController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/controllers/tokenChallengesController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/controllers/tokenControllers.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/controllers/tokenDetailController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/controllers/tokenGetSerialController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/controllers/tokenLostController.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/factories/token.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/factories/validate.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/states/states.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/dialog.ask_token_delete.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.applications.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.applications.offline.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.applications.ssh.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.assign.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.challenges.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.details.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.display.apps.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.4eyes.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.applspec.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.certificate.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.daypassword.html +0 -0
- /edumfa-2.0.3/edumfa/static/components/token/views/token.enroll.push.html → /edumfa-2.2.0/edumfa/static/components/token/views/token.enroll.edupush.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.email.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.hotp.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.indexedsecret.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.motp.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.paper.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.question.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.radius.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.registration.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.remote.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.sms.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.spass.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.sshkey.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.tan.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.tiqr.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.totp.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.u2f.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.vasco.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.webauthn.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.yubico.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enroll.yubikey.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.applspec.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.certificate.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.daypassword.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.hotp.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.motp.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.paper.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.push.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.registration.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.tan.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.tiqr.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.totp.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.u2f.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.enrolled.webauthn.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.getserial.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.import.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/token/views/token.lost.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/translation/translations.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/user/controllers/userControllers.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/user/factories/user.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/user/states/states.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/user/views/dialog.ask_user_delete.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/user/views/user.add.dynamic.form.fields.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/user/views/user.add.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/user/views/user.details.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/user/views/user.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/user/views/user.list.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/components/user/views/user.password.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/css/angular-inform.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/css/angular-inform.css.map +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/css/bootstrap-theme.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/css/bootstrap-theme.css.map +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/css/bootstrap.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/css/bootstrap.css.map +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/css/hotkeys.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/css/isteven-multi-select.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/fonts/glyphicons-halflings-regular.eot +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/fonts/glyphicons-halflings-regular.svg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/fonts/glyphicons-halflings-regular.ttf +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/fonts/glyphicons-halflings-regular.woff +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/angular-inform.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/angular-inform.js.map +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/angular.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/bootstrap.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/hotkeys.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/jquery.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/ngmodules/angular-gettext.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/ngmodules/angular-idle.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/ngmodules/angular-sanitize.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/ngmodules/angular-ui-router.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/ngmodules/angular-ui-router.js.map +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/ngmodules/isteven-multi-select.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/ngmodules/ng-file-upload.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/u2f-api.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/ui-bootstrap-tpls.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/contrib/js/webauthn-client/edumfa-webauthn.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/css/baseline.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/css/content.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/css/eduMFA-logo.png +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/css/highlight.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/css/menu.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/css/papertoken.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/css/signin.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/css/table-ui.css +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/customize/README.rst +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/favicon.png +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/img/FIDO-U2F-Security-Key-444x444.png +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/img/plugup.jpg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/img/solokeys.png +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/img/u2fzero.png +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/providers/errorMessageProvider.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/providers/versioningProvider.js +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/templates/baseline.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/templates/cert_request_form.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/templates/deactivated.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/templates/documentation.rst +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/templates/footer.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/templates/header.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/templates/index.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/templates/menu.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/templates/token_enrolled.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/static/update_contrib.sh +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/cs/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/cs/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/de/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/de/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/es/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/es/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/fr/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/it/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/it/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/nl/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/nl/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/pl/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/pl/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/pt_BR/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/pt_BR/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/ro/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/ro/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/ru/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/ru/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/si/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/si/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/tr/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/tr/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/zh_Hans/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/zh_Hans/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/zh_Hant/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/translations/zh_Hant/LC_MESSAGES/messages.po +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/webui/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/webui/certificate.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa/webui/login.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa.egg-info/dependency_links.txt +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa.egg-info/entry_points.txt +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa.egg-info/not-zip-safe +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/edumfa.egg-info/top_level.txt +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/README +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/alembic.ini +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/env.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/script.py.mako +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/006d4747f858_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/00762b3f7a60_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/0c7123345224_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/0d011e94a8e8_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/140ba0ca4f07_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/145ce80decd_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/14a1bcb10018_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/19f727d285e2_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/1a0710df148b_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/1a69e5e5e2ac_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/1edda52b619f_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/204d8d4f351e_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/205bda834127_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/20969b4cbf06_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/2118e566df16_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/2181294eed0b_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/22558d9f3178_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/239995464c48_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/2551ee982544_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/2ac117d0a6f5_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/2c9430cfc66b_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/307a4fbe8a05_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/3236a1abf1c6_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/3429d523e51f_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/36428afb2457_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/37e6b49fc686_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/3ae3c668f444_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/3ba618f6b820_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/3c6e9dd7fbac_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/3d7f8b29cbb1_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/3f7e8583ea2_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/4023571658f8_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/4238eac8ccab_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/449903fb6e35_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/48ee74b8a7c8_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/49a04e560d96_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/4a0aec37e7cf_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/4d9178fa8336_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/4f32a4e1bf33_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/50adc980d625_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/5402fd96fbca_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/58e4f7ebb705_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/59ef3e03bc62_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/5cb310101a1f_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/631ec59e1ca6_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/849170064430_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/86f40f535d7c_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/888b56ed5dcb_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/89e57ed16379_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/8d40dbcfda25_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/9155f0d3d028_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/a28f2733897b_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/a63df077051a_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/a7e91b18a460_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/b9131d0686eb_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/cb6d7b7bae63_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/d2ae8e54b628_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/d3c0f0403a84_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/d415d490eb05_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/d5870fd2f2a4_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/d6b40a745e5_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/d756b34061ff_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/dceb6cd3c41e_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/e360c56bcf8c_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/e5cbeb7c177_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/ef29ba43e290_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/fabcf24d9304_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/migrations/versions/ff26585932ec_.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/setup.cfg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/base.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/conftest.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/ldap3mock.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/mscamock.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/pkcs11mock.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/queuemock.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/redismock.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/smppmock.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/smtpmock.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_2stepinit.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_applications.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_audit.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_auth.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_caconnector.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_clienttype.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_edumfaserver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_events.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_lib_utils.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_machineresolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_machines.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_machines_serviceid.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_monitoring.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_offline_no_token.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_periodictask.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_policy.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_register.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_roles.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_serviceids.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_smsgateway.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_smtpserver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_system.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_tokengroup.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_u2f.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_api_users.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_app.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_db_model.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_applications.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_apps.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_audit.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_auth.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_authcache.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_caconnector.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_challenges.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_clientapplication.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_config.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_counter.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_crypto.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_edumfaserver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_eventhandler_logging.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_eventhandler_usernotification.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_events.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_framework.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_importotp.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_lifecycle.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_machine_resolver_ldap.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_machines.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_machinetokens.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_monitoringstats.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_periodictask.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_policy.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_policydecorator.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_pooling.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_queue.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_realm.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_recovery.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_resolver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_serviceid.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_smsprovider.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_smtpserver.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_sqlutils.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_subscriptions.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_task_eventcounter.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_task_simplestats.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tasks.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_token.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokenclass.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokengroup.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_daplug.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_daypassword.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_email.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_foureyes.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_hotp.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_indexedsecret.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_motp.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_paper.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_passwordtoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_questionnaire.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_radius.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_registration.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_remote.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_sms.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_spass.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_ssh.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_tan.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_tiqr.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_totp.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_u2f.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_vasco.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_webauthn.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_yubico.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_tokens_yubikey.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_user.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_usercache.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_lib_utils_compare.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_mock_ldap3.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_resolver_realm.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_scripts.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_ui_certificate.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/test_ui_login.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/FIDO-U2F-Security-Key-444x444.png +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/NetKnights.pem +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/__init__.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/altstatic/templates/testui.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/attestation/yubico.pem +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/audit.sqlite +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/ca/cacert.pem +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/ca/cakey.pem +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/ca/index.txt +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/ca/index.txt.attr +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/ca/openssl.cnf +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/ca/serial +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/ca/templates.yaml +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/does_not_exist +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/emailtemplate.html +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/empty.oath +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/enckey +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/enckey.enc +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/event.conf +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/fancytoken.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/firebase-test.json +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/google-services.json +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/gpg/public.pem +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/gpg/pubring.gpg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/gpg/random_seed +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/gpg/secring.gpg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/gpg/trustdb.gpg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/hosts +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/import.oath +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/import.oath.asc +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/jwt_sign.key +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/logging.cfg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/logging.yml +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/logging_broken.yaml +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/msca-connector/ca.pem +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/msca-connector/privacyidea-encrypted.key +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/msca-connector/privacyidea.key +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/msca-connector/privacyidea.pem +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/ocra.csv +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/passwd +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/passwd-duplicate-name +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/passwords +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/policy.cfg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/policy.conf +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/policy_empty_file.cfg +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/private.pem +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/pskc-aes.xml +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/pskc-password.xml +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/public.pem +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/pw-2nd-resolver +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/scripts/fail.sh +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/scripts/ls.sh +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/scripts/success.sh +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/test.sub +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/test2.sub +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/testuser-api.sqlite +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/testuser.sqlite +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/testusercache.sqlite +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/trusted_attestation_roots/solokeys_device_attestation_ca.pem +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/trusted_attestation_roots/yubico_u2f_device_attestation_ca.pem +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/yubico-oath-long.csv +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/yubico-oath.csv +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tests/testdata/yubico.csv +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/creategoogleauthenticator-file +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-authorizedkeys +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-convert-base32.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-convert-token +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-convert-token.1 +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-convert-xml-to-csv +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-create-ad-users +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-create-ad-users.1 +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-create-certificate +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-create-certificate.1 +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-create-pwidresolver-user +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-create-pwidresolver-user.1 +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-create-sqlidresolver-user +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-create-sqlidresolver-user.1 +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-create-userdb +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-create-userdb.1 +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-cron +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-diag +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-expired-users +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-export-edumfa-counter.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-export-linotp-counter.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-fetchssh +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-fetchssh.1 +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-fix-access-rights +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-fix-access-rights.1 +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-get-serial +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-get-unused-tokens +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-migrate-linotp.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-pip-update +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-pip-update.1 +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-queue-huey +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-schema-upgrade +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-standalone +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-sync-owncloud.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-token-janitor +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-update-counter.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-update-linotp-counter.py +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-user-action +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/edumfa-usercache-cleanup +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/getgooglecodes +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/reset-edumfa +0 -0
- {edumfa-2.0.3 → edumfa-2.2.0}/tools/ssha.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: edumfa
|
|
3
|
-
Version: 2.0
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: eduMFA: identity, multifactor authentication (OTP), authorization, audit
|
|
5
5
|
Home-page: https://www.edumfa.io
|
|
6
6
|
Author: edumfa.io
|
|
@@ -24,58 +24,59 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
24
24
|
Requires-Python: >=3.8
|
|
25
25
|
License-File: LICENSE
|
|
26
26
|
License-File: AUTHORS.md
|
|
27
|
-
Requires-Dist: Flask-Babel
|
|
28
|
-
Requires-Dist: Flask-Migrate
|
|
29
|
-
Requires-Dist: Flask-SQLAlchemy
|
|
30
|
-
Requires-Dist: Flask-Versioned
|
|
31
|
-
Requires-Dist: Flask
|
|
32
|
-
Requires-Dist: PyJWT
|
|
33
|
-
Requires-Dist: PyMySQL
|
|
34
|
-
Requires-Dist: PyYAML
|
|
35
|
-
Requires-Dist: SQLAlchemy
|
|
36
|
-
Requires-Dist: argon2_cffi
|
|
37
|
-
Requires-Dist: beautifulsoup4[lxml]
|
|
38
|
-
Requires-Dist: cbor2
|
|
39
|
-
Requires-Dist: configobj
|
|
40
|
-
Requires-Dist: croniter
|
|
41
|
-
Requires-Dist: cryptography
|
|
42
|
-
Requires-Dist: defusedxml
|
|
43
|
-
Requires-Dist: google-auth
|
|
44
|
-
Requires-Dist: grpcio
|
|
45
|
-
Requires-Dist: huey[redis]
|
|
46
|
-
Requires-Dist: importlib_metadata
|
|
47
|
-
Requires-Dist: ldap3
|
|
48
|
-
Requires-Dist: lxml
|
|
49
|
-
Requires-Dist: netaddr
|
|
50
|
-
Requires-Dist: passlib[bcrypt]
|
|
51
|
-
Requires-Dist: pyOpenSSL
|
|
52
|
-
Requires-Dist: pydash
|
|
53
|
-
Requires-Dist: pyrad
|
|
54
|
-
Requires-Dist: python-dateutil
|
|
55
|
-
Requires-Dist: python-gnupg
|
|
56
|
-
Requires-Dist: requests
|
|
57
|
-
Requires-Dist: segno
|
|
58
|
-
Requires-Dist: smpplib
|
|
59
|
-
Requires-Dist: typing-extensions
|
|
60
|
-
Requires-Dist:
|
|
27
|
+
Requires-Dist: Flask-Babel==4.0.0
|
|
28
|
+
Requires-Dist: Flask-Migrate==4.0.7
|
|
29
|
+
Requires-Dist: Flask-SQLAlchemy==3.1.1
|
|
30
|
+
Requires-Dist: Flask-Versioned==0.9.4-20101221
|
|
31
|
+
Requires-Dist: Flask==3.0.3
|
|
32
|
+
Requires-Dist: PyJWT==2.8.0
|
|
33
|
+
Requires-Dist: PyMySQL==1.1.1
|
|
34
|
+
Requires-Dist: PyYAML==6.0.1
|
|
35
|
+
Requires-Dist: SQLAlchemy==2.0.31
|
|
36
|
+
Requires-Dist: argon2_cffi==23.1.0
|
|
37
|
+
Requires-Dist: beautifulsoup4[lxml]==4.12.3
|
|
38
|
+
Requires-Dist: cbor2==5.6.4
|
|
39
|
+
Requires-Dist: configobj==5.0.8
|
|
40
|
+
Requires-Dist: croniter==2.0.7
|
|
41
|
+
Requires-Dist: cryptography==42.0.8
|
|
42
|
+
Requires-Dist: defusedxml==0.7.1
|
|
43
|
+
Requires-Dist: google-auth==2.32.0
|
|
44
|
+
Requires-Dist: grpcio==1.64.1
|
|
45
|
+
Requires-Dist: huey[redis]==2.5.1
|
|
46
|
+
Requires-Dist: importlib_metadata==8.0.0
|
|
47
|
+
Requires-Dist: ldap3==2.9.1
|
|
48
|
+
Requires-Dist: lxml==5.2.2
|
|
49
|
+
Requires-Dist: netaddr==1.3.0
|
|
50
|
+
Requires-Dist: passlib[bcrypt]==1.7.4
|
|
51
|
+
Requires-Dist: pyOpenSSL==24.1.0
|
|
52
|
+
Requires-Dist: pydash==8.0.1
|
|
53
|
+
Requires-Dist: pyrad==2.4
|
|
54
|
+
Requires-Dist: python-dateutil==2.9.0.post0
|
|
55
|
+
Requires-Dist: python-gnupg==0.5.2
|
|
56
|
+
Requires-Dist: requests==2.32.3
|
|
57
|
+
Requires-Dist: segno==1.6.1
|
|
58
|
+
Requires-Dist: smpplib==2.2.3
|
|
59
|
+
Requires-Dist: typing-extensions==4.12.2
|
|
60
|
+
Requires-Dist: pyasn1==0.6.0
|
|
61
|
+
Requires-Dist: urllib3==2.2.2
|
|
61
62
|
Provides-Extra: doc
|
|
62
|
-
Requires-Dist: Pallets-Sphinx-Themes
|
|
63
|
-
Requires-Dist: Sphinx
|
|
64
|
-
Requires-Dist: sphinxcontrib-httpdomain
|
|
65
|
-
Requires-Dist: sphinxcontrib-plantuml
|
|
66
|
-
Requires-Dist: sphinxcontrib-spelling
|
|
63
|
+
Requires-Dist: Pallets-Sphinx-Themes==2.1.3; extra == "doc"
|
|
64
|
+
Requires-Dist: Sphinx==7.4.5; extra == "doc"
|
|
65
|
+
Requires-Dist: sphinxcontrib-httpdomain==1.8.1; extra == "doc"
|
|
66
|
+
Requires-Dist: sphinxcontrib-plantuml==0.30; extra == "doc"
|
|
67
|
+
Requires-Dist: sphinxcontrib-spelling==8.0.0; extra == "doc"
|
|
67
68
|
Provides-Extra: test
|
|
68
|
-
Requires-Dist: mock
|
|
69
|
-
Requires-Dist: pytest
|
|
70
|
-
Requires-Dist: pytest-cov
|
|
71
|
-
Requires-Dist: responses
|
|
72
|
-
Requires-Dist: testfixtures
|
|
69
|
+
Requires-Dist: mock==5.1.0; extra == "test"
|
|
70
|
+
Requires-Dist: pytest==8.2.2; extra == "test"
|
|
71
|
+
Requires-Dist: pytest-cov==5.0.0; extra == "test"
|
|
72
|
+
Requires-Dist: responses==0.25.3; extra == "test"
|
|
73
|
+
Requires-Dist: testfixtures==8.3.0; extra == "test"
|
|
73
74
|
Provides-Extra: postgres
|
|
74
|
-
Requires-Dist: psycopg2
|
|
75
|
+
Requires-Dist: psycopg2==2.9.9; extra == "postgres"
|
|
75
76
|
Provides-Extra: hsm
|
|
76
|
-
Requires-Dist: PyKCS11
|
|
77
|
+
Requires-Dist: PyKCS11==1.5.16; extra == "hsm"
|
|
77
78
|
Provides-Extra: kerberos
|
|
78
|
-
Requires-Dist: gssapi
|
|
79
|
+
Requires-Dist: gssapi==1.8.3; extra == "kerberos"
|
|
79
80
|
|
|
80
81
|
eduMFA
|
|
81
82
|
===========
|
|
@@ -1,3 +1,57 @@
|
|
|
1
|
+
edumfa (2.2.0{{CODENAME}}) {{CODENAME}}; urgency=medium
|
|
2
|
+
|
|
3
|
+
* chore(deps): update dependency google-auth to v2.32.0
|
|
4
|
+
* chore(deps): update dependency sphinx to v7.4.0
|
|
5
|
+
* chore(deps): update dependency setuptools to v70 [security]
|
|
6
|
+
* chore(deps): update dependency setuptools to v70.3.0
|
|
7
|
+
* chore(deps): update dependency croniter to v2.0.7
|
|
8
|
+
* chore(deps): update dependency cachetools to v5.4.0
|
|
9
|
+
* chore(deps): update dependency sphinx to v7.4.5
|
|
10
|
+
* RADIUS: add support to enforce Message-Authenticator
|
|
11
|
+
|
|
12
|
+
-- eduMFA <edumfa-dev@listserv.dfn.de> Wed, 17 Jul 2024 08:00:00 +0200
|
|
13
|
+
|
|
14
|
+
edumfa (2.1.0{{CODENAME}}) {{CODENAME}}; urgency=medium
|
|
15
|
+
|
|
16
|
+
* fix: corrected typo in e-mail address
|
|
17
|
+
* feat: handle passkey AuthenticatorDataFlags
|
|
18
|
+
* feat: ignore event handler in case of passkey auth
|
|
19
|
+
* feat: add edumfa-push token type
|
|
20
|
+
* chore(deps): update dependency pytest to v8
|
|
21
|
+
* chore(deps): update dependency redis to v5
|
|
22
|
+
* chore(deps): update dependency zipp to v3.19.0
|
|
23
|
+
* chore(deps): update dependency mako to v1.3.5
|
|
24
|
+
* chore(deps): update dependency lxml to v5.2.2
|
|
25
|
+
* chore(deps): update dependency pykcs11 to v1.5.16
|
|
26
|
+
* chore(deps): update dependency flask-sqlalchemy to v3.1.1
|
|
27
|
+
* chore(deps): update dependency cryptography to v42.0.8
|
|
28
|
+
* chore(deps): update dependency cbor2 to v5.6.4
|
|
29
|
+
* chore(deps): update dependency pytest to v8.2.2
|
|
30
|
+
* chore(deps): update dependency redis to v5.0.5
|
|
31
|
+
* chore(deps): update dependency grpcio to v1.64.1
|
|
32
|
+
* chore(deps): update dependency huey to v2.5.1
|
|
33
|
+
* chore(deps): update dependency requests to v2.32.3
|
|
34
|
+
* chore: test dependencies
|
|
35
|
+
* chore(deps): update dependency urllib3 to v2.2.2 [security]
|
|
36
|
+
* chore(deps): update docker/build-push-action action to v6
|
|
37
|
+
* chore(deps): update dependency zipp to v3.19.2
|
|
38
|
+
* chore(deps): update dependency certifi to v2024.6.2
|
|
39
|
+
* chore(deps): update dependency packaging to v24.1
|
|
40
|
+
* chore(deps): update dependency netaddr to v1
|
|
41
|
+
* chore(deps): update dependency pyasn1 to v0.6.0
|
|
42
|
+
* chore(deps): update dependency alembic to v1.13.2
|
|
43
|
+
* chore(deps): update dependency sqlalchemy to v2.0.31
|
|
44
|
+
* chore(deps): update dependency redis to v5.0.7
|
|
45
|
+
* chore(deps): update dependency google-auth to v2.30.0
|
|
46
|
+
* chore(deps): update dependency typing-extensions to v4.12.2
|
|
47
|
+
* chore(deps): update dependency importlib-metadata to v8
|
|
48
|
+
* chore(deps): update dependency gssapi to v1.8.3
|
|
49
|
+
* chore(deps): pin dependencies
|
|
50
|
+
* chore(deps): update dependency google-auth to v2.31.0
|
|
51
|
+
* chore(deps): update dependency certifi to v2024.7.4
|
|
52
|
+
|
|
53
|
+
-- eduMFA <edumfa-dev@listserv.dfn.de> Fri, 05 Jul 2024 12:01:00 +0200
|
|
54
|
+
|
|
1
55
|
edumfa (2.0.3{{CODENAME}}) {{CODENAME}}; urgency=medium
|
|
2
56
|
|
|
3
57
|
* fix: redirect filename arg for policy creation
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
edumfa-server (2.2.0{{CODENAME}}) {{CODENAME}}; urgency=medium
|
|
2
|
+
|
|
3
|
+
* update version number
|
|
4
|
+
|
|
5
|
+
-- eduMFA <edumfa-dev@listserv.dfn.de> Wed, 17 Jul 2024 08:00:00 +0200
|
|
6
|
+
|
|
7
|
+
edumfa-server (2.1.0{{CODENAME}}) {{CODENAME}}; urgency=medium
|
|
8
|
+
|
|
9
|
+
* update version number
|
|
10
|
+
|
|
11
|
+
-- eduMFA <edumfa-dev@listserv.dfn.de> Fri, 05 Jul 2024 12:01:00 +0200
|
|
12
|
+
|
|
1
13
|
edumfa-server (2.0.3{{CODENAME}}) {{CODENAME}}; urgency=medium
|
|
2
14
|
|
|
3
15
|
* update version number
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# License: AGPLv3
|
|
4
|
+
# This file is part of eduMFA. eduMFA is a fork of privacyIDEA which was forked from LinOTP.
|
|
5
|
+
# Copyright (c) 2024 eduMFA Project-Team
|
|
6
|
+
# Previous authors by privacyIDEA project:
|
|
7
|
+
#
|
|
8
|
+
# 2023 Cornelius Kölbel <cornelius@privacyidea.org>
|
|
9
|
+
#
|
|
10
|
+
# This code is free software; you can redistribute it and/or
|
|
11
|
+
# modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
12
|
+
# License as published by the Free Software Foundation; either
|
|
13
|
+
# version 3 of the License, or any later version.
|
|
14
|
+
#
|
|
15
|
+
# This code is distributed in the hope that it will be useful,
|
|
16
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
17
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
18
|
+
# GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
|
19
|
+
#
|
|
20
|
+
# You should have received a copy of the GNU Affero General Public
|
|
21
|
+
# License along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
22
|
+
#
|
|
23
|
+
"""
|
|
24
|
+
These are logical policy functions that are usually used in policy API decorators, but
|
|
25
|
+
in some cases also used beside the API.
|
|
26
|
+
Like policies, that are supposed to read and pass parameters during enrollment of a token.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
import logging
|
|
30
|
+
from edumfa.lib.log import log_with
|
|
31
|
+
from edumfa.lib.policy import Match, SCOPE, ACTION
|
|
32
|
+
from edumfa.lib.error import PolicyError
|
|
33
|
+
from edumfa.lib.tokens.webauthntoken import WEBAUTHNACTION
|
|
34
|
+
|
|
35
|
+
log = logging.getLogger(__name__)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@log_with(log)
|
|
39
|
+
def get_init_tokenlabel_parameters(g, params=None, token_type="hotp", user_object=None):
|
|
40
|
+
"""
|
|
41
|
+
This helper function modifies the request parameters in regards
|
|
42
|
+
to enrollment policies tokenlabel, tokenissuer, appimage, force_app_pin
|
|
43
|
+
|
|
44
|
+
:param params: The request parameter
|
|
45
|
+
:param user_object: User object in the request
|
|
46
|
+
:return: modified request parameters
|
|
47
|
+
"""
|
|
48
|
+
params = params or {}
|
|
49
|
+
label_pols = Match.user(g, scope=SCOPE.ENROLL, action=ACTION.TOKENLABEL,
|
|
50
|
+
user_object=user_object).action_values(unique=True, allow_white_space_in_action=True)
|
|
51
|
+
if len(label_pols) == 1:
|
|
52
|
+
# The policy was set, so we need to set the tokenlabel in the request.
|
|
53
|
+
params[ACTION.TOKENLABEL] = list(label_pols)[0]
|
|
54
|
+
|
|
55
|
+
label_pols = Match.user(g, scope=SCOPE.ENROLL, action=WEBAUTHNACTION.TOKENLABEL,
|
|
56
|
+
user_object=user_object).action_values(unique=True, allow_white_space_in_action=True)
|
|
57
|
+
if len(label_pols) == 1:
|
|
58
|
+
# The policy was set, so we need to set the tokenlabel in the request.
|
|
59
|
+
params[WEBAUTHNACTION.TOKENLABEL] = list(label_pols)[0]
|
|
60
|
+
|
|
61
|
+
issuer_pols = Match.user(g, scope=SCOPE.ENROLL, action=ACTION.TOKENISSUER,
|
|
62
|
+
user_object=user_object).action_values(unique=True, allow_white_space_in_action=True)
|
|
63
|
+
if len(issuer_pols) == 1:
|
|
64
|
+
params[ACTION.TOKENISSUER] = list(issuer_pols)[0]
|
|
65
|
+
|
|
66
|
+
imageurl_pols = Match.user(g, scope=SCOPE.ENROLL, action=ACTION.APPIMAGEURL,
|
|
67
|
+
user_object=user_object).action_values(unique=True, allow_white_space_in_action=True)
|
|
68
|
+
if len(imageurl_pols) == 1:
|
|
69
|
+
params[ACTION.APPIMAGEURL] = list(imageurl_pols)[0]
|
|
70
|
+
|
|
71
|
+
# check the force_app_pin policy
|
|
72
|
+
app_pin_pols = Match.user(g, scope=SCOPE.ENROLL,
|
|
73
|
+
action='{0!s}_{1!s}'.format(token_type, ACTION.FORCE_APP_PIN),
|
|
74
|
+
user_object=user_object).any()
|
|
75
|
+
if app_pin_pols:
|
|
76
|
+
params[ACTION.FORCE_APP_PIN] = True
|
|
77
|
+
|
|
78
|
+
return params
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def get_pushtoken_add_config(g, params=None, user_obj=None):
|
|
82
|
+
"""
|
|
83
|
+
This helper function modifies the request parameters in regards
|
|
84
|
+
to enrollment policies for push tokens.
|
|
85
|
+
|
|
86
|
+
:param params: The request parameter
|
|
87
|
+
:param user_object: User object in the request
|
|
88
|
+
:return: modified request parameters
|
|
89
|
+
"""
|
|
90
|
+
params = params or {}
|
|
91
|
+
from edumfa.lib.tokens.pushtoken import PushTokenClass
|
|
92
|
+
|
|
93
|
+
# Get the firebase configuration from the policies
|
|
94
|
+
firebase_config = Match.user(
|
|
95
|
+
g,
|
|
96
|
+
scope=SCOPE.ENROLL,
|
|
97
|
+
action=PushTokenClass.PUSH_ACTION.FIREBASE_CONFIG,
|
|
98
|
+
user_object=user_obj if user_obj else None,
|
|
99
|
+
).action_values(unique=True, allow_white_space_in_action=True)
|
|
100
|
+
if len(firebase_config) == 1:
|
|
101
|
+
params[PushTokenClass.PUSH_ACTION.FIREBASE_CONFIG] = list(firebase_config)[0]
|
|
102
|
+
else:
|
|
103
|
+
raise PolicyError(f"Missing enrollment policy for push token: {PushTokenClass.PUSH_ACTION.FIREBASE_CONFIG!s}")
|
|
104
|
+
|
|
105
|
+
# Get the sslverify definition from the policies
|
|
106
|
+
ssl_verify = Match.user(
|
|
107
|
+
g,
|
|
108
|
+
scope=SCOPE.ENROLL,
|
|
109
|
+
action=PushTokenClass.PUSH_ACTION.SSL_VERIFY,
|
|
110
|
+
user_object=user_obj if user_obj else None,
|
|
111
|
+
).action_values(unique=True)
|
|
112
|
+
if len(ssl_verify) == 1:
|
|
113
|
+
params[PushTokenClass.PUSH_ACTION.SSL_VERIFY] = list(ssl_verify)[0]
|
|
114
|
+
else:
|
|
115
|
+
params[PushTokenClass.PUSH_ACTION.SSL_VERIFY] = "1"
|
|
116
|
+
|
|
117
|
+
# Get the TTL and the registration URL from the policies
|
|
118
|
+
registration_url = Match.user(
|
|
119
|
+
g,
|
|
120
|
+
scope=SCOPE.ENROLL,
|
|
121
|
+
action=PushTokenClass.PUSH_ACTION.REGISTRATION_URL,
|
|
122
|
+
user_object=user_obj if user_obj else None,
|
|
123
|
+
).action_values(unique=True, allow_white_space_in_action=True)
|
|
124
|
+
if len(registration_url) == 1:
|
|
125
|
+
params[PushTokenClass.PUSH_ACTION.REGISTRATION_URL] = list(registration_url)[0]
|
|
126
|
+
else:
|
|
127
|
+
raise PolicyError(f"Missing enrollment policy for push token: {PushTokenClass.PUSH_ACTION.REGISTRATION_URL!s}")
|
|
128
|
+
ttl = Match.user(
|
|
129
|
+
g,
|
|
130
|
+
scope=SCOPE.ENROLL,
|
|
131
|
+
action=PushTokenClass.PUSH_ACTION.TTL,
|
|
132
|
+
user_object=user_obj if user_obj else None,
|
|
133
|
+
).action_values(unique=True, allow_white_space_in_action=True)
|
|
134
|
+
if len(ttl) == 1:
|
|
135
|
+
params[PushTokenClass.PUSH_ACTION.TTL] = list(ttl)[0]
|
|
136
|
+
else:
|
|
137
|
+
params[PushTokenClass.PUSH_ACTION.TTL] = "10"
|
|
138
|
+
return params
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def get_legacypushtoken_add_config(g, params=None, user_obj=None):
|
|
142
|
+
"""
|
|
143
|
+
This helper function modifies the request parameters in regards
|
|
144
|
+
to enrollment policies for push tokens.
|
|
145
|
+
|
|
146
|
+
:param params: The request parameter
|
|
147
|
+
:param user_object: User object in the request
|
|
148
|
+
:return: modified request parameters
|
|
149
|
+
"""
|
|
150
|
+
params = params or {}
|
|
151
|
+
from edumfa.lib.tokens.legacypushtoken import LegacyPushTokenClass
|
|
152
|
+
|
|
153
|
+
# Get the firebase configuration from the policies
|
|
154
|
+
firebase_config = Match.user(
|
|
155
|
+
g,
|
|
156
|
+
scope=SCOPE.ENROLL,
|
|
157
|
+
action=LegacyPushTokenClass.PUSH_ACTION.FIREBASE_CONFIG,
|
|
158
|
+
user_object=user_obj if user_obj else None,
|
|
159
|
+
).action_values(unique=True, allow_white_space_in_action=True)
|
|
160
|
+
if len(firebase_config) == 1:
|
|
161
|
+
params[LegacyPushTokenClass.PUSH_ACTION.FIREBASE_CONFIG] = list(firebase_config)[0]
|
|
162
|
+
else:
|
|
163
|
+
raise PolicyError(f"Missing enrollment policy for push token: {LegacyPushTokenClass.PUSH_ACTION.FIREBASE_CONFIG!s}")
|
|
164
|
+
|
|
165
|
+
# Get the sslverify definition from the policies
|
|
166
|
+
ssl_verify = Match.user(
|
|
167
|
+
g,
|
|
168
|
+
scope=SCOPE.ENROLL,
|
|
169
|
+
action=LegacyPushTokenClass.PUSH_ACTION.SSL_VERIFY,
|
|
170
|
+
user_object=user_obj if user_obj else None,
|
|
171
|
+
).action_values(unique=True)
|
|
172
|
+
if len(ssl_verify) == 1:
|
|
173
|
+
params[LegacyPushTokenClass.PUSH_ACTION.SSL_VERIFY] = list(ssl_verify)[0]
|
|
174
|
+
else:
|
|
175
|
+
params[LegacyPushTokenClass.PUSH_ACTION.SSL_VERIFY] = "1"
|
|
176
|
+
|
|
177
|
+
# Get the TTL and the registration URL from the policies
|
|
178
|
+
registration_url = Match.user(
|
|
179
|
+
g,
|
|
180
|
+
scope=SCOPE.ENROLL,
|
|
181
|
+
action=LegacyPushTokenClass.PUSH_ACTION.REGISTRATION_URL,
|
|
182
|
+
user_object=user_obj if user_obj else None,
|
|
183
|
+
).action_values(unique=True, allow_white_space_in_action=True)
|
|
184
|
+
if len(registration_url) == 1:
|
|
185
|
+
params[LegacyPushTokenClass.PUSH_ACTION.REGISTRATION_URL] = list(registration_url)[0]
|
|
186
|
+
else:
|
|
187
|
+
raise PolicyError(f"Missing enrollment policy for push token: {LegacyPushTokenClass.PUSH_ACTION.REGISTRATION_URL!s}")
|
|
188
|
+
ttl = Match.user(
|
|
189
|
+
g,
|
|
190
|
+
scope=SCOPE.ENROLL,
|
|
191
|
+
action=LegacyPushTokenClass.PUSH_ACTION.TTL,
|
|
192
|
+
user_object=user_obj if user_obj else None,
|
|
193
|
+
).action_values(unique=True, allow_white_space_in_action=True)
|
|
194
|
+
if len(ttl) == 1:
|
|
195
|
+
params[LegacyPushTokenClass.PUSH_ACTION.TTL] = list(ttl)[0]
|
|
196
|
+
else:
|
|
197
|
+
params[LegacyPushTokenClass.PUSH_ACTION.TTL] = "10"
|
|
198
|
+
return params
|
|
@@ -40,6 +40,7 @@ from edumfa.lib.error import PolicyError, RegistrationError, TokenAdminError, Re
|
|
|
40
40
|
from flask import g, current_app
|
|
41
41
|
from edumfa.lib.policy import SCOPE, ACTION, REMOTE_USER
|
|
42
42
|
from edumfa.lib.policy import Match, check_pin
|
|
43
|
+
from edumfa.lib.tokens.legacypushtoken import LegacyPushTokenClass
|
|
43
44
|
from edumfa.lib.user import (get_user_from_param, get_default_realm,
|
|
44
45
|
split_user, User)
|
|
45
46
|
from edumfa.lib.token import (get_tokens, get_realms_of_token, get_token_type, get_token_owner)
|
|
@@ -49,7 +50,11 @@ from edumfa.lib.utils import (parse_timedelta, is_true, generate_charlists_from_
|
|
|
49
50
|
from edumfa.lib.crypto import generate_password
|
|
50
51
|
from edumfa.lib.auth import ROLE
|
|
51
52
|
from edumfa.api.lib.utils import getParam, attestation_certificate_allowed, is_fqdn
|
|
52
|
-
from edumfa.api.lib.policyhelper import
|
|
53
|
+
from edumfa.api.lib.policyhelper import (
|
|
54
|
+
get_init_tokenlabel_parameters,
|
|
55
|
+
get_pushtoken_add_config,
|
|
56
|
+
get_legacypushtoken_add_config,
|
|
57
|
+
)
|
|
53
58
|
from edumfa.lib.clientapplication import save_clientapplication
|
|
54
59
|
from edumfa.lib.config import (get_token_class)
|
|
55
60
|
from edumfa.lib.tokenclass import ROLLOUTSTATE
|
|
@@ -81,7 +86,7 @@ from edumfa.lib.tokens.webauthntoken import (WEBAUTHNACTION,
|
|
|
81
86
|
is_webauthn_assertion_response)
|
|
82
87
|
from edumfa.lib.tokens.u2ftoken import (U2FACTION, parse_registration_data)
|
|
83
88
|
from edumfa.lib.tokens.u2f import x509name_to_string
|
|
84
|
-
from edumfa.lib.tokens.pushtoken import
|
|
89
|
+
from edumfa.lib.tokens.pushtoken import PushTokenClass
|
|
85
90
|
from edumfa.lib.tokens.indexedsecrettoken import PIIXACTION
|
|
86
91
|
|
|
87
92
|
log = logging.getLogger(__name__)
|
|
@@ -1437,7 +1442,8 @@ def pushtoken_disable_wait(request, action):
|
|
|
1437
1442
|
:param action:
|
|
1438
1443
|
:return:
|
|
1439
1444
|
"""
|
|
1440
|
-
request.all_data[PUSH_ACTION.WAIT] = False
|
|
1445
|
+
request.all_data[PushTokenClass.PUSH_ACTION.WAIT] = False
|
|
1446
|
+
request.all_data[LegacyPushTokenClass.PUSH_ACTION.WAIT] = False
|
|
1441
1447
|
|
|
1442
1448
|
|
|
1443
1449
|
def pushtoken_wait(request, action):
|
|
@@ -1450,14 +1456,37 @@ def pushtoken_wait(request, action):
|
|
|
1450
1456
|
:return:
|
|
1451
1457
|
"""
|
|
1452
1458
|
user_object = request.User
|
|
1453
|
-
waiting = Match.user(
|
|
1454
|
-
|
|
1455
|
-
.
|
|
1459
|
+
waiting = Match.user(
|
|
1460
|
+
g,
|
|
1461
|
+
scope=SCOPE.AUTH,
|
|
1462
|
+
action=PushTokenClass.PUSH_ACTION.WAIT,
|
|
1463
|
+
user_object=user_object if user_object else None,
|
|
1464
|
+
).action_values(unique=True, allow_white_space_in_action=True)
|
|
1456
1465
|
if len(waiting) >= 1:
|
|
1457
|
-
request.all_data[PUSH_ACTION.WAIT] = int(list(waiting)[0])
|
|
1466
|
+
request.all_data[PushTokenClass.PUSH_ACTION.WAIT] = int(list(waiting)[0])
|
|
1458
1467
|
else:
|
|
1459
|
-
request.all_data[PUSH_ACTION.WAIT] = False
|
|
1468
|
+
request.all_data[PushTokenClass.PUSH_ACTION.WAIT] = False
|
|
1460
1469
|
|
|
1470
|
+
def legacypushtoken_wait(request, action):
|
|
1471
|
+
"""
|
|
1472
|
+
This is a auth specific wrapper to decorate /validate/check
|
|
1473
|
+
According to the policy scope=SCOPE.AUTH, action=push_wait
|
|
1474
|
+
|
|
1475
|
+
:param request:
|
|
1476
|
+
:param action:
|
|
1477
|
+
:return:
|
|
1478
|
+
"""
|
|
1479
|
+
user_object = request.User
|
|
1480
|
+
waiting = Match.user(
|
|
1481
|
+
g,
|
|
1482
|
+
scope=SCOPE.AUTH,
|
|
1483
|
+
action=LegacyPushTokenClass.PUSH_ACTION.WAIT,
|
|
1484
|
+
user_object=user_object if user_object else None,
|
|
1485
|
+
).action_values(unique=True, allow_white_space_in_action=True)
|
|
1486
|
+
if len(waiting) >= 1:
|
|
1487
|
+
request.all_data[LegacyPushTokenClass.PUSH_ACTION.WAIT] = int(list(waiting)[0])
|
|
1488
|
+
else:
|
|
1489
|
+
request.all_data[LegacyPushTokenClass.PUSH_ACTION.WAIT] = False
|
|
1461
1490
|
|
|
1462
1491
|
def pushtoken_add_config(request, action):
|
|
1463
1492
|
"""
|
|
@@ -1471,8 +1500,10 @@ def pushtoken_add_config(request, action):
|
|
|
1471
1500
|
:return:
|
|
1472
1501
|
"""
|
|
1473
1502
|
ttype = request.all_data.get("type")
|
|
1474
|
-
if ttype and ttype.lower() == "
|
|
1503
|
+
if ttype and ttype.lower() == "edupush":
|
|
1475
1504
|
request.all_data = get_pushtoken_add_config(g, request.all_data, request.User)
|
|
1505
|
+
elif ttype and ttype.lower() == "push":
|
|
1506
|
+
request.all_data = get_legacypushtoken_add_config(g, request.all_data, request.User)
|
|
1476
1507
|
|
|
1477
1508
|
|
|
1478
1509
|
def u2ftoken_verify_cert(request, action):
|
|
@@ -66,13 +66,14 @@ def create(identifier=None):
|
|
|
66
66
|
secret = getParam(param, "secret", required)
|
|
67
67
|
retries = int(getParam(param, "retries", default=3))
|
|
68
68
|
timeout = int(getParam(param, "timeout", default=5))
|
|
69
|
+
enforce_ma = bool(getParam(param, "enforce_ma", default=False))
|
|
69
70
|
description = getParam(param, "description", default="")
|
|
70
71
|
dictionary = getParam(param, "dictionary",
|
|
71
72
|
default="/etc/edumfa/dictionary")
|
|
72
73
|
|
|
73
74
|
r = add_radius(identifier, server, secret, port=port,
|
|
74
75
|
description=description, dictionary=dictionary,
|
|
75
|
-
retries=retries, timeout=timeout)
|
|
76
|
+
retries=retries, timeout=timeout, enforce_ma=enforce_ma)
|
|
76
77
|
|
|
77
78
|
g.audit_object.log({'success': r > 0,
|
|
78
79
|
'info': r})
|
|
@@ -125,13 +126,15 @@ def test():
|
|
|
125
126
|
secret = getParam(param, "secret", required)
|
|
126
127
|
retries = int(getParam(param, "retries", default=3))
|
|
127
128
|
timeout = int(getParam(param, "timeout", default=5))
|
|
129
|
+
enforce_ma = bool(getParam(param, "enforce_ma", default=False))
|
|
128
130
|
user = getParam(param, "username", required)
|
|
129
131
|
password = getParam(param, "password", required)
|
|
130
132
|
dictionary = getParam(param, "dictionary",
|
|
131
133
|
default="/etc/edumfa/dictionary")
|
|
132
134
|
|
|
133
135
|
r = test_radius(identifier, server, secret, user, password, port=port,
|
|
134
|
-
dictionary=dictionary, retries=retries, timeout=timeout
|
|
136
|
+
dictionary=dictionary, retries=retries, timeout=timeout,
|
|
137
|
+
enforce_ma=enforce_ma)
|
|
135
138
|
g.audit_object.log({'success': r > 0,
|
|
136
139
|
'info': r})
|
|
137
140
|
return send_result(r > 0)
|
|
@@ -74,7 +74,7 @@ from edumfa.api.lib.prepolicy import (prepolicy, set_realm,
|
|
|
74
74
|
save_client_application_type,
|
|
75
75
|
check_base_action, pushtoken_wait, webauthntoken_auth, webauthntoken_authz,
|
|
76
76
|
webauthntoken_request, check_application_tokentype,
|
|
77
|
-
increase_failcounter_on_challenge)
|
|
77
|
+
increase_failcounter_on_challenge, legacypushtoken_wait)
|
|
78
78
|
from edumfa.api.lib.postpolicy import (postpolicy,
|
|
79
79
|
check_tokentype, check_serial,
|
|
80
80
|
check_tokeninfo,
|
|
@@ -205,6 +205,7 @@ def offlinerefill():
|
|
|
205
205
|
@add_serial_from_response_to_g
|
|
206
206
|
@prepolicy(check_application_tokentype, request=request)
|
|
207
207
|
@prepolicy(pushtoken_wait, request=request)
|
|
208
|
+
@prepolicy(legacypushtoken_wait, request=request)
|
|
208
209
|
@prepolicy(set_realm, request=request)
|
|
209
210
|
@prepolicy(mangle, request=request)
|
|
210
211
|
@prepolicy(increase_failcounter_on_challenge, request=request)
|
|
@@ -738,6 +738,7 @@ def get_token_list():
|
|
|
738
738
|
module_list.add("edumfa.lib.tokens.vascotoken")
|
|
739
739
|
module_list.add("edumfa.lib.tokens.tantoken")
|
|
740
740
|
module_list.add("edumfa.lib.tokens.pushtoken")
|
|
741
|
+
module_list.add("edumfa.lib.tokens.legacypushtoken")
|
|
741
742
|
module_list.add("edumfa.lib.tokens.indexedsecrettoken")
|
|
742
743
|
module_list.add("edumfa.lib.tokens.webauthntoken")
|
|
743
744
|
|
|
@@ -32,6 +32,8 @@ You can attach token actions like enable, disable, delete, unassign,... of the
|
|
|
32
32
|
* all disabled tokens
|
|
33
33
|
* ...
|
|
34
34
|
"""
|
|
35
|
+
|
|
36
|
+
from edumfa.api.lib.utils import getParam
|
|
35
37
|
from edumfa.lib.eventhandler.base import BaseEventHandler
|
|
36
38
|
from edumfa.lib.machine import attach_token
|
|
37
39
|
from edumfa.lib.token import (get_token_types, set_validity_period_end,
|
|
@@ -564,7 +566,7 @@ class TokenEventHandler(BaseEventHandler):
|
|
|
564
566
|
" Token serial: {!0s}".format(serial))
|
|
565
567
|
|
|
566
568
|
|
|
567
|
-
|
|
569
|
+
elif not getParam(request.all_data, "webauthn_usernameless_authn"):
|
|
568
570
|
log.info("Action {0!s} requires serial number. But no serial "
|
|
569
571
|
"number could be found in request {1!s}.".format(action, request))
|
|
570
572
|
|