aboutsummaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
Diffstat (limited to 'db')
-rw-r--r--db/database.go79
-rw-r--r--db/outbox.go116
2 files changed, 186 insertions, 9 deletions
diff --git a/db/database.go b/db/database.go
index bd302aa..dfa66aa 100644
--- a/db/database.go
+++ b/db/database.go
@@ -18,7 +18,9 @@ import (
_ "github.com/lib/pq"
)
+// TODO: merge these
var db *sql.DB
+var DB *sql.DB
type NewsItem struct {
Title string
@@ -48,6 +50,7 @@ func ConnectDB() error {
fmt.Println("Successfully connected DB")
db = _db
+ DB = _db
return nil
}
@@ -289,10 +292,12 @@ func WriteObjectToDB(obj activitypub.ObjectBase) (activitypub.ObjectBase, error)
obj.Preview.Published = time.Now().UTC()
obj.Preview.Updated = time.Now().UTC()
obj.Preview.AttributedTo = obj.Id
- WritePreviewToDB(*obj.Preview)
+ if err := WritePreviewToDB(*obj.Preview); err != nil {
+ return obj, err
+ }
}
- for i, _ := range obj.Attachment {
+ for i := range obj.Attachment {
id, err := CreateUniqueID(obj.Actor)
if err != nil {
return obj, err
@@ -563,15 +568,11 @@ func WriteAttachmentToDB(obj activitypub.ObjectBase) {
}
}
-func WritePreviewToDB(obj activitypub.NestedObjectBase) {
+func WritePreviewToDB(obj activitypub.NestedObjectBase) error {
query := `insert into activitystream (id, type, name, href, published, updated, attributedTo, mediatype, size) values ($1, $2, $3, $4, $5, $6, $7, $8, $9)`
- _, e := db.Exec(query, obj.Id, obj.Type, obj.Name, obj.Href, obj.Published, obj.Updated, obj.AttributedTo, obj.MediaType, obj.Size)
-
- if e != nil {
- fmt.Println("error inserting new attachment")
- panic(e)
- }
+ _, err := db.Exec(query, obj.Id, obj.Type, obj.Name, obj.Href, obj.Published, obj.Updated, obj.AttributedTo, obj.MediaType, obj.Size)
+ return err
}
func GetActivityFromDB(id string) (activitypub.Collection, error) {
@@ -2477,3 +2478,63 @@ func CheckInactiveInstances() (map[string]string, error) {
return instances, nil
}
+
+func GetAdminAuth() (string, string, error) {
+ query := fmt.Sprintf("select identifier, code from boardaccess where board='%s' and type='admin'", config.Domain)
+
+ rows, err := db.Query(query)
+ if err != nil {
+ return "", "", err
+ }
+
+ var code string
+ var identifier string
+
+ rows.Next()
+ err = rows.Scan(&identifier, &code)
+
+ return code, identifier, err
+}
+
+func UpdateObjectWithPreview(id string, preview string) error {
+ query := `update activitystream set preview=$1 where attachment=$2`
+
+ _, err := db.Exec(query, preview, id)
+ return err
+}
+
+func GetObjectsWithoutPreviewsCallback(callback func(id string, href string, mediatype string, name string, size int, published time.Time) error) error {
+ query := `select id, href, mediatype, name, size, published from activitystream where id in (select attachment from activitystream where attachment!='' and preview='')`
+
+ rows, err := db.Query(query)
+ if err != nil {
+ return err
+ }
+ defer rows.Close()
+
+ for rows.Next() {
+ var id string
+ var href string
+ var mediatype string
+ var name string
+ var size int
+ var published time.Time
+
+ if err := rows.Scan(&id, &href, &mediatype, &name, &size, &published); err != nil {
+ return err
+ }
+
+ if err := callback(id, href, mediatype, name, size, published); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func AddFollower(id string, follower string) error {
+ query := `insert into follower (id, follower) values ($1, $2)`
+
+ _, err := db.Exec(query, id, follower)
+ return err
+}
diff --git a/db/outbox.go b/db/outbox.go
new file mode 100644
index 0000000..e8189d9
--- /dev/null
+++ b/db/outbox.go
@@ -0,0 +1,116 @@
+package db
+
+import (
+ "github.com/FChannel0/FChannel-Server/activitypub"
+)
+
+func GetCollectionFromPath(path string) (activitypub.Collection, error) {
+ var nColl activitypub.Collection
+ var result []activitypub.ObjectBase
+
+ query := `select id, name, content, type, published, attributedto, attachment, preview, actor from activitystream where id=$1 order by published desc`
+
+ rows, err := db.Query(query, path)
+ if err != nil {
+ return nColl, err
+ }
+ defer rows.Close()
+
+ for rows.Next() {
+ var actor activitypub.Actor
+ var post activitypub.ObjectBase
+ var attachID string
+ var previewID string
+
+ if err := rows.Scan(&post.Id, &post.Name, &post.Content, &post.Type, &post.Published, &post.AttributedTo, &attachID, &previewID, &actor.Id); err != nil {
+ return nColl, err
+ }
+
+ post.Actor = actor.Id
+
+ post.InReplyTo, err = GetInReplyToDB(post)
+ if err != nil {
+ return nColl, err
+ }
+
+ var postCnt int
+ var imgCnt int
+ post.Replies, postCnt, imgCnt, err = GetObjectRepliesDB(post)
+ if err != nil {
+ return nColl, err
+ }
+
+ post.Replies.TotalItems, post.Replies.TotalImgs, err = GetObjectRepliesCount(post)
+ if err != nil {
+ return nColl, err
+ }
+
+ post.Replies.TotalItems = post.Replies.TotalItems + postCnt
+ post.Replies.TotalImgs = post.Replies.TotalImgs + imgCnt
+
+ post.Attachment, err = GetObjectAttachment(attachID)
+ if err != nil {
+ return nColl, err
+ }
+
+ post.Preview, err = GetObjectPreview(previewID)
+ if err != nil {
+ return nColl, err
+ }
+
+ result = append(result, post)
+ }
+
+ nColl.AtContext.Context = "https://www.w3.org/ns/activitystreams"
+
+ nColl.OrderedItems = result
+
+ return nColl, nil
+}
+
+func GetObjectFromPath(path string) (activitypub.ObjectBase, error) {
+ var nObj activitypub.ObjectBase
+
+ query := `select id, name, content, type, published, attributedto, attachment, preview, actor from activitystream where id=$1 order by published desc`
+
+ rows, err := db.Query(query, path)
+ if err != nil {
+ return nObj, err
+ }
+
+ defer rows.Close()
+ rows.Next()
+ var attachID string
+ var previewID string
+
+ var nActor activitypub.Actor
+ nObj.Actor = nActor.Id
+
+ if err := rows.Scan(&nObj.Id, &nObj.Name, &nObj.Content, &nObj.Type, &nObj.Published, &nObj.AttributedTo, &attachID, &previewID, &nObj.Actor); err != nil {
+ return nObj, err
+ }
+
+ var postCnt int
+ var imgCnt int
+
+ nObj.Replies, postCnt, imgCnt, err = GetObjectRepliesDB(nObj)
+ if err != nil {
+ return nObj, err
+ }
+
+ nObj.Replies.TotalItems, nObj.Replies.TotalImgs, err = GetObjectRepliesCount(nObj)
+ if err != nil {
+ return nObj, err
+ }
+
+ nObj.Replies.TotalItems = nObj.Replies.TotalItems + postCnt
+ nObj.Replies.TotalImgs = nObj.Replies.TotalImgs + imgCnt
+
+ nObj.Attachment, err = GetObjectAttachment(attachID)
+ if err != nil {
+ return nObj, err
+ }
+
+ nObj.Preview, err = GetObjectPreview(previewID)
+ return nObj, err
+}