Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
036bfe8
Update .gitignore
yaso-2001 Apr 1, 2024
1900008
Create subreddit info,report T4
yaso-2001 Apr 2, 2024
1cae38f
Update .gitignore
yaso-2001 Apr 2, 2024
f9ac73e
Create subreddit info,report
yaso-2001 Apr 2, 2024
dfb6f73
Update and rename subreddit info,report T4 to t
yaso-2001 Apr 2, 2024
2a1367f
Delete t
yaso-2001 Apr 4, 2024
c04d80e
Create test info,report
yaso-2001 Apr 9, 2024
7385511
Update subreddit info,report
yaso-2001 Apr 9, 2024
2c019f7
Update subreddit info,report
yaso-2001 Apr 17, 2024
aadc8df
Update subreddit info,report
yaso-2001 Apr 17, 2024
57ebc3e
Update test info,report
yaso-2001 Apr 17, 2024
a7bc41c
Create saved_categories,sendreplies,set_suggested_sort
yaso-2001 Apr 24, 2024
a8392d7
Create test saved_categories,sendreplies,set_suggested_sort
yaso-2001 Apr 24, 2024
5dc3852
Create delete_sr_banner,delete_sr_icon,upload_sr_icon
yaso-2001 Apr 24, 2024
7e882fa
Create test delete_sr_banner,delete_sr_icon,upload_sr_icon
yaso-2001 Apr 24, 2024
2f1bc43
Create approve,remove,show_comment,leavemoderator,accept_moderator_in…
yaso-2001 Apr 24, 2024
dba0a8b
Create test approve,remove,show_comment,leavemoderator,accept_moderat…
yaso-2001 Apr 24, 2024
1054615
Create site_admin;about;edite
yaso-2001 Apr 24, 2024
f721464
Create test site_admin;about;edite
yaso-2001 Apr 24, 2024
7bef2cb
Update subreddit info,report
yaso-2001 May 9, 2024
e2083a8
Update test info,report
yaso-2001 May 9, 2024
56676b7
Update test info,report
yaso-2001 May 9, 2024
ebd44b5
Update saved_categories,sendreplies,set_suggested_sort
yaso-2001 May 9, 2024
a4373e4
Update test saved_categories,sendreplies,set_suggested_sort
yaso-2001 May 9, 2024
7d0d6ed
Update delete_sr_banner,delete_sr_icon,upload_sr_icon
yaso-2001 May 9, 2024
875e6c7
Update test delete_sr_banner,delete_sr_icon,upload_sr_icon
yaso-2001 May 9, 2024
012340c
Create mine;where,mine;moderator
yaso-2001 May 9, 2024
b9c0f7b
Create test mine;where,mine;moderator
yaso-2001 May 9, 2024
54e00b2
Create all the about
yaso-2001 May 9, 2024
eb3335e
Create test all the about
yaso-2001 May 9, 2024
307f5da
Update approve,remove,show_comment,leavemoderator,accept_moderator_in…
yaso-2001 May 10, 2024
9b4802b
Update test approve,remove,show_comment,leavemoderator,accept_moderat…
yaso-2001 May 10, 2024
3a2436a
Update site_admin;about;edite
yaso-2001 May 10, 2024
ea6964e
Update test site_admin;about;edite
yaso-2001 May 10, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
node_modules
.vscode
.vscode
147 changes: 147 additions & 0 deletions all the about
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');
const Subreddit = require('./models/subreddit');

const app = express();
app.use(bodyParser.json());

// Connect to MongoDB
mongoose.connect('mongodb://localhost:27017/myapp', { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('MongoDB connected'))
.catch(err => console.error('MongoDB connection error:', err));

async function authenticateUser(req, res, next) {
try {

const token = req.headers.authorization ? req.headers.authorization.split(' ')[1] : req.cookies.jwt;

if (!token) {
return res.status(401).json({ error: 'Unauthorized: No token provided' });
}

const decoded = jwt.verify(token, process.env.JWT_SECRET);

const user = await userModel.findById(decoded.userID);

if (!user) {
return res.status(401).json({ error: 'Unauthorized: User not found' });
}

req.user = user;

next();
} catch (error) {
console.error('Authentication error:', error);
return res.status(401).json({ error: 'Unauthorized: Invalid token' });
}
}

// Task: about/Where
app.post('/about/where', authenticateUser, async (req, res) => {
try {

const location = req.user.location;
return res.status(200).json({ location });
} catch (error) {
console.error('Error:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: about/Banned
app.post('/about/banned', authenticateUser, async (req, res) => {
try {

const bannedUsers = await Ban.find();
return res.status(200).json({ bannedUsers });
} catch (error) {
console.error('Error:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: about/Muted
app.post('/about/muted', authenticateUser, async (req, res) => {
try {

const mutedUsers = await Mute.find();
return res.status(200).json({ mutedUsers });
} catch (error) {
console.error('Error:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: about/Moderators
app.post('/about/moderators', authenticateUser, async (req, res) => {
try {

const moderators = await Moderator.find({ subreddit: req.body.subredditId });
return res.status(200).json({ moderators });
} catch (error) {
console.error('Error:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: about/Location
app.post('/about/location', authenticateUser, async (req, res) => {
try {

const locationData = await Location.find({ coordinates: req.body.coordinates });
return res.status(200).json({ locationData });
} catch (error) {
console.error('Error:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: about/Reports
app.post('/about/reports', authenticateUser, async (req, res) => {
try {

const reports = await Report.find();
return res.status(200).json({ reports });
} catch (error) {
console.error('Error:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: about/Spam
app.post('/about/spam', authenticateUser, async (req, res) => {
try {

const spam = await Spam.find();
return res.status(200).json({ spam });
} catch (error) {
console.error('Error:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: about/Modqueue
app.post('/about/modqueue', authenticateUser, async (req, res) => {
try {

const modqueue = await Modqueue.find();
return res.status(200).json({ modqueue });
} catch (error) {
console.error('Error:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: about/Unmoderated
app.post('/about/unmoderated', authenticateUser, async (req, res) => {
try {

const unmoderated = await Unmoderated.find();
return res.status(200).json({ unmoderated });
} catch (error) {
console.error('Error:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});
108 changes: 108 additions & 0 deletions approve,remove,show_comment,leavemoderator,accept_moderator_invite
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');
const User = require('./models/user');
const Item = require('./models/item');
const Comment = require('./models/comment');
const Moderator = require('./models/moderator');

const app = express();
app.use(bodyParser.json());

// Connect to MongoDB
mongoose.connect('mongodb://localhost:27017/myapp', { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('MongoDB connected'))
.catch(err => console.error('MongoDB connection error:', err));

async function authenticateUser(req, res, next) {
try {
const token = req.headers.authorization ? req.headers.authorization.split(' ')[1] : req.cookies.jwt;

if (!token) {
return res.status(401).json({ error: 'Unauthorized: No token provided' });
}

const decoded = jwt.verify(token, process.env.JWT_SECRET);
const user = await User.findById(decoded.userID);

if (!user) {
return res.status(401).json({ error: 'Unauthorized: User not found' });
}

req.user = user;

next();
} catch (error) {
console.error('Authentication error:', error);
return res.status(401).json({ error: 'Unauthorized: Invalid token' });
}
}

// Task: approve
app.put('/approve', authenticateUser, async (req, res) => {
try {
const { itemId } = req.body;

await Item.findByIdAndUpdate(itemId, { approved: true });
return res.status(200).json({ message: 'Approved successfully' });
} catch (error) {
console.error('Error approving:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: remove
app.put('/remove', authenticateUser, async (req, res) => {
try {
const { itemId } = req.body;

await Item.findByIdAndDelete(itemId);
return res.status(200).json({ message: 'Removed successfully' });
} catch (error) {
console.error('Error removing:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: show_comment
app.get('/show_comment', authenticateUser, async (req, res) => {
try {
const { commentId } = req.query;

const comment = await Comment.findById(commentId);
return res.status(200).json({ message: 'Comment shown successfully', comment });
} catch (error) {
console.error('Error showing comment:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: leavemoderator
app.post('/leavemoderator', authenticateUser, async (req, res) => {
try {
const { subredditId } = req.body;

await Moderator.findOneAndRemove({ user: req.user._id, subreddit: subredditId });
return res.status(200).json({ message: 'Moderator left successfully' });
} catch (error) {
console.error('Error leaving moderator:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: accept_moderator_invite
app.post('/accept_moderator_invite', authenticateUser, async (req, res) => {
try {
const { subredditId } = req.body;

const moderator = new Moderator({ user: req.user._id, subreddit: subredditId });
await moderator.save();
return res.status(200).json({ message: 'Moderator invitation accepted successfully' });
} catch (error) {
console.error('Error accepting moderator invitation:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

module.exports = app;
110 changes: 110 additions & 0 deletions delete_sr_banner,delete_sr_icon,upload_sr_icon
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');
const Subreddit = require('./models/subreddit');

const app = express();
app.use(bodyParser.json());

// Connect to MongoDB
mongoose.connect('mongodb://localhost:27017/myapp', { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('MongoDB connected'))
.catch(err => console.error('MongoDB connection error:', err));

async function authenticateUser(req, res, next) {
try {

const token = req.headers.authorization ? req.headers.authorization.split(' ')[1] : req.cookies.jwt;

if (!token) {
return res.status(401).json({ error: 'Unauthorized: No token provided' });
}

const decoded = jwt.verify(token, process.env.JWT_SECRET);

const user = await userModel.findById(decoded.userID);

if (!user) {
return res.status(401).json({ error: 'Unauthorized: User not found' });
}

req.user = user;

next();
} catch (error) {
console.error('Authentication error:', error);
return res.status(401).json({ error: 'Unauthorized: Invalid token' });
}
}

// Task: delete_sr_banner
app.delete('/delete_sr_banner', authenticateUser, async (req, res) => {
try {
const { subredditId } = req.body;
// Check if the request body contains required fields
if (!subredditId) {
return res.status(400).json({ error: 'Subreddit ID is required' });
}
// Find the subreddit by ID
const subreddit = await Subreddit.findById(subredditId);
if (!subreddit) {
return res.status(404).json({ error: 'Subreddit not found' });
}
// Delete the subreddit's banner
subreddit.banner = null;
await subreddit.save();
return res.status(200).json({ message: 'Subreddit banner deleted successfully' });
} catch (error) {
console.error('Error deleting subreddit banner:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: delete_sr_icon
app.delete('/delete_sr_icon', authenticateUser, async (req, res) => {
try {
const { subredditId } = req.body;
// Check if the request body contains required fields
if (!subredditId) {
return res.status(400).json({ error: 'Subreddit ID is required' });
}
// Find the subreddit by ID
const subreddit = await Subreddit.findById(subredditId);
if (!subreddit) {
return res.status(404).json({ error: 'Subreddit not found' });
}
// Delete the subreddit's icon
subreddit.icon = null;
await subreddit.save();
return res.status(200).json({ message: 'Subreddit icon deleted successfully' });
} catch (error) {
console.error('Error deleting subreddit icon:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

// Task: upload_sr_icon
app.post('/upload_sr_icon', authenticateUser, async (req, res) => {
try {
const { subredditId, icon } = req.body;
// Check if the request body contains required fields
if (!subredditId || !icon) {
return res.status(400).json({ error: 'Subreddit ID and icon data are required' });
}
// Find the subreddit by ID
const subreddit = await Subreddit.findById(subredditId);
if (!subreddit) {
return res.status(404).json({ error: 'Subreddit not found' });
}
// Update the subreddit's icon
subreddit.icon = icon;
await subreddit.save();
return res.status(200).json({ message: 'Subreddit icon uploaded successfully' });
} catch (error) {
console.error('Error uploading subreddit icon:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});

module.exports = app;
Loading