Skip to content

Conversation

@enjeck
Copy link
Contributor

@enjeck enjeck commented Dec 28, 2025

part of #67

TODO

@enjeck enjeck self-assigned this Dec 28, 2025
@enjeck enjeck requested a review from blizzz as a code owner December 28, 2025 07:23
@github-project-automation github-project-automation bot moved this to 🧭 Planning evaluation (don't pick) in 📝 Office team Dec 28, 2025
@enjeck enjeck force-pushed the enh/noid/link-share-biz branch from 9f86cfc to 6cc82e6 Compare December 29, 2025 16:16
@enjeck enjeck requested a review from juliusknorr December 30, 2025 08:33
juliusknorr

This comment was marked as resolved.

@juliusknorr juliusknorr added the enhancement New feature or request label Dec 30, 2025
@blizzz blizzz force-pushed the enh/noid/link-share-biz branch from 6cc82e6 to 7858b90 Compare January 5, 2026 11:05
@enjeck
Copy link
Contributor Author

enjeck commented Jan 6, 2026

Now looks like this:
Screenshot 2026-01-06 at 05 43 46

@enjeck enjeck force-pushed the enh/noid/link-share-biz branch from 0078f8d to 28fa2e9 Compare January 7, 2026 02:12
@blizzz

This comment was marked as resolved.

blizzz added 2 commits January 8, 2026 14:52
- modifies oc_tables_share structure with two columns, token and password
- adds ShareOCSController with a route to create link shares
- adds a PageController front route to display the link share
- adds a ApiPublicColumnsController to retrieve columns for public
  links. It was not added to the existing ApiColumnsController, as it
  requires the userId of the logged-in user and I did not want to weaken
  this detail.
- adds an abstract controller for columns with shared functionality and
  make ApiColumnsController extend it.
- adds a PublicRowOCSController for retrieving rows through link shares
- adds a ShareToken value object
- adds a ShareControlMiddleware for share token and existance
  validation. It comes with the AssertShareToken attribute.
- extends Share entity with ShareToken and Password properties
- extends ShareMapper to find a share by the share token
- extends ShareService with a method to easily create link shares
- extends ResponseDefinitions with TablesPublicRow and
  TablesPublicColumn specs. Essentially tableIDs are not exposed and
  also user ids in lastEditBy and createdBy are not disclosed.
- extends RowService and ColumnService with methods to return such ^
  formatted result arrays.
- extends OpenAPI spec

Signed-off-by: Arthur Schiwon <[email protected]>
@blizzz blizzz force-pushed the enh/noid/link-share-biz branch 3 times, most recently from ea6afca to 0a12b1b Compare January 8, 2026 14:26
- reuses existing logic and templates from server, cf.
  OCP\AppFramework\AuthPublicShareController

Signed-off-by: Arthur Schiwon <[email protected]>
@blizzz blizzz force-pushed the enh/noid/link-share-biz branch from 0a12b1b to fb4223f Compare January 8, 2026 14:50
blizzz and others added 4 commits January 9, 2026 05:44
- modifies oc_tables_share structure with two columns, token and password
- adds ShareOCSController with a route to create link shares
- adds a PageController front route to display the link share
- adds a ApiPublicColumnsController to retrieve columns for public
  links. It was not added to the existing ApiColumnsController, as it
  requires the userId of the logged-in user and I did not want to weaken
  this detail.
- adds an abstract controller for columns with shared functionality and
  make ApiColumnsController extend it.
- adds a PublicRowOCSController for retrieving rows through link shares
- adds a ShareToken value object
- adds a ShareControlMiddleware for share token and existance
  validation. It comes with the AssertShareToken attribute.
- extends Share entity with ShareToken and Password properties
- extends ShareMapper to find a share by the share token
- extends ShareService with a method to easily create link shares
- extends ResponseDefinitions with TablesPublicRow and
  TablesPublicColumn specs. Essentially tableIDs are not exposed and
  also user ids in lastEditBy and createdBy are not disclosed.
- extends RowService and ColumnService with methods to return such ^
  formatted result arrays.
- extends OpenAPI spec

Signed-off-by: Arthur Schiwon <[email protected]>
- modifies oc_tables_share structure with two columns, token and password
- adds ShareOCSController with a route to create link shares
- adds a PageController front route to display the link share
- adds a ApiPublicColumnsController to retrieve columns for public
  links. It was not added to the existing ApiColumnsController, as it
  requires the userId of the logged-in user and I did not want to weaken
  this detail.
- adds an abstract controller for columns with shared functionality and
  make ApiColumnsController extend it.
- adds a PublicRowOCSController for retrieving rows through link shares
- adds a ShareToken value object
- adds a ShareControlMiddleware for share token and existance
  validation. It comes with the AssertShareToken attribute.
- extends Share entity with ShareToken and Password properties
- extends ShareMapper to find a share by the share token
- extends ShareService with a method to easily create link shares
- extends ResponseDefinitions with TablesPublicRow and
  TablesPublicColumn specs. Essentially tableIDs are not exposed and
  also user ids in lastEditBy and createdBy are not disclosed.
- extends RowService and ColumnService with methods to return such ^
  formatted result arrays.
- extends OpenAPI spec

Signed-off-by: Arthur Schiwon <[email protected]>
@enjeck
Copy link
Contributor Author

enjeck commented Jan 9, 2026

The share link is not created correctly, at least when NC is installed in a subdir, see the duplicated nextcloud section:

https://example.org/nextcloud/nextcloud/index.php/apps/tables/s/rXPTiveyDC5t4SID

Should be fixed now @blizzz

Copy link
Member

@blizzz blizzz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works! Some cosmetic remarks. I skimmed front-end code only tbh.

* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think all the changes in this file are not necessary?

protected IInitialState $initialState,
protected ShareService $shareService,
protected NodeService $nodeService,
protected IL10N $l,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need it and its use clause here anymore

$token = $request->getParam('token');
if (is_string($token) && $token !== '') {
$this->shareToken = new ShareToken($token);
try {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we not have this try block? Or why do we need it? Properties should not be nullable ideally.

public function isValidToken(): bool {
$this->shareToken;
return true;
return $this->share !== null;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, yeah, my code was a leftover after refactoring. Before it would fetch it, and succeed, or fail. If we need this than the nullable approach is ok for now.

Comment on lines +115 to +123
* @psalm-type TablesPublicNode = array{
* title: string,
* emoji: string,
* description: string,
* createdAt: string,
* lastEditAt: string,
* rowsCount: int,
* }
*
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

goes away, openapi ci will complain when it is not used in the spec.


/**
* Checks if a share is a public link share
* @param {object} share
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there is some jsdoc warning ☝️ 🤷

@enjeck enjeck force-pushed the enh/noid/link-share-biz branch from fb4223f to f567947 Compare January 9, 2026 19:29
@blizzz blizzz force-pushed the enh/noid/link-share-biz branch from f567947 to 434fc6a Compare January 9, 2026 22:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Status: 🧭 Planning evaluation (don't pick)

Development

Successfully merging this pull request may close these issues.

4 participants