diff --git a/inc/teddit_api/handleUser.js b/inc/teddit_api/handleUser.js
new file mode 100644
index 0000000..259c731
--- /dev/null
+++ b/inc/teddit_api/handleUser.js
@@ -0,0 +1,100 @@
+module.exports = function() {
+ const config = require('../../config')
+ this.handleTedditApiUser = async (json, req, res, from, api_type, api_target, user) => {
+ if(!config.api_enabled) {
+ res.setHeader('Content-Type', 'application/json')
+ let msg = { info: 'This instance do not support API requests. Please see https://codeberg.org/teddit/teddit#instances for instances that support API, or setup your own instance.' }
+ return res.end(JSON.stringify(msg))
+ }
+
+ let _json = json // Keep the original json
+ if(from === 'redis')
+ json = JSON.parse(json)
+
+ let protocol = (config.https_enabled ? 'https' : 'http')
+ let link = `${protocol}://${config.domain}/user/${user}`
+
+ if(api_type === 'rss') {
+ let items = ''
+ let posts_limit = 25
+
+ if(json.overview.data.children.length <= posts_limit) {
+ posts_limit = json.overview.data.children.length
+ }
+
+ for(var i = 0; i < posts_limit; i++) {
+ let post = json.overview.data.children[i].data
+ let post_id = post.permalink.split('/').slice(-2)[0] + '/'
+ let url = post.permalink.replace(post_id, '')
+ let permalink = `${protocol}://${config.domain}${post.permalink}`
+ let comments_url = `${protocol}://${config.domain}${url}`
+ let kind = json.overview.data.children[i].kind
+
+ let t1_elements = ''
+ let t3_elements = ''
+ if(kind === 't1') {
+ let append_desc_html = `
[link] [comments]`
+ t1_elements = `
+
+ ${comments_url}
+ `
+ }
+ if(kind === 't3') {
+ let s = await downloadAndSave(post.thumbnail, 'thumb_')
+ let thumbnail = ''
+ if(s !== 'self') {
+ let img = `${protocol}://${config.domain}${s}`
+ thumbnail = `${img}`
+ }
+ let append_desc_html = `
[comments]`
+ t3_elements = `
+
+ ${thumbnail}
+ `
+ }
+
+ let title = post.title
+ if(!post.title)
+ title = post.link_title
+
+ items += `
+ -
+ ${title}
+ /u/${user}
+ ${kind}
+ ${post.subreddit}
+ ${post.created_utc}
+ ${post.ups}
+ ${permalink}
+ ${post.edited}
+ ${post.num_comments}
+ ${post.over_18}
+ ${t1_elements}
+ ${t3_elements}
+
+ `
+ }
+
+ let xml_output =
+ `
+
+
+
+ overview for ${user}
+ ${link}
+ ${items}
+
+ `
+ res.setHeader('Content-Type', 'application/rss+xml')
+ return res.end(xml_output)
+ } else {
+ res.setHeader('Content-Type', 'application/json')
+ if(api_target === 'reddit') {
+ return res.end(JSON.stringify(json))
+ } else {
+ let processed_json = await processJsonUser(json, true, null, null, req.cookies)
+ return res.end(JSON.stringify(processed_json))
+ }
+ }
+ }
+}
diff --git a/routes.js b/routes.js
index 7eb3e63..c807cd5 100644
--- a/routes.js
+++ b/routes.js
@@ -9,6 +9,7 @@ module.exports = (app, redis, fetch, RedditAPI) => {
let processSearches = require('./inc/processSearchResults.js')();
let processAbout = require('./inc/processSubredditAbout.js')();
let tedditApiSubreddit = require('./inc/teddit_api/handleSubreddit.js')();
+ let tedditApiUser = require('./inc/teddit_api/handleUser.js')();
app.get('/about', (req, res, next) => {
return res.render('about', { user_preferences: req.cookies })
@@ -714,6 +715,15 @@ module.exports = (app, redis, fetch, RedditAPI) => {
let after = req.query.after
let before = req.query.before
let user_data = {}
+ let api_req = req.query.api
+ let api_type = req.query.type
+ let api_target = req.query.target
+
+ if(req.query.hasOwnProperty('api'))
+ api_req = true
+ else
+ api_req = false
+
if(!after) {
after = ''
}
@@ -763,13 +773,17 @@ module.exports = (app, redis, fetch, RedditAPI) => {
if(json) {
console.log(`Got user ${user} key from redis.`);
(async () => {
- let processed_json = await processJsonUser(json, false, after, before, req.cookies)
- return res.render('user', {
- data: processed_json,
- sortby: sortby,
- past: past,
- user_preferences: req.cookies
- })
+ if(api_req) {
+ return handleTedditApiUser(json, req, res, 'redis', api_type, api_target, user, after, before)
+ } else {
+ let processed_json = await processJsonUser(json, false, after, before, req.cookies)
+ return res.render('user', {
+ data: processed_json,
+ sortby: sortby,
+ past: past,
+ user_preferences: req.cookies
+ })
+ }
})()
} else {
let url = ''
@@ -800,13 +814,17 @@ module.exports = (app, redis, fetch, RedditAPI) => {
return res.render('index', { post: null, user_preferences: req.cookies })
} else {
(async () => {
- let processed_json = await processJsonUser(user_data, true, after, before, req.cookies)
- return res.render('user', {
- data: processed_json,
- sortby: sortby,
- past: past,
- user_preferences: req.cookies
- })
+ if(api_req) {
+ return handleTedditApiUser(user_data, req, res, 'online', api_type, api_target, user, after, before)
+ } else {
+ let processed_json = await processJsonUser(user_data, true, after, before, req.cookies)
+ return res.render('user', {
+ data: processed_json,
+ sortby: sortby,
+ past: past,
+ user_preferences: req.cookies
+ })
+ }
})()
}
})