From bcd16ee62ac2b54d24e18230d2a096a62bd3dda9 Mon Sep 17 00:00:00 2001 From: CaramelKat <32065563+caramelkat@users.noreply.github.com> Date: Sun, 29 Aug 2021 16:15:43 -0500 Subject: [PATCH] Implemented showing followers and following users and communties on profile pages. Fixed a bug with storing followed communities and users that would not store the entire ID in the user document. --- src/authentication.js | 70 ++------ src/models/user.js | 16 +- src/services/juxt-web/routes/admin/api.js | 54 ++++++ src/services/juxt-web/routes/ctr/show.js | 1 + .../juxt-web/routes/portal/communities.js | 20 ++- src/services/juxt-web/routes/portal/feed.js | 2 + .../juxt-web/routes/portal/messages.js | 2 + .../juxt-web/routes/portal/notifications.js | 2 + src/services/juxt-web/routes/portal/posts.js | 7 +- src/services/juxt-web/routes/portal/show.js | 68 +++++--- .../juxt-web/routes/portal/userpage.js | 160 +++++++++++++---- src/services/juxt-web/routes/portal/web.js | 161 +++++++++--------- src/webfiles/admin/admin_user.ejs | 4 +- src/webfiles/ctr/feed.ejs | 4 +- src/webfiles/portal/all_communities.ejs | 8 +- src/webfiles/portal/announcements.ejs | 6 +- src/webfiles/portal/communities.ejs | 12 +- src/webfiles/portal/community.ejs | 24 +-- src/webfiles/portal/css/juxt.css | 28 ++- src/webfiles/portal/feed.ejs | 6 +- src/webfiles/portal/first_run.ejs | 6 +- src/webfiles/portal/following_list.ejs | 27 +++ src/webfiles/portal/guest_notice.ejs | 6 +- src/webfiles/portal/js/juxt.js | 51 +++++- src/webfiles/portal/me_page.ejs | 16 +- src/webfiles/portal/messages.ejs | 6 +- src/webfiles/portal/notifications.ejs | 6 +- src/webfiles/portal/user_page.ejs | 16 +- 28 files changed, 511 insertions(+), 278 deletions(-) create mode 100644 src/webfiles/portal/following_list.ejs diff --git a/src/authentication.js b/src/authentication.js index 3df711f..74cb530 100644 --- a/src/authentication.js +++ b/src/authentication.js @@ -14,6 +14,7 @@ let pako = require('pako'); let PNG = require('pngjs').PNG; let communityMap = new HashMap(); +let userMap = new HashMap(); database.connect().then(async e => { let communities = await database.getCommunities(); @@ -24,10 +25,21 @@ database.connect().then(async e => { communityMap.set(communities[i].title_id[j], communities[i].name); communityMap.set(communities[i].title_id[j] + '-id', communities[i].community_id); } + communityMap.set(communities[i].community_id, communities[i].name); } } } logger.success('Created community index') + let users = await database.getUsers(1000); + if(users !== null) { + for(let i = 0; i < users.length; i++ ) { + if(users[i].pid !== null) { + userMap.set(users[i].pid.toString(), users[i].user_id); + } + } + } + logger.success('Created user index of ' + users.length + ' user(s)') + }).catch(error => { logger.error(error); }); @@ -35,8 +47,7 @@ database.connect().then(async e => { let methods = { create_user: function(pid, experience, notifications, region) { return new Promise(function(resolve, reject) { - console.log('running me'); - database.connect().then(async yeet => { + database.connect().then(async fun => { await request({ url: "http://" + config.account_server_domain + "/v1/api/miis?pids=" + pid, headers: { @@ -52,8 +63,6 @@ let methods = { user_id: xml.miis.mii.user_id, account_status: 0, mii: xml.miis.mii.data, - mii_face_url: xml.miis.mii.images.image[0].cached_url, - pfp_uri: "data:image/png;base64,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", game_skill: experience, notifications: notifications, official: false, @@ -74,52 +83,6 @@ let methods = { }); }); }, - processUser: function(pid) { - return new Promise(function(resolve, reject) { - console.log('running me'); - database.connect().then(async yeet => { - let userObject = await database.getUserByPID(pid); - console.log(userObject); - if(userObject != null) - resolve(userObject); - else - { - console.log('else'); - await request({ - url: "http://account.jemverse.xyz/v1/api/miis?pids=" + pid, - headers: { - 'X-Nintendo-Client-ID': 'a2efa818a34fa16b8afbc8a74eba3eda', - 'X-Nintendo-Client-Secret': 'c91cdb5658bd4954ade78533a339cf9a' - } - }, function (error, response, body) { - if (!error && response.statusCode === 200) { - let xml = xmlParser.toJson(body, {object: true}); - const newUsr = { - pid: pid, - created_at: moment().format('YYYY-MM-DD HH:mm:SS'), - user_id: xml.miis.mii.user_id, - account_status: 0, - mii: xml.miis.mii.data, - official: false - }; - const newUsrObj = new USER(newUsr); - console.log(newUsrObj); - newUsrObj.save(); - resolve(newUsr); - } - else - { - console.log('fail'); - reject(); - } - - }); - - } - - }); - }); - }, decodeParamPack: function (paramPack) { /* Decode base64 */ let dec = Buffer.from(paramPack, "base64").toString("ascii"); @@ -226,13 +189,14 @@ let methods = { Buffer.from('\x02\x65\x43\x46'), Buffer.from(password) ]); - const hashed = crypto.createHash('sha256').update(unpacked).digest().toString('hex'); - - return hashed; + return crypto.createHash('sha256').update(unpacked).digest().toString('hex'); }, getCommunityHash: function() { return communityMap; }, + getUserHash: function() { + return userMap; + }, resizeImage: function (file, width, height) { sharp(file) .resize({ height: height, width: width }) diff --git a/src/models/user.js b/src/models/user.js index eb9dac2..39f8894 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -70,19 +70,19 @@ const UserSchema = new Schema({ default: false }, likes: { - type: [Number], + type: [String], default: [0] }, followed_communities: { - type: [Number], + type: [String], default: [0] }, followed_users: { - type: [Number], + type: [String], default: [0] }, following_users: { - type: [Number], + type: [String], default: [0] }, followers: { @@ -250,8 +250,8 @@ UserSchema.methods.upFollower = async function() { UserSchema.methods.downFollower = async function() { const followers = this.get('followers'); - this.set('followers', followers - 1); - + if(followers > 0) + this.set('followers', followers - 1); await this.save(); }; @@ -264,8 +264,8 @@ UserSchema.methods.upFollowing = async function() { UserSchema.methods.downFollowing = async function() { const following = this.get('following'); - this.set('following', following - 1); - + if(following > 0) + this.set('following', following - 1); await this.save(); }; diff --git a/src/services/juxt-web/routes/admin/api.js b/src/services/juxt-web/routes/admin/api.js index 1599a18..027303f 100644 --- a/src/services/juxt-web/routes/admin/api.js +++ b/src/services/juxt-web/routes/admin/api.js @@ -405,6 +405,60 @@ router.get('/users/all', function (req, res) { }); }); +router.get('/users/loadPosts', function (req, res) { + database.connect().then(async e => { + if(req.cookies.token === null) + throw new Error('No service token supplied'); + + let pid = util.data.processServiceToken(req.cookies.token); + + if(pid === null) + throw new Error('Invalid credentials supplied'); + + let user = await database.getUserByPID(pid); + + if(user !== null) + { + if(config.authorized_PNIDs.indexOf(user.pid) === -1) + throw new Error('Invalid credentials supplied'); + + let post = await database.getPostByID(req.query.postID); + let newPosts = await database.getUserPostsAfterTimestamp(post, 5); + let communityMap = await util.data.getCommunityHash(); + if(newPosts.length > 0) + { + res.render('portal/more_posts.ejs', { + communityMap: communityMap, + moment: moment, + user: user, + newPosts: newPosts, + account_server: config.account_server_domain.slice(8), + }); + } + else + { + res.sendStatus(204); + } + } + else + throw new Error('Invalid account ID or password'); + }).catch(error => { + console.log(error); + res.set("Content-Type", "application/xml"); + res.statusCode = 400; + response = { + result: { + has_error: 1, + version: 1, + code: 400, + error_code: 15, + message: "SERVER_ERROR" + } + }; + res.send("\n" + xml(response)); + }); +}); + router.get('/users/:userID', function (req, res) { database.connect().then(async e => { if(req.cookies.token === null) diff --git a/src/services/juxt-web/routes/ctr/show.js b/src/services/juxt-web/routes/ctr/show.js index de77728..741d5fe 100644 --- a/src/services/juxt-web/routes/ctr/show.js +++ b/src/services/juxt-web/routes/ctr/show.js @@ -32,6 +32,7 @@ router.get('/', function (req, res) { * 2 - Temporary Ban * 3 - Forever Ban */ + console.log(user.account_status) if(user.account_status !== 0) { res.render('ctr/ban_notification.ejs', { diff --git a/src/services/juxt-web/routes/portal/communities.js b/src/services/juxt-web/routes/portal/communities.js index c9bc621..36318ef 100644 --- a/src/services/juxt-web/routes/portal/communities.js +++ b/src/services/juxt-web/routes/portal/communities.js @@ -16,7 +16,8 @@ router.get('/', function (req, res) { res.render('portal/communities.ejs', { // EJS variable and server-side variable popularCommunities: popularCommunities, - newCommunities: newCommunities + newCommunities: newCommunities, + cdnURL: config.CDN_domain, }); }).catch(error => { res.set("Content-Type", "application/xml"); @@ -40,6 +41,7 @@ router.get('/all', function (req, res) { let communities = await database.getCommunities(90); res.render('portal/all_communities.ejs', { communities: communities, + cdnURL: config.CDN_domain, }); }).catch(error => { res.set("Content-Type", "application/xml"); @@ -74,6 +76,7 @@ router.get('/announcements', function (req, res) { user: user, totalNumPosts: totalNumPosts, account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, }); }).catch(error => { console.error(error); @@ -111,6 +114,7 @@ router.get('/:communityID/:type', function (req, res) { totalNumPosts: totalNumPosts, user: user, account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, }); }).catch(error => { console.error(error); @@ -165,6 +169,7 @@ router.get('/:communityID/:type/loadPosts', function (req, res) { user: user, newPosts: posts, account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, }); } else @@ -192,19 +197,20 @@ router.post('/follow', upload.none(), function (req, res) { database.connect().then(async e => { let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]); let community = await database.getCommunityByID(req.body.communityID); - if(pid === null) - pid = 1000000000; + if(pid === null) { + throw "Guest Accounts Cannot Follow Communities"; + } let user = await database.getUserByPID(pid); - if(req.body.type === 'true' && user !== null && user.followed_communities.indexOf(community.id) === -1) + if(req.body.type === 'true' && user !== null && user.followed_communities.indexOf(community.community_id) === -1) { community.upFollower(); - user.addToCommunities(community.id); + user.addToCommunities(community.community_id); res.sendStatus(200); } - else if(req.body.type === 'false' && user !== null && user.followed_communities.indexOf(community.id) !== -1) + else if(req.body.type === 'false' && user !== null && user.followed_communities.indexOf(community.community_id) !== -1) { community.downFollower(); - user.removeFromCommunities(community.id); + user.removeFromCommunities(community.community_id); res.sendStatus(200); } else diff --git a/src/services/juxt-web/routes/portal/feed.js b/src/services/juxt-web/routes/portal/feed.js index d7cf561..0aecc16 100644 --- a/src/services/juxt-web/routes/portal/feed.js +++ b/src/services/juxt-web/routes/portal/feed.js @@ -24,6 +24,7 @@ router.get('/', function (req, res) { posts: posts, communityMap: communityMap, account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, }); user.notification_list.filter(noti => noti.read === false).forEach(function(notification) { notification.read = true; @@ -69,6 +70,7 @@ router.get('/loadposts', function (req, res) { user: user, newPosts: posts, account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, }); } else diff --git a/src/services/juxt-web/routes/portal/messages.js b/src/services/juxt-web/routes/portal/messages.js index 33d6d26..d3a3092 100644 --- a/src/services/juxt-web/routes/portal/messages.js +++ b/src/services/juxt-web/routes/portal/messages.js @@ -2,6 +2,7 @@ var express = require('express'); var xml = require('object-to-xml'); const database = require('../../../../database'); const util = require('../../../../authentication'); +const config = require('../../../../config.json'); var moment = require('moment'); var router = express.Router(); @@ -18,6 +19,7 @@ router.get('/', function (req, res) { res.render('portal/messages.ejs', { moment: moment, user: user, + cdnURL: config.CDN_domain, }); user.notification_list.filter(noti => noti.read === false).forEach(function(notification) { notification.read = true; diff --git a/src/services/juxt-web/routes/portal/notifications.js b/src/services/juxt-web/routes/portal/notifications.js index 3b6450f..595846a 100644 --- a/src/services/juxt-web/routes/portal/notifications.js +++ b/src/services/juxt-web/routes/portal/notifications.js @@ -2,6 +2,7 @@ var express = require('express'); var xml = require('object-to-xml'); const database = require('../../../../database'); const util = require('../../../../authentication'); +const config = require('../../../../config.json'); var moment = require('moment'); var router = express.Router(); @@ -18,6 +19,7 @@ router.get('/', function (req, res) { res.render('portal/notifications.ejs', { moment: moment, user: user, + cdnURL: config.CDN_domain, }); user.notification_list.filter(noti => noti.read === false).forEach(function(notification) { notification.read = true; diff --git a/src/services/juxt-web/routes/portal/posts.js b/src/services/juxt-web/routes/portal/posts.js index 3f0a52f..dd9f7d9 100644 --- a/src/services/juxt-web/routes/portal/posts.js +++ b/src/services/juxt-web/routes/portal/posts.js @@ -69,12 +69,9 @@ router.post('/new', upload.none(), async function (req, res, next) { if (req.body.app_data) { appData = req.body.app_data.replace(/\0/g, "").trim(); } - let painting = ""; - if (req.body.painting) { + let painting = "", paintingURI = ""; + if (req.body.painting && req.body.painting !== 'eJztwTEBACAMA7DCNRlIQRbu4ZoEviTJTNvjZNUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL55fYLL3w==') { painting = req.body.painting.replace(/\0/g, "").trim(); - } - let paintingURI = ""; - if (req.body.painting) { paintingURI = await util.data.processPainting(painting); } let screenshot = ""; diff --git a/src/services/juxt-web/routes/portal/show.js b/src/services/juxt-web/routes/portal/show.js index 07abb32..b336598 100644 --- a/src/services/juxt-web/routes/portal/show.js +++ b/src/services/juxt-web/routes/portal/show.js @@ -2,6 +2,7 @@ var express = require('express'); var xml = require('object-to-xml'); const database = require('../../../../database'); const util = require('../../../../authentication'); +const config = require('../../../../config.json'); var moment = require('moment'); var router = express.Router(); @@ -12,42 +13,51 @@ router.get('/', function (req, res) { let user = null; if(pid === null) { - res.render('portal/guest_notice.ejs', {}); + res.render('portal/guest_notice.ejs', { + cdnURL: config.CDN_domain, + }); } else { user = await database.getUserByPID(pid); if(user === null) { - res.render('portal/first_run.ejs', {}); - } - if(moment(user.ban_lift_date).format('YYYY-MM-DD') <= moment().format('YYYY-MM-DD') && user.account_status !== 3) { - user.account_status = 0; - user.save() - } - /** - * Account Status - * 0 - Fine - * 1 - Limited from Posting - * 2 - Temporary Ban - * 3 - Forever Ban - */ - if(user.account_status !== 0) - { - res.render('portal/ban_notification.ejs', { - user: user, - moment: moment + res.render('portal/first_run.ejs', { + cdnURL: config.CDN_domain, }); } - else - { - let popularCommunities = await database.getMostPopularCommunities(9); - let newCommunities = await database.getNewCommunities(6); - res.render('portal/communities.ejs', { - popularCommunities: popularCommunities, - newCommunities: newCommunities - }); + else { + if(moment(user.ban_lift_date).format('YYYY-MM-DD') <= moment().format('YYYY-MM-DD') && user.account_status !== 3) { + user.account_status = 0; + user.save() + } + /** + * Account Status + * 0 - Fine + * 1 - Limited from Posting + * 2 - Temporary Ban + * 3 - Forever Ban + */ + if(user.account_status !== 0) + { + res.render('portal/ban_notification.ejs', { + user: user, + moment: moment, + cdnURL: config.CDN_domain, + }); + } + else + { + let popularCommunities = await database.getMostPopularCommunities(9); + let newCommunities = await database.getNewCommunities(6); + res.render('portal/communities.ejs', { + popularCommunities: popularCommunities, + newCommunities: newCommunities, + cdnURL: config.CDN_domain, + }); + } } + } }).catch(error => { console.log(error) @@ -68,7 +78,9 @@ router.get('/', function (req, res) { router.get('/first', function (req, res) { res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2|http,pretendo.cc,,2|https,pretendo.cc,,2'); - res.render('portal/first_run.ejs', {}); + res.render('portal/first_run.ejs', { + cdnURL: config.CDN_domain, + }); }); router.post('/newUser', function (req, res) { diff --git a/src/services/juxt-web/routes/portal/userpage.js b/src/services/juxt-web/routes/portal/userpage.js index 9995ef2..aa08a30 100644 --- a/src/services/juxt-web/routes/portal/userpage.js +++ b/src/services/juxt-web/routes/portal/userpage.js @@ -10,39 +10,24 @@ var router = express.Router(); router.get('/me', function (req, res) { res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,pretendo.cc,,2|https,pretendo.cc,,2'); - var isAJAX = ((req.query.ajax+'').toLowerCase() === 'true') database.connect().then(async e => { - //let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]); let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]); if(pid === null) pid = 1000000000; let user = await database.getUserByPID(pid); - let newPosts = await database.getNumberUserPostsByID(pid, 1); + let newPosts = await database.getNumberUserPostsByID(pid, 10); let numPosts = await database.getTotalPostsByUserID(pid); let communityMap = await util.data.getCommunityHash(); - if(isAJAX) { - res.render('portal/me_page_ajax.ejs', { - // EJS variable and server-side variable - communityMap: communityMap, - moment: moment, - user: user, - newPosts: newPosts, - numPosts: numPosts, - account_server: config.account_server_domain.slice(8), - }); - } - else { - res.render('portal/me_page.ejs', { - // EJS variable and server-side variable - communityMap: communityMap, - moment: moment, - user: user, - newPosts: newPosts, - numPosts: numPosts, - account_server: config.account_server_domain.slice(8), - }); - } + res.render('portal/me_page.ejs', { + communityMap: communityMap, + moment: moment, + user: user, + newPosts: newPosts, + numPosts: numPosts, + account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, + }); }).catch(error => { console.log(error); @@ -69,15 +54,14 @@ router.post('/me', upload.none(), function (req, res) { let user = await database.getUserByPID(pid); user.country_visibility = !!req.body.country; - user.birthday_visibility = !!req.body.birthday; - user.game_skill_visibility = !!req.body.experience; - user.profile_comment_visibility = !!req.body.commentShow; if (req.body.comment) user.setProfileComment(req.body.comment); + else + user.setProfileComment(''); res.redirect('/users/me'); @@ -126,6 +110,7 @@ router.get('/show', function (req, res) { numPosts: numPosts, parentUser: parentUser, account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, }); }).catch(error => { console.error(error); @@ -152,7 +137,12 @@ router.get('/loadPosts', function (req, res) { if(pid === null) pid = 1000000000; let user = await database.getUserByPID(pid); - let newPosts = await database.getUserPostsAfterTimestamp(post, 5); + let newPosts = ''; + if(post !== null) + newPosts = await database.getUserPostsAfterTimestamp(post, 10); + else + newPosts = await database.getNumberUserPostsByID(req.query.pid, 10); + let communityMap = await util.data.getCommunityHash(); if(newPosts.length > 0) { @@ -162,6 +152,7 @@ router.get('/loadPosts', function (req, res) { user: user, newPosts: newPosts, account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, }); } else @@ -185,6 +176,117 @@ router.get('/loadPosts', function (req, res) { }); }); +router.get('/following', function (req, res) { + res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2'); + database.connect().then(async e => { + let user = await database.getUserByPID(req.query.pid); + let followers = user.followed_users; + let communities = user.followed_communities; + let communityMap = await util.data.getCommunityHash(); + let userMap = await util.data.getUserHash(); + + if(followers[0] === '0') + followers.splice(0, 1); + if(communities[0] === '0') + communities.splice(0, 1); + + if(user.following > 0) + { + res.render('portal/following_list.ejs', { + moment: moment, + user: user, + followers: followers, + communities: communities, + communityMap: communityMap, + userMap: userMap, + account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, + }); + } + else + { + res.send('

Not following anyone.

') + } + }).catch(error => { + console.log(error); + res.send('

Not following anyone.

') + }); +}); + +router.get('/followers', function (req, res) { + res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2'); + database.connect().then(async e => { + let user = await database.getUserByPID(req.query.pid); + let followers = user.following_users; + let communities = []; + let communityMap = await util.data.getCommunityHash(); + let userMap = await util.data.getUserHash(); + + if(followers[0] === '0') + followers.splice(0, 1); + + if(user.followers > 0) + { + res.render('portal/following_list.ejs', { + moment: moment, + user: user, + followers: followers, + communities: communities, + communityMap: communityMap, + userMap: userMap, + account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, + }); + } + else + { + res.send('

No Followers

') + } + }).catch(error => { + console.log(error); + res.send('

No Followers.

') + }); +}); + +router.get('/friends', function (req, res) { + res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2'); + database.connect().then(async e => { + let user = await database.getUserByPID(req.query.pid); + let friends = null; + let userMap = await util.data.getUserHash(); + + if(friends) + { + res.render('portal/following_list.ejs', { + moment: moment, + user: user, + friends: friends, + userMap: userMap, + account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, + }); + } + else + { + res.send('

No Friends

') + } + }).catch(error => { + console.log(error); + res.set("Content-Type", "application/xml"); + res.statusCode = 400; + response = { + result: { + has_error: 1, + version: 1, + code: 400, + error_code: 15, + message: "SERVER_ERROR" + } + }; + res.send("\n" + xml(response)); + }); +}); + router.post('/follow', upload.none(), function (req, res) { database.connect().then(async e => { let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]); diff --git a/src/services/juxt-web/routes/portal/web.js b/src/services/juxt-web/routes/portal/web.js index 1fc1f0a..09dce9e 100644 --- a/src/services/juxt-web/routes/portal/web.js +++ b/src/services/juxt-web/routes/portal/web.js @@ -1,5 +1,6 @@ var express = require('express'); var router = express.Router(); +var xml = require('object-to-xml'); const database = require('../../../../database'); const util = require('../../../../authentication'); var path = require('path'); @@ -108,89 +109,91 @@ router.get('/notifications.json', function (req, res) { database.connect().then(async e => { let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]); if(pid === null) - pid = 1000000000; - let user = await database.getUserByPID(pid); - res.send( - { - message_count: 0, - notification_count: user.notification_list.filter(notification => notification.read === false).length, - "messages": [ + res.sendStatus(403); + else { + let user = await database.getUserByPID(pid); + if(user.notification_list) { + res.send( { - "screen_name": "JayDaBirb", - "mii_face_url": "http://mii-images.account.pretendo.cc/", - "is_official": true, - "is_read": false, - "created_at": "2020-04-29 01:04:80", - "feeling_id": 1, - "id": 1255383017044709400, - "message_content": "https://invite.gg/pretendo" - }, - { - "screen_name": "PNID_Test06", - "mii_face_url": "http://mii-images.account.pretendo.cc/", - "is_official": false, - "is_read": true, - "created_at": "2020-05-18 02:17:50", - "feeling_id": 1, - "id": 1244384456055709400, - "message_content": "Testing message number 2 updated" - }, - { - "screen_name": "PNID_Test14", - "mii_face_url": "http://mii-images.account.pretendo.cc/", - "is_official": false, - "is_read": true, - "created_at": "2020-05-18 02:17:50", - "feeling_id": 1, - "id": 1244384118059519400, - "message_content": "Testing message number 3" - }, - { - "screen_name": "PNID_Test65", - "mii_face_url": "http://mii-images.account.pretendo.cc/", - "is_official": false, - "is_read": true, - "created_at": "2020-05-18 02:17:50", - "feeling_id": 1, - "id": 1244465118055709400, - "message_content": "Did you know our Miiverse fork is called Juxt? pretty cool huh? ;)" - }, - { - "screen_name": "AnotherTestUser", - "mii_face_url": "http://mii-images.account.pretendo.cc/", - "is_official": false, - "is_read": true, - "created_at": "2020-05-18 02:17:50", - "feeling_id": 1, - "id": 1244384118792519400, - "message_content": "Frick frack tic tak" - }, - { - "screen_name": "WowAnotherUserHuh", - "mii_face_url": "http://mii-images.account.pretendo.cc/", - "is_official": false, - "is_read": true, - "created_at": "2020-05-18 02:17:50", - "feeling_id": 1, - "id": 1244384648059589400, - "message_content": "Hey kid want some meme?" - }, - { - "screen_name": "OkayLastOneIPromise", - "mii_face_url": "http://mii-images.account.pretendo.cc/", - "is_official": false, - "is_read": true, - "created_at": "2020-05-18 02:17:50", - "feeling_id": 1, - "id": 1244386594569545800, - "message_content": "I promise this is the last time I'll ask for mod pls I'm sorry" + message_count: 0, + notification_count: user.notification_list.filter(notification => notification.read === false).length, + "messages": [ + { + "screen_name": "JayDaBirb", + "mii_face_url": "http://mii-images.account.pretendo.cc/", + "is_official": true, + "is_read": false, + "created_at": "2020-04-29 01:04:80", + "feeling_id": 1, + "id": 1255383017044709400, + "message_content": "https://invite.gg/pretendo" + }, + { + "screen_name": "PNID_Test06", + "mii_face_url": "http://mii-images.account.pretendo.cc/", + "is_official": false, + "is_read": true, + "created_at": "2020-05-18 02:17:50", + "feeling_id": 1, + "id": 1244384456055709400, + "message_content": "Testing message number 2 updated" + }, + { + "screen_name": "PNID_Test14", + "mii_face_url": "http://mii-images.account.pretendo.cc/", + "is_official": false, + "is_read": true, + "created_at": "2020-05-18 02:17:50", + "feeling_id": 1, + "id": 1244384118059519400, + "message_content": "Testing message number 3" + }, + { + "screen_name": "PNID_Test65", + "mii_face_url": "http://mii-images.account.pretendo.cc/", + "is_official": false, + "is_read": true, + "created_at": "2020-05-18 02:17:50", + "feeling_id": 1, + "id": 1244465118055709400, + "message_content": "Did you know our Miiverse fork is called Juxt? pretty cool huh? ;)" + }, + { + "screen_name": "AnotherTestUser", + "mii_face_url": "http://mii-images.account.pretendo.cc/", + "is_official": false, + "is_read": true, + "created_at": "2020-05-18 02:17:50", + "feeling_id": 1, + "id": 1244384118792519400, + "message_content": "Frick frack tic tak" + }, + { + "screen_name": "WowAnotherUserHuh", + "mii_face_url": "http://mii-images.account.pretendo.cc/", + "is_official": false, + "is_read": true, + "created_at": "2020-05-18 02:17:50", + "feeling_id": 1, + "id": 1244384648059589400, + "message_content": "Hey kid want some meme?" + }, + { + "screen_name": "OkayLastOneIPromise", + "mii_face_url": "http://mii-images.account.pretendo.cc/", + "is_official": false, + "is_read": true, + "created_at": "2020-05-18 02:17:50", + "feeling_id": 1, + "id": 1244386594569545800, + "message_content": "I promise this is the last time I'll ask for mod pls I'm sorry" + } + ], } - ], + ) } - ) - + } }).catch(error => { - console.log(error); res.set("Content-Type", "application/xml"); res.statusCode = 400; response = { diff --git a/src/webfiles/admin/admin_user.ejs b/src/webfiles/admin/admin_user.ejs index 44b430d..e198630 100644 --- a/src/webfiles/admin/admin_user.ejs +++ b/src/webfiles/admin/admin_user.ejs @@ -68,7 +68,7 @@ <%} else { %> <% newPosts.forEach(function(post) { %>
-
+