Commit Graph

1126 Commits

Author SHA1 Message Date
Edouard Vanbelle 8a05ee00cb doc: add OXICLOUD_SMTP_* variables + external variables user options 2026-06-03 00:31:59 +02:00
Edouard Vanbelle df438b8269 feat(external user): add OXICLOUD_EXTERNAL_EMAIL_DOMAINS for allow list 2026-06-03 00:31:59 +02:00
Edouard Vanbelle c3fa1b3e93 feat(magiclink) prepare magic link support (login via email)
imortant on security side: magic link  will be enabled only for users who don't have password nor OIDC
2026-06-03 00:31:59 +02:00
Edouard Vanbelle 2011d19e71 feat(smtp): add SMTP support to reach MTA 2026-06-03 00:31:59 +02:00
Edouard Vanbelle 772d097e23 docs: add plan to implement external user 2026-06-03 00:31:59 +02:00
Edouard Vanbelle 5fab0532dc feat(user): add given_name/family_name auth.users
reflect OIDC
  schema migration, User entity additions, and three defense-in-depth gaps closed, with all 280 unit tests and 13 Hurl files green
  infrastructure (lettre + EmailSender port).

  - Migration migrations/20260612000003_users_username_email_login.sql — adds nullable given_name/family_name columns to auth.users.
  - User entity (src/domain/entities/user.rs) — has_login_credential() placeholder-check encapsulation, set_username revalidating setter, given/family-name fields + getters/setters, validate_username widened 32→254 and now accepts email shape.
  from_data_full extended with two new params; all 7 callsites in user_pg_repository.rs updated.
  - Schema-side legacy guards (src/application/services/auth_application_service.rs) — bumped the duplicated 32-char check in setup_create_admin and admin_create_user to 254 to match.
  - Gap #1 (subject_group_service.rs) — add_member now rejects external candidates with an audit-logged AccessDenied. Service gained an Arc<UserPgRepository> field, wired through DI. New integration test test_external_user_cannot_be_added_as_member.
  - Gap #2 (user_repository.rs + auth_ports.rs + user_pg_repository.rs) — list_users/search_users gained an include_external: bool param defaulting effectively to false everywhere internal-user-facing. auth_application_service exposes a new
  list_users_including_external for the admin surface.
  - Gap #3 (pg_acl_engine.rs) — expand_user now SELECTs is_external and skips INTERNAL_GROUP_ID for externals; defaults to is_external=true on missing user to fail closed.
2026-06-03 00:31:59 +02:00
Edouard Vanbelle ce25bfa209 chore(ci): bring git hash and git branch on build 2026-06-03 00:31:59 +02:00
Dionisio Pozo a05e99175f Merge pull request #413 from EdouardVanbelle/chore/user-lifecycle 2026-06-02 18:00:04 +02:00
Edouard Vanbelle 86b60d4751 docs(user-lifecycle): show state of the art 2026-06-01 22:51:57 +02:00
Edouard Vanbelle 395e0b6e61 feat(userLifecycle): prepare external service identity
prepare identity service for external users, support of:
        - magic_link (url challenge via email)
        - self issued oidc (eventually social login)
        - open cloud mesh
2026-06-01 22:51:57 +02:00
Edouard Vanbelle 6a6f070106 feat(userLifecycle): plug actions to on_user_logout and on_user_deleted
- AuthzCacheLifecycleHook — invalidates the user_groups_cache Moka entry on logout/delete.
  - SessionRevocationLifecycleHook — explicit per-session firing of on_user_logout (currently per-call); session revocation inside the user-delete transaction.
  - DeletionMode-driven policy in HomeFolderLifecycleHook::on_user_deleted (trash vs hard-delete based on AdminDelete / GdprPurge).
  - Refactor delete_user_admin to expose a transaction handle so on_user_deleted can abort atomically.
