0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-22 23:06:08 -05:00

🐛 Add correct feature check on manifest reading

Instead on the file save operation so we can raise
exception if something does not match without processing
the whole file
This commit is contained in:
Andrey Antukh 2025-02-19 11:56:28 +01:00
parent 5f61254a75
commit 7d0c19fcc7
2 changed files with 10 additions and 8 deletions

View file

@ -513,12 +513,11 @@
(assoc :ignore-sync-until (dt/plus timestamp (dt/duration {:seconds 5}))) (assoc :ignore-sync-until (dt/plus timestamp (dt/duration {:seconds 5})))
(update :features (update :features
(fn [features] (fn [features]
(let [features (cfeat/check-supported-features! features)] (-> (::features cfg #{})
(-> (::features cfg #{}) (set/union features)
(set/union features) ;; We never want to store
;; We never want to store ;; frontend-only features on file
;; frontend-only features on file (set/difference cfeat/frontend-only-features)))))]
(set/difference cfeat/frontend-only-features))))))]
(when (contains? cf/flags :file-schema-validation) (when (contains? cf/flags :file-schema-validation)
(fval/validate-file-schema! file)) (fval/validate-file-schema! file))

View file

@ -875,14 +875,17 @@
:manifest manifest)) :manifest manifest))
;; Check if all files referenced on manifest are present ;; Check if all files referenced on manifest are present
(doseq [{file-id :id} (:files manifest)] (doseq [{file-id :id features :features} (:files manifest)]
(let [path (str "files/" file-id ".json")] (let [path (str "files/" file-id ".json")]
(when-not (get-zip-entry input path) (when-not (get-zip-entry input path)
(ex/raise :type :validation (ex/raise :type :validation
:code :invalid-binfile-v3 :code :invalid-binfile-v3
:hint "some files referenced on manifest not found" :hint "some files referenced on manifest not found"
:path path :path path
:file-id file-id)))) :file-id file-id))
(cfeat/check-supported-features! features)))
(events/tap :progress {:section :manifest}) (events/tap :progress {:section :manifest})