mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import { createActor } from '../utils/actor'
|
|
const gql = require('graphql-tag')
|
|
const debug = require('debug')('ea:serveUser')
|
|
|
|
export async function serveUser(req, res, next) {
|
|
let name = req.params.name
|
|
|
|
if (name.startsWith('@')) {
|
|
name = name.slice(1)
|
|
}
|
|
|
|
debug(`name = ${name}`)
|
|
const result = await req.app
|
|
.get('ap')
|
|
.dataSource.client.query({
|
|
query: gql`
|
|
query {
|
|
User(slug: "${name}") {
|
|
publicKey
|
|
}
|
|
}
|
|
`,
|
|
})
|
|
.catch((reason) => {
|
|
debug(`serveUser User fetch error: ${reason}`)
|
|
})
|
|
|
|
if (result.data && Array.isArray(result.data.User) && result.data.User.length > 0) {
|
|
const publicKey = result.data.User[0].publicKey
|
|
const actor = createActor(name, publicKey)
|
|
debug(`actor = ${JSON.stringify(actor, null, 2)}`)
|
|
debug(
|
|
`accepts json = ${req.accepts([
|
|
'application/activity+json',
|
|
'application/ld+json',
|
|
'application/json',
|
|
])}`,
|
|
)
|
|
if (req.accepts(['application/activity+json', 'application/ld+json', 'application/json'])) {
|
|
return res.json(actor)
|
|
} else if (req.accepts('text/html')) {
|
|
// TODO show user's profile page instead of the actor object
|
|
/* const outbox = JSON.parse(result.outbox)
|
|
const posts = outbox.orderedItems.filter((el) => { return el.object.type === 'Note'})
|
|
const actor = result.actor
|
|
debug(posts) */
|
|
// res.render('user', { user: actor, posts: JSON.stringify(posts)})
|
|
return res.json(actor)
|
|
}
|
|
} else {
|
|
debug(`error getting publicKey for actor ${name}`)
|
|
next()
|
|
}
|
|
}
|