From 2182eb4ebef711c19e948b8ac8a7cd059db18bee Mon Sep 17 00:00:00 2001 From: Jaidyn Ann <10477760+JadedCtrl@users.noreply.github.com> Date: Mon, 21 Oct 2024 04:19:45 -0500 Subject: [PATCH] Remove use of :PROTOCOL & :ADDRESS in *CONFIG* Now, the protocol is inferred through the :HOST, and :ADDRESS is, well, :HOST. --- docs/examples/simple-server.lisp | 26 +++++++++++++------------- src/activity-servist.lisp | 14 +++++--------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/docs/examples/simple-server.lisp b/docs/examples/simple-server.lisp index b632782..050c213 100644 --- a/docs/examples/simple-server.lisp +++ b/docs/examples/simple-server.lisp @@ -26,11 +26,12 @@ (defvar *store* (make-hash-table :test #'equal) "Our “object-store” — stores all ActivityPub objects, mapped by their IRI @ID.") -(defvar *config* '(:address "localhost" :protocol "http" :port 8080 :fetch fetch)) +(defvar *config* + '(:host "http://localhost:8080" :address "127.0.0.1" :port 8080 :fetch fetch)) -(defvar *user-id-format* "~A://~A/users/~A" +(defvar *user-id-format* "~A/users/~A" "The format we use for user’s @IDs/URIs. -The first parameter is the protocol, the second the host, and the third the username. +The first parameter is the protocol+host, and the second is the username. For example: “https://localhost:8080/users/lena”.") @@ -91,15 +92,16 @@ That is, an “acct:username@host.tld” URI." (destructuring-bind (user host) (str:split "@" sans-preceding-@) (format nil *user-id-format* - (host-scheme host) host user)))) + (host-w-scheme host) user)))) -(defun host-scheme (hostname) - "Helper-function for ACCT-URI->ID. Returns the expected protocol of a hostname. -If it’s our configured :ADDRESS (in *CONFIG*), then return *CONFIG*’s :PROTOCOL. +(defun host-w-scheme (hostname) + "Helper-function for ACCT-URI->ID. From a hostname, returns “scheme://hostname”. +If it matches our configured :HOST (in *CONFIG*), simply returns :HOST’s value. Otherwise, assume “https”." - (if (equal (getf *config* :address) hostname) - (getf *config* :protocol) - "https")) + (let ((our-host (getf *config* :host))) + (if (equal (quri:uri-host (quri:uri our-host)) hostname) + our-host + (format nil "https://~A" hostname)))) @@ -136,9 +138,7 @@ Otherwise, assume “https”." The ID and ENDPOINTS are derived using the parameter USERNAME and the global *USER-ID-FORMAT*." (let ((obj (make-instance 'user)) (uri (format nil *user-id-format* - (getf *config* :protocol) - (getf *config* :address) - username))) + (getf *config* :host) username))) (flet ((sub-uri (path) (format nil "~A/~A" uri path))) (setf (as:name obj) username) diff --git a/src/activity-servist.lisp b/src/activity-servist.lisp index 0b9bf34..799b4d4 100644 --- a/src/activity-servist.lisp +++ b/src/activity-servist.lisp @@ -29,12 +29,12 @@ ;;; Globals ;;; ———————————————————————————————————————— -(defvar *config* '(:address "localhost" :port 8080 :protocol "https") +(defvar *config* '(:host "http://localhost:8080" :address "127.0.0.1" :port 8080) "Configuration for the server, a property-list. There are three optional properties: -• :PROTOCOL, either “https” or “http” (the latter for testing, only!). -• :ADDRESS, the server’s domain-name/address. -• :PORT, the server’s port. +• :HOST, the public-facing URI of the server. +• :ADDRESS, the address the server is exposed on. +• :PORT, the port the server is exposed on. There is one required property: • :FETCH, a function used as a callback by activity-servist. @@ -77,16 +77,12 @@ Returns the ActivityPub object associated with the given URI." (,(str:concat " ")))) - - ;;; Webfinger response ;;; ————————————————————————————————————————