feat: implement edit public link

This commit is contained in:
Michael Barz
2023-12-08 18:08:23 +01:00
parent 8aad8dd4d3
commit fe48dc148a
3 changed files with 38 additions and 4 deletions

View File

@@ -654,11 +654,18 @@ func (g Graph) UpdatePermission(w http.ResponseWriter, r *http.Request) {
return
}
// We don't implement updating link permissions yet
// This is a public link
if _, ok := oldPermission.GetLinkOk(); ok {
errorcode.NotSupported.Render(w, r, http.StatusNotImplemented, "not implemented")
updatedPermission, err := g.updatePublicLinkPermission(ctx, permissionID, &itemID, permission)
if err != nil {
errorcode.RenderError(w, r, err)
return
}
render.Status(r, http.StatusOK)
render.JSON(w, r, &updatedPermission)
return
}
// This is a user share
updatedPermission, err := g.updateUserShare(ctx, permissionID, oldPermission, permission)
if err != nil {

View File

@@ -248,7 +248,30 @@ func (g Graph) updatePublicLinkPassword(ctx context.Context, permissionID string
return permission, nil
}
func (g Graph) updatePublicLinkPermission(ctx context.Context, permissionID string, info *providerv1beta1.ResourceInfo, newPermission *libregraph.Permission) (perm *libregraph.Permission, err error) {
func (g Graph) updatePublicLinkPermission(ctx context.Context, permissionID string, itemID *providerv1beta1.ResourceId, newPermission *libregraph.Permission) (perm *libregraph.Permission, err error) {
gatewayClient, err := g.gatewaySelector.Next()
if err != nil {
g.logger.Error().Err(err).Msg("could not select next gateway client")
return nil, errorcode.New(errorcode.GeneralException, err.Error())
}
statResp, err := gatewayClient.Stat(
ctx,
&providerv1beta1.StatRequest{
Ref: &providerv1beta1.Reference{
ResourceId: itemID,
Path: ".",
},
})
if err != nil {
g.logger.Error().Err(err).Msg("transport error, could not stat resource")
return nil, errorcode.New(errorcode.GeneralException, err.Error())
}
if code := statResp.GetStatus().GetCode(); code != rpc.Code_CODE_OK {
g.logger.Debug().Interface("itemID", itemID).Msg(statResp.GetStatus().GetMessage())
return nil, errorcode.New(cs3StatusToErrCode(code), statResp.GetStatus().GetMessage())
}
if newPermission.HasExpirationDateTime() {
expirationDate := newPermission.GetExpirationDateTime()
update := &link.UpdatePublicShareRequest_Update{
@@ -279,7 +302,7 @@ func (g Graph) updatePublicLinkPermission(ctx context.Context, permissionID stri
libregraph.DriveItemCreateLink{
Type: &changedLink,
},
info.GetType(),
statResp.GetInfo().GetType(),
)
update := &link.UpdatePublicShareRequest_Update{
Type: link.UpdatePublicShareRequest_Update_TYPE_PERMISSIONS,

View File

@@ -47,6 +47,10 @@ func permission(v *validator.Validate) {
sl.ReportError(permission.Id, "Id", "Id", "readonly", "")
}
if _, ok := permission.GetHasPasswordOk(); ok {
sl.ReportError(permission.HasPassword, "hasPassword", "HasPassword", "readonly", "")
}
rolesAndActions(sl, permission.Roles, permission.LibreGraphPermissionsActions, true)
}, s)
}