[Sharing] Add setpermission to sharing code
authorRoeland Jago Douma <rullzer@owncloud.com>
Sat, 31 Oct 2015 12:39:08 +0000 (13:39 +0100)
committerRoeland Jago Douma <rullzer@owncloud.com>
Wed, 4 Nov 2015 11:53:02 +0000 (12:53 +0100)
For user/group/remote shares we were just missing the setPermissions
functionality

src/gui/ocssharejob.cpp
src/gui/ocssharejob.h
src/gui/share.cpp
src/gui/share.h

index fe6afa65f3b19c8c8c14d8ffefd487c418493640..37ca5aa39f5d826160a2d977d14e843ad5ba42b1 100644 (file)
@@ -83,26 +83,50 @@ void OcsShareJob::setPublicUpload(const QString &shareId, bool publicUpload)
     start();
 }
 
-void OcsShareJob::createShare(const QString &path, Share::ShareType shareType, const QString &password, const QDate &date)
+void OcsShareJob::setPermissions(const QString &shareId, 
+                                 const Share::Permissions permissions)
+{
+    appendPath(shareId);
+    setVerb("PUT");
+
+    addParam(QString::fromLatin1("permissions"), QString::number(permissions));
+    _value = (int)permissions;
+
+    start();
+}
+
+void OcsShareJob::createLinkShare(const QString &path, 
+                                  const QString &password)
 {
     setVerb("POST");
 
     addParam(QString::fromLatin1("path"), path);
-    addParam(QString::fromLatin1("shareType"), QString::number(static_cast<int>(shareType)));
+    addParam(QString::fromLatin1("shareType"), QString::number(Share::TypeLink));
 
     if (!password.isEmpty()) {
         addParam(QString::fromLatin1("password"), password);
     }
 
-    if (date.isValid()) {
-        addParam(QString::fromLatin1("expireDate"), date.toString("yyyy-MM-dd"));
-    }
-
     addPassStatusCode(403);
 
     start();
 }
 
