mirror of
https://codeberg.org/tacerus/teddit.git
synced 2024-11-26 00:59:24 +01:00
make teddit hostable without reddit oauth api
This commit is contained in:
parent
653ed87da1
commit
7464569b5d
@ -1,6 +1,6 @@
|
|||||||
const config = {
|
const config = {
|
||||||
domain: process.env.DOMAIN || '127.0.0.1', // Or for example 'teddit.net'
|
domain: process.env.DOMAIN || '127.0.0.1', // Or for example 'teddit.net'
|
||||||
reddit_app_id: process.env.REDDIT_APP_ID || 'ABfYqdDc9qPh1w', // You should obtain your own Reddit app ID. For testing purposes it's okay to use this project's default app ID. Create your Reddit app here: https://old.reddit.com/prefs/apps/. Make sure to create an "installed app" type of app.
|
use_reddit_oauth: process.env.USE_REDDIT_OAUTH === "true" || false, // If false, teddit uses Reddit's public API. If true, you need to have your own Reddit app ID (enter the app ID to the "reddit_app_id" config key).
|
||||||
cert_dir: process.env.CERT_DIR || '', // For example '/home/teddit/letsencrypt/live/teddit.net', if you are using https. No trailing slash.
|
cert_dir: process.env.CERT_DIR || '', // For example '/home/teddit/letsencrypt/live/teddit.net', if you are using https. No trailing slash.
|
||||||
flairs_enabled: process.env.FLAIRS_ENABLED !== "true" || true, // Enables the rendering of user and link flairs on teddit
|
flairs_enabled: process.env.FLAIRS_ENABLED !== "true" || true, // Enables the rendering of user and link flairs on teddit
|
||||||
api_enabled: process.env.API_ENABLED !== "true" || true, // Teddit API feature. Might increase loads significantly on your instance.
|
api_enabled: process.env.API_ENABLED !== "true" || true, // Teddit API feature. Might increase loads significantly on your instance.
|
||||||
@ -22,6 +22,7 @@ const config = {
|
|||||||
trust_proxy_address: process.env.TRUST_PROXY_ADDRESS || '127.0.0.1',
|
trust_proxy_address: process.env.TRUST_PROXY_ADDRESS || '127.0.0.1',
|
||||||
nsfw_enabled: process.env.NSFW_ENABLED !== "true" || true, // Enable NSFW (over 18) content. If false, a warning is shown to the user before opening any NSFW post. When the NFSW content is disabled, NSFW posts are hidden from subreddits and from user page feeds. Note: Users can set this to true or false from their preferences.
|
nsfw_enabled: process.env.NSFW_ENABLED !== "true" || true, // Enable NSFW (over 18) content. If false, a warning is shown to the user before opening any NSFW post. When the NFSW content is disabled, NSFW posts are hidden from subreddits and from user page feeds. Note: Users can set this to true or false from their preferences.
|
||||||
post_comments_sort: process.env.POST_COMMENTS_SORT || 'confidence', // "confidence" is the default sorting in Reddit. Must be one of: confidence, top, new, controversial, old, random, qa, live.
|
post_comments_sort: process.env.POST_COMMENTS_SORT || 'confidence', // "confidence" is the default sorting in Reddit. Must be one of: confidence, top, new, controversial, old, random, qa, live.
|
||||||
|
reddit_app_id: process.env.REDDIT_APP_ID || 'ABfYqdDc9qPh1w', // If "use_reddit_oauth" config key is set to true, you have to obtain your Reddit app ID. For testing purposes it's okay to use this project's default app ID. Create your Reddit app here: https://old.reddit.com/prefs/apps/. Make sure to create an "installed app" type of app.
|
||||||
setexs: {
|
setexs: {
|
||||||
/**,
|
/**,
|
||||||
* Redis cache expiration values (in seconds).
|
* Redis cache expiration values (in seconds).
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
module.exports = function(fetch) {
|
module.exports = function(fetch) {
|
||||||
|
const config = require('../config');
|
||||||
this.initRedditApi = function() {
|
this.initRedditApi = function() {
|
||||||
|
if(!config.use_reddit_oauth)
|
||||||
|
return null
|
||||||
|
|
||||||
let options = {
|
let options = {
|
||||||
body: `grant_type=https://oauth.reddit.com/grants/installed_client&device_id=DO_NOT_TRACK_THIS_DEVICE&duration=permanent`,
|
body: `grant_type=https://oauth.reddit.com/grants/installed_client&device_id=DO_NOT_TRACK_THIS_DEVICE&duration=permanent`,
|
||||||
headers: {
|
headers: {
|
||||||
@ -69,6 +73,9 @@ module.exports = function(fetch) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
this.redditApiGETHeaders = function() {
|
this.redditApiGETHeaders = function() {
|
||||||
|
if(!config.use_reddit_oauth)
|
||||||
|
return { method: 'GET' }
|
||||||
|
|
||||||
return {
|
return {
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${reddit_access_token}`
|
Authorization: `Bearer ${reddit_access_token}`
|
||||||
|
@ -24,7 +24,12 @@ module.exports = function() {
|
|||||||
resolve(obj)
|
resolve(obj)
|
||||||
} else {
|
} else {
|
||||||
if(subreddit !== 'all') {
|
if(subreddit !== 'all') {
|
||||||
fetch(encodeURI(`https://oauth.reddit.com/r/${subreddit}/about`), redditApiGETHeaders())
|
let url = ''
|
||||||
|
if(config.use_reddit_oauth)
|
||||||
|
url = `https://oauth.reddit.com/r/${subreddit}/about`
|
||||||
|
else
|
||||||
|
url = `https://reddit.com/r/${subreddit}/about.json`
|
||||||
|
fetch(encodeURI(url), redditApiGETHeaders())
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if(result.status === 200) {
|
if(result.status === 200) {
|
||||||
result.json()
|
result.json()
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "teddit",
|
"name": "teddit",
|
||||||
"version": "0.0.8",
|
"version": "0.1.1",
|
||||||
"description": "A free and open source alternative Reddit front-end focused on privacy.",
|
"description": "A free and open source alternative Reddit front-end focused on privacy.",
|
||||||
"homepage": "https://teddit.net",
|
"homepage": "https://teddit.net",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
|
53
routes.js
53
routes.js
@ -122,7 +122,12 @@ module.exports = (app, redis, fetch, RedditAPI) => {
|
|||||||
}
|
}
|
||||||
})()
|
})()
|
||||||
} else {
|
} else {
|
||||||
fetch(encodeURI(`https://oauth.reddit.com/${sortby}?api_type=json&g=GLOBAL&t=${past}${d}`), redditApiGETHeaders())
|
let url = ''
|
||||||
|
if(config.use_reddit_oauth)
|
||||||
|
url = `https://oauth.reddit.com/${sortby}?api_type=json&g=GLOBAL&t=${past}${d}`
|
||||||
|
else
|
||||||
|
url = `https://reddit.com/${sortby}.json?g=GLOBAL&t=${past}${d}`
|
||||||
|
fetch(encodeURI(url), redditApiGETHeaders())
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if(result.status === 200) {
|
if(result.status === 200) {
|
||||||
result.json()
|
result.json()
|
||||||
@ -196,10 +201,18 @@ module.exports = (app, redis, fetch, RedditAPI) => {
|
|||||||
return res.redirect(json[1].data.children[0].data.permalink)
|
return res.redirect(json[1].data.children[0].data.permalink)
|
||||||
} else {
|
} else {
|
||||||
let url = ''
|
let url = ''
|
||||||
|
if(config.use_reddit_oauth) {
|
||||||
if(post_url)
|
if(post_url)
|
||||||
url = `https://oauth.reddit.com/comments/${post_id}?api_type=json`
|
url = `https://oauth.reddit.com/comments/${post_id}?api_type=json`
|
||||||
else
|
else
|
||||||
url = `https://oauth.reddit.com/comments/${post_id}/comment/${comment_id}?api_type=json`
|
url = `https://oauth.reddit.com/comments/${post_id}/comment/${comment_id}?api_type=json`
|
||||||
|
} else {
|
||||||
|
if(post_url)
|
||||||
|
url = `https://reddit.com/comments/${post_id}.json?api_type=json`
|
||||||
|
else
|
||||||
|
url = `https://reddit.com/comments/${post_id}/comment/${comment_id}.json?api_type=json`
|
||||||
|
}
|
||||||
|
|
||||||
fetch(encodeURI(url), redditApiGETHeaders())
|
fetch(encodeURI(url), redditApiGETHeaders())
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if(result.status === 200) {
|
if(result.status === 200) {
|
||||||
@ -284,7 +297,12 @@ module.exports = (app, redis, fetch, RedditAPI) => {
|
|||||||
})
|
})
|
||||||
})()
|
})()
|
||||||
} else {
|
} else {
|
||||||
fetch(encodeURI(`https://oauth.reddit.com/r/${subreddit}/search?api_type=json&q=${q}&restrict_sr=${restrict_sr}&include_over_18=${nsfw}&sort=${sortby}&t=${past}${d}`), redditApiGETHeaders())
|
let url = ''
|
||||||
|
if(config.use_reddit_oauth)
|
||||||
|
url = `https://oauth.reddit.com/r/${subreddit}/search?api_type=json&q=${q}&restrict_sr=${restrict_sr}&include_over_18=${nsfw}&sort=${sortby}&t=${past}${d}`
|
||||||
|
else
|
||||||
|
url = `https://reddit.com/r/${subreddit}/search.json?api_type=json&q=${q}&restrict_sr=${restrict_sr}&include_over_18=${nsfw}&sort=${sortby}&t=${past}${d}`
|
||||||
|
fetch(encodeURI(url), redditApiGETHeaders())
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if(result.status === 200) {
|
if(result.status === 200) {
|
||||||
result.json()
|
result.json()
|
||||||
@ -407,7 +425,12 @@ module.exports = (app, redis, fetch, RedditAPI) => {
|
|||||||
}
|
}
|
||||||
})()
|
})()
|
||||||
} else {
|
} else {
|
||||||
fetch(encodeURI(`https://oauth.reddit.com/r/${subreddit}/${sortby}?api_type=json&count=25&g=GLOBAL&t=${past}${d}`), redditApiGETHeaders())
|
let url = ''
|
||||||
|
if(config.use_reddit_oauth)
|
||||||
|
url = `https://oauth.reddit.com/r/${subreddit}/${sortby}?api_type=json&count=25&g=GLOBAL&t=${past}${d}`
|
||||||
|
else
|
||||||
|
url = `https://reddit.com/r/${subreddit}/${sortby}.json?api_type=json&count=25&g=GLOBAL&t=${past}${d}`
|
||||||
|
fetch(encodeURI(url), redditApiGETHeaders())
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if(result.status === 200) {
|
if(result.status === 200) {
|
||||||
result.json()
|
result.json()
|
||||||
@ -551,7 +574,13 @@ module.exports = (app, redis, fetch, RedditAPI) => {
|
|||||||
}
|
}
|
||||||
})()
|
})()
|
||||||
} else {
|
} else {
|
||||||
fetch(encodeURI(`https://oauth.reddit.com${comments_url}?api_type=json&sort=${sortby}&context=${context}`), redditApiGETHeaders())
|
let url = ''
|
||||||
|
if(config.use_reddit_oauth)
|
||||||
|
url = `https://oauth.reddit.com${comments_url}?api_type=json&sort=${sortby}&context=${context}`
|
||||||
|
else
|
||||||
|
url = `https://reddit.com${comments_url}.json?api_type=json&sort=${sortby}&context=${context}`
|
||||||
|
|
||||||
|
fetch(encodeURI(url), redditApiGETHeaders())
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if(result.status === 200) {
|
if(result.status === 200) {
|
||||||
result.json()
|
result.json()
|
||||||
@ -667,13 +696,23 @@ module.exports = (app, redis, fetch, RedditAPI) => {
|
|||||||
})
|
})
|
||||||
})()
|
})()
|
||||||
} else {
|
} else {
|
||||||
fetch(encodeURI(`https://oauth.reddit.com/user/${user}/about`), redditApiGETHeaders())
|
let url = ''
|
||||||
|
if(config.use_reddit_oauth)
|
||||||
|
url = `https://oauth.reddit.com/user/${user}/about`
|
||||||
|
else
|
||||||
|
url = `https://reddit.com/user/${user}/about.json`
|
||||||
|
fetch(encodeURI(url), redditApiGETHeaders())
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if(result.status === 200) {
|
if(result.status === 200) {
|
||||||
result.json()
|
result.json()
|
||||||
.then(json => {
|
.then(json => {
|
||||||
user_data.about = json
|
user_data.about = json
|
||||||
fetch(encodeURI(`https://oauth.reddit.com/user/${user}/overview?limit=26${d}&sort=${sortby}&t=${past}`), redditApiGETHeaders())
|
let url = ''
|
||||||
|
if(config.use_reddit_oauth)
|
||||||
|
url = `https://oauth.reddit.com/user/${user}/overview?limit=26${d}&sort=${sortby}&t=${past}`
|
||||||
|
else
|
||||||
|
url = `https://reddit.com/user/${user}.json?limit=26${d}&sort=${sortby}&t=${past}`
|
||||||
|
fetch(encodeURI(url), redditApiGETHeaders())
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if(result.status === 200) {
|
if(result.status === 200) {
|
||||||
result.json()
|
result.json()
|
||||||
@ -790,6 +829,8 @@ module.exports = (app, redis, fetch, RedditAPI) => {
|
|||||||
console.log(`Redirecting to ${post_url} with cursor...`);
|
console.log(`Redirecting to ${post_url} with cursor...`);
|
||||||
return res.redirect(`${post_url}?cursor=${page}&page=${page}`)
|
return res.redirect(`${post_url}?cursor=${page}&page=${page}`)
|
||||||
} else {
|
} else {
|
||||||
|
if(!config.use_reddit_oauth)
|
||||||
|
return res.send(`This instance is using Reddit's public API (non-OAuth), and therefore this endpoint is not supported.`)
|
||||||
let url = `https://oauth.reddit.com/api/morechildren?api_type=json&children=${ids_to_show}&limit_children=false&link_id=t3_${post_id}`
|
let url = `https://oauth.reddit.com/api/morechildren?api_type=json&children=${ids_to_show}&limit_children=false&link_id=t3_${post_id}`
|
||||||
fetch(encodeURI(url), redditApiGETHeaders())
|
fetch(encodeURI(url), redditApiGETHeaders())
|
||||||
.then(result => {
|
.then(result => {
|
||||||
|
@ -24,5 +24,5 @@ html
|
|||||||
.bottom
|
.bottom
|
||||||
a(href="https://en.wikipedia.org/wiki/Piratbyr%C3%A5n#Kopimi", target="_blank")
|
a(href="https://en.wikipedia.org/wiki/Piratbyr%C3%A5n#Kopimi", target="_blank")
|
||||||
img(src="kopimi.gif")
|
img(src="kopimi.gif")
|
||||||
p.version v.0.0.8
|
p.version v.0.1.1
|
||||||
include includes/footer.pug
|
include includes/footer.pug
|
||||||
|
Loading…
Reference in New Issue
Block a user