2026-06-01 22:51:57 +02:00
Edouard Vanbelle d81f5dbe48 feat(userLifecycle): migrate create_personal_folder() use now on_user_login on_user_created (only if user is not external) 2026-06-01 22:51:57 +02:00
Edouard Vanbelle e130842bfc feat(user): add is_external flag, will permit integration of external users (without any storage) but able to be invited 2026-06-01 22:51:57 +02:00
Edouard Vanbelle bb6429a620 refactor(userLifecycle): add user lifecycle, more clarety + better integration for the future 2026-06-01 22:51:53 +02:00
Edouard Vanbelle 44781643ef docs: add plan on User Lifecycle 2026-06-01 22:50:31 +02:00
Dionisio Pozo 71efd29774 Merge pull request #412 from EdouardVanbelle/chore/clean-orphean-share 2026-06-01 19:32:38 +02:00
Dionisio Pozo 873a432a70 Merge pull request #411 from EdouardVanbelle/chore/vitepress 2026-06-01 19:32:23 +02:00
Dionisio Pozo 9560dab271 Merge pull request #410 from EdouardVanbelle/fix/sharedWithMe 2026-06-01 19:32:03 +02:00
Edouard Vanbelle 657056d7aa fix(shares): remove orphan shares
* a share without associated grant cannot exists (clen / trigger added)
    * reflect changes in documentatiion
