001  (ns ring.ring-okta.predicates
002    (:require [ring.util.request :as ring-request]))
003  
004  (def not-nil? (comp not nil?))
005  
006  (defn login? [{:keys [request-method] :as request}]
007    (and (= request-method :post)
008         (= (ring-request/path-info request) "/login")))
009  
010  (defn logout? [{:keys [request-method] :as request}]
011    (and (= request-method :post)
012         (= (ring-request/path-info request) "/logout")))
013  
014  (defn logged-in? [{:keys [session]}]
015    (:okta/user session))
016  
017  (defn- match-pair? [[skip-method skip-path] request-method request-path]
018    (and (or (= :any skip-method)
019             (= skip-method request-method))
020         (not-nil? (re-matches (re-pattern skip-path) request-path))))
021  
022  (defn skip-route? [{:keys [request-method] :as request} skip-routes]
023    (when skip-routes
024      (let [request-path (ring-request/path-info request)
025            skip-pairs (partition 2 skip-routes)]
026        (some #(match-pair? % request-method request-path) skip-pairs))))
027  
028  (defn force-user? [force-user]
029    (not-nil? force-user))