dog-and-duck/src/dog_and_duck/scratch/scratch.clj

67 lines
2.6 KiB
Clojure

(ns dog-and-duck.scratch.scratch
"Scratchpad where I try to understand how to do this stuff."
(:require [clj-activitypub.core :as activitypub]
[clj-activitypub.webfinger :as webfinger]
[clj-activitypub.net :as activitypub-net]
[clj-pgp.generate :as pgp-gen]
[clojure.walk :refer [keywordize-keys]]
[clojure.pprint :refer [pprint]]
[clojure.data.json :as json]))
;;; Copyright (C) Simon Brooke, 2022
;;; This program is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU General Public License
;;; as published by the Free Software Foundation; either version 2
;;; of the License, or (at your option) any later version.
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;; You should have received a copy of the GNU General Public License
;;; along with this program; if not, write to the Free Software
;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
;;; Use any ActivityPub account handle you like - for example, your own
(def account-handle "@simon_brooke@mastodon.scot")
;;(def handle (activitypub/parse-account account-handle))
;;(webfinger/fetch-user-id "mastodon.scot" "simon_brooke")
;;(apply webfinger/fetch-user-id (map handle [:domain :username]))
;;; Retrieve the account details from its home server
;;; (`keywordize-keys` is not necessary here but produces a more idiomatic clojure
;;; data structure)
(def account
(-> account-handle
(webfinger/parse-handle)
(webfinger/fetch-user-id!)
(activitypub-net/fetch-user!)
(select-keys [:name :preferredUsername :inbox :summary])))
;; ;;; examine what you got back!
(:inbox account)
(-> account
:inbox
slurp
json/read-str
pprint) ;; => 80
;; (def rsa (pgp-gen/rsa-keypair-generator 2048))
;; (def kp (pgp-gen/generate-keypair rsa :rsa-general))
;; how we make a public/private key pair. But this key pair is not the one
;; known to mastodon.scot as my key pair, so that doesn't get us very far...
;; I think.
(let [rsa (pgp-gen/rsa-keypair-generator 2048)
kp (pgp-gen/generate-keypair rsa :rsa-general)
public (-> kp .getPublicKey .getEncoded)
private (-> kp .getPrivateKey .getPrivateKeyDataPacket .getEncoded)]
(println (str "Public key: " public))
(println (str "Private key: " private))
)