2026-06-01 13:12:05 +02:00
Edouard Vanbelle 33851de3ce chore(vitepress): ignore docs/plan/* and *.prompt 2026-06-01 12:18:05 +02:00
Edouard Vanbelle 7362837a12 chore(vitepress): add ReBAC documentation 2026-06-01 12:17:50 +02:00
Edouard Vanbelle de1574f583 fix(SharedWithMe): remove group by size, not relevant and not implemented on server side 2026-06-01 09:00:50 +02:00
Dionisio Pozo 287365fed9 Merge pull request #408 from EdouardVanbelle/feat/groups
feat(groups): add group, will permit ReBAC to use All users, or a defined group with permission to files/folders
2026-06-01 08:30:26 +02:00
Edouard Vanbelle 64fe8aa3dc fix(GroupModal): fix the display of a child group (show it's name rather it's UUID) 2026-05-31 23:53:44 +02:00
Edouard Vanbelle d2dedcbb00 fix(integration-test): ensure integration tests are runned on a separate DB to avoid polution 2026-05-31 23:53:40 +02:00
Edouard Vanbelle 274cf9da11 fix(ShareModal): ensure correct order of roles (Most powerfull first) 2026-05-31 23:05:05 +02:00
Edouard Vanbelle a0d9cd881b fix(MyShares): correct order if items in MyShares view, when grouped by Files 2026-05-31 23:02:19 +02:00
Edouard Vanbelle c7e950a707 fix(myshares): update view on expiration date changed 2026-05-31 22:53:29 +02:00
Edouard Vanbelle e169f53218 test(integration): add integration test on subject group 2026-05-31 22:45:09 +02:00
Edouard Vanbelle 03ee05a74a docs: add documentation explaining ReBAC Authz architecture 2026-05-31 22:09:12 +02:00
Edouard Vanbelle 96097431c3 test(api): upgrade tests to new routes (don't use deprecated routes anymore) 2026-05-31 20:58:01 +02:00
Edouard Vanbelle 8b4edb1189 fix(openapi): expose route missing /api/.../resources to openapi 2026-05-31 20:58:01 +02:00
Edouard Vanbelle 09985f8a95 feat(group): 1st implementation of Groups
this implements first version (manageable only by admin right now)

    routes:

        GET /api/groups
        List subject groups (paginated). Admin-only.

        POST /api/groups
        Create a new ReBAC subject group. Admin-only. The name must match the RFC 5321 local-part shape and be globally unique (case-insensitive).

        GET /api/groups/search
        Search non-virtual groups by name substring. Authenticated only (no admin role required) — backs the share-dialog recipient autocomplete.

        GET /api/groups/{id}
        Fetch a single group's details. Admin-only.

        DELETE /api/groups/{id}
        Delete a group. Cascades to `subject_group_members` (FK) and to `access_grants` rows referencing this group as a subject. Admin-only.

        PATCH /api/groups/{id}
        Update a group's metadata. Admin-only. v1 only persists name renames.

        GET /api/groups/{id}/effective-members
        List every user transitively reached through this group (members of members of members, etc.). Used by admin / audit tooling. Admin-only.

        GET /api/groups/{id}/members
        List the *direct* members of a group (one level only). Admin-only.

        POST /api/groups/{id}/members
        Add a member to a group. Exactly one of `user_id` / `group_id` must be provided. Adding a group-member runs a write-time cycle check and a nesting-depth check (max 8). Admin-only.

        DELETE /api/groups/{id}/members/group/{gid}
        Remove a nested group-member from a group. Admin-only.

        DELETE /api/groups/{id}/members/user/{uid}
        Remove a user-member from a group. Admin-only.

fix hurl

groups

round

groups
2026-05-31 20:57:45 +02:00
Dionisio Pozo 41356b6490 Merge pull request #409 from jonathansmith9485/397/bug/helm_chart_correction
FIX : bug 397 add: helm chart changes
2026-05-31 12:24:52 +02:00
bubu d707200055 add: helm chart changes 2026-05-31 03:53:33 +02:00
Dionisio Pozo f6817f83e6 Merge pull request #405 from EdouardVanbelle/feat-light-dark-like_os 2026-05-30 15:09:15 +02:00
Dionisio Pozo a19a9000c7 Merge pull request #406 from EdouardVanbelle/feat/trash-with-cursor-and-resourceList-component 2026-05-30 15:09:00 +02:00
Edouard Vanbelle 19e8af84b7 feat(ui): improve groupby / sortby user experience + fix confusion in trash section 2026-05-30 11:15:46 +02:00
Edouard Vanbelle ae82f4b664 fix(MyShares): show tooltip when mouse over an item + fix the path 2026-05-30 10:41:16 +02:00
Edouard Vanbelle 3bcb3a5b3f ux(tooltip): fix(tooltip): move tooltip into top-bar, that fix issue with RTE languages 2026-05-30 10:38:43 +02:00
Edouard Vanbelle fe9cc10648 i18n: add missing translations 2026-05-30 09:51:47 +02:00
Edouard Vanbelle ca1a2bb649 feat(light-dark): normalize light/dark/like-os mode
permits user to define light, dark or like the desktop
2026-05-30 09:36:15 +02:00
Edouard Vanbelle ea83891a61 feat(trash): move trash API to normalized version (with cursor, orderBy) + normalize Trash section to existing components
normalize also component to format badges (expiry, role, etc)
2026-05-30 00:49:32 +02:00
Dionisio Pozo ed1ebadd91 Merge pull request #393 from Cilenco/fix/rootless-docker-run 2026-05-29 22:01:54 +02:00
Dionisio Pozo 6dab878919 Merge pull request #402 from EdouardVanbelle/feat/my-shares 2026-05-29 17:03:25 +02:00
Christian Dielitz e06e9c8b09 Adjusted entrypoint.sh to be posix conform 2026-05-29 16:51:05 +02:00
Edouard Vanbelle 615657a7be fix(shares): fix outgoing shares when browsing in files, fix shareBadge action to open shareDialog 2026-05-29 14:08:41 +02:00
Edouard Vanbelle eef67973b3 fix(myshares): reload on any change from ShareModal 2026-05-29 13:48:25 +02:00
Edouard Vanbelle 804cb7c6af fix(build): improve builder to use CSS from html rather an hardcoded list 2026-05-29 13:48:22 +02:00
Edouard Vanbelle 6e5c5edd85 chore(ui): apply biome formatter 2026-05-29 13:15:31 +02:00