mirror of
https://github.com/penpot/penpot.git
synced 2025-05-25 19:56:11 +02:00
71 lines
2.3 KiB
Clojure
71 lines
2.3 KiB
Clojure
;; This Source Code Form is subject to the terms of the Mozilla Public
|
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
;;
|
|
;; Copyright (c) KALEIDOS INC
|
|
|
|
(ns app.rpc.commands.files-share
|
|
"Share link related rpc mutation methods."
|
|
(:require
|
|
[app.common.spec :as us]
|
|
[app.common.uuid :as uuid]
|
|
[app.db :as db]
|
|
[app.rpc :as-alias rpc]
|
|
[app.rpc.commands.files :as files]
|
|
[app.rpc.doc :as-alias doc]
|
|
[app.util.services :as sv]
|
|
[clojure.spec.alpha :as s]))
|
|
|
|
;; --- Helpers & Specs
|
|
|
|
(s/def ::file-id ::us/uuid)
|
|
(s/def ::who-comment ::us/string)
|
|
(s/def ::who-inspect ::us/string)
|
|
(s/def ::pages (s/every ::us/uuid :kind set?))
|
|
|
|
;; --- MUTATION: Create Share Link
|
|
|
|
(declare create-share-link)
|
|
|
|
(s/def ::create-share-link
|
|
(s/keys :req [::rpc/profile-id]
|
|
:req-un [::file-id ::who-comment ::who-inspect ::pages]))
|
|
|
|
(sv/defmethod ::create-share-link
|
|
"Creates a share-link object.
|
|
|
|
Share links are resources that allows external users access to specific
|
|
pages of a file with specific permissions (who-comment and who-inspect)."
|
|
{::doc/added "1.18"}
|
|
[{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id] :as params}]
|
|
(db/with-atomic [conn pool]
|
|
(files/check-edition-permissions! conn profile-id file-id)
|
|
(create-share-link conn (assoc params :profile-id profile-id))))
|
|
|
|
(defn create-share-link
|
|
[conn {:keys [profile-id file-id pages who-comment who-inspect]}]
|
|
(let [pages (db/create-array conn "uuid" pages)
|
|
slink (db/insert! conn :share-link
|
|
{:id (uuid/next)
|
|
:file-id file-id
|
|
:who-comment who-comment
|
|
:who-inspect who-inspect
|
|
:pages pages
|
|
:owner-id profile-id})]
|
|
|
|
(update slink :pages db/decode-pgarray #{})))
|
|
|
|
;; --- MUTATION: Delete Share Link
|
|
|
|
(s/def ::delete-share-link
|
|
(s/keys :req [::rpc/profile-id]
|
|
:req-un [::us/id]))
|
|
|
|
(sv/defmethod ::delete-share-link
|
|
{::doc/added "1.18"}
|
|
[{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id id] :as params}]
|
|
(db/with-atomic [conn pool]
|
|
(let [slink (db/get-by-id conn :share-link id)]
|
|
(files/check-edition-permissions! conn profile-id (:file-id slink))
|
|
(db/delete! conn :share-link {:id id})
|
|
nil)))
|