activitypub

A fork of go-ap/activitypub to make it easier to implement extensions

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
  101. 101
  102. 102
  103. 103
  104. 104
  105. 105
  106. 106
  107. 107
  108. 108
  109. 109
  110. 110
  111. 111
  112. 112
  113. 113
  114. 114
  115. 115
  116. 116
  117. 117
  118. 118
  119. 119
  120. 120
  121. 121
  122. 122
  123. 123
  124. 124
  125. 125
  126. 126
  127. 127
  128. 128
  129. 129
  130. 130
  131. 131
  132. 132
  133. 133
  134. 134
  135. 135
  136. 136
  137. 137
  138. 138
  139. 139
  140. 140
  141. 141
  142. 142
  143. 143
  144. 144
  145. 145
package activitypub

import (
	as "github.com/go-ap/activitystreams"
	"time"
)

// LikeActivity is the type for a create activity message
type LikeActivity struct {
	Activity  *as.Like          `jsonld:"activity"`
	Published time.Time         `jsonld:"published"`
	To        as.ItemCollection `jsonld:"to,omitempty,collapsible"`
	CC        as.ItemCollection `jsonld:"cc,omitempty,collapsible"`
}

// DislikeActivity is the type for a create activity message
type DislikeActivity struct {
	Activity  *as.Dislike       `jsonld:"activity"`
	Published time.Time         `jsonld:"published"`
	To        as.ItemCollection `jsonld:"to,omitempty,collapsible"`
	CC        as.ItemCollection `jsonld:"cc,omitempty,collapsible"`
}

func loadActorWithLikedObject(a as.Item, o as.Item) as.Item {
	typ := a.GetType()
	switch typ {
	case as.ApplicationType:
		var app as.Application
		app, _ = a.(as.Application)
		var liked *as.OrderedCollection
		if app.Liked == nil {
			liked = LikedNew()
		} else {
			liked = app.Liked.(*as.OrderedCollection)
		}
		liked.Append(o)
		app.Liked = liked
		return app
	case as.GroupType:
		var grp as.Group
		grp, _ = a.(as.Group)
		var liked *as.OrderedCollection
		if grp.Liked == nil {
			liked = LikedNew()
		} else {
			liked = grp.Liked.(*as.OrderedCollection)
		}
		liked.Append(o)
		grp.Liked = liked
		return grp
	case as.OrganizationType:
		var org as.Organization
		org, _ = a.(as.Organization)
		var liked *as.OrderedCollection
		if org.Liked == nil {
			liked = LikedNew()
		} else {
			liked = org.Liked.(*as.OrderedCollection)
		}
		liked.Append(o)
		org.Liked = liked
		return org
	case as.PersonType:
		var pers as.Person
		pers, _ = a.(as.Person)
		var liked *as.OrderedCollection
		if pers.Liked == nil {
			liked = LikedNew()
		} else {
			liked = pers.Liked.(*as.OrderedCollection)
		}
		liked.Append(o)
		pers.Liked = liked
		return pers
	case as.ServiceType:
		var serv as.Service
		serv, _ = a.(as.Service)
		var liked *as.OrderedCollection
		if serv.Liked == nil {
			liked = LikedNew()
		} else {
			liked = serv.Liked.(*as.OrderedCollection)
		}
		liked.Append(o)
		serv.Liked = liked
		return serv
	default:
		actor, _ := a.(as.Actor)
		var liked *as.OrderedCollection
		if actor.Liked == nil {
			liked = LikedNew()
		} else {
			liked = actor.Liked.(*as.OrderedCollection)
		}
		liked.Append(o)
		actor.Liked = liked
		return actor
	}
}

// LikeActivityNew initializes a new LikeActivity message
func LikeActivityNew(id as.ObjectID, a as.Item, o as.Item) LikeActivity {
	act := as.LikeNew(id, o)

	if a != nil {
		if a.IsObject() {
			act.Actor = loadActorWithLikedObject(a, o)
		}
		if a.IsLink() {
			act.Actor = a
		}
	}

	act.RecipientsDeduplication()

	c := LikeActivity{
		Activity:  act,
		Published: time.Now(),
	}

	return c
}

// DislikeActivityNew initializes a new LikeActivity message
func DislikeActivityNew(id as.ObjectID, a as.Item, o as.Item) DislikeActivity {
	act := as.DislikeNew(id, o)

	if a != nil {
		if a.IsObject() {
			act.Actor = loadActorWithLikedObject(a, o)
		}
		if a.IsLink() {
			act.Actor = a
		}
	}

	act.RecipientsDeduplication()

	d := DislikeActivity{
		Activity:  act,
		Published: time.Now(),
	}

	return d
}