mastoapi users
This commit is contained in:
parent
68e90344d6
commit
4da3904b89
@ -14,9 +14,21 @@ export mastoapi
|
|||||||
|
|
||||||
proc createActivityPubRouter*(cfg: Config) =
|
proc createActivityPubRouter*(cfg: Config) =
|
||||||
router activityspoof:
|
router activityspoof:
|
||||||
get "/api/v1/accounts/?":
|
get "/api/v1/accounts/@id":
|
||||||
|
let id = @"id"
|
||||||
|
if id.len == 0:
|
||||||
resp Http200, {"Content-Type": "application/json"}, """[]"""
|
resp Http200, {"Content-Type": "application/json"}, """[]"""
|
||||||
|
|
||||||
|
let username = await getCachedUsername(id)
|
||||||
|
if username.len > 0:
|
||||||
|
resp Http404, {"Content-Type": "application/json"}, """{"error":"Invalid account ID"}"""
|
||||||
|
|
||||||
|
let user = await getCachedUser(username)
|
||||||
|
if user.suspended or user.id.len == 0:
|
||||||
|
resp Http404, {"Content-Type": "application/json"}, """{"error":"User not found"}"""
|
||||||
|
|
||||||
|
resp Http200, {"Content-Type": "application/json"}, $getMastoAPIUser(user, cfg)
|
||||||
|
|
||||||
get "/api/v1/statuses/@id":
|
get "/api/v1/statuses/@id":
|
||||||
let id = @"id"
|
let id = @"id"
|
||||||
|
|
||||||
@ -105,8 +117,24 @@ proc createActivityPubRouter*(cfg: Config) =
|
|||||||
|
|
||||||
media.add(mediaObj)
|
media.add(mediaObj)
|
||||||
|
|
||||||
|
var fields: seq[JsonNode] = @[]
|
||||||
|
|
||||||
|
if tweet.user.location.len > 0:
|
||||||
|
var location = newJObject()
|
||||||
|
location["name"] = %"Location"
|
||||||
|
location["value"] = %tweet.user.location
|
||||||
|
location["verified_at"] = newJNull()
|
||||||
|
fields.add(location)
|
||||||
|
|
||||||
|
if tweet.user.website.len > 0:
|
||||||
|
var website = newJObject()
|
||||||
|
website["name"] = %"Website"
|
||||||
|
website["value"] = %(&"<a href=\"{tweet.user.website}\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\" translate=\"no\">{tweet.user.website}</a>")
|
||||||
|
website["verified_at"] = newJNull()
|
||||||
|
fields.add(website)
|
||||||
|
|
||||||
var postJson = newJObject()
|
var postJson = newJObject()
|
||||||
postJson["id"] = %(&"{tweet.id}")
|
postJson["id"] = %tweet.id
|
||||||
postJson["url"] = %tweetUrl
|
postJson["url"] = %tweetUrl
|
||||||
postJson["uri"] = %tweetUrl
|
postJson["uri"] = %tweetUrl
|
||||||
postJson["created_at"] = %($tweet.time)
|
postJson["created_at"] = %($tweet.time)
|
||||||
@ -128,32 +156,7 @@ proc createActivityPubRouter*(cfg: Config) =
|
|||||||
"website": getUrlPrefix(cfg)
|
"website": getUrlPrefix(cfg)
|
||||||
}
|
}
|
||||||
postJson["media_attachments"] = %media
|
postJson["media_attachments"] = %media
|
||||||
postJson["account"] = %*{
|
postJson["account"] = getMastoAPIUser(tweet.user, cfg)
|
||||||
"id": &"{tweet.user.id}",
|
|
||||||
"display_name": tweet.user.fullname,
|
|
||||||
"username": tweet.user.username,
|
|
||||||
"acct": tweet.user.username,
|
|
||||||
"url": &"{getUrlPrefix(cfg)}/{tweet.user.username}",
|
|
||||||
"uri": &"{getUrlPrefix(cfg)}/{tweet.user.username}",
|
|
||||||
"created_at": $tweet.user.joinDate,
|
|
||||||
"locked": tweet.user.protected,
|
|
||||||
"bot": false, # TODO?
|
|
||||||
"discoverable": true,
|
|
||||||
"indexable": false,
|
|
||||||
"group": false,
|
|
||||||
"avatar": getUrlPrefix(cfg) & getPicUrl(tweet.user.userPic),
|
|
||||||
"avatar_static": getUrlPrefix(cfg) & getPicUrl(tweet.user.userPic),
|
|
||||||
"header": getUrlPrefix(cfg) & getPicUrl(tweet.user.banner),
|
|
||||||
"header_static": getUrlPrefix(cfg) & getPicUrl(tweet.user.banner),
|
|
||||||
"followers_count": tweet.user.followers,
|
|
||||||
"following_count": tweet.user.following,
|
|
||||||
"statuses_count": tweet.user.tweets,
|
|
||||||
"hide_collections": false,
|
|
||||||
"noindex": false,
|
|
||||||
"emojis": @[],
|
|
||||||
"roles": @[],
|
|
||||||
"fields": @[],
|
|
||||||
}
|
|
||||||
postJson["mentions"] = newJArray() # TODO: parse?
|
postJson["mentions"] = newJArray() # TODO: parse?
|
||||||
postJson["tags"] = newJArray() # TODO: parse?
|
postJson["tags"] = newJArray() # TODO: parse?
|
||||||
postJson["emojis"] = newJArray()
|
postJson["emojis"] = newJArray()
|
||||||
|
|||||||
@ -203,3 +203,49 @@ proc getActivityStream*(user: User, cfg: Config, prefs: Prefs): JsonNode =
|
|||||||
}
|
}
|
||||||
|
|
||||||
result = userJson
|
result = userJson
|
||||||
|
|
||||||
|
proc getMastoAPIUser*(user: User, cfg: Config): JsonNode =
|
||||||
|
var fields: seq[JsonNode] = @[]
|
||||||
|
|
||||||
|
if user.location.len > 0:
|
||||||
|
var location = newJObject()
|
||||||
|
location["name"] = %"Location"
|
||||||
|
location["value"] = %user.location
|
||||||
|
location["verified_at"] = newJNull()
|
||||||
|
fields.add(location)
|
||||||
|
|
||||||
|
if user.website.len > 0:
|
||||||
|
var website = newJObject()
|
||||||
|
website["name"] = %"Website"
|
||||||
|
website["value"] = %(&"<a href=\"{user.website}\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\" translate=\"no\">{user.website}</a>")
|
||||||
|
website["verified_at"] = newJNull()
|
||||||
|
fields.add(website)
|
||||||
|
|
||||||
|
var userJson = newJObject()
|
||||||
|
userJson["id"] = %user.id
|
||||||
|
userJson["username"] = %user.username
|
||||||
|
userJson["acct"] = %user.username
|
||||||
|
userJson["display_name"] = %user.fullname
|
||||||
|
userJson["locked"] = %user.protected
|
||||||
|
userJson["bot"] = %false # TODO?
|
||||||
|
userJson["discoverable"] = %true
|
||||||
|
userJson["indexable"] = %false
|
||||||
|
userJson["group"] = %false
|
||||||
|
userJson["created_at"] = %($user.joinDate)
|
||||||
|
userJson["note"] = %user.bio
|
||||||
|
userJson["url"] = %(&"{getUrlPrefix(cfg)}/{user.username}")
|
||||||
|
userJson["uri"] = %(&"{getUrlPrefix(cfg)}/{user.username}")
|
||||||
|
userJson["avatar"] = %(getUrlPrefix(cfg) & getPicUrl(user.userPic))
|
||||||
|
userJson["avatar_static"] = %(getUrlPrefix(cfg) & getPicUrl(user.userPic))
|
||||||
|
userJson["header"] = %(getUrlPrefix(cfg) & getPicUrl(user.banner))
|
||||||
|
userJson["header_static"] = %(getUrlPrefix(cfg) & getPicUrl(user.banner))
|
||||||
|
userJson["followers_count"] = %user.followers
|
||||||
|
userJson["following_count"] = %user.following
|
||||||
|
userJson["statuses_count"] = %user.tweets
|
||||||
|
userJson["hide_collections"] = %false
|
||||||
|
userJson["noindex"] = %false
|
||||||
|
userJson["emojis"] = %(@[])
|
||||||
|
userJson["roles"] = %(@[])
|
||||||
|
userJson["fields"] = %fields
|
||||||
|
|
||||||
|
result = userJson
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user