- Aug 27, 2022
- Aug 22, 2022
-
-
Julian authored
Preperation for future features that require per-service user settings or state, e.g. stateful sync or service-specific email settings. The additional JOIN of ServiceUser degrades getusers API performance by 30-50%. For API calls that return many users, this is compensated by an otherwise unrelated optimization (selectinload instead of joinedload).
-
- Aug 19, 2022
-
-
Julian authored
Convert DateTime fields to UTC, use "utcnow" instead of "now" and use babel helper/filter when dates/times are displayed or parsed from user input. Uffd continues to use the system's timezone in the user interface by default. However, it is now possible to overwrite this with the BABEL_DEFAULT_TIMEZONE config option.
-
- Aug 15, 2022
-
-
Julian authored
Unittest jobs now fail if any test fails. Unittests on Bullseye no longer fail due to jinja2 import errors. Linter jobs run faster.
-
Julian authored
Move all models, views, cli commands and templates into corresponding top-level folders. Detailed changes: - uffd/<NAME>/models.py -> uffd/models/<NAME>.py - uffd/<NAME>/cli.py -> uffd/commands/<NAME>.py - uffd/<NAME>/views.py -> uffd/views/<NAME>.py - uffd/<NAME>/templates/* -> uffd/templates/ - uffd/ratelimit.py -> uffd/models/ratelimit.py (it contains models) - gendevcert from uffd/__init__.py -> uffd/commands/gendevcert.py - profile from uffd/__init__.py -> uffd/commands/profile.py - cleanup from uffd/tasks.py -> uffd/commands/cleanup.py - roles-update-all from uffd/role/views.py -> uffd/commands/... - Views from uffd/__init__.py -> uffd/views/__init__.py - All models can/should be imported from uffd.models - flask shell auto-imports all models instead of only a few The old structure was meant to keep the code modular and related code/resources close to each other. However, the modules turned out to be heavily interdependent and not very modular. Also importing was fragile due to ordering issues. With the new structure the dependency tree is much simpler: Infrastructure code (top-level *.py files) has no internal dependencies. Models only depend on infrastructure and other models. Views and cli commands depend on infrastructure, models and other views/commands. Going forward there is still some restructuring to do, e.g.: - Move mfa setup views to selfservice views - Move mfa auth views to session views - Move utility code from views to infrastructure (e.g. login_required) - In most cases views should not need to import from other views - Reorganize infrastructure code
-
- Aug 14, 2022
- Jul 19, 2022
-
-
Julian authored
-
- Jun 27, 2022
-
-
davidc authored
-
- Jun 21, 2022
-
-
- Jun 15, 2022
-
-
Julian authored
-
- May 24, 2022
-
-
sistason authored
-
- Apr 25, 2022
-
-
Julian authored
With this feature, uffd can be configured to hide mail addresses of users from certain services while still allowing the services to send mails to the users. To these services uffd returns special remailer addresses instead of the real mail addresses. When a service sends an email to a remailer address the mail server queries uffd's API and replaces the remailer address with the real mail address in both envelope and headers. This feature requires additional mail server configuration (Postfix canonical_maps) and support in uffd-socketmapd.
-
- Apr 22, 2022
- Apr 20, 2022
-
-
Julian authored
When the "new invite" page was submitted with e.g. an invalid "Valid Until" value, uffd displayed an error and reset the whole form. This was confusing to users. Now the form content is preserved on errors. Also the "Valid Until" field now has min/max attributes to prevent submitting the form with invalid values. Fixes #134
-
- Apr 02, 2022
-
-
sistason authored
-
- Mar 29, 2022
-
-
Julian authored
The group and role update subcommands set the description to an empty string if the "--description" option was ommitted. Fixes #156
-
- Mar 28, 2022
-
- Mar 24, 2022
-
- Mar 23, 2022
-
-
- Mar 22, 2022
- Feb 28, 2022
-
-
Julian authored
-
Julian authored
When the service overview was introduced, it was meant to be optional. Thus if the SERVICES config option was empty (the default), uffd returned 404. Commit fa67bde0 (Migrate OAuth2 and API clients to database) introduced the regression that accessing the service overview page when no services are visible based on the permissions of the current user (or guest if not logged in), 404 is returned. This change fixes the regression and further changes the behavior to improve consistency. Since fa67bde0, the page is relevant to admin users regardless of the SERVICES config option. Therefore uffd asks for login or reports missing permissions in all cases it originally returned 404.
-
- Feb 27, 2022
-
-
Julian authored
-
- Feb 25, 2022
-
-
Julian authored
Added guard to first v2 migration in order to prevent accidental upgrades. Extended the upgrade instructions and moved them from the README to a standalone file.
-
Julian authored
The original change completely broke single logout support. The migration now uses the correct hashing algorithm (unsalted SHA512 instead of salted SHA512) for OAuth2/API secrets/passwords.
-
Julian authored
The migration originally failed to convert the passwords/secrets to the format expected by PasswordHash resulting in invalid password hashes. With this change, the migration works correctly. Also fixes minor template bug.
-
- Feb 24, 2022
-
-
Julian authored
Also adds a shallow Service model that coexists with the config-defined services to group multiple OAuth2 and API clients together. Clients defined in the config with OAUTH2_CLIENTS and API_CLIENTS_2 are imported by the database migrations. Removes support for complex values for the OAuth2 client group_required option. Only simple group names are supported, not (nested) lists of groups previously interpreted as AND/OR conjunctions. Also removes support for the login_message parameter of OAuth2 clients.
-
- Feb 17, 2022
-
-
Julian authored
The generation now happens in a subquery inside the INSERT statement instead of separate client-managed query. This should also reduce the risk of race conditions. Service and non-service users may now use the same UID range.
-
- Feb 16, 2022
-
-
Julian authored
-
Julian authored
-
Julian authored
The command replaces all existing mechanisms for deleting expired objects. It should run at least daily. The Debian package includes a corresponding cron job. Ratelimit events now use UTC timestamps instead of localtime. On upgrade all past ratelimit events are cleared.
-
- Feb 14, 2022
-
-
Julian authored
-
- Feb 13, 2022
-
-
Julian authored
Calling op.get_bind outside a callback broke "flask db history".
-