aboutsummaryrefslogtreecommitdiff
path: root/backend/general
diff options
context:
space:
mode:
Diffstat (limited to 'backend/general')
-rw-r--r--backend/general/records.go148
-rw-r--r--backend/general/utils.go35
2 files changed, 0 insertions, 183 deletions
diff --git a/backend/general/records.go b/backend/general/records.go
deleted file mode 100644
index d82b289..0000000
--- a/backend/general/records.go
+++ /dev/null
@@ -1,148 +0,0 @@
-package general
-
-import (
- "encoding/json"
- "fmt"
- "io"
- "llostre/backend/auth"
- "log/slog"
- "net/http"
-)
-
-type RawRecord struct {
- URI string `json:"uri"`
- Value json.RawMessage `json:"value"`
-}
-
-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)
-
- 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
- }
- defer resp.Body.Close()
-
- if resp.StatusCode != 200 {
- body, _ := io.ReadAll(resp.Body)
- return nil, fmt.Errorf("server returned %d: %s", resp.StatusCode, string(body))
- }
-
- var result struct {
- Records []RawRecord `json:"records"`
- }
- if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
- return nil, err
- }
-
- return result.Records, nil
-}
-
-func FetchRawRecordCollectionWithCursor(logger *slog.Logger, did, collection, baseURL string, session *auth.OAuthState, cursor string, limit int) ([]RawRecord, string, error) {
- url := fmt.Sprintf("%s/xrpc/com.atproto.repo.listRecords?repo=%s&collection=%s", baseURL, did, collection)
- if cursor != "" {
- url += "&cursor=" + cursor
- }
- if limit > 0 {
- url += fmt.Sprintf("&limit=%d", limit)
- }
-
- logger.Debug("fetching raw record collection", "did", did, "endpoint", baseURL, "collection", collection, "cursor", cursor)
-
- req, err := http.NewRequest("GET", url, nil)
- if err != nil {
- return nil, "", err
- }
-
- 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
- }
- defer resp.Body.Close()
-
- if resp.StatusCode != 200 {
- body, _ := io.ReadAll(resp.Body)
- return nil, "", fmt.Errorf("server returned %d: %s", resp.StatusCode, string(body))
- }
-
- var result struct {
- Records []RawRecord `json:"records"`
- Cursor string `json:"cursor"`
- }
- if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
- return nil, "", err
- }
-
- return result.Records, result.Cursor, nil
-}
-
-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
- }
-
- url := fmt.Sprintf("%s/xrpc/com.atproto.repo.getRecord?repo=%s&collection=%s&rkey=%s",
- baseURL, repo, collection, rkey)
-
- logger.Debug("fetching raw record by URI", "uri", uri, "endpoint", baseURL)
-
- 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
- }
- defer resp.Body.Close()
-
- if resp.StatusCode != 200 {
- body, _ := io.ReadAll(resp.Body)
- return nil, fmt.Errorf("endpoint returned %d: %s", resp.StatusCode, string(body))
- }
-
- var result RawRecord
- if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
- return nil, err
- }
-
- return &result, nil
-}
diff --git a/backend/general/utils.go b/backend/general/utils.go
deleted file mode 100644
index ac27443..0000000
--- a/backend/general/utils.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package general
-
-import (
- "fmt"
- "strings"
- "sync"
- "time"
-)
-
-var (
- slingshotBackoff time.Time
- slingshotBackoffMu sync.Mutex
-)
-
-func ParseURI(uri string) (repo, collection, rkey string, err error) {
- // URI format: 'at://DID/collection/recordkey'
- parts := strings.Split(strings.TrimPrefix(uri, "at://"), "/")
- if len(parts) != 3 {
- return "", "", "", fmt.Errorf("invalid URI format: %s", uri)
- }
-
- return parts[0], parts[1], parts[2], nil
-}
-
-func SlingshotAvailable() bool {
- slingshotBackoffMu.Lock()
- defer slingshotBackoffMu.Unlock()
- return time.Now().After(slingshotBackoff)
-}
-
-func SetSlingshotBackoff(d time.Duration) {
- slingshotBackoffMu.Lock()
- defer slingshotBackoffMu.Unlock()
- slingshotBackoff = time.Now().Add(d)
-}