Skip to content
Snippets Groups Projects
  1. May 22, 2024
  2. May 18, 2024
  3. Mar 25, 2024
  4. Mar 24, 2024
  5. Mar 21, 2024
    • Julian's avatar
      OpenID Connect Core 1.0 and Discovery 1.0 support · edd4f4ca
      Julian authored
      Limited to OpenID provider conformance profiles "Basic" and "Config":
      
      - Support for features mandatory to implement for all OpenID Providers,
        not the feature set for Dynamic OpenID Providers
      - Only Authorization Code Flow, no support for Implicit/Hybrid Flow
      - Only code response type, no support for token/id_token
      - Server metadata is served at /.well-known/openid-configuration
      
      Additional/optional features:
      
      - Support for "claims" parameter
      - Support for standard scopes "profile" and "email"
      - Support for non-standard scope/claim "groups" (in violation of RFC 9068)
      
      Compatability with existing (working) uffd client setups: Authorization
      requests without the "openid" scope behave the same as before  Prior to this
      change authorization requests with the "openid" scope were rejected by uffd.
      
      This change adds direct dependencies to pyjwt and cryptography. Prior to this
      change both were already transitive dependencies of oauthlib.
      edd4f4ca
  6. Feb 23, 2024
  7. Nov 08, 2023
  8. Nov 07, 2023
    • Julian's avatar
      Prevent TOTP code reuse · 7a94d7de
      Julian authored
      Time-based one-time password (TOTP) codes are only valid for a short period
      of time. In addition they are meant to be single-use to make them more
      resistant against phishing and eavesdropping (e.g. keyloggers). Prior to this
      change uffd did not keep track of used codes and thus did not prevent code
      reuse.
      7a94d7de
  9. Oct 22, 2023
    • Julian's avatar
      Debian Bookworm support · 0d870ee1
      Julian authored
      - Add CI tests for Bookworm
      - Disable pylint deprecation warnings for crypt
      - Mitigate Flask changes that broke a few tests
      - Set create_constraint=True for Booleans/Enums to mitigate SQLAlchemy changes
      - Mitigate new Alembic CHECK constraint behaviour in batch mode
      0d870ee1
  10. Nov 13, 2022
  11. Nov 08, 2022
  12. Nov 06, 2022
    • Julian's avatar
      Add per-service setting for testing remailer · 05f68ec8
      Julian authored
      This setting is more flexible than the existing REMAILER_LIMIT_TO_USERS config
      option. The config option is therefore deprecated and will be removed in the
      next major version.
      05f68ec8
  13. Nov 04, 2022
    • Julian's avatar
      Cleanup CI tests · b5c27f1c
      Julian authored
      Turns check_migrations.py into a normal test case. Speeds up pipeline by
      making html5validator use the artifacts from tests:buster:sqlite instead of
      running the tests on its own.
      b5c27f1c
    • Julian's avatar
      Force charset/collation on MariaDB and enable CI tests · 91ba4a6f
      Julian authored
      Uffd now requires that MariaDB databases have utf8mb4 charset and
      utf8mb4_nopad_bin collation. The collation was chosen for consistency with
      SQLite's BINARY collation.
      91ba4a6f
  14. Nov 03, 2022
    • Julian's avatar
      New UID/GID allocation approach · 53c06069
      Julian authored
      Previously Unix UIDs/GIDs were allocated by using the highest used ID + 1.
      This caused ID reuse when the newest user/group was deleted. In addition, the
      implementation did not work on MariaDB (at all, it was not possible to create
      users/groups).
      
      The new approach accounts for all IDs ever used regardless of whether or not
      users/groups are deleted. It always allocates the lowest ID in the configured
      range that was never used.
      
      Aside from the different allocation algorithm, this change introduces a
      generic locking mechanism and prerequisites for testing migration scripts.
      53c06069
  15. Oct 25, 2022
    • Julian's avatar
      Unique email addresses · 620cf9ab
      Julian authored
      Enforces uniqueness of (verified) email addresses across all users. Email
      addresses are compared case-insensitivly and Unicode-normalized. The new
      unique constraints are disabled by default and can be enabled with a CLI
      command. They are planned to become mandatory in uffd v3.
      
      A lot of software does not allow multiple users to share the same email
      address. This change prevents problems with such software.
      
      To enable this feature run the command:
      
        uffd-admin unique-email-addresses enable
      
      The commands reports any issues (e.g. existing duplicate addresses) that
      prevent enabling the feature.
      
      This change also introduces a generic mechanism to store feature flags in the
      database and improves error handling for login name constraint violations.
      620cf9ab
  16. Oct 22, 2022
    • Julian's avatar
      Restructure tests · 0bd26ee8
      Julian authored
      Restructure tests into views/models/commands subdirectories to mirror the new
      source tree structure introduced with ac731bf4 (Restructure source tree).
      0bd26ee8
  17. Oct 20, 2022
    • Julian's avatar
      Remailer address format v2 · 879a04c5
      Julian authored
      Deprecates old case-sensitive format. Some software out there stores email
      addresses converted to lower case, breaking v1 remailer addresses. The new
      format is case-insensitive and generally more robust.
      
      Uffd continues to use and support the v1 format for services setup before
      this change. Support for the old format is planned to be remove in uffd v3.
      It is possbile to gradually migrate services to the new format with a service
      setting in the admin interface.
      
      Also fixes compatability issue with very recent SQLAlchemy versions introduced
      by b391e176 (whens parameter of case function).
      879a04c5
  18. Oct 19, 2022
    • Julian's avatar
      Per-service email preferences · b391e176
      Julian authored
      Also fixes a minor email-related bug in the admin interface and bad
      texts/translations in the selfservice UI.
      b391e176
  19. Aug 28, 2022
  20. Aug 27, 2022
    • nd's avatar
      Add prometheus metric endpoint at /metrics · 76dbf7b0
      nd authored
      Access control is done via normal api credentials.
      See README.md for details.
      Adds an optional dependency on python3-prometheus-client.
      76dbf7b0
  21. Aug 22, 2022
    • Julian's avatar
      Introduce ServiceUser · 6337c591
      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).
      6337c591
  22. Aug 19, 2022
    • Julian's avatar
      Use UTC internally · ffcec8a4
      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.
      ffcec8a4
  23. Aug 15, 2022
    • Julian's avatar
      Cleanup CI tests and LDAP remnants · 3f82ec74
      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.
      3f82ec74
    • Julian's avatar
      Restructure source tree · ac731bf4
      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
      ac731bf4
  24. Aug 14, 2022
  25. Apr 25, 2022
    • Julian's avatar
      Remailer support · 10e37c17
      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.
      10e37c17
  26. Apr 22, 2022
  27. Apr 20, 2022
    • Julian's avatar
      Fix "new invite" form resetting on error · bfd759bd
      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
      bfd759bd
  28. Mar 29, 2022
  29. Feb 28, 2022
    • Julian's avatar
    • Julian's avatar
      Fix regression in service overview access behavior · 3880be9a
      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.
      3880be9a
  30. Feb 24, 2022
    • Julian's avatar
      Migrate OAuth2 and API clients to database · fa67bde0
      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.
      fa67bde0
  31. Feb 17, 2022
    • Julian's avatar
      Refactor Unix UID/GID generation · 66df931d
      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.
      66df931d
  32. Feb 16, 2022
  33. Feb 13, 2022
    • Julian's avatar
      Argon2 for user password hashing · ac003909
      Julian authored
      Argon2 is a modern password hashing algorithm. It is significantly more secure
      than the previous algorithm (salted SHA512). User logins with Argon2 are
      relativly slow and cause significant spikes in CPU and memory (100MB) usage.
      
      Existing passwords are gradually migrated to Argon2 on login.
      ac003909
    • Julian's avatar
      Unified password hashing for User and Signup · 117e257c
      Julian authored
      Previously User used salted SHA512 with OpenLDAP-style prefix syntax and
      Signup used crypt. Both models had their own hashing and verification
      code. Now both use OpenLDAP-style syntax with support for all traditional
      formats including crypt. Salted SHA512 is used for new User and Signup
      passwords.
      
      Existing Signup objects are migrated to the new format and remain functional.
      User passwords now support gradual migration to another hash algorithm when
      it is changed in the future.
      
      This code is planned to be used for database-stored API and OAuth2 client
      secrets.
      117e257c
  34. Feb 04, 2022
    • Julian's avatar
      Constrain mail receive addresses and fix case-folding in API · 17b99372
      Julian authored
      Previously the getmails API endpoint did not match "receive_address" values
      case-insensitivly like it did pre-v2. To solve this independent of database
      collations, all existing mail receive addresses are converted to lower-case
      and new/changed receive addresses are constraint to ASCII lower-case letters,
      digits and symbols.
      17b99372
Loading