kopia lustrzana https://github.com/reiver/greatape
54 wiersze
1.2 KiB
Go
54 wiersze
1.2 KiB
Go
package activitypub
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
type Note struct {
|
|
Context string `json:"@context" validate:"activitystream"`
|
|
Id string `json:"id,omitempty"`
|
|
Type string `json:"type"`
|
|
To []string `json:"to"`
|
|
AttributedTo string `json:"attributedTo"`
|
|
InReplyTo string `json:"inReplyTo,omitempty"`
|
|
Content string `json:"content"`
|
|
}
|
|
|
|
func NewNote(from, to, content string) *Note {
|
|
return &Note{
|
|
Context: ActivityStreams,
|
|
To: []string{to},
|
|
Content: content,
|
|
Type: TypeNote,
|
|
AttributedTo: from,
|
|
}
|
|
}
|
|
|
|
func NewPublicNote(from, content string) *Note {
|
|
return NewNote(from, Public, content)
|
|
}
|
|
|
|
func (note *Note) Wrap(username, publicUrl, uniqueIdentifier string) *Activity {
|
|
return &Activity{
|
|
Context: ActivityStreams,
|
|
Type: TypeCreate,
|
|
ID: fmt.Sprintf("%s/u/%s/posts/%s", publicUrl, username, uniqueIdentifier),
|
|
To: note.To,
|
|
Actor: fmt.Sprintf("%s/u/%s", publicUrl, username),
|
|
Published: time.Now(),
|
|
Object: note,
|
|
}
|
|
}
|
|
|
|
func UnmarshalNote(data []byte) (Note, error) {
|
|
var note Note
|
|
err := json.Unmarshal(data, ¬e)
|
|
return note, err
|
|
}
|
|
|
|
func (note *Note) Marshal() ([]byte, error) {
|
|
return json.Marshal(note)
|
|
}
|