progress on authentication.
This commit is contained in:
@@ -26,12 +26,30 @@
|
|||||||
(map #(update % :user/role :db/ident))
|
(map #(update % :user/role :db/ident))
|
||||||
first)))
|
first)))
|
||||||
|
|
||||||
|
(defn find-or-insert! [{:keys [:user/provider :user/provider-id] :as new-user}]
|
||||||
|
(let [user (some-> {:query [:find '(pull ?e [*
|
||||||
|
{:user/clients [*]}
|
||||||
|
{:user/role [:db/ident]}])
|
||||||
|
:in '$ '?provider '?provider-id
|
||||||
|
:where '[?e :user/provider ?provider]
|
||||||
|
'[?e :user/provider-id ?provider-id]]
|
||||||
|
:args [(d/db (d/connect uri)) provider provider-id]}
|
||||||
|
(d/query)
|
||||||
|
first
|
||||||
|
first
|
||||||
|
(update :user/role :db/ident))]
|
||||||
|
(if user
|
||||||
|
user
|
||||||
|
(let [new-user-trans @(d/transact (d/connect uri) [(assoc new-user :db/id "user")])]
|
||||||
|
(println new-user-trans)
|
||||||
|
(get-by-id (-> new-user-trans :tempids (get "user")))))))
|
||||||
|
|
||||||
(defn raw-graphql [args]
|
(defn raw-graphql [args]
|
||||||
(let [query (cond-> {:query {:find ['(pull ?e [*
|
(let [query (cond-> {:query {:find ['(pull ?e [*
|
||||||
{:user/clients [*]}
|
{:user/clients [*]}
|
||||||
{:user/role [:db/ident]}])]
|
{:user/role [:db/ident]}])]
|
||||||
:in ['$]
|
:in ['$]
|
||||||
:where ['[?e :user/original-id]]}
|
:where ['[?e :user/role]]}
|
||||||
:args [(d/db (d/connect uri))]})]
|
:args [(d/db (d/connect uri))]})]
|
||||||
|
|
||||||
(->> (d/query query)
|
(->> (d/query query)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
(ns auto-ap.routes.auth
|
(ns auto-ap.routes.auth
|
||||||
(:require [auto-ap.db.users :as users]
|
(:require [auto-ap.datomic.users :as users]
|
||||||
[buddy.sign.jwt :as jwt]
|
[buddy.sign.jwt :as jwt]
|
||||||
[clj-http.client :as http]
|
[clj-http.client :as http]
|
||||||
[clj-time.core :as time]
|
[clj-time.core :as time]
|
||||||
@@ -27,17 +27,19 @@
|
|||||||
{:headers {"Authorization" (str "Bearer " token)} :as :json})
|
{:headers {"Authorization" (str "Bearer " token)} :as :json})
|
||||||
:body
|
:body
|
||||||
(doto println))
|
(doto println))
|
||||||
user (users/find-or-insert! {:provider "google"
|
user (users/find-or-insert! {:user/provider "google"
|
||||||
:provider-id (:id profile)
|
:user/provider-id (:id profile)
|
||||||
:role "none"
|
:user/role :user-role/none
|
||||||
:name (:name profile)})]
|
:user/name (:name profile)})
|
||||||
|
]
|
||||||
|
(println "authenticated as user" user)
|
||||||
|
|
||||||
(if (and token user)
|
(if (and token user)
|
||||||
{:status 301
|
{:status 301
|
||||||
:headers {"Location" (str "/?jwt=" (jwt/sign {:user "test"
|
:headers {"Location" (str "/?jwt=" (jwt/sign {:user "test"
|
||||||
:exp (time/plus (time/now) (time/days 7))
|
:exp (time/plus (time/now) (time/days 7))
|
||||||
:companies (:companies user)
|
:companies (:user/clients user)
|
||||||
:role (:role user)
|
:role (name (:user/role user))
|
||||||
:name (:name profile)}
|
:name (:name profile)}
|
||||||
(:jwt-secret env)
|
(:jwt-secret env)
|
||||||
{:alg :hs512}))}}
|
{:alg :hs512}))}}
|
||||||
|
|||||||
Reference in New Issue
Block a user