+void OcsShareJob::createShare(const QString& path, 
+                              const Share::ShareType shareType,
+                              const QString& shareWith,
+                              const Share::Permissions permissions)
+{
+    setVerb("POST");
+
+    addParam(QString::fromLatin1("path"), path);
+    addParam(QString::fromLatin1("shareType"), QString::number(shareType));
+    addParam(QString::fromLatin1("shareWith"), shareWith);
+    addParam(QString::fromLatin1("permissions"), QString::number(permissions));
+
+    start();
+}
+
 void OcsShareJob::jobDone(QVariantMap reply)
 {
     emit shareJobFinished(reply, _value);
index c970df920638c409c350e247efa55f5f3730aced..bc65b53170283395cbb58ee0987689b5be786c1d 100644 (file)
@@ -73,15 +73,35 @@ public:
      */
     void setPublicUpload(const QString &shareId, bool publicUpload);
 
+    /**
+     * Set the permissions
+     *
+     * @param permissions
+     */
+    void setPermissions(const QString &shareId, 
+                        const Share::Permissions permissions);
+
+    /**
+     * Create a new link share
+     *
+     * @param path The path of the file/folder to share
+     * @param password Optionally a password for the share
+     */
+    void createLinkShare(const QString& path, 
+                         const QString& password = "");
+
     /**
      * Create a new share
      *
      * @param path The path of the file/folder to share
      * @param shareType The type of share (user/group/link/federated)
-     * @param password Optionally a password for the share
-     * @param date Optionally an expire date for the share
+     * @param shareWith The uid/gid/federated id to share with
+     * @param permissions The permissions the share will have
      */
-    void createShare(const QString& path, Share::ShareType shareType, const QString& password = "", const QDate& date = QDate());
+    void createShare(const QString& path, 
+                     const Share::ShareType shareType,
+                     const QString& shareWith = "",
+                     const Share::Permissions permissions = Share::PermissionRead);
 
 signals:
     /**
index 7a62fe313bafdcd365249d44de48b027b988a88a..0af7425f09f46ee323c8f5b6c6e179dcfb9ae1a1 100644 (file)
@@ -22,13 +22,15 @@ namespace OCC {
 Share::Share(AccountPtr account, 
              const QString& id, 
              const QString& path, 
-             ShareType shareType,
-             Permissions permissions)
+             const ShareType shareType,
+             const Permissions permissions,
+             const QString shareWith)
 : _account(account),
   _id(id),
   _path(path),
   _shareType(shareType),
-  _permissions(permissions)
+  _permissions(permissions),
+  _shareWith(shareWith)
 {
 
 }
@@ -43,6 +45,20 @@ Share::ShareType Share::getShareType() const
     return _shareType;
 }
 
+void Share::setPermissions(Permissions permissions)
+{
+    OcsShareJob *job = new OcsShareJob(_account, this);
+    connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotPermissionsSet(QVariantMap, QVariant)));
+    connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
+    job->setPermissions(getId(), permissions);
+}
+
+void Share::slotPermissionsSet(const QVariantMap &, const QVariant &value)
+{
+    _permissions = (Permissions)value.toInt();
+    emit permissionsSet();
+}
+
 Share::Permissions Share::getPermissions() const
 {
     return _permissions;
@@ -112,7 +128,6 @@ void LinkShare::setPublicUpload(bool publicUpload)
 
 void LinkShare::slotPublicUploadSet(const QVariantMap&, const QVariant &value)
 {
-    //TODO FIX permission with names
     if (value.toBool()) {
         _permissions = PermissionRead | PermissionUpdate | PermissionCreate;
     } else {
@@ -163,7 +178,7 @@ void ShareManager::createLinkShare(const QString &path,
     OcsShareJob *job = new OcsShareJob(_account, this);
     connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotLinkShareCreated(QVariantMap)));
     connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
-    job->createShare(path, Share::TypeLink, password);
+    job->createLinkShare(path, password);
 }
 
 void ShareManager::slotLinkShareCreated(const QVariantMap &reply)
@@ -187,6 +202,26 @@ void ShareManager::slotLinkShareCreated(const QVariantMap &reply)
     emit linkShareCreated(share);
 }
 
+void ShareManager::createShare(const QString& path,
+                               const Share::ShareType shareType,
+                               const QString shareWith,
+                               const Share::Permissions permissions)
+{
+    OcsShareJob *job = new OcsShareJob(_account, this);
+    connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotShareCreated(QVariantMap)));
+    connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
+    job->createShare(path, shareType, shareWith, permissions);
+}
+
+void ShareManager::slotShareCreated(const QVariantMap &reply)
+{
+    //Parse share
+    auto data = reply.value("ocs").toMap().value("data").toMap();
+    QSharedPointer<Share> share(parseShare(data));
+
+    emit shareCreated(share);
+}
+
 void ShareManager::fetchShares(const QString &path)
 {
     OcsShareJob *job = new OcsShareJob(_account, this);
@@ -213,11 +248,7 @@ void ShareManager::slotSharesFetched(const QVariantMap &reply)
         if (shareType == Share::TypeLink) {
             newShare = parseLinkShare(data);
         } else {
-            newShare = QSharedPointer<Share>(new Share(_account,
-                                                       data.value("id").toString(),
-                                                       data.value("path").toString(),
-                                                       (Share::ShareType)shareType,
-                                                       (Share::Permissions)data.value("permissions").toInt()));
+            newShare = parseShare(data);
         }
 
         shares.append(QSharedPointer<Share>(newShare));    
@@ -257,6 +288,16 @@ QSharedPointer<LinkShare> ShareManager::parseLinkShare(const QVariantMap &data)
                                                    expireDate));
 }
 
+QSharedPointer<Share> ShareManager::parseShare(const QVariantMap &data) {
+
+    return QSharedPointer<Share>(new Share(_account,
+                                           data.value("id").toString(),
+                                           data.value("path").toString(),
+                                           (Share::ShareType)data.value("share_type").toInt(),
+                                           (Share::Permissions)data.value("permissions").toInt(),
+                                           data.value("share_with").toString()));
+}
+
 void ShareManager::slotOcsError(int statusCode, const QString &message)
 {
     emit serverError(statusCode, message);   
index 41c71060571d3089f881d62fe198a5602a3981b4..3962fca0d59feee7542b4ef2493e9e7aa3e0d8c2 100644 (file)
@@ -59,8 +59,9 @@ public:
     explicit Share(AccountPtr account,
                    const QString& id,
                    const QString& path,
-                   ShareType shareType,
-                   Permissions permissions);
+                   const ShareType shareType,
+                   const Permissions permissions,
+                   const QString shareWith = "");
 
     /*
      * Get the id
@@ -72,6 +73,11 @@ public:
      */
     ShareType getShareType() const;
 
+    /*
+     * Get the shareWith
+     */
+    QString getShareWith() const;
+
     /*
      * Get permissions
      */
@@ -83,7 +89,7 @@ public:
      * On success the permissionsSet signal is emitted
      * In case of a server error the serverError signal is emitted.
      */
-    void setPermissions(int permissions);
+    void setPermissions(Permissions permissions);
 
     /**
      * Deletes a share
@@ -104,12 +110,14 @@ protected:
     QString _path;
     ShareType _shareType;
     Permissions _permissions;
+    QString _shareWith;
 
 protected slots:
     void slotOcsError(int statusCode, const QString &message);
 
 private slots:
     void slotDeleted();
+    void slotPermissionsSet(const QVariantMap &, const QVariant &value);
 
 };
 
@@ -125,7 +133,7 @@ public:
     explicit LinkShare(AccountPtr account,
                        const QString& id,
                        const QString& path,
-                       Permissions permissions,
+                       const Permissions permissions,
                        bool passwordSet,
                        const QUrl& url,
                        const QDate& expireDate);
@@ -215,6 +223,21 @@ public:
     void createLinkShare(const QString& path,
                          const QString& password="");
 
+    /**
+     * Tell the manager to create a new share
+     *
+     * @param path The path of the share relative to the user folder on the server
+     * @param shareType The type of share (TypeUser, TypeGroup, TypeRemote)
+     * @param Permissions The share permissions
+     *
+     * On success the signal shareCreated is emitted
+     * In case of a server error the serverError signal is emitted
+     */
+    void createShare(const QString& path,
+                     const Share::ShareType shareType,
+                     const QString shareWith,
+                     const Share::Permissions permissions);
+
     /**
      * Fetch all the shares for path
      *
@@ -226,6 +249,7 @@ public:
     void fetchShares(const QString& path);
 
 signals:
+    void shareCreated(const QSharedPointer<Share> &share);
     void linkShareCreated(const QSharedPointer<LinkShare> &share);
     void linkShareRequiresPassword();
     void sharesFetched(const QList<QSharedPointer<Share>> &shares);
@@ -234,10 +258,12 @@ signals:
 private slots:
     void slotSharesFetched(const QVariantMap &reply);
     void slotLinkShareCreated(const QVariantMap &reply);
+    void slotShareCreated(const QVariantMap &reply);
     void slotOcsError(int statusCode, const QString &message);
 
 private:
     QSharedPointer<LinkShare> parseLinkShare(const QVariantMap &data);
+    QSharedPointer<Share> parseShare(const QVariantMap &data);
 
     AccountPtr _account;
 };