diff --git a/backend/src/app/rpc/mutations/fonts.clj b/backend/src/app/rpc/mutations/fonts.clj index fd3291e6d..85c604b15 100644 --- a/backend/src/app/rpc/mutations/fonts.clj +++ b/backend/src/app/rpc/mutations/fonts.clj @@ -6,6 +6,7 @@ (ns app.rpc.mutations.fonts (:require + [app.common.exceptions :as ex] [app.common.spec :as us] [app.common.uuid :as uuid] [app.config :as cf] @@ -49,6 +50,7 @@ (let [data (media/run cfg {:cmd :generate-fonts :input data :rlimit :font}) storage (media/configure-assets-storage storage conn) + otf (when-let [fdata (get data "font/otf")] (sto/put-object storage {:content (sto/content fdata) :content-type "font/otf"})) @@ -65,6 +67,13 @@ (sto/put-object storage {:content (sto/content fdata) :content-type "font/woff2"}))] + (when (and (nil? otf) + (nil? ttf) + (nil? woff1) + (nil? woff2)) + (ex/raise :type :validation + :code :invalid-font-upload)) + (db/insert! conn :team-font-variant {:id (uuid/next) :team-id (:team-id params) diff --git a/frontend/src/app/main/data/fonts.cljs b/frontend/src/app/main/data/fonts.cljs index 74872995b..a8ecf7127 100644 --- a/frontend/src/app/main/data/fonts.cljs +++ b/frontend/src/app/main/data/fonts.cljs @@ -111,10 +111,13 @@ (:data content)}) (dissoc :content))))))) - (parse-mtype [mtype] - (case mtype - "application/vnd.oasis.opendocument.formula-template" "font/otf" - mtype)) + (parse-mtype [ba] + (let [u8 (js/Uint8Array. ba 0 4) + sg (areduce u8 i ret "" (str ret (if (zero? i) "" " ") (.toString (aget u8 i) 8)))] + (case sg + "117 124 124 117" "font/otf" + "0 1 0 0" "font/ttf" + "167 117 106 106" "font/woff"))) (parse-font [{:keys [data] :as params}] (try @@ -128,7 +131,11 @@ (rx/map (fn [data] {:data data :name (.-name blob) - :type (parse-mtype (.-type blob))}))))] + :type (parse-mtype data)})) + (rx/mapcat (fn [{:keys [type] :as font}] + (if type + (rx/of font) + (rx/empty))))))] (->> (rx/from blobs) (rx/mapcat read-blob)