aboutsummaryrefslogtreecommitdiff
path: root/backend/general/records.go
diff options
context:
space:
mode:
Diffstat (limited to 'backend/general/records.go')
-rw-r--r--backend/general/records.go67
1 files changed, 63 insertions, 4 deletions
diff --git a/backend/general/records.go b/backend/general/records.go
index d623862..ff37785 100644
--- a/backend/general/records.go
+++ b/backend/general/records.go
@@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
"io"
+ "llostre/backend/auth"
"log/slog"
"net/http"
)
@@ -13,12 +14,27 @@ type RawRecord struct {
Value json.RawMessage `json:"value"`
}
-func FetchRawRecordCollection(logger *slog.Logger, did, collection, baseURL string) ([]RawRecord, error) {
+func FetchRawRecordCollection(logger *slog.Logger, did, collection, baseURL string, session *auth.OAuthState) ([]RawRecord, error) {
url := fmt.Sprintf("%s/xrpc/com.atproto.repo.listRecords?repo=%s&collection=%s", baseURL, did, collection)
logger.Debug("fetching raw record collection", "did", did, "endpoint", baseURL, "collection", collection)
- resp, err := http.Get(url)
+ req, err := http.NewRequest("GET", url, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ // only add auth if provided
+ if session != nil {
+ dpopProof, err := session.KeyPair.GenerateDPoPProof("GET", url, "")
+ if err != nil {
+ return nil, err
+ }
+ req.Header.Set("Authorization", "Bearer "+session.AccessToken)
+ req.Header.Set("DPoP", dpopProof)
+ }
+
+ resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
@@ -39,7 +55,7 @@ func FetchRawRecordCollection(logger *slog.Logger, did, collection, baseURL stri
return result.Records, nil
}
-func FetchRawRecordByURI(logger *slog.Logger, uri, baseURL string) (*RawRecord, error) {
+func FetchRawRecordByURI(logger *slog.Logger, uri, baseURL string, session *auth.OAuthState) (*RawRecord, error) {
repo, collection, rkey, err := ParseURI(uri)
if err != nil {
return nil, err
@@ -50,7 +66,22 @@ func FetchRawRecordByURI(logger *slog.Logger, uri, baseURL string) (*RawRecord,
logger.Debug("fetching raw record by URI", "uri", uri, "endpoint", baseURL)
- resp, err := http.Get(url)
+ req, err := http.NewRequest("GET", url, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ // only add auth if provided
+ if session != nil {
+ dpopProof, err := session.KeyPair.GenerateDPoPProof("GET", url, "")
+ if err != nil {
+ return nil, err
+ }
+ req.Header.Set("Authorization", "Bearer "+session.AccessToken)
+ req.Header.Set("DPoP", dpopProof)
+ }
+
+ resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
@@ -68,3 +99,31 @@ func FetchRawRecordByURI(logger *slog.Logger, uri, baseURL string) (*RawRecord,
return &result, nil
}
+
+func IsValidSession(session *auth.OAuthState) bool {
+ if session == nil {
+ return false
+ }
+
+ url := fmt.Sprintf("%s/xrpc/com.atproto.server.getSession", session.PDS)
+
+ dpopProof, err := session.KeyPair.GenerateDPoPProof("GET", url, "")
+ if err != nil {
+ return false
+ }
+
+ req, err := http.NewRequest("GET", url, nil)
+ if err != nil {
+ return false
+ }
+ req.Header.Set("Authorization", "Bearer "+session.AccessToken)
+ req.Header.Set("DPoP", dpopProof)
+
+ resp, err := http.DefaultClient.Do(req)
+ if err != nil {
+ return false
+ }
+ defer resp.Body.Close()
+
+ return resp.StatusCode == 200
+}