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)))