56 lines
1.1 KiB
Clojure
56 lines
1.1 KiB
Clojure
(ns auto-ap.graphql.utils
|
|
(:require [clojure.string :as str]
|
|
[buddy.auth :refer [throw-unauthorized]]
|
|
[clojure.walk :as walk]))
|
|
|
|
|
|
(defn snake->kebab [s]
|
|
(str/replace s #"_" "-"))
|
|
|
|
(defn kebab [x]
|
|
(keyword (snake->kebab (name x))))
|
|
|
|
(defn kebab->snake [s]
|
|
(str/replace s #"-" "_"))
|
|
|
|
(defn snake [x]
|
|
(keyword (kebab->snake (name x))))
|
|
|
|
(defn ->graphql [m]
|
|
(walk/postwalk
|
|
(fn [node]
|
|
(cond
|
|
|
|
(keyword? node)
|
|
(snake node)
|
|
|
|
:else
|
|
node))
|
|
m))
|
|
|
|
(defn <-graphql [m]
|
|
(walk/postwalk
|
|
(fn [node]
|
|
(cond
|
|
|
|
(keyword? node)
|
|
(kebab node)
|
|
|
|
:else
|
|
node))
|
|
m))
|
|
|
|
|
|
(defn assert-admin [id]
|
|
(when-not (= "admin" (:role id))
|
|
(throw-unauthorized)))
|
|
|
|
(defn can-see-company? [identity company]
|
|
(or (= "admin" (:role identity))
|
|
((set (map :db/id (:user/companies identity))) (:db/id company))
|
|
((set (map :db/id (:user/companies identity))) company)))
|
|
|
|
(defn assert-can-see-company [identity company]
|
|
(when-not (can-see-company? identity company)
|
|
(throw-unauthorized)))
|