001  (ns clj-activitypub.internal.http-util
002    (:require [clj-activitypub.internal.crypto :as crypto])
003    (:import (java.net URLEncoder)
004             (java.time OffsetDateTime ZoneOffset)
005             (java.time.format DateTimeFormatter)))
006  
007  (defn encode-url-params [params]
008    (->> params
009         (reduce-kv
010          (fn [coll k v]
011            (conj coll
012                  (str (URLEncoder/encode (name k)) "=" (URLEncoder/encode (str v)))))
013          [])
014         (interpose "&")
015         (apply str)))
016  
017  (defn date []
018    (-> (OffsetDateTime/now (ZoneOffset/UTC))
019        (.format DateTimeFormatter/RFC_1123_DATE_TIME)))
020  
021  (defn digest
022    "Accepts body from HTTP request and generates string
023     for use in HTTP `Digest` request header."
024    [body]
025    (str "sha-256=" (crypto/sha256-base64 body)))