|
| 1 | +(ns modular.oauth2.local.function |
| 2 | + (:require |
| 3 | + [cheshire.core :as json] |
| 4 | + [taoensso.timbre :refer [debug debugf info infof error]] |
| 5 | + [clj-jwt.core :refer [str->jwt]] |
| 6 | + [modular.permission.user :refer [find-user-id-via-email]] |
| 7 | + [modular.permission.session :refer [set-user!]] |
| 8 | + [modular.oauth2.local.pass :refer [get-token]] |
| 9 | + [modular.oauth2.token.info :refer [tokens-summary-map]])) |
| 10 | + |
| 11 | + ; todo improve. |
| 12 | +; not used currently. |
| 13 | + |
| 14 | +(defn login-local |
| 15 | + [{:as req :keys [event id ?data ring-req ?reply-fn send-fn uid]}] |
| 16 | + (debugf ":login/local %s" ?data) |
| 17 | + (let [{:keys [username password]} ?data |
| 18 | + login-result (get-token username password)] |
| 19 | + (info "login/local: " login-result " uid: " uid) |
| 20 | + (when-let [user (:user login-result)] |
| 21 | + (set-user! uid user)) |
| 22 | + (send-response req :login/local login-result))) |
| 23 | + |
| 24 | +(defmethod -event-msg-handler :login/oidc |
| 25 | + [{:as req :keys [event id ?data ring-req ?reply-fn send-fn uid]}] |
| 26 | + (debugf ":login/oidc %s" ?data) |
| 27 | + (let [{:keys [id-token]} ?data |
| 28 | + login-result (str->jwt id-token) |
| 29 | + email (get-in login-result [:claims :email])] |
| 30 | + (debug "login result oidc: " login-result " uid: " uid) |
| 31 | + (infof "login/oidc email: %s uid: %s" email uid) |
| 32 | + (if-let [user (find-user-id-via-email email)] |
| 33 | + (let [user (name user)] |
| 34 | + (set-user! uid user) |
| 35 | + (send-response req |
| 36 | + :login/local {:user user :token ?data})) |
| 37 | + (do |
| 38 | + (error "no user found for oidc login with email: " email) |
| 39 | + (send-response req |
| 40 | + :login/local {:error :user-not-found |
| 41 | + :error-message (str "No user found for [" email "].")}))))) |
| 42 | + |
| 43 | +(defmethod -event-msg-handler :tokens/summary |
| 44 | + [{:as req :keys [event id ?data ring-req ?reply-fn send-fn uid]}] |
| 45 | + (debugf ":tokens/summary %s" ?data) |
| 46 | + (let [{:keys [providers]} ?data |
| 47 | + summary (tokens-summary-map providers)] |
| 48 | + (infof ":tokens providers: %s summary: %s" providers summary) |
| 49 | + (send-response req :tokens/summary summary))) |
0 commit comments