Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ignore Resharing instead of Erroring #4816

Merged
merged 1 commit into from
Aug 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions changelog/unreleased/ignore-resharing-requests.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Enhancement: Ignore resharing requests

We now ignore resharing permissions. Instead of returning BadRequest we just reduce the permissions.

https://github.com/cs3org/reva/pull/4816
Original file line number Diff line number Diff line change
Expand Up @@ -282,8 +282,34 @@ func (h *Handler) CreateShare(w http.ResponseWriter, r *http.Request) {
reqRole, reqPermissions := r.FormValue("role"), r.FormValue("permissions")
switch shareType {
case int(conversions.ShareTypeUser), int(conversions.ShareTypeGroup):
// user collaborations default to Manager (=all permissions)
role, val, ocsErr := h.extractPermissions(reqRole, reqPermissions, statRes.Info, conversions.NewManagerRole())
// NOTE: clients tend to send "31" as permissions but they mean "15".
// This is because it adds the "16" for sharing , but that is now no longer allowed.
// We could now have some fancy mechanism that casts the string to an int, subtracts 16 and casts it back to a string.
// Or we could change the role later and hope everything works out.
// Or:
if reqRole == "" {
switch reqPermissions {
Copy link
Contributor

Choose a reason for hiding this comment

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

The permission bits are:
https://doc.owncloud.com/server/next/admin_manual/configuration/files/file_sharing_configuration.html#permissions-masks

1 - read
2 - update
4 - create
8 - delete
16 - share (no longer used on ocis)

I suppose that someone could be granted 1+8+16=25 (read, delete and share) and that should become 9.

And for "file drop" there can be combinations like update+create=6 (the person doing the "file drop" cannot read back the file after "dropping" it), and maybe some client might send 22 as the permissions?

Why not just "cast to int" then take the remainder mod16, and cast back to string. That avoids thinking about which permission bit combinations will actually happen.

Copy link
Contributor Author

@kobergj kobergj Aug 21, 2024

Choose a reason for hiding this comment

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

This is a deprecated endpoint. Additionally I hope that his gets fixed in clients so we can remove it here. It doesn't need to be very resilient, only needs to fix the actual problem. In fact, it would already be enough to only handle "17", "25" and "31". I just added the other values so it matches with the tests. I don't think we need any more values as there will not be any feature updates to this endpoint

Copy link
Contributor

Choose a reason for hiding this comment

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

FYI, @TheOneRing, ok for you?

case "31":
reqPermissions = "15"
case "29":
reqPermissions = "13"
case "27":
reqPermissions = "11"
case "23":
reqPermissions = "7"
case "22":
reqPermissions = "6"
case "21":
reqPermissions = "5"
case "19":
reqPermissions = "3"
case "17":
reqPermissions = "1"
}
}

// user collaborations default to Viewer. Sane Default.
role, val, ocsErr := h.extractPermissions(reqRole, reqPermissions, statRes.Info, conversions.NewViewerRole())
if ocsErr != nil {
response.WriteOCSError(w, r, ocsErr.Code, ocsErr.Message, ocsErr.Error)
return
Expand Down
Loading