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)) } console.log('Teddit API request - user') 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 = '' let enclosure = '' if(s !== 'self' && s != '') { let img = `${protocol}://${config.domain}${s}` thumbnail = `${img}` let mime = '' let ext = s.split('.').pop() if(ext === 'png') mime = 'image/png' else mime = 'image/jpeg' enclosure = `` } let append_desc_html = `submitted by r/${post.subreddit}` append_desc_html += `
[comments]` t3_elements = ` ${thumbnail} ${enclosure} ` } let title = post.title if(!post.title) title = post.link_title items += ` ${title} /u/${user} ${kind} ${post.subreddit} ${post.created_utc} ${new Date(post.created_utc*1000).toGMTString()} ${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)) } } } }