Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Completed all assignments #263

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Binary file modified .DS_Store
Binary file not shown.
134 changes: 129 additions & 5 deletions week-3/02-course-app-easy-2/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();

app.use(express.json());
Expand All @@ -7,46 +8,169 @@ let ADMINS = [];
let USERS = [];
let COURSES = [];

const secretKey = "My-Secret-Key";

const generateJwt = (user) => {
const payload = {username: user.username};
return jwt.sign(payload, secretKey, {expiresIn: '1h'});
};

const authenticateJwt = (req, res, next) => {
const authHeader = req.headers.authorization;

if(authHeader){
const token = authHeader.split(' ')[1];

jwt.verify(token, secretKey, (err, user) => {
if(err){
return res.status(403);
}

req.user = user;
next();
});
}

else{
res.status(401);
}
};

// Admin routes
app.post('/admin/signup', (req, res) => {
// logic to sign up admin
const admin = req.body;
const existingAdmin = ADMINS.find(a => a.username === admin.username);

if(existingAdmin){
res.status(403).json({message: 'Admin already exists'});
}

else{
ADMINS.push(admin);
const token = generateJwt(admin.username);
res.json({message: 'Admin created successfully', token});
}
});

app.post('/admin/login', (req, res) => {
// logic to log in admin
const {username, password} = req.headers;
const admin = ADMINS.find(a => a.username === username && a.password === password);

if(admin){
const token = generateJwt(admin.username);
res.json({message: 'Logged in succcessfully', token});
}

else{
res.status(403).json({message: 'Admin authentication failed'});
}
});

app.post('/admin/courses', (req, res) => {
app.post('/admin/courses', authenticateJwt, (req, res) => {
// logic to create a course
const course = req.body;
course.id = COURSES.length + 1;
COURSES.push(course);
res.json({message: 'course created successfully', courseId: course.id});
});

app.put('/admin/courses/:courseId', (req, res) => {
app.put('/admin/courses/:courseId', authenticateJwt, (req, res) => {
// logic to edit a course
const courseId = parseInt(req.params.courseId);
const courseIndex = COURSES.findIndex(c => c.id === courseId);

if(courseIndex > -1){
const updatedCourse = { ...COURSES[courseIndex], ...req.body};
COURSES[courseIndex] = updatedCourse;
res.json({message: 'Course updated successfully'});
}

else{
res.status(404).json({message: 'Course not found'});
}
});

app.get('/admin/courses', (req, res) => {
// logic to get all courses
res.json({courses: COURSES});
});

// User routes
app.post('/users/signup', (req, res) => {
// logic to sign up user
const user = req.body;
const existingUser = USERS.find(u => u.username === user.username);

if(existingUser){
res.status(403).json({message: 'User already exists'});
}

else{
USERS.push(user);
const token = generateJwt(user.username);
res.json({message: 'User created successfully'});
}
});

app.post('/users/login', (req, res) => {
// logic to log in user
const {username, password} = req.headers;
const user = USERS.find(u => u.username === username && u.password === password);

if(user){
const token = generateJwt(user.username);
res.json({message: 'Logged in successfully'});
}

else{
res.status(403).json({message: 'User authentication failed'});
}
});

app.get('/users/courses', (req, res) => {
app.get('/users/courses', authenticateJwt, (req, res) => {
// logic to list all courses
res.json({courses: COURSES});
});

app.post('/users/courses/:courseId', (req, res) => {
app.post('/users/courses/:courseId', authenticateJwt, (req, res) => {
// logic to purchase a course
const courseId = parseInt(req.params.courseId);
const course = COURSES.find(c => c.id === courseId);

if(course){
const user = USERS.find(u => u.username === req.user.username);

if(user){
if(!user.purchasedCourses){
user.purchasedCourses = [];
}

user.purchasedCourses.push(course);
res.json({message: 'Course purchased successfully'});
}

else{
res.status(403).json({message: 'User not found'});
}
}

else{
res.status(404).json({message: 'Course not found'});
}
});

app.get('/users/purchasedCourses', (req, res) => {
app.get('/users/purchasedCourses', authenticateJwt, (req, res) => {
// logic to view purchased courses
const user = USERS.find(u => u.username === req.user.username);
if(user && user.purchasedCourses){
res.json({purchasedCourses: user.purchasedCourses});
}

else{
res.status(404).json({message: 'No courses purchased'});
}
});

app.listen(3000, () => {
Expand Down
104 changes: 104 additions & 0 deletions week-3/02-course-app-easy/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,47 +6,151 @@ app.use(express.json());
let ADMINS = [];
let USERS = [];
let COURSES = [];
let userPurchases = [];

// Admin routes
app.post('/admin/signup', (req, res) => {
// logic to sign up admin
var details = req.body;
var flag = false;

for(let i=0;i<ADMINS.length;i++){
if(details.username == ADMINS[i].username && details.password == ADMINS[i].password){
flag = true;
break;
}
}

if(flag){
res.status(404).json('Admin already exists');
}

else{
ADMINS.push(details);
res.status(200).json('Admin created successfully')
}

});

app.post('/admin/login', (req, res) => {
// logic to log in admin
var usernameCheck = req.headers.username;
var passwordCheck = req.headers.password;
var flag = false;

for(let i=0;i<ADMINS.length;i++){
if(usernameCheck == ADMINS[i].username && passwordCheck == ADMINS[i].password){
flag = true;
break;
}
}

if(flag){
res.status(200).json('Logged in successfully');
}

else{
res.status(404).json('Login Failed!');
}

});

app.post('/admin/courses', (req, res) => {
// logic to create a course
var courseDetails = req.body;
courseDetails.id = Date.now;

COURSES.push(courseDetails);
res.status(200).json('Course created successfully');
});

app.put('/admin/courses/:courseId', (req, res) => {
// logic to edit a course
var cid = req.params.courseId;
var updatedDetails = req.body;

for(let i=0;i<COURSES.length;i++){
if(COURSES[i].id == cid){
COURSES[i] = updatedDetails;
break;
}
}

res.status(200).json('Course updated successfully');
});

app.get('/admin/courses', (req, res) => {
// logic to get all courses
res.status(200).json(COURSES);
});

// User routes
app.post('/users/signup', (req, res) => {
// logic to sign up user
var userDetails = req.body;
var flag = false;

for(let i=0;i<USERS.length;i++){
if(USERS[i].username == userDetails.username && USERS[i].password == userDetails.password){
flag = true;
break;
}
}

if(flag){
res.status(404).json('User already exists');
}

else{
res.status(200).json('User created successfully');
}
});

app.post('/users/login', (req, res) => {
// logic to log in user
var usernameCheck = req.headers.username;
var passwordCheck = req.headers.password;

var flag = false;

for(let i=0;i<USERS.length;i++){
if(USERS[i].username == usernameCheck && USERS[i].password == passwordCheck){
flag = true;
break;
}
}

if(!flag){
res.status(404).json('Login Failed!');
}

else{
res.status(200).json('Logged in successfully');
}
});

app.get('/users/courses', (req, res) => {
// logic to list all courses
res.status(200).json(COURSES);
});

app.post('/users/courses/:courseId', (req, res) => {
// logic to purchase a course
var idOfCourse = req.params.courseId;

for(let i=0;i<COURSES.length;i++){
if(COURSES[i].id == idOfCourse){
userPurchases.push(COURSES[i]);
break;
}
}

res.status(200).json('Course purchased successfully');
});

app.get('/users/purchasedCourses', (req, res) => {
// logic to view purchased courses
res.status(200).json(userPurchases);
});

app.listen(3000, () => {
Expand Down
Empty file.
Empty file.
Loading