Skip to content

[FEATURE REQUEST] Sharing NG: List existing links #4956

Closed

Description

@jesmrec

Listing links by fetching them from server

GET https://<url>/graph/v1beta1/drives/<drive-id>/items/<item-id>/permissions  

(same as shares)

A list of links is available in the object values like:

        {
            "createdDateTime": "2026-08-19T11:55:13.45495517Z",
            "hasPassword": true,
            "id": "IAfiUVqqpslHpNK",
            "link": {
                "@libre.graph.displayName": "test",
                "@libre.graph.quickLink": false,
                "preventsDownload": false,
                "type": "edit",
                "webUrl": "https://<url>/s/ioRkTIB9VDNKzxy"
            }
        },

It should be displayed in the same way as the spaces' links

  • Name of the link -> first row

Below:

  • Permission
  • Expiration date (only if exists)

On the right, the chain icon that shares the link

edit and remove, in the following issues.

Small issue to fix:

The warning under the PUBLIC LINKS header states:

Anyone with the link has access to the space

it should be

Anyone with the link has access to the file/folder

TASKS

  • Research (if needed)
  • Create branch feature/list_public_links_sharing_ng
  • Development tasks
    • Render public links in the Sharing NG panel
    • Implement the chain icon for sharing the web url
    • Adapt the warning message
    • Refactor public links adapter and other classes used in spaces
    • Implement unit tests (if needed)
  • Code review and apply changes requested
  • Design test plan
  • QA
  • Merge branch feature/list_public_links_sharing_ng into master

Activity

  1. added this to the 4.9 - Current milestone on Aug 24, 2026
  2. self-assigned this
    on Oct 9, 2026
  3. joragua commented on Oct 14, 2026

    @joragua
    Member

    Spec:

    Problem

    The Sharing NG flow does not display existing public links for files and folders, leaving users with no visibility over links that were previously created from any client. Additionally, the warning text under the PUBLIC LINKS section incorrectly refers to "the space" instead of the specific file or folder being shared.


    Desired behavior

    When a user opens the sharing panel for a file or folder, all existing public links for that item are retrieved from the server and displayed in a list. Each link shows its name, its permission level, its expiration date when one exists, and a share-link action. The warning text under the PUBLIC LINKS header correctly references the file or folder rather than the space.


    User stories

    • As a user, I want to see all existing public links for a file or folder when I open its sharing panel, so I know which links are active.
    • As a user, I want each link entry to show its name, permission, and expiration date (if any), so I can identify links without opening them.
    • As a user, I want to tap the chain icon on a link to share its URL through the Android share sheet.

    Constraints

    • Only items from the values array that contain a link object are public links and must be listed; share entries without a link object must be excluded.

    Acceptance criteria

    • Opening the sharing panel for a file or folder triggers a fetch of its permissions from the Graph API.
    • All items in values that contain a link object are displayed in the PUBLIC LINKS section.
    • Each entry displays the value of link["@libre.graph.displayName"] as its name.
    • Each entry displays the link's permission type.
    • Each entry displays the expiration date only when one is present in the response.
    • A chain icon is shown on the right of each entry and shares link.webUrl through the Android share sheet when tapped.
    • The warning text under PUBLIC LINKS reads "Anyone with the link has access to the file/folder", where "file" or "folder" matches the type of the selected item.

    Out of scope

    • Creating new public links.
    • Editing existing public links.
    • Deleting existing public links.
    • Password-protection status is not displayed in the list (it may be visible in a detail/edit view addressed by a future issue).
    • Classic WebDAV shares.

    Assumptions

    • The app already has a working integration with the Graph API permissions endpoint (used for shares), so public links can be fetched from the same response without an additional network call.

    • The spaces' links UI (issue [FEATURE REQUEST] List links over a space #4752) already exists and is reusable as a layout reference.

    • The item's drive-id and item-id are available in the sharing panel context.

    • Links must be fetched from the Graph API endpoint: GET /graph/v1beta1/drives/<drive-id>/items/<item-id>/permissions (the same endpoint used for shares).

    • The Graph API permissions endpoint returns a value array where public links are identified by the presence of a link object. The fields available on each link entry are:

      Field Type Notes
      id String Unique identifier of the link
      createdDateTime String (ISO 8601) Creation timestamp
      expirationDateTime String (ISO 8601) Absent when no expiration is set
      hasPassword Boolean Whether the link is password-protected
      link["@libre.graph.displayName"] String User-defined name; always set
      link["@libre.graph.quickLink"] Boolean Ignore it
      link.type String edit displayed as Can edit. view as Can view. createOnly as Secret file drop
      link.preventsDownload Boolean Ignore it
      link.webUrl String The shareable URL
    • Map response fields to UI: link["@libre.graph.displayName"] → link name, link.type → permission label, expirationDateTime → expiration date row (omit if absent), link.webUrl → URL shared by the chain icon.

    • hasPassword is present in the response but out of scope for this issue; consider carrying it in the data model for use in a future edit flow.

    • The warning text fix must be conditional on whether the target item is a file or a folder.


    Implementation notes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions