Skip to content

Commit

Permalink
feat: add profile route both for public and private
Browse files Browse the repository at this point in the history
  • Loading branch information
mrinjamul committed Feb 12, 2024
1 parent 1516d0c commit a677816
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 0 deletions.
82 changes: 82 additions & 0 deletions controllers/userController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
const userRepository = require("../repository/userRepository");

const constants = require("../constants");

const bcrypt = require("../helpers/bcrypt");

const { maskUser } = require("../helpers/utils");

const jwt = require("../helpers/jwt");

const userController = {
// get user profile
getProfile: async function (req, res, next) {
try {
// get user param
const username = req.params.username;

// get user info from database
const user = await userRepository.getUserByUsername(username);
// check if user exists
if (!user) {
res.status(constants.http.StatusNotFound).json({
status: false,
code: constants.http.StatusNotFound,
error: "not found",
message: "no user found",
data: null,
});
return;
}

// check if authenticated user
var isAuthenticated = false;
var token;
// get token from header
try {
token = req.headers.authorization.split(" ")[1];
} catch (err) {
// console.log("error: failed to get token from header");
}

// get cookie
token = req.cookies.token;

// if token exist and verified set authenticated
if (token) {
// verify token
const verifyOpts = jwt.getVerifyingOptions();
const decodedToken = await jwt.verifyToken(token, verifyOpts);
if (decodedToken) {
if (decodedToken.username == user.username) {
isAuthenticated = true;
}
}
}

const maskedUser = maskUser(user, isAuthenticated);

if (isAuthenticated) {
// FIXME: replace with original images
maskedUser.gallery = ["private images"];
} else {
maskedUser.gallery = ["public images"];
}

res.status(constants.http.StatusOK).json({
status: true,
data: maskedUser,
});
} catch (err) {
console.error(err);
res.status(constants.http.StatusInternalServerError).json({
status: false,
code: constants.http.StatusInternalServerError,
error: "Internal Server Error",
message: err,
});
}
},
};

module.exports = userController;
9 changes: 9 additions & 0 deletions routes/api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
var express = require("express");
var router = express.Router();

var v1Router = require("./v1");

/* API routes */
router.use("/v1", v1Router);

module.exports = router;
6 changes: 6 additions & 0 deletions routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,15 @@ var router = express.Router();

const viewRouter = require("./views");
const authRouter = require("./auth");
const apiRouter = require("./api");

/* All routes */

// Frontend Route
router.use("/", viewRouter);
// Authentication route
router.use("/auth", authRouter);

router.use("/api", apiRouter);

module.exports = router;
11 changes: 11 additions & 0 deletions routes/v1/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
var express = require("express");
var router = express.Router();

var userRouter = require("./user");

/* API version 1 Routes */

// User profile routes
router.use("/user", userRouter);

module.exports = router;
8 changes: 8 additions & 0 deletions routes/v1/user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
var express = require("express");
var router = express.Router();

const userController = require("../../controllers/userController");

router.get("/:username", userController.getProfile);

module.exports = router;

0 comments on commit a677816

Please sign in to comment.