-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
229 lines (197 loc) · 6.48 KB
/
index.js
File metadata and controls
229 lines (197 loc) · 6.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
// Import required modules
const express = require('express');
const bodyParser = require('body-parser');
const session = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const app = express();
// Middleware to parse incoming request bodies
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// Dummy database to store user profiles
let profiles = [
{ id: 1, username: 'user1', password: 'password1' },
{ id: 2, username: 'user2', password: 'password2' }
];
let offlineVideos = {
1: ['video1', 'video2'],
2: ['video3','video4']
};
// Object to store uploaded videos by user
let uploadedVideos = {1:['uVideo1','uVideo2'], 2:['uVideo3','uVideo4'],3:['uVideo5','uVideo6']};
// Object to store uploaded Reels by user
let uploadedReels = {1:['uReel1','uReel2'], 2:['uReel3','uReel4']};
// Object to store user interaction data
let userInteractions = {
likes: {},
comments: {},
shares: {},
views: {}
};
// Middleware for session management
app.use(session({
secret: 'secret',
resave: true,
saveUninitialized: true
}));
// Initialize Passport
app.use(passport.initialize());
app.use(passport.session());
// Passport local strategy for username/password authentication
passport.use(new LocalStrategy(
function(username, password, done) {
const user = profiles.find(user => user.username === username && user.password === password);
if (!user) {
return done(null, false, { message: 'Incorrect username or password' });
}
return done(null, user);
}
));
// Passport serialization functions
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
const user = profiles.find(user => user.id === id);
done(null, user);
});
// Route to create a new user profile
app.post('/profiles', (req, res) => {
const profile = req.body;
profiles.push(profile);
res.status(201).send('Profile created successfully');
});
// Route to delete a user profile
app.delete('/profiles/:userId', (req, res) => {
const userId = req.params.userId;
profiles = profiles.filter(profile => profile.userId !== userId);
delete offlineVideos[userId];
res.status(200).send('Profile deleted successfully');
});
// Route to download a video and add it to offline videos
app.post('/videos/:userId/download', (req, res) => {
const userId = req.params.userId;
const videoId = req.body.videoId;
if (!offlineVideos[userId]) {
offlineVideos[userId] = [];
}
offlineVideos[userId].push(videoId);
res.status(200).send('Video downloaded successfully');
});
// Route to download a reel and add it to offline reels
app.post('/reels/:userId/download', (req, res) => {
const userId = req.params.userId;
const reelId = req.body.reelId;
if (!offlineReels[userId]) {
offlineReels[userId] = [];
}
offlineReels[userId].push(reelId);
res.status(200).send('Reel downloaded successfully');
});
// Route to delete an offline video from a user's profile
app.delete('/videos/:userId/:videoId', (req, res) => {
const userId = req.params.userId;
const videoId = req.params.videoId;
if (offlineVideos[userId]) {
offlineVideos[userId] = offlineVideos[userId].filter(id => id !== videoId);
}
res.status(200).send('Offline video deleted successfully');
});
// Route to delete an offline reel from a user's profile
app.delete('/reels/:userId/:reelId', (req, res) => {
const userId = req.params.userId;
const reelId = req.params.reelId;
if (offlineReels[userId]) {
offlineReels[userId] = offlineReels[userId].filter(id => id !== reelId);
}
res.status(200).send('Offline reel deleted successfully');
});
// Route to register a new user
app.post('/register', (req, res) => {
const { username, password } = req.body;
const newUser = { id: profiles.length + 1, username, password };
profiles.push(newUser);
res.status(201).send('User registered successfully');
});
// Route to login
app.post('/login', passport.authenticate('local', {
successRedirect: '/profile',
failureRedirect: '/login',
failureFlash: true
}));
// Route to logout
app.get('/logout', (req, res) => {
req.logout();
res.redirect('/');
});
// Route to get user profile (requires authentication)
app.get('/profile', isAuthenticated, (req, res) => {
res.send('You are logged in');
});
// Middleware to check if user is authenticated
function isAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login');
}
// Route to upload a video
app.post('/videos/upload', isAuthenticated, (req, res) => {
const userId = req.user.id;
const video = req.body.video;
if (!uploadedVideos[userId]) {
uploadedVideos[userId] = [];
}
uploadedVideos[userId].push(video);
res.status(200).send('Video uploaded successfully');
});
// Route to upload a reel
app.post('/reels/upload', isAuthenticated, (req, res) => {
const userId = req.user.id;
const reel = req.body.reel;
// Add logic to store the uploaded reel
res.status(200).send('Reel uploaded successfully');
});
// Route to add a comment to a video
app.post('/videos/:videoId/comments', isAuthenticated, (req, res) => {
const userId = req.user.id;
const videoId = req.params.videoId;
const comment = req.body.comment;
if (!userInteractions.comments[videoId]) {
userInteractions.comments[videoId] = [];
}
userInteractions.comments[videoId].push({ userId, comment });
res.status(200).send('Comment added successfully');
});
// Route to like a video
app.post('/videos/:videoId/like', isAuthenticated, (req, res) => {
const videoId = req.params.videoId;
if (!userInteractions.likes[videoId]) {
userInteractions.likes[videoId] = 0;
}
userInteractions.likes[videoId]++;
res.status(200).send('Video liked successfully');
});
// Route to share a video
app.post('/videos/:videoId/share', isAuthenticated, (req, res) => {
const videoId = req.params.videoId;
if (!userInteractions.shares[videoId]) {
userInteractions.shares[videoId] = 0;
}
userInteractions.shares[videoId]++;
res.status(200).send('Video shared successfully');
});
// Route to increment view count of a video
app.post('/videos/:videoId/views', (req, res) => {
const videoId = req.params.videoId;
if (!userInteractions.views[videoId]) {
userInteractions.views[videoId] = 0;
}
userInteractions.views[videoId]++;
res.status(200).send('View count updated successfully');
});
// Start the server
const PORT = 3007;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});