diff --git a/packages/server/controllers/auth/email/index.js b/packages/server/controllers/auth/email/index.js deleted file mode 100644 index 83ff34cd6e..0000000000 --- a/packages/server/controllers/auth/email/index.js +++ /dev/null @@ -1,7 +0,0 @@ -const verify = require("./verify"); -const validate = require("./validate"); - -module.exports = { - ...verify, - ...validate -}; diff --git a/packages/server/controllers/auth/email/validate.js b/packages/server/controllers/auth/email/validate.js deleted file mode 100644 index ce9a8811f1..0000000000 --- a/packages/server/controllers/auth/email/validate.js +++ /dev/null @@ -1,45 +0,0 @@ -// database -const database = require("../../../database"); - -// utils -const logger = require("../../../utils/logger"); -const error = require("../../../errorResponse.json"); - -exports.validate = async (req, res) => { - const { isVerified } = req.user; - const { email } = req.emailToken; - - if (isVerified) { - return res.status(409).send({ - message: error.api.emailVerify.emailAlreadyVerified, - code: "EMAIL_VERIFIED" - }); - } - - try { - const verifyUser = await database - .update({ - isVerified: true, - updatedAt: new Date().toJSON() - }) - .from("users") - .where({ - email - }) - .returning("isVerified"); - - const isUserVerified = verifyUser[0]; - await database - .delete() - .from("emailVerification") - .where({ email }); - - res.status(200).send({ - verify: { - success: isUserVerified - } - }); - } catch (err) { - logger.error(err); - } -}; diff --git a/packages/server/controllers/auth/email/verify.js b/packages/server/controllers/auth/email/verify.js deleted file mode 100644 index 9bb20b1005..0000000000 --- a/packages/server/controllers/auth/email/verify.js +++ /dev/null @@ -1,49 +0,0 @@ -// services -const verifyEmail = require("../../../services/auth/verifyEmail"); - -// utils -const logger = require("../../../utils/logger"); -const error = require("../../../errorResponse.json"); - -exports.verify = async (req, res) => { - const { userId, email, isVerified } = req.user; - - if (isVerified) { - return res.status(409).send({ - message: error.api.emailVerify.emailAlreadyVerified, - code: "EMAIL_VERIFIED" - }); - } - - try { - const tokenPayload = { - userId, - email, - type: "emailVerification" - }; - const url = req.headers.origin; - const emailVerification = await verifyEmail(url, tokenPayload); - - /** - * sending token as response is for - * development/testing/staging environment - */ - const __token = - process.env.NODE_ENV !== "production" - ? { - ...emailVerification - } - : ""; - - res.status(200).send({ - verify: { - success: !!emailVerification, - ...__token - } - }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/auth/index.js b/packages/server/controllers/auth/index.js deleted file mode 100644 index 2311c61f72..0000000000 --- a/packages/server/controllers/auth/index.js +++ /dev/null @@ -1,15 +0,0 @@ -const login = require("./login"); -const signup = require("./signup"); -const setup = require("./setup"); -const isSiteSetup = require("./isSiteSetup"); -const email = require("./email"); -const password = require("./password"); - -module.exports = { - ...login, - ...signup, - setup, - isSiteSetup, - email, - password -}; diff --git a/packages/server/controllers/auth/isSiteSetup.js b/packages/server/controllers/auth/isSiteSetup.js deleted file mode 100644 index 48627750b0..0000000000 --- a/packages/server/controllers/auth/isSiteSetup.js +++ /dev/null @@ -1,27 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); - -const isSiteSetup = async (req, res) => { - try { - const isSetup = await database - .select() - .from("users") - .where({ - isOwner: true - }) - .first(); - - res.status(200).send({ - is_setup: !!isSetup - }); - } catch (err) { - logger.error({ - message: err.message - }); - } -}; - -module.exports = isSiteSetup; diff --git a/packages/server/controllers/auth/login.js b/packages/server/controllers/auth/login.js deleted file mode 100644 index c184e0959c..0000000000 --- a/packages/server/controllers/auth/login.js +++ /dev/null @@ -1,64 +0,0 @@ -// service -const { createToken } = require('../../services/token.service') - -// utils -const { validatePassword } = require("../../utils/password"); -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -exports.login = async (req, res) => { - const user = req.user; - const password = req.body.password; - - if (user.isBlocked) { - return res.status(403).send({ - message: error.middleware.user.userBlocked, - code: "USER_BLOCKED" - }); - } - - if (!password) { - return res.status(400).send({ - message: error.api.authentication.noPasswordProvided, - code: "PASSWORD_MISSING" - }); - } - - try { - const validateUserPassword = await validatePassword( - password, - user.password - ); - if (!validateUserPassword) { - return res.status(403).send({ - message: error.middleware.user.incorrectPassword, - code: "INCORRECT_PASSWORD" - }); - } - - // generate authToken - const tokenPayload = { - userId: user.userId, - email: user.email - }; - const authToken = createToken(tokenPayload, { - expiresIn: "2d" - }); - - res.status(200).send({ - user: { - authToken, - userId: user.userId, - name: user.name, - username: user.username, - email: user.email, - avatar: user.avatar - } - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/auth/password/index.js b/packages/server/controllers/auth/password/index.js deleted file mode 100644 index f4e33abe3c..0000000000 --- a/packages/server/controllers/auth/password/index.js +++ /dev/null @@ -1,9 +0,0 @@ -const reset = require("./reset"); -const validateToken = require("./validateToken"); -const set = require("./set"); - -module.exports = { - ...reset, - ...validateToken, - ...set -}; diff --git a/packages/server/controllers/auth/password/reset.js b/packages/server/controllers/auth/password/reset.js deleted file mode 100644 index 13c77b43a3..0000000000 --- a/packages/server/controllers/auth/password/reset.js +++ /dev/null @@ -1,41 +0,0 @@ -// services -const passwordResetEmail = require("../../../services/auth/passwordReset"); - -// utils -const logger = require("../../../utils/logger"); - -exports.reset = async (req, res) => { - const { userId, email } = req.user; - - try { - const tokenPayload = { - userId, - email, - type: "resetPassword" - }; - const url = req.headers.origin; - const passwordReset = await passwordResetEmail(url, tokenPayload); - - /** - * sending token as response for - * development/testing/staging environment - */ - const __token = - process.env.NODE_ENV !== "production" - ? { - ...passwordReset - } - : ""; - - res.status(200).send({ - reset: { - success: !!passwordReset, - ...__token - } - }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/auth/password/set.js b/packages/server/controllers/auth/password/set.js deleted file mode 100644 index ba09c0cbd1..0000000000 --- a/packages/server/controllers/auth/password/set.js +++ /dev/null @@ -1,54 +0,0 @@ -// database -const database = require("../../../database"); - -// utils -const { hashPassword } = require("../../../utils/password"); -const logger = require("../../../utils/logger"); -const error = require("../../../errorResponse.json"); - -exports.set = async (req, res) => { - const { userId, email } = req.user; - const { password } = req.body; - - if (!password) { - return res.status(400).send({ - errors: [ - !password - ? { - message: error.api.authentication.noPasswordProvided, - code: "PASSWORD_MISSING" - } - : "" - ] - }); - } - - try { - const hashedPassword = hashPassword(password); - - await database - .update({ - password: hashedPassword, - updatedAt: new Date().toJSON() - }) - .from("users") - .where({ - userId - }); - - await database - .delete() - .from("resetPassword") - .where({ - email - }); - - res.status(200).send({ - reset: { - success: true - } - }); - } catch (err) { - logger.error(err); - } -}; diff --git a/packages/server/controllers/auth/password/validateToken.js b/packages/server/controllers/auth/password/validateToken.js deleted file mode 100644 index 4495e652b0..0000000000 --- a/packages/server/controllers/auth/password/validateToken.js +++ /dev/null @@ -1,21 +0,0 @@ -exports.validateToken = async (req, res) => { - const emailToken = req.emailToken; - - /** - * sending token as response for - * development/testing/staging environment - */ - const __token = - process.env.NODE_ENV !== "production" - ? { - ...emailToken - } - : ""; - - res.status(200).send({ - reset: { - valid: !!emailToken, - ...__token - } - }); -}; diff --git a/packages/server/controllers/auth/setup.js b/packages/server/controllers/auth/setup.js deleted file mode 100644 index 01c0083be3..0000000000 --- a/packages/server/controllers/auth/setup.js +++ /dev/null @@ -1,66 +0,0 @@ -// database -const database = require("../../database"); - -// services -const createUser = require("../../services/auth/createUser"); - -// utils -const { validEmail } = require("../../helpers"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res, next) => { - const { siteTitle, name, email, password } = req.body; - - if (!validEmail(email)) { - return res.status(400).send({ - message: error.api.authentication.invalidEmail, - code: "EMAIL_INVALID" - }); - } - - if (!password) { - return res.status(400).send({ - message: error.api.authentication.noPasswordProvided, - code: "PASSWORD_MISSING" - }); - } - - const isSetup = await database - .select() - .from("users") - .where({ - isOwner: true - }) - .first(); - - if (isSetup) { - return res.status(403).send({ - message: error.api.authentication.setupAlreadyCompleted, - code: "SETUP_COMPLETED" - }); - } - - const user = await createUser(req, res, next, { - email, - password, - name - }); - - // set user as owner - await database - .update({ - isOwner: true - }) - .from("users") - .where({ - userId: user.userId - }); - - await database - .update({ - title: siteTitle - }) - .from("settings"); - - res.status(201).send({ user }); -}; diff --git a/packages/server/controllers/auth/signup.js b/packages/server/controllers/auth/signup.js deleted file mode 100644 index 9b0c632c73..0000000000 --- a/packages/server/controllers/auth/signup.js +++ /dev/null @@ -1,50 +0,0 @@ -// services -const createUser = require("../../services/auth/createUser"); - -const database = require("../../database"); - -// utils -const { validEmail } = require("../../helpers"); -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -exports.signup = async (req, res, next) => { - const { email, password } = req.body; - - if (!validEmail(email)) { - return res.status(400).send({ - message: error.api.authentication.invalidEmail, - code: "EMAIL_INVALID" - }); - } - - if (!password) { - return res.status(400).send({ - message: error.api.authentication.noPasswordProvided, - code: "PASSWORD_MISSING" - }); - } - - try { - const settings = await database.select().from("settings").first(); - - if (!settings.allowSignup) { - return res.status(400).send({ - message: error.api.roles.notEnoughPermission, - code: "SIGNUP_NOT_ALLOWED" - }); - } - - const user = await createUser(req, res, next, { - email, - password - }); - - res.status(201).send({ user }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/boards/boardByUrl.js b/packages/server/controllers/boards/boardByUrl.js deleted file mode 100644 index 8c6e797b2f..0000000000 --- a/packages/server/controllers/boards/boardByUrl.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = async (req, res) => { - const board = req.board; - - res.status(200).send({ board }); -}; diff --git a/packages/server/controllers/boards/checkName.js b/packages/server/controllers/boards/checkName.js deleted file mode 100644 index f357f3c6cd..0000000000 --- a/packages/server/controllers/boards/checkName.js +++ /dev/null @@ -1,53 +0,0 @@ -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const permissions = req.user.permissions; - - const name = req.body.name; - - const checkPermission = permissions.includes("board:create"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - if (!name) { - return res.status(400).send({ - errors: [ - !name - ? { - message: error.api.boards.nameMissing, - code: "BOARD_NAME_MISSING" - } - : "" - ] - }); - } - - const slimUrl = name - .replace(/[^\w]+/gi, "-") - .trim() - .toLowerCase(); - - try { - const board = await database - .select() - .from("boards") - .where({ - url: slimUrl || null - }) - .first(); - - res.status(200).send({ available: !board }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/boards/create.js b/packages/server/controllers/boards/create.js deleted file mode 100644 index 03ecade748..0000000000 --- a/packages/server/controllers/boards/create.js +++ /dev/null @@ -1,44 +0,0 @@ -// modules -const { nanoid } = require("nanoid"); -const { v4: uuidv4 } = require("uuid"); - -// database -const database = require("../../database"); - -// utils -const { generateHexColor } = require("../../helpers"); -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -exports.create = async (req, res) => { - const permissions = req.user.permissions; - - const checkPermission = permissions.includes("board:create"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - const createBoard = await database - .insert({ - boardId: uuidv4(), - name: "new board", - url: `new-board-${nanoid(10)}`, - color: generateHexColor() - }) - .into("boards") - .returning("*"); - - const board = createBoard[0]; - - res.status(201).send({ board }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/boards/deleteById.js b/packages/server/controllers/boards/deleteById.js deleted file mode 100644 index 73b7fe435f..0000000000 --- a/packages/server/controllers/boards/deleteById.js +++ /dev/null @@ -1,36 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const { validUUID } = require("../../helpers"); -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const permissions = req.user.permissions; - - const id = validUUID(req.body.id); - - const checkPermission = permissions.includes("board:destroy"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - await database - .delete() - .from("boards") - .where({ - boardId: id - }); - - res.sendStatus(204); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/boards/filter.js b/packages/server/controllers/boards/filter.js deleted file mode 100644 index d1bbb82714..0000000000 --- a/packages/server/controllers/boards/filter.js +++ /dev/null @@ -1,32 +0,0 @@ -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); - -exports.filter = async (req, res) => { - const created = req.query.created; - const page = req.query.page - 1; - const limit = req.query.limit || 10; - - try { - const boards = await database - .select("boards.boardId", "boards.name", "boards.color", "boards.url") - .count("posts", { as: "post_count" }) - .from("boards") - .leftJoin("posts", "boards.boardId", "posts.boardId") - .where({ - display: true - }) - .groupBy("boards.boardId") - .orderBy("boards.createdAt", created) - .limit(limit) - .offset(limit * page); - - res.status(200).send({ boards }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/boards/get.js b/packages/server/controllers/boards/get.js deleted file mode 100644 index 13b639722f..0000000000 --- a/packages/server/controllers/boards/get.js +++ /dev/null @@ -1,34 +0,0 @@ -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); - -module.exports = async (req, res) => { - const created = req.query.created; - const page = req.query.page - 1; - const limit = req.query.limit || 10; - - try { - const boards = await database - .select( - "boards.boardId", - "boards.name", - "boards.color", - "boards.url", - "boards.display" - ) - .count("posts", { as: "post_count" }) - .from("boards") - .leftJoin("posts", "boards.boardId", "posts.boardId") - .groupBy("boards.boardId") - .orderBy("boards.createdAt", created) - .limit(limit) - .offset(limit * page); - - res.status(200).send({ boards }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/boards/index.js b/packages/server/controllers/boards/index.js deleted file mode 100644 index 65c7ee3679..0000000000 --- a/packages/server/controllers/boards/index.js +++ /dev/null @@ -1,19 +0,0 @@ -const create = require("./create"); -const filter = require("./filter"); -const get = require("./get"); -const searchBoard = require("./searchBoard"); -const checkName = require("./checkName"); -const boardByUrl = require("./boardByUrl"); -const updateBoard = require("./updateBoard"); -const deleteById = require("./deleteById"); - -module.exports = { - ...create, - ...filter, - get, - searchBoard, - checkName, - boardByUrl, - updateBoard, - deleteById -}; diff --git a/packages/server/controllers/boards/searchBoard.js b/packages/server/controllers/boards/searchBoard.js deleted file mode 100644 index 466af9745d..0000000000 --- a/packages/server/controllers/boards/searchBoard.js +++ /dev/null @@ -1,33 +0,0 @@ -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const { name } = req.params; - const permissions = req.user.permissions; - - const checkPermission = permissions.includes("board:read"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - const boards = await database - .select("boardId", "name", "url", "color") - .from("boards") - .where("name", "ILIKE", `${name}%`); - - res.status(200).send({ - boards - }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/boards/updateBoard.js b/packages/server/controllers/boards/updateBoard.js deleted file mode 100644 index f63c392303..0000000000 --- a/packages/server/controllers/boards/updateBoard.js +++ /dev/null @@ -1,64 +0,0 @@ -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const permissions = req.user.permissions; - const boardId = req.board.boardId; - - const { name, url, color, view_voters, display } = req.body; - - const checkPermission = permissions.includes("board:update"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - if (!url) { - return res.status(400).send({ - errors: [ - !url - ? { - message: error.api.boards.urlMissing, - code: "BOARD_URL_MISSING" - } - : "" - ] - }); - } - - const slimUrl = url - .replace(/[^\w]+/gi, "-") - .trim() - .toLowerCase(); - - try { - const boards = await database - .update({ - name, - url: slimUrl, - color, - view_voters, - display, - updatedAt: new Date().toJSON() - }) - .from("boards") - .where({ - boardId - }) - .returning("*"); - - const board = boards[0]; - - res.status(200).send({ board }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/post/activity/get.js b/packages/server/controllers/post/activity/get.js deleted file mode 100644 index 9f90944067..0000000000 --- a/packages/server/controllers/post/activity/get.js +++ /dev/null @@ -1,70 +0,0 @@ -const database = require("../../../database"); - -// utils -const logger = require("../../../utils/logger"); - -module.exports = async (req, res) => { - const { post_id } = req.params; - const { per_page = 10, page = 1 } = req.query; - - try { - const activities = await database.raw( - /* SQL */ - ` - SELECT - id, - type, - CASE - WHEN posts_comments_id IS NULL THEN NULL - ELSE ( - SELECT - json_build_object( - 'id', posts_comments.id, - 'parent_id', posts_comments.parent_id, - 'body', posts_comments.body, - 'is_internal', posts_comments.is_internal, - 'is_edited', posts_comments.is_edited, - 'is_spam', posts_comments.is_spam, - 'created_at', posts_comments.created_at - ) - FROM posts_comments - WHERE posts_comments.activity_id = posts_activity.id - ) - END AS comment, - ( - SELECT - json_build_object( - 'user_id', users."userId", - 'name', users.name, - 'username', users.username, - 'avatar', users.avatar - ) - FROM users WHERE users."userId" = posts_activity.author_id - ) AS author, - created_at - FROM - posts_activity - WHERE - posts_activity.post_id = :post_id - ORDER BY - posts_activity.created_at DESC - LIMIT :limit - OFFSET :offset - ;`, - { - limit: per_page, - offset: page, - post_id, - } - ); - - res.status(200).send({ - activity: activities.rows - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/post/activity/index.js b/packages/server/controllers/post/activity/index.js deleted file mode 100644 index cecc725507..0000000000 --- a/packages/server/controllers/post/activity/index.js +++ /dev/null @@ -1,5 +0,0 @@ -const get = require("./get"); - -module.exports = { - get -}; diff --git a/packages/server/controllers/post/comments/create.js b/packages/server/controllers/post/comments/create.js deleted file mode 100644 index 3ea3d3ea2c..0000000000 --- a/packages/server/controllers/post/comments/create.js +++ /dev/null @@ -1,91 +0,0 @@ -const { v4: uuid } = require("uuid"); - -const database = require("../../../database"); - -// utils -const logger = require("../../../utils/logger"); -const error = require("../../../errorResponse.json"); - -module.exports = async (req, res) => { - const userId = req.user.userId; - const { post_id } = req.params; - const { parent_id, is_internal, body } = req.body; - - // check auth user has required permission to set comment as internal - // check the auth user has permission to comment - - try { - const labSettings = await database - .select(database.raw("labs::json")) - .from("settings") - .first(); - - if (!labSettings.labs.comments) { - return res.status(403).send({ - message: error.api.labs.disabled, - code: "LABS_DISABLED" - }); - } - - const results = await database.transaction(async (trx) => { - // postActivityId will be shared b/w "posts_comments" and "posts_activity" table - const postActivityId = uuid(); - - const comments = await trx("posts_comments").insert( - { - id: uuid(), - parent_id, - body, - activity_id: postActivityId, - is_internal, - created_at: new Date().toJSON(), - updated_at: new Date().toJSON() - }, - [ - "id", - "parent_id", - "body", - "is_internal", - "is_edited", - "is_spam", - "created_at" - ] - ); - - const comment = comments[0]; - - const activities = await trx("posts_activity") - .insert({ - id: postActivityId, - type: "comment", - posts_comments_id: comment.id, - post_id, - author_id: userId, - created_at: new Date().toJSON() - }) - .returning(["id", "type", "created_at"]); - - const activity = activities[0]; - - const author = await trx("users") - .select("userId", "name", "username", "avatar") - .where({ userId }) - .first(); - - return { - ...activity, - comment, - author - }; - }); - - res.status(201).send({ - comment: results - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/post/comments/destroy.js b/packages/server/controllers/post/comments/destroy.js deleted file mode 100644 index 7283bbce82..0000000000 --- a/packages/server/controllers/post/comments/destroy.js +++ /dev/null @@ -1,34 +0,0 @@ -const { v4: uuid } = require("uuid"); - -const database = require("../../../database"); - -// utils -const logger = require("../../../utils/logger"); -const error = require("../../../errorResponse.json"); - -module.exports = async (req, res) => { - const { comment_id } = req.params; - - try { - const labSettings = await database - .select(database.raw("labs::json")) - .from("settings") - .first(); - - if (!labSettings.labs.comments) { - return res.status(403).send({ - message: error.api.labs.disabled, - code: "LABS_DISABLED" - }); - } - - await database.delete().from("posts_comments").where({ id: comment_id }); - - res.status(204); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/post/comments/index.js b/packages/server/controllers/post/comments/index.js deleted file mode 100644 index 4dcb23d8b4..0000000000 --- a/packages/server/controllers/post/comments/index.js +++ /dev/null @@ -1,9 +0,0 @@ -const create = require("./create"); -const update = require("./update"); -const destroy = require("./destroy"); - -module.exports = { - create, - update, - destroy -}; diff --git a/packages/server/controllers/post/comments/update.js b/packages/server/controllers/post/comments/update.js deleted file mode 100644 index df03ca991a..0000000000 --- a/packages/server/controllers/post/comments/update.js +++ /dev/null @@ -1,48 +0,0 @@ -const { v4: uuid } = require("uuid"); - -const database = require("../../../database"); - -// utils -const logger = require("../../../utils/logger"); -const error = require("../../../errorResponse.json"); - -module.exports = async (req, res) => { - const { comment_id } = req.params; - const { body, is_internal, is_spam } = req.body; - - try { - const labSettings = await database - .select(database.raw("labs::json")) - .from("settings") - .first(); - - if (!labSettings.labs.comments) { - return res.status(403).send({ - message: error.api.labs.disabled, - code: "LABS_DISABLED" - }); - } - - const comment = await database - .update({ - body, - is_internal, - is_edited: true, - is_spam, - created_at: new Date().toJSON(), - updated_at: new Date().toJSON() - }) - .from("posts_comments") - .where({ id: comment_id }) - .returning("*"); - - res.status(200).send({ - comment: comment[0] - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/post/create.js b/packages/server/controllers/post/create.js deleted file mode 100644 index f08430c425..0000000000 --- a/packages/server/controllers/post/create.js +++ /dev/null @@ -1,91 +0,0 @@ -// modules -const { nanoid } = require("nanoid"); -const { v4: uuidv4 } = require("uuid"); - -const database = require("../../database"); - -// utils -const { validUUID } = require("../../helpers"); -const logger = require("../../utils/logger"); - -const error = require("../../errorResponse.json"); - -exports.create = async (req, res) => { - const userId = req.user.userId; - const permissions = req.user.permissions; - - const title = req.body.title; - const contentMarkdown = req.body.contentMarkdown; - const boardId = validUUID(req.body.boardId); - - const checkPermission = permissions.includes("post:create"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - if (!title || !boardId) { - return res.status(400).send({ - errors: [ - !title - ? { - message: error.api.posts.titleMissing, - code: "POST_TITLE_MISSING" - } - : "", - !boardId - ? { - message: error.api.boards.boardIdMissing, - code: "BOARD_ID_MISSING" - } - : "" - ] - }); - } - - // generate slug unique indentification - const slugId = nanoid(20); - - const slug = `${title - .replace(/[^\w\s]/gi, "") - .replace(/\s\s+/gi, " ") - .toLowerCase() - .split(" ") - .join("-")}-${slugId}`; - - try { - const createPost = await database - .insert({ - postId: uuidv4(), - title, - slug, - slugId, - contentMarkdown, - userId, - boardId - }) - .into("posts") - .returning("*"); - - const post = createPost[0]; - - await database - .insert({ - voteId: uuidv4(), - userId, - postId: post.postId - }) - .into("votes"); - - res.status(201).send({ - post - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/post/deleteById.js b/packages/server/controllers/post/deleteById.js deleted file mode 100644 index de70da4310..0000000000 --- a/packages/server/controllers/post/deleteById.js +++ /dev/null @@ -1,35 +0,0 @@ -const database = require("../../database"); - -// utils -const { validUUID } = require("../../helpers"); -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -exports.deleteById = async (req, res) => { - const permissions = req.user.permissions; - - const id = validUUID(req.body.id); - - const checkPermission = permissions.includes("post:destroy"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - await database - .delete() - .from("posts") - .where({ - postId: id - }); - - res.sendStatus(204); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/post/filterPost.js b/packages/server/controllers/post/filterPost.js deleted file mode 100644 index e38802d81d..0000000000 --- a/packages/server/controllers/post/filterPost.js +++ /dev/null @@ -1,96 +0,0 @@ -const database = require("../../database"); - -// services -const getBoardById = require("../../services/boards/getBoardById"); -const getVotes = require("../../services/votes/getVotes"); - -// utils -const { validUUID } = require("../../helpers"); -const logger = require("../../utils/logger"); - -exports.filterPost = async (req, res) => { - const userId = validUUID(req.body.userId); - const boardId = validUUID(req.body.boardId); - const roadmapId = validUUID(req.body.roadmapId); - /** - * top, latest, oldest, trending - */ - const created = req.body.created; - const page = req.body.page - 1; - const limit = req.body.limit || 10; - - try { - const { rows: response } = await database.raw( - ` - SELECT - "postId", - "title", - "slug", - "boardId", - "roadmap_id", - "contentMarkdown", - "createdAt" - FROM - posts - ${ - boardId - ? `WHERE "boardId" IN (${boardId.map(item => { - return `'${item}'`; - })})` - : "" - } - ${roadmapId ? `WHERE roadmap_id = :roadmapId` : ""} - ORDER BY "createdAt" ${created} - LIMIT :limit - OFFSET :offset; - `, - { - limit, - offset: limit * page, - roadmapId - } - ); - - const posts = []; - - for (let i = 0; i < response.length; i++) { - const postId = response[i].postId; - const boardId = response[i].boardId; - const roadmapId = response[i].roadmap_id; - - try { - const board = await getBoardById(boardId); - const voters = await getVotes(postId, userId); - const roadmap = await database - .select("id", "name", "url", "color") - .from("roadmaps") - .where({ - id: roadmapId - }) - .first(); - - delete response[i].boardId; - delete response[i].roadmap_id; - - posts.push({ - ...response[i], - board, - roadmap, - voters - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } - } - - res.status(200).send({ posts }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/post/index.js b/packages/server/controllers/post/index.js deleted file mode 100644 index a0d171b572..0000000000 --- a/packages/server/controllers/post/index.js +++ /dev/null @@ -1,18 +0,0 @@ -const create = require("./create"); -const filterPost = require("./filterPost"); -const postBySlug = require("./postBySlug"); -const updatePost = require("./updatePost"); -const deleteById = require("./deleteById"); - -const activity = require("./activity"); -const comments = require("./comments"); - -module.exports = { - ...create, - ...filterPost, - ...postBySlug, - ...updatePost, - ...deleteById, - activity, - comments -}; diff --git a/packages/server/controllers/post/postBySlug.js b/packages/server/controllers/post/postBySlug.js deleted file mode 100644 index 1b59d17c47..0000000000 --- a/packages/server/controllers/post/postBySlug.js +++ /dev/null @@ -1,60 +0,0 @@ -const database = require("../../database"); - -// services -const getVotes = require("../../services/votes/getVotes"); - -// utils -const { validUUID } = require("../../helpers"); -const logger = require("../../utils/logger"); - -exports.postBySlug = async (req, res) => { - const userId = validUUID(req.body.userId); - const post = req.post; - - try { - const author = await database - .select("userId", "name", "username", "avatar") - .from("users") - .where({ - userId: post.userId - }) - .first(); - - const voters = await getVotes(post.postId, userId); - - const board = await database - .select("boardId", "name", "url", "color") - .from("boards") - .where({ - boardId: post.boardId - }) - .first(); - - const roadmap = await database - .select("id", "name", "url", "color") - .from("roadmaps") - .where({ - id: post.roadmap_id - }) - .first(); - - delete post.boardId; - delete post.userId; - delete post.roadmap_id; - - res.status(200).send({ - post: { - board, - author, - roadmap, - ...post, - voters - } - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/post/updatePost.js b/packages/server/controllers/post/updatePost.js deleted file mode 100644 index a013f818bd..0000000000 --- a/packages/server/controllers/post/updatePost.js +++ /dev/null @@ -1,60 +0,0 @@ -const database = require("../../database"); - -// utils -const { validUUID } = require("../../helpers"); -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -exports.updatePost = async (req, res) => { - const userId = req.user.userId; - const permissions = req.user.permissions; - const authorId = req.post.userId; - const slugId = req.post.slugId; - - const id = validUUID(req.body.id); - const title = req.body.title; - const contentMarkdown = req.body.contentMarkdown; - const boardId = validUUID(req.body.boardId) || undefined; - const roadmapId = validUUID(req.body.roadmapId) || undefined; - - const checkPermission = permissions.includes("post:update"); - if (!checkPermission && userId !== authorId) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - const slug = `${title - .replace(/[^\w\s]/gi, "") - .replace(/\s\s+/gi, " ") - .toLowerCase() - .split(" ") - .join("-")}-${slugId}`; - - try { - const posts = await database - .update({ - title, - slug, - contentMarkdown, - boardId, - roadmap_id: roadmapId, - updatedAt: new Date().toJSON() - }) - .from("posts") - .where({ - postId: id - }) - .returning("*"); - - const post = posts[0]; - - res.status(200).send({ post }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/roadmaps/create.js b/packages/server/controllers/roadmaps/create.js deleted file mode 100644 index e483466d4b..0000000000 --- a/packages/server/controllers/roadmaps/create.js +++ /dev/null @@ -1,50 +0,0 @@ -// modules -const { nanoid } = require("nanoid"); -const { v4: uuidv4 } = require("uuid"); - -// database -const database = require("../../database"); - -// utils -const { generateHexColor } = require("../../helpers"); -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const permissions = req.user.permissions; - - const checkPermission = permissions.includes("roadmap:create"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - // get maximum index value of roadmap - const roadmapIndex = await database - .max("index") - .from("roadmaps") - .first(); - - const createRoadmap = await database - .insert({ - id: uuidv4(), - name: "new roadmap", - url: `new-roadmap-${nanoid(10)}`, - color: generateHexColor(), - index: roadmapIndex.max + 1 - }) - .into("roadmaps") - .returning("*"); - - const roadmap = createRoadmap[0]; - - res.status(201).send({ roadmap }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/roadmaps/deleteById.js b/packages/server/controllers/roadmaps/deleteById.js deleted file mode 100644 index f9df6a4933..0000000000 --- a/packages/server/controllers/roadmaps/deleteById.js +++ /dev/null @@ -1,36 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const { validUUID } = require("../../helpers"); -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const permissions = req.user.permissions; - - const id = validUUID(req.body.id); - - const checkPermission = permissions.includes("roadmap:destroy"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - await database - .delete() - .from("roadmaps") - .where({ - id: id - }); - - res.sendStatus(204); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/roadmaps/filter.js b/packages/server/controllers/roadmaps/filter.js deleted file mode 100644 index bc48c039a1..0000000000 --- a/packages/server/controllers/roadmaps/filter.js +++ /dev/null @@ -1,19 +0,0 @@ -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); - -module.exports = async (req, res) => { - try { - const roadmaps = await database - .select("id", "name", "url", "color", "display", "index") - .from("roadmaps") - .orderBy("index", "asc"); - - res.status(200).send({ roadmaps }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/roadmaps/index.js b/packages/server/controllers/roadmaps/index.js deleted file mode 100644 index dacbf4a3ae..0000000000 --- a/packages/server/controllers/roadmaps/index.js +++ /dev/null @@ -1,17 +0,0 @@ -const filter = require("./filter"); -const create = require("./create"); -const roadmapByUrl = require("./roadmapByUrl"); -const updateRoadmap = require("./updateRoadmap"); -const sort = require("./sort"); -const searchRoadmap = require("./searchRoadmap"); -const deleteById = require("./deleteById"); - -module.exports = { - filter, - create, - roadmapByUrl, - updateRoadmap, - sort, - searchRoadmap, - deleteById -}; diff --git a/packages/server/controllers/roadmaps/roadmapByUrl.js b/packages/server/controllers/roadmaps/roadmapByUrl.js deleted file mode 100644 index cdfbb13194..0000000000 --- a/packages/server/controllers/roadmaps/roadmapByUrl.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = async (req, res) => { - const roadmap = req.roadmap; - - res.status(200).send({ roadmap }); -}; diff --git a/packages/server/controllers/roadmaps/searchRoadmap.js b/packages/server/controllers/roadmaps/searchRoadmap.js deleted file mode 100644 index 27ac2e69c9..0000000000 --- a/packages/server/controllers/roadmaps/searchRoadmap.js +++ /dev/null @@ -1,33 +0,0 @@ -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const { name } = req.params; - const permissions = req.user.permissions; - - const checkPermission = permissions.includes("roadmap:read"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - const roadmaps = await database - .select("id", "name", "url", "color") - .from("roadmaps") - .where("name", "ILIKE", `${name}%`); - - res.status(200).send({ - roadmaps - }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/roadmaps/sort.js b/packages/server/controllers/roadmaps/sort.js deleted file mode 100644 index ca87183bc0..0000000000 --- a/packages/server/controllers/roadmaps/sort.js +++ /dev/null @@ -1,47 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const { from, to } = req.body; - const permissions = req.user.permissions; - - const checkPermission = permissions.includes("roadmap:update"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - // to - await database - .update({ - index: to.index - }) - .from("roadmaps") - .where({ - id: to.id - }); - - // from - await database - .update({ - index: from.index - }) - .from("roadmaps") - .where({ - id: from.id - }); - - res.sendStatus(200); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/roadmaps/updateRoadmap.js b/packages/server/controllers/roadmaps/updateRoadmap.js deleted file mode 100644 index d5cbf7d37e..0000000000 --- a/packages/server/controllers/roadmaps/updateRoadmap.js +++ /dev/null @@ -1,54 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const id = req.roadmap.id; - - const { name, url, color, display } = req.body; - - if (!url) { - return res.status(400).send({ - errors: [ - !url - ? { - message: error.api.roadmaps.urlMissing, - code: "ROADMAP_URL_MISSING" - } - : "" - ] - }); - } - - const slimUrl = url - .replace(/[^\w]+/gi, "-") - .trim() - .toLowerCase(); - - try { - const roadmaps = await database - .update({ - name, - url: slimUrl, - color, - display, - updated_at: new Date().toJSON() - }) - .from("roadmaps") - .where({ - id - }) - .returning("*"); - - const roadmap = roadmaps[0]; - - res.status(200).send({ roadmap }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/roles/addRoleToUser.js b/packages/server/controllers/roles/addRoleToUser.js deleted file mode 100644 index 08e0c68f07..0000000000 --- a/packages/server/controllers/roles/addRoleToUser.js +++ /dev/null @@ -1,40 +0,0 @@ -const { v4: uuid } = require("uuid"); - -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const permissions = req.user.permissions; - const { role_id, user_id } = req.params; - - const checkPermission = permissions.find(item => item === "role:assign"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.posts.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - const response = await database - .insert({ - id: uuid(), - role_id, - user_id, - }) - .into("roles_users") - .onConflict(["role_id", "user_id"]) - .ignore(); - - res.status(response.rowCount ? 200 : 204).send({ - success: !!response.rowCount, - }); - } catch (err) { - logger.error({ - message: err, - }); - } -}; diff --git a/packages/server/controllers/roles/create.js b/packages/server/controllers/roles/create.js deleted file mode 100644 index 3942dce4af..0000000000 --- a/packages/server/controllers/roles/create.js +++ /dev/null @@ -1,39 +0,0 @@ -const { v4: uuidv4 } = require("uuid"); - -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const permissions = req.user.permissions; - const checkPermission = permissions.includes("role:create"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - const createRole = await database - .insert({ - id: uuidv4(), - name: "new role" - }) - .into("roles") - .returning("id"); - - const role = createRole[0]; - - res.status(201).send({ - role - }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/roles/deleteRoleFromUser.js b/packages/server/controllers/roles/deleteRoleFromUser.js deleted file mode 100644 index 7f21010d50..0000000000 --- a/packages/server/controllers/roles/deleteRoleFromUser.js +++ /dev/null @@ -1,31 +0,0 @@ -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const permissions = req.user.permissions; - const { role_id, user_id } = req.params; - - const checkPermission = permissions.find((item) => item === "role:unassign"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.posts.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION", - }); - } - - try { - await database.delete().from("roles_users").where({ - role_id, - user_id, - }); - - res.sendStatus(204); - } catch (err) { - logger.error({ - message: err, - }); - } -}; diff --git a/packages/server/controllers/roles/get.js b/packages/server/controllers/roles/get.js deleted file mode 100644 index 970d205d87..0000000000 --- a/packages/server/controllers/roles/get.js +++ /dev/null @@ -1,27 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const error = require("../../errorResponse.json"); -const logger = require("../../utils/logger"); - -module.exports = async (req, res) => { - const permissions = req.user.permissions; - const checkPermission = permissions.includes("role:read"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - const roles = await database.select().from("roles"); - - res.status(200).send({ roles }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/roles/getOne.js b/packages/server/controllers/roles/getOne.js deleted file mode 100644 index 751d6d1b86..0000000000 --- a/packages/server/controllers/roles/getOne.js +++ /dev/null @@ -1,58 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const { id } = req.params; - - const permissions = req.user.permissions; - const checkPermission = permissions.includes("role:read"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - const role = await database - .select() - .from("roles") - .where({ - id - }) - .first(); - - const permissions = await database - .select( - database.raw("ARRAY_AGG(CONCAT(p.type, ':', p.action)) AS permissions") - ) - .from("permissions_roles AS pr") - .leftJoin("permissions AS p", "pr.permission_id", "p.id") - .where({ - "pr.role_id": role.id - }) - .first(); - - if (!role) { - res.status(404).send({ - message: error.api.roles.roleNotFound, - code: "ROLE_NOT_FOUND" - }); - } - - res.status(200).send({ - role: { - ...role, - permissions: permissions.permissions || [] - } - }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/roles/index.js b/packages/server/controllers/roles/index.js deleted file mode 100644 index 326c90b952..0000000000 --- a/packages/server/controllers/roles/index.js +++ /dev/null @@ -1,15 +0,0 @@ -const get = require("./get"); -const create = require("./create"); -const getOne = require("./getOne"); -const update = require("./update"); -const addRoleToUser = require('./addRoleToUser') -const deleteRoleFromUser = require('./deleteRoleFromUser') - -module.exports = { - get, - create, - getOne, - update, - addRoleToUser, - deleteRoleFromUser -}; diff --git a/packages/server/controllers/roles/update.js b/packages/server/controllers/roles/update.js deleted file mode 100644 index b68cda704b..0000000000 --- a/packages/server/controllers/roles/update.js +++ /dev/null @@ -1,83 +0,0 @@ -const { v4: uuidv4 } = require("uuid"); - -// database -const database = require("../../database"); - -// utils -const error = require("../../errorResponse.json"); -const logger = require("../../utils/logger"); - -module.exports = async (req, res) => { - const role = req.body; - - const permissions = req.user.permissions; - const checkPermission = permissions.includes("role:update"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - const existingPermissions = await database.select().from("permissions"); - - // delete all existing permisisons for a role - await database - .delete() - .from("permissions_roles") - .where({ - role_id: role.id - }); - - const updateRole = await database - .update({ - name: role.name, - description: role.description, - updated_at: new Date().toJSON() - }) - .from("roles") - .where({ - id: role.id - }) - .returning("*"); - - // add new permissions to the role - role.permissions.forEach(async perm => { - const type = perm.split(":")[0]; - const action = perm.split(":")[1]; - - const findPermission = existingPermissions.find( - item => item.type === type && item.action === action - ); - - await database - .insert({ - id: uuidv4(), - permission_id: findPermission.id, - role_id: role.id - }) - .into("permissions_roles"); - }); - - const updatedPermissions = await database - .select( - database.raw("ARRAY_AGG(CONCAT(p.type, ':', p.action)) AS permissions") - ) - .from("permissions_roles AS pr") - .leftJoin("permissions AS p", "pr.permission_id", "p.id") - .where({ - "pr.role_id": role.id - }) - .first(); - - res.status(200).send({ - role: updateRole, - ...updatedPermissions - }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/settings/getLabs.js b/packages/server/controllers/settings/getLabs.js deleted file mode 100644 index f18f60342c..0000000000 --- a/packages/server/controllers/settings/getLabs.js +++ /dev/null @@ -1,20 +0,0 @@ -// database -const database = require("../../database"); - -exports.getLabs = async (_, res) => { - try { - const { labs } = await database - .select(database.raw("labs::json")) - .from("settings") - .first(); - - res.status(200).send({ - labs - }); - } catch (error) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/settings/index.js b/packages/server/controllers/settings/index.js deleted file mode 100644 index 02f796d991..0000000000 --- a/packages/server/controllers/settings/index.js +++ /dev/null @@ -1,13 +0,0 @@ -const siteSettings = require("./siteSettings"); -const update = require("./update"); -const updateLogo = require("./updateLogo"); -const getLabs = require("./getLabs"); -const updateLabs = require("./updateLabs"); - -module.exports = { - ...siteSettings, - ...update, - ...updateLogo, - ...getLabs, - ...updateLabs -}; diff --git a/packages/server/controllers/settings/siteSettings.js b/packages/server/controllers/settings/siteSettings.js deleted file mode 100644 index c8bde62f7f..0000000000 --- a/packages/server/controllers/settings/siteSettings.js +++ /dev/null @@ -1,23 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); - -exports.siteSettings = async (_, res) => { - try { - const settings = await database - .select(["*", database.raw("labs::json")]) - .from("settings") - .first(); - - res.status(200).send({ - settings - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/settings/update.js b/packages/server/controllers/settings/update.js deleted file mode 100644 index 591419233b..0000000000 --- a/packages/server/controllers/settings/update.js +++ /dev/null @@ -1,52 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -exports.update = async (req, res) => { - const permissions = req.user.permissions; - - const checkPermission = permissions.find(item => item === "settings:update"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.posts.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - const { - title, - description, - allowSignup, - accentColor, - googleAnalyticsId, - developer_mode - } = req.body; - - try { - const updateSettings = await database - .update({ - title, - description, - allowSignup, - accentColor, - googleAnalyticsId, - developer_mode - }) - .from("settings") - .returning(["*", database.raw("labs::json")]); - - const settings = updateSettings[0]; - - res.status(200).send({ - settings - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/settings/updateLabs.js b/packages/server/controllers/settings/updateLabs.js deleted file mode 100644 index 63f136f232..0000000000 --- a/packages/server/controllers/settings/updateLabs.js +++ /dev/null @@ -1,46 +0,0 @@ -const _ = require("lodash"); - -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -/** - * This API doesn't update the existing labs value - * instead overrides the existing value with req.body.labs - */ -exports.updateLabs = async (req, res) => { - const permissions = req.user.permissions; - - const labs = req.body; - const stringify = JSON.stringify(labs); - - const checkPermission = permissions.find(item => item === "settings:update"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.posts.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - const response = await database - .update({ - labs: database.raw(`labs::jsonb || '${stringify}'`) - }) - .from("settings") - .returning(database.raw("labs::json")); - - const labs = response[0]; - res.status(200).send({ - labs - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/settings/updateLogo.js b/packages/server/controllers/settings/updateLogo.js deleted file mode 100644 index a752f0ac1e..0000000000 --- a/packages/server/controllers/settings/updateLogo.js +++ /dev/null @@ -1,31 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); - -exports.updateLogo = async (req, res) => { - const host = req.headers.host; - const imagePath = req.file.path.split("content/images")[1]; - - const imageUrl = `//${host}/content/images${imagePath}`; - - try { - const updatedSettings = await database - .update({ - logo: imageUrl - }) - .from("settings") - .returning("*"); - - res.status(200).send({ - settings: updatedSettings[0] - }); - } catch (err) { - logger.error({ - code: "DASHBOARD_SETTINGS_UPDATE", - message: "Update logo", - err - }); - } -}; diff --git a/packages/server/controllers/users/accessDashboard.js b/packages/server/controllers/users/accessDashboard.js deleted file mode 100644 index c219c7ca27..0000000000 --- a/packages/server/controllers/users/accessDashboard.js +++ /dev/null @@ -1,18 +0,0 @@ -// utils -const error = require("../../errorResponse.json"); - -exports.accessDashboard = (req, res) => { - const permissions = req.user.permissions; - - const checkPermission = permissions.includes("dashboard:read"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - res.status(200).send({ - access: true - }); -}; diff --git a/packages/server/controllers/users/filter.js b/packages/server/controllers/users/filter.js deleted file mode 100644 index b5746a332a..0000000000 --- a/packages/server/controllers/users/filter.js +++ /dev/null @@ -1,59 +0,0 @@ -// database -const database = require("../../database"); - -// services -const getUsers = require("../../services/users/getUsers"); - -// utils -const logger = require("../../utils/logger"); - -exports.filter = async (req, res) => { - const created = req.query.created; - const page = req.query.page - 1; - const limit = req.query.limit || 10; - - try { - const userData = await getUsers(created, limit, page); - - const users = []; - - for (let i = 0; i < userData.length; i++) { - const userId = userData[i].userId; - - try { - const postsCount = await database - .count() - .from("posts") - .where({ userId }); - const votesCount = await database - .count() - .from("votes") - .where({ userId }); - - users.push({ - votes: votesCount[0].count, - posts: postsCount[0].count, - ...userData[i] - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } - } - - res.status(200).send({ - status: { - code: 200, - type: "success" - }, - users - }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/users/getProfile.js b/packages/server/controllers/users/getProfile.js deleted file mode 100644 index 40375742b0..0000000000 --- a/packages/server/controllers/users/getProfile.js +++ /dev/null @@ -1,27 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); - -module.exports = async (req, res) => { - const { userId } = req.user; - - try { - const user = await database - .select("userId", "name", "username", "email", "isVerified") - .from("users") - .where({ - userId - }) - .first(); - - res.status(200).send({ - user - }); - } catch (err) { - logger.error({ - message: err - }); - } -}; diff --git a/packages/server/controllers/users/getUserInfo.js b/packages/server/controllers/users/getUserInfo.js deleted file mode 100644 index 482a63f28f..0000000000 --- a/packages/server/controllers/users/getUserInfo.js +++ /dev/null @@ -1,37 +0,0 @@ -const database = require('../../database') -const logger = require('../../utils/logger') - -const getUserInfo = async (req, res) => { - const { user_id } = req.params - - try { - const user = await database - .select( - 'userId', - 'name', - 'username', - 'email', - 'avatar', - 'isVerified', - 'isBlocked', - 'isOwner', - 'notes', - 'createdAt' - ) - .from('users') - .where({ - userId: user_id - }) - .first() - - res.status(200).send({ - user - }) - } catch (error) { - console.log(error) - - logger.error(error) - } -} - -module.exports = getUserInfo diff --git a/packages/server/controllers/users/getUserPermissions.js b/packages/server/controllers/users/getUserPermissions.js deleted file mode 100644 index 831119f17e..0000000000 --- a/packages/server/controllers/users/getUserPermissions.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = async (req, res) => { - const user = req.user; - - res.status(200).send({ - permissions: user.permissions - }); -}; diff --git a/packages/server/controllers/users/index.js b/packages/server/controllers/users/index.js deleted file mode 100644 index c1617d2f0a..0000000000 --- a/packages/server/controllers/users/index.js +++ /dev/null @@ -1,17 +0,0 @@ -const filter = require("./filter"); -const getProfile = require("./getProfile"); -const updateProfile = require("./updateProfile"); -const accessDashboard = require("./accessDashboard"); -const getUserPermissions = require("./getUserPermissions"); -const getUserInfo = require('./getUserInfo') -const updateUserInfo = require('./updateUserInfo') - -module.exports = { - ...filter, - getProfile, - updateProfile, - ...accessDashboard, - getUserPermissions, - getUserInfo, - updateUserInfo -}; diff --git a/packages/server/controllers/users/updateProfile.js b/packages/server/controllers/users/updateProfile.js deleted file mode 100644 index 7e45389aca..0000000000 --- a/packages/server/controllers/users/updateProfile.js +++ /dev/null @@ -1,33 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); - -module.exports = async (req, res) => { - const userId = req.user.userId; - - const name = req.body.name; - - try { - const users = await database - .update({ - name, - updatedAt: new Date().toJSON() - }) - .from("users") - .where({ - userId - }) - .returning(["userId", "name", "username", "email"]); - - const user = users[0]; - - res.status(200).send({ user }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/users/updateUserInfo.js b/packages/server/controllers/users/updateUserInfo.js deleted file mode 100644 index 99ed27663a..0000000000 --- a/packages/server/controllers/users/updateUserInfo.js +++ /dev/null @@ -1,30 +0,0 @@ -const database = require('../../database') -const logger = require('../../utils/logger') - -const getUserInfo = async (req, res) => { - const { user_id } = req.params - const { username, name, notes } = req.body - - try { - const user = await database - .update({ - username, - name, - notes - }) - .from('users') - .where({ - userId: user_id - }) - - res.status(200).send({ - user - }) - } catch (error) { - console.log(error) - - logger.error(error) - } -} - -module.exports = getUserInfo diff --git a/packages/server/controllers/votes/add.js b/packages/server/controllers/votes/add.js deleted file mode 100644 index 70eef58dc7..0000000000 --- a/packages/server/controllers/votes/add.js +++ /dev/null @@ -1,62 +0,0 @@ -const { v4: uuidv4 } = require("uuid"); - -// database -const database = require("../../database"); - -// services -const getVotes = require("../../services/votes/getVotes"); - -// utils -const { validUUID } = require("../../helpers"); -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const userId = req.user.userId; - const permissions = req.user.permissions; - - const postId = validUUID(req.body.postId); - - const checkPermission = permissions.includes("vote:create"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - const vote = await database - .select() - .from("votes") - .where({ - postId: postId || null, - userId - }) - .first(); - - if (vote) { - return res.status(409).send({ - message: error.api.votes.exists, - code: "VOTE_EXISTS" - }); - } - - await database - .insert({ - voteId: uuidv4(), - userId, - postId - }) - .into("votes"); - - const voters = await getVotes(postId, userId); - - res.status(201).send({ voters }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/controllers/votes/index.js b/packages/server/controllers/votes/index.js deleted file mode 100644 index 7b2cd823fa..0000000000 --- a/packages/server/controllers/votes/index.js +++ /dev/null @@ -1,7 +0,0 @@ -const add = require("./add"); -const remove = require("./remove"); - -module.exports = { - add, - remove -}; diff --git a/packages/server/controllers/votes/remove.js b/packages/server/controllers/votes/remove.js deleted file mode 100644 index 3ff9d2697f..0000000000 --- a/packages/server/controllers/votes/remove.js +++ /dev/null @@ -1,60 +0,0 @@ -// database -const database = require("../../database"); - -// services -const getVotes = require("../../services/votes/getVotes"); - -// utils -const { validUUID } = require("../../helpers"); -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -module.exports = async (req, res) => { - const userId = req.user.userId; - const permissions = req.user.permissions; - - const postId = validUUID(req.body.postId); - - const checkPermission = permissions.includes("vote:destroy"); - if (!checkPermission) { - return res.status(403).send({ - message: error.api.roles.notEnoughPermission, - code: "NOT_ENOUGH_PERMISSION" - }); - } - - try { - const vote = await database - .select() - .from("votes") - .where({ - postId: postId || null, - userId - }) - .first(); - - if (!vote) { - return res.status(404).send({ - message: error.api.votes.voteNotFound, - code: "VOTE_NOT_FOUND" - }); - } - - await database - .delete() - .from("votes") - .where({ - postId, - userId - }); - - const voters = await getVotes(postId, userId); - - res.status(200).send({ voters }); - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; diff --git a/packages/server/database/migrations/20200906183548_initial_users_table.js b/packages/server/database/migrations/20200906183548_initial_users_table.js deleted file mode 100644 index c9acc85620..0000000000 --- a/packages/server/database/migrations/20200906183548_initial_users_table.js +++ /dev/null @@ -1,70 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("users", table => { - table - .uuid("userId") - .notNullable() - .unique() - .primary(); - table.string("name", 30); - table - .string("email", 320) - .notNullable() - .unique(); - table.string("password", 72).notNullable(); - table - .string("username", 30) - .notNullable() - .unique(); - table.text("avatar"); - table.boolean("isVerified").defaultTo(false); - table.boolean("isOwner").defaultTo(false); - table.boolean("isBlocked").defaultTo(false); - table - .timestamp("createdAt") - .defaultTo(knex.fn.now()) - .notNullable(); - table - .timestamp("updatedAt") - .defaultTo(knex.fn.now()) - .notNullable(); - table.comment("Storing users data"); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: users" - }); - }) - .catch(err => { - logger.log({ - level: "error", - message: err - }); - }); -}; - -exports.down = knex => { - return knex.schema - .hasTable("users") - .then(exists => { - if (exists) { - return knex.schema.dropTable("users"); - } - }) - .then(() => { - logger.log({ - level: "info", - message: "Dropping table: users" - }); - }) - .catch(err => { - logger.log({ - level: "error", - message: err - }); - }); -}; diff --git a/packages/server/database/migrations/20200906183706_initial_posts_table.js b/packages/server/database/migrations/20200906183706_initial_posts_table.js deleted file mode 100644 index 2715eb3385..0000000000 --- a/packages/server/database/migrations/20200906183706_initial_posts_table.js +++ /dev/null @@ -1,72 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("posts", table => { - table - .uuid("postId") - .notNullable() - .unique() - .primary(); - table.string("title", 100).notNullable(); - table - .string("slug", 150) - .notNullable() - .unique(); - table.string("slugId", 20).notNullable(); - table.text("contentMarkdown"); - table - .uuid("userId") - .references("userId") - .inTable("users") - .notNullable(); - table - .timestamp("createdAt") - .defaultTo(knex.fn.now()) - .notNullable(); - table - .timestamp("updatedAt") - .defaultTo(knex.fn.now()) - .notNullable(); - table.comment("Storing posts data"); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: posts" - }); - }) - .catch(err => { - logger.log({ - level: "error", - message: err - }); - }); -}; - -exports.down = knex => { - return knex.schema - .hasTable("posts") - .then(exists => { - if (exists) { - return knex.schema - .alterTable("posts", table => { - table.dropForeign("userId"); - }) - .dropTable("posts"); - } - }) - .then(() => { - logger.log({ - level: "info", - message: "Dropping table: posts" - }); - }) - .catch(err => { - logger.log({ - level: "error", - message: err - }); - }); -}; diff --git a/packages/server/database/migrations/20200906184116_initial_votes_table.js b/packages/server/database/migrations/20200906184116_initial_votes_table.js deleted file mode 100644 index f5ce7eea0b..0000000000 --- a/packages/server/database/migrations/20200906184116_initial_votes_table.js +++ /dev/null @@ -1,68 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("votes", table => { - table - .uuid("voteId") - .notNullable() - .unique() - .primary(); - table - .uuid("userId") - .references("userId") - .inTable("users") - .notNullable(); - table - .uuid("postId") - .references("postId") - .inTable("posts") - .onDelete("cascade") - .notNullable(); - table - .timestamp("createdAt") - .defaultTo(knex.fn.now()) - .notNullable(); - table.comment("Storing post votes data"); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: votes" - }); - }) - .catch(err => { - logger.log({ - level: "error", - message: err - }); - }); -}; - -exports.down = knex => { - return knex.schema - .hasTable("votes") - .then(exists => { - if (exists) { - return knex.schema - .alterTable("votes", table => { - table.dropForeign("userId"); - table.dropForeign("postId"); - }) - .dropTable("votes"); - } - }) - .then(() => { - logger.log({ - level: "info", - message: "Dropping table: votes" - }); - }) - .catch(err => { - logger.log({ - level: "error", - message: err - }); - }); -}; diff --git a/packages/server/database/migrations/20200906184214_initial_boards_table.js b/packages/server/database/migrations/20200906184214_initial_boards_table.js deleted file mode 100644 index 8283ace950..0000000000 --- a/packages/server/database/migrations/20200906184214_initial_boards_table.js +++ /dev/null @@ -1,64 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("boards", table => { - table - .uuid("boardId") - .notNullable() - .unique() - .primary(); - table.string("name", 50).notNullable(); - table - .string("url", 50) - .notNullable() - .unique(); - table.string("color", 6).notNullable(); - table.boolean("display").defaultTo(false); - table.boolean("view_voters").defaultTo(true); - table - .timestamp("createdAt") - .defaultTo(knex.fn.now()) - .notNullable(); - table - .timestamp("updatedAt") - .defaultTo(knex.fn.now()) - .notNullable(); - table.comment("Storing boards data"); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: boards" - }); - }) - .catch(err => { - logger.log({ - level: "error", - message: err - }); - }); -}; - -exports.down = knex => { - return knex.schema - .hasTable("boards") - .then(exists => { - if (exists) { - return knex.schema.dropTable("boards"); - } - }) - .then(() => { - logger.log({ - level: "info", - message: "Dropping table: boards" - }); - }) - .catch(err => { - logger.log({ - level: "error", - message: err - }); - }); -}; diff --git a/packages/server/database/migrations/20200913090914_boardId_column_to_posts_table.js b/packages/server/database/migrations/20200913090914_boardId_column_to_posts_table.js deleted file mode 100644 index c4a93b9e52..0000000000 --- a/packages/server/database/migrations/20200913090914_boardId_column_to_posts_table.js +++ /dev/null @@ -1,49 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .table("posts", table => { - table - .uuid("boardId") - .references("boardId") - .inTable("boards") - .onDelete("set null"); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Adding column: boardId in posts" - }); - }) - .catch(err => { - logger.log({ - level: "error", - message: err - }); - }); -}; - -exports.down = knex => { - return knex.schema - .hasColumn("posts", "boardId") - .then(exists => { - if (exists) { - return knex.schema.table("posts", table => { - table.dropColumn("boardId"); - }); - } - }) - .then(() => { - logger.log({ - level: "info", - message: "Dropping column: boardId in posts" - }); - }) - .catch(err => { - logger.log({ - level: "error", - message: err - }); - }); -}; diff --git a/packages/server/database/migrations/20201004110523_create-settings-table.js b/packages/server/database/migrations/20201004110523_create-settings-table.js deleted file mode 100644 index f1ee2a7974..0000000000 --- a/packages/server/database/migrations/20201004110523_create-settings-table.js +++ /dev/null @@ -1,50 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("settings", table => { - table.string("title"); - table.string("description"); - table.string("logo"); - table.string("icon"); - table.string("accentColor", 6); - table.string("googleAnalyticsId"); - table.boolean("isPoweredBy").defaultTo(true); - table.boolean("allowSignup").defaultTo(true); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: settings" - }); - }) - .catch(err => { - logger.error({ - code: "DATABASE_MIGRATIONS", - err - }); - }); -}; - -exports.down = knex => { - return knex.schema - .hasTable("settings") - .then(exists => { - if (exists) { - return knex.schema.dropTable("settings"); - } - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Dropping table: settings" - }); - }) - .catch(err => { - logger.error({ - code: "DATABASE_MIGRATIONS", - err - }); - }); -}; diff --git a/packages/server/database/migrations/20201026113105_email-verification-table.js b/packages/server/database/migrations/20201026113105_email-verification-table.js deleted file mode 100644 index e732b4398d..0000000000 --- a/packages/server/database/migrations/20201026113105_email-verification-table.js +++ /dev/null @@ -1,51 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("emailVerification", table => { - table - .string("email", 320) - .notNullable() - .unique() - .primary() - .references("email") - .inTable("users") - .onDelete("cascade"); - table - .string("token", 320) - .notNullable() - .unique(); - table - .timestamp("createdAt") - .defaultTo(knex.fn.now()) - .notNullable(); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: emailVerification" - }); - }) - .catch(err => { - logger.error(err); - }); -}; - -exports.down = knex => { - return knex.schema - .hasTable("emailVerification") - .then(exists => { - if (exists) { - return knex.schema.dropTable("emailVerification"); - } - }) - .then(() => { - logger.info({ - message: "Dropping table: emailVerification" - }); - }) - .catch(err => { - logger.error(err); - }); -}; diff --git a/packages/server/database/migrations/20201027095358_reset-password-table.js b/packages/server/database/migrations/20201027095358_reset-password-table.js deleted file mode 100644 index b6b6afe587..0000000000 --- a/packages/server/database/migrations/20201027095358_reset-password-table.js +++ /dev/null @@ -1,51 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("resetPassword", table => { - table - .string("email", 320) - .notNullable() - .unique() - .primary() - .references("email") - .inTable("users") - .onDelete("cascade"); - table - .string("token", 320) - .notNullable() - .unique(); - table - .timestamp("createdAt") - .defaultTo(knex.fn.now()) - .notNullable(); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: resetPassword" - }); - }) - .catch(err => { - logger.error(err); - }); -}; - -exports.down = knex => { - return knex.schema - .hasTable("resetPassword") - .then(exists => { - if (exists) { - return knex.schema.dropTable("resetPassword"); - } - }) - .then(() => { - logger.info({ - message: "Dropping table: resetPassword" - }); - }) - .catch(err => { - logger.error(err); - }); -}; diff --git a/packages/server/database/migrations/20201120175923_seed-settings.js b/packages/server/database/migrations/20201120175923_seed-settings.js deleted file mode 100644 index 1a698c67d5..0000000000 --- a/packages/server/database/migrations/20201120175923_seed-settings.js +++ /dev/null @@ -1,44 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex("settings") - .insert([ - { - title: "LogChimp", - description: "Track user feedback to build better products", - accentColor: "484d7c", - logo: "https://cdn.logchimp.codecarrot.net/logchimp_circular_logo.png", - icon: "https://cdn.logchimp.codecarrot.net/logchimp_circular_logo.png", - isPoweredBy: true - } - ]) - .then(() => { - logger.info({ - code: "DATABASE_SEEDS", - message: "Insert data: settings" - }); - }) - .catch(err => { - logger.error({ - code: "DATABASE_SEEDS", - err - }); - }); -}; - -exports.down = knex => { - return knex("settings") - .delete() - .then(() => { - logger.info({ - message: "Drop data: settings" - }); - }) - .catch(err => { - logger.error({ - code: "DATABASE_SEEDS", - err - }); - }); -}; diff --git a/packages/server/database/migrations/20201125151704_permissions-table.js b/packages/server/database/migrations/20201125151704_permissions-table.js deleted file mode 100644 index 394726cbc6..0000000000 --- a/packages/server/database/migrations/20201125151704_permissions-table.js +++ /dev/null @@ -1,42 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("permissions", table => { - table - .uuid("id") - .notNullable() - .unique() - .primary(); - table.string("name", 30); - table.string("type", 20).notNullable(); - table.string("action", 10).notNullable(); - table - .timestamp("created_at") - .notNullable() - .defaultTo(knex.fn.now()); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: permissions" - }); - }) - .catch(err => { - logger.error(err); - }); -}; - -exports.down = knex => { - return knex.schema - .dropTable("permissions") - .then(() => { - logger.info({ - message: "Dropping table: permissions" - }); - }) - .catch(err => { - logger.error(err); - }); -}; diff --git a/packages/server/database/migrations/20201125152807_roles-table.js b/packages/server/database/migrations/20201125152807_roles-table.js deleted file mode 100644 index 9e7b8ab77d..0000000000 --- a/packages/server/database/migrations/20201125152807_roles-table.js +++ /dev/null @@ -1,45 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("roles", table => { - table - .uuid("id") - .notNullable() - .unique() - .primary(); - table.string("name", 30).notNullable(); - table.string("description", 50); - table - .timestamp("created_at") - .notNullable() - .defaultTo(knex.fn.now()); - table - .timestamp("updated_at") - .defaultTo(knex.fn.now()) - .notNullable(); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: roles" - }); - }) - .catch(err => { - logger.error(err); - }); -}; - -exports.down = knex => { - return knex.schema - .dropTable("roles") - .then(() => { - logger.info({ - message: "Dropping table: roles" - }); - }) - .catch(err => { - logger.error(err); - }); -}; diff --git a/packages/server/database/migrations/20201125214155_roles-user-table.js b/packages/server/database/migrations/20201125214155_roles-user-table.js deleted file mode 100644 index 1185698cdb..0000000000 --- a/packages/server/database/migrations/20201125214155_roles-user-table.js +++ /dev/null @@ -1,46 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("roles_users", table => { - table - .uuid("id") - .notNullable() - .primary(); - table - .uuid("role_id") - .notNullable() - .references("id") - .inTable("roles") - .onDelete("cascade"); - table - .uuid("user_id") - .notNullable() - .references("userId") - .inTable("users") - .onDelete("cascade"); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: roles_users" - }); - }) - .catch(err => { - logger.error(err); - }); -}; - -exports.down = knex => { - return knex.schema - .dropTable("roles_users") - .then(() => { - logger.info({ - message: "Dropping table: roles_users" - }); - }) - .catch(err => { - logger.error(err); - }); -}; diff --git a/packages/server/database/migrations/20201125215955_permissions-roles-table.js b/packages/server/database/migrations/20201125215955_permissions-roles-table.js deleted file mode 100644 index 379e92303c..0000000000 --- a/packages/server/database/migrations/20201125215955_permissions-roles-table.js +++ /dev/null @@ -1,47 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("permissions_roles", table => { - table - .uuid("id") - .notNullable() - .unique() - .primary(); - table - .uuid("permission_id") - .notNullable() - .references("id") - .inTable("permissions") - .onDelete("cascade"); - table - .uuid("role_id") - .notNullable() - .references("id") - .inTable("roles") - .onDelete("cascade"); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: permissions_roles" - }); - }) - .catch(err => { - logger.error(err); - }); -}; - -exports.down = knex => { - return knex.schema - .dropTable("permissions_roles") - .then(() => { - logger.info({ - message: "Dropping table: permissions_roles" - }); - }) - .catch(err => { - logger.error(err); - }); -}; diff --git a/packages/server/database/migrations/20201224104136_add-roadmaps-table.js b/packages/server/database/migrations/20201224104136_add-roadmaps-table.js deleted file mode 100644 index 08589d415f..0000000000 --- a/packages/server/database/migrations/20201224104136_add-roadmaps-table.js +++ /dev/null @@ -1,55 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("roadmaps", table => { - table - .uuid("id") - .notNullable() - .unique() - .primary(); - table.string("name", 50).notNullable(); - table - .string("url", 50) - .notNullable() - .unique(); - table.integer("index").notNullable(); - table.string("color", 6).notNullable(); - table.boolean("display").defaultTo(false); - table - .timestamp("created_at") - .defaultTo(knex.fn.now()) - .notNullable(); - table - .timestamp("updated_at") - .defaultTo(knex.fn.now()) - .notNullable(); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: roadmaps" - }); - }) - .catch(err => { - logger.error({ - message: err - }); - }); -}; - -exports.down = knex => { - return knex.schema - .dropTable("roadmaps") - .then(() => { - logger.info({ - message: "Dropping table: roadmaps" - }); - }) - .catch(err => { - logger.error({ - message: err - }); - }); -}; diff --git a/packages/server/database/migrations/20201224143827_add-roadmap-id-to-posts-table.js b/packages/server/database/migrations/20201224143827_add-roadmap-id-to-posts-table.js deleted file mode 100644 index 2d96895c57..0000000000 --- a/packages/server/database/migrations/20201224143827_add-roadmap-id-to-posts-table.js +++ /dev/null @@ -1,41 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .table("posts", table => { - table - .uuid("roadmap_id") - .references("id") - .inTable("roadmaps") - .onDelete("set null"); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Add column: roadmap_id in posts" - }); - }) - .catch(err => { - logger.error({ - message: err - }); - }); -}; - -exports.down = knex => { - return knex.schema - .table("posts", table => { - table.dropColumn("roadmap_id"); - }) - .then(() => { - logger.info({ - message: "Drop column: roadmap_id in posts" - }); - }) - .catch(err => { - logger.error({ - message: err - }); - }); -}; diff --git a/packages/server/database/migrations/20210116165906_insert-permissions.js b/packages/server/database/migrations/20210116165906_insert-permissions.js deleted file mode 100644 index ec929b4cda..0000000000 --- a/packages/server/database/migrations/20210116165906_insert-permissions.js +++ /dev/null @@ -1,39 +0,0 @@ -const { addPermission, removePermission } = require("../utils"); - -const permissions = [ - "post:read", - "post:create", - "post:update", - "post:destroy", - "board:read", - "board:create", - "board:update", - "board:destroy", - "board:assign", - "board:unassign", - "vote:create", - "vote:destroy", - "vote:assign", - "vote:unassign", - "roadmap:read", - "roadmap:create", - "roadmap:update", - "roadmap:destroy", - "roadmap:assign", - "roadmap:unassign", - "dashboard:read", - "role:read", - "role:create", - "role:update", - "role:destroy", - "role:assign", - "role:unassign" -]; - -exports.up = knex => { - return Promise.all([addPermission(knex, permissions)]); -}; - -exports.down = knex => { - return Promise.all([removePermission(knex, permissions)]); -}; diff --git a/packages/server/database/migrations/20210118101323_insert-everyone-role.js b/packages/server/database/migrations/20210118101323_insert-everyone-role.js deleted file mode 100644 index ed10dfb7bb..0000000000 --- a/packages/server/database/migrations/20210118101323_insert-everyone-role.js +++ /dev/null @@ -1,47 +0,0 @@ -const { v4: uuidv4 } = require("uuid"); - -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex - .insert([ - { - id: uuidv4(), - name: "@everyone", - description: "All users" - } - ]) - .into("roles") - .then(() => { - logger.info({ - code: "DATABASE_SEEDS", - message: "Insert data: '@everyone' role" - }); - }) - .catch(err => { - logger.error({ - code: "DATABASE_SEEDS", - message: err.message - }); - }); -}; - -exports.down = async knex => { - try { - await knex("roles") - .delete() - .where({ - name: "@everyone" - }); - - logger.info({ - message: "Drop data: '@everyone' role" - }); - } catch (err) { - logger.error({ - code: "DATABASE_SEEDS", - message: err.message - }); - } -}; diff --git a/packages/server/database/migrations/20210118102306_assign-permission-to-everyone-role.js b/packages/server/database/migrations/20210118102306_assign-permission-to-everyone-role.js deleted file mode 100644 index 8b8a416e2c..0000000000 --- a/packages/server/database/migrations/20210118102306_assign-permission-to-everyone-role.js +++ /dev/null @@ -1,79 +0,0 @@ -const { v4: uuidv4 } = require("uuid"); - -// utils -const logger = require("../../utils/logger"); - -const everyoneRole = async knex => { - return await knex("roles") - .select("id") - .where({ - name: "@everyone" - }) - .first(); -}; - -const getPermId = (list, perm) => { - const type = perm.split(":")[0]; - const action = perm.split(":")[1]; - return list.find(item => item.type === type && item.action === action).id; -}; - -exports.up = async knex => { - try { - const role = await everyoneRole(knex); - const roleId = role.id; - - const permissions = await knex("permissions").select(); - - await knex - .insert([ - { - id: uuidv4(), - role_id: roleId, - permission_id: getPermId(permissions, "post:create") - }, - { - id: uuidv4(), - role_id: roleId, - permission_id: getPermId(permissions, "vote:create") - }, - { - id: uuidv4(), - role_id: roleId, - permission_id: getPermId(permissions, "vote:destroy") - } - ]) - .into("permissions_roles"); - - logger.info({ - message: "Insert data: '@everyone' role permissions" - }); - } catch (err) { - logger.error({ - code: "DATABASE_SEEDS", - message: err.message - }); - } -}; - -exports.down = async knex => { - try { - const role = await everyoneRole(knex); - const roleId = role.id; - - await knex("permissions_roles") - .delete() - .where({ - role_id: roleId - }); - - logger.info({ - message: "Drop data: '@everyone' role permissions" - }); - } catch (err) { - logger.error({ - code: "DATABASE_SEEDS", - message: err.message - }); - } -}; diff --git a/packages/server/database/migrations/20210619173428_create-posts_comments-table.js b/packages/server/database/migrations/20210619173428_create-posts_comments-table.js deleted file mode 100644 index b1f1c3ca1b..0000000000 --- a/packages/server/database/migrations/20210619173428_create-posts_comments-table.js +++ /dev/null @@ -1,50 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("posts_comments", table => { - table - .uuid("id") - .notNullable() - .primary(); - table - .uuid("parent_id") - .references("id") - .inTable("posts_comments"); - table.uuid("activity_id").notNullable(); - table.string("body", 1000).notNullable(); - table.boolean("is_edited").defaultTo(false); - table.boolean("is_spam").defaultTo(false); - table.boolean("is_internal").defaultTo(false); - table.timestamp("created_at").notNullable(); - table.timestamp("updated_at").notNullable(); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: posts_comments" - }); - }) - .catch(err => { - logger.error(err); - }); -}; - -exports.down = knex => { - return knex.schema - .hasTable("posts_comments") - .then(exists => { - if (exists) { - return knex.schema.dropTable("posts_comments"); - } - }) - .then(() => { - logger.info({ - message: "Dropping table: posts_comments" - }); - }) - .catch(err => { - logger.error(err); - }); -}; diff --git a/packages/server/database/migrations/20210619173759_create-posts_activity-table.js b/packages/server/database/migrations/20210619173759_create-posts_activity-table.js deleted file mode 100644 index cf9f213f16..0000000000 --- a/packages/server/database/migrations/20210619173759_create-posts_activity-table.js +++ /dev/null @@ -1,55 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .createTable("posts_activity", table => { - table - .uuid("id") - .notNullable() - .primary(); - table.string("type", 50).notNullable(); - table - .uuid("posts_comments_id") - .references("id") - .inTable("posts_comments"); - table - .uuid("post_id") - .references("postId") - .inTable("posts") - .notNullable(); - table - .uuid("author_id") - .references("userId") - .inTable("users") - .notNullable(); - table.timestamp("created_at").notNullable(); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating table: posts_activity" - }); - }) - .catch(err => { - logger.error(err); - }); -}; - -exports.down = knex => { - return knex.schema - .hasTable("posts_activity") - .then(exists => { - if (exists) { - return knex.schema.dropTable("posts_activity"); - } - }) - .then(() => { - logger.info({ - message: "Dropping table: posts_activity" - }); - }) - .catch(err => { - logger.error(err); - }); -}; diff --git a/packages/server/database/migrations/20210626162044_insert-labs-post_activity.js b/packages/server/database/migrations/20210626162044_insert-labs-post_activity.js deleted file mode 100644 index f704c39b57..0000000000 --- a/packages/server/database/migrations/20210626162044_insert-labs-post_activity.js +++ /dev/null @@ -1,44 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = knex => { - return knex.schema - .table("settings", table => { - table.text("labs").defaultTo("{}"); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Insert column 'labs' into settings" - }); - }) - .then(() => { - return knex("settings").update({ - labs: knex.raw("labs::jsonb || '{\"comments\": false}'") - }); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Insert 'comments' into labs column" - }); - }) - .catch(err => { - logger.error(err); - }); -}; - -exports.down = knex => { - return knex.schema - .table("settings", table => { - table.dropColumn("labs"); - }) - .then(() => { - logger.info({ - message: "Dropping column 'labs' from settings" - }); - }) - .catch(err => { - logger.error(err); - }); -}; diff --git a/packages/server/database/migrations/20210718172153_add-settings-permission.js b/packages/server/database/migrations/20210718172153_add-settings-permission.js deleted file mode 100644 index db86de7a8c..0000000000 --- a/packages/server/database/migrations/20210718172153_add-settings-permission.js +++ /dev/null @@ -1,11 +0,0 @@ -const { addPermission, removePermission } = require("../utils"); - -const permissions = ["settings:read", "settings:update"]; - -exports.up = knex => { - return Promise.all([addPermission(knex, permissions)]); -}; - -exports.down = knex => { - return Promise.all([removePermission(knex, permissions)]); -}; diff --git a/packages/server/database/migrations/20210731141417_add-developer_mode-to-settings.js b/packages/server/database/migrations/20210731141417_add-developer_mode-to-settings.js deleted file mode 100644 index a64176a37b..0000000000 --- a/packages/server/database/migrations/20210731141417_add-developer_mode-to-settings.js +++ /dev/null @@ -1,40 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -exports.up = (knex) => { - return knex.schema - .table("settings", (table) => { - table.boolean("developer_mode").defaultTo(false); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Adding column: developer_mode in settings" - }); - }) - .catch((err) => { - logger.log({ - level: "error", - message: err - }); - }); -}; - -exports.down = (knex) => { - return knex.schema - .table("settings", (table) => { - table.dropColumn("developer_mode"); - }) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Dropping column: developer_mode in settings" - }); - }) - .catch((err) => { - logger.log({ - level: "error", - message: err - }); - }); -}; diff --git a/packages/server/database/migrations/20210808173003_add-notes-to-users-table.js b/packages/server/database/migrations/20210808173003_add-notes-to-users-table.js deleted file mode 100644 index 9c7b6effbb..0000000000 --- a/packages/server/database/migrations/20210808173003_add-notes-to-users-table.js +++ /dev/null @@ -1,45 +0,0 @@ -// utils -const logger = require('../../utils/logger') - -exports.up = (knex) => { - return knex.schema - .table('users', (table) => { - table.text('notes') - }) - .then(() => { - logger.info({ - code: 'DATABASE_MIGRATIONS', - message: 'Adding column: notes in users' - }) - }) - .catch((err) => { - logger.log({ - level: 'error', - message: err - }) - }) -} - -exports.down = (knex) => { - return knex.schema - .hasColumn('users', 'notes') - .then((exists) => { - if (exists) { - return knex.schema.table('users', (table) => { - table.dropColumn('notes') - }) - } - }) - .then(() => { - logger.log({ - level: 'info', - message: 'Dropping column: notes in users' - }) - }) - .catch((err) => { - logger.log({ - level: 'error', - message: err - }) - }) -} diff --git a/packages/server/database/migrations/20210829035703_add-roles_users-unique-index.js b/packages/server/database/migrations/20210829035703_add-roles_users-unique-index.js deleted file mode 100644 index 2b8157d664..0000000000 --- a/packages/server/database/migrations/20210829035703_add-roles_users-unique-index.js +++ /dev/null @@ -1,39 +0,0 @@ -// utils -const logger = require("../../utils/logger"); - -/** - * IF EXISTS used as fail-safe for dropping the CONSTRAINT 'role_id_user_id_unique_index' - * on ID in roles_users table. The unique index have already been removed from '20201125214155_roles-user-table' migration. - */ -exports.up = (knex) => { - return knex - .raw( - ` - CREATE UNIQUE INDEX "role_id_user_id_unique_index" ON "roles_users"("role_id", "user_id"); - - ALTER TABLE roles_users DROP CONSTRAINT IF EXISTS roles_users_id_unique; - ` - ) - .then(() => { - logger.info({ - code: "DATABASE_MIGRATIONS", - message: "Creating index: role_id_user_id_unique_index", - }); - }) - .catch((err) => { - logger.error(err); - }); -}; - -exports.down = (knex) => { - return knex - .raw("DROP INDEX role_id_user_id_unique_index;") - .then(() => { - logger.info({ - message: "Dropping index: role_id_user_id_unique_index", - }); - }) - .catch((err) => { - logger.error(err); - }); -}; diff --git a/packages/server/routes/v1/auth.js b/packages/server/routes/v1/auth.js deleted file mode 100644 index 1972c3595f..0000000000 --- a/packages/server/routes/v1/auth.js +++ /dev/null @@ -1,48 +0,0 @@ -// modules -const express = require("express"); -const router = express.Router(); - -// controller -const auth = require("../../controllers/auth"); - -// middleware -const exists = require("../../middlewares/userExists"); -const mailConfigExists = require("../../middlewares/mailConfigExists"); -const validateEmailToken = require("../../middlewares/validateEmailToken"); - -router.post("/auth/signup", mailConfigExists, auth.signup); -router.post("/auth/login", exists, auth.login); - -router.post("/auth/setup", mailConfigExists, auth.setup); -router.get("/auth/setup", auth.isSiteSetup); - -// email -router.post("/auth/email/verify", mailConfigExists, exists, auth.email.verify); -router.post( - "/auth/email/validate", - validateEmailToken, - exists, - auth.email.validate -); - -// password -router.post( - "/auth/password/reset", - mailConfigExists, - exists, - auth.password.reset -); -router.post( - "/auth/password/validateToken", - validateEmailToken, - exists, - auth.password.validateToken -); -router.post( - "/auth/password/set", - validateEmailToken, - exists, - auth.password.set -); - -module.exports = router; diff --git a/packages/server/routes/v1/boards.js b/packages/server/routes/v1/boards.js deleted file mode 100644 index e5946c489b..0000000000 --- a/packages/server/routes/v1/boards.js +++ /dev/null @@ -1,23 +0,0 @@ -// modules -const express = require("express"); -const router = express.Router(); - -// controller -const boards = require("../../controllers/boards"); - -// middleware -const middleware = require("../../middlewares"); -const exists = require("../../middlewares/boardExists"); - -router.get("/boards", boards.filter); -router.get("/boards/get", boards.get); -router.get("/boards/:url", exists, boards.boardByUrl); -router.get("/boards/search/:name", middleware.apiAuth, boards.searchBoard); - -router.post("/boards/check-name", middleware.apiAuth, boards.checkName); -router.post("/boards", middleware.apiAuth, boards.create); -router.patch("/boards", middleware.apiAuth, exists, boards.updateBoard); - -router.delete("/boards", middleware.apiAuth, exists, boards.deleteById); - -module.exports = router; diff --git a/packages/server/routes/v1/index.js b/packages/server/routes/v1/index.js deleted file mode 100644 index 6f3998f989..0000000000 --- a/packages/server/routes/v1/index.js +++ /dev/null @@ -1,27 +0,0 @@ -// modules -const express = require("express"); -const router = express.Router(); - -// requiring all routes -const auth = require("./auth"); -const posts = require("./posts"); -const votes = require("./votes"); -const users = require("./users"); -const boards = require("./boards"); -const settings = require("./settings"); -const roadmaps = require("./roadmaps"); -const roles = require("./roles"); - -router.use( - "/api/v1", - auth, - posts, - votes, - users, - boards, - settings, - roadmaps, - roles -); - -module.exports = router; diff --git a/packages/server/routes/v1/posts.js b/packages/server/routes/v1/posts.js deleted file mode 100644 index d4acfa7019..0000000000 --- a/packages/server/routes/v1/posts.js +++ /dev/null @@ -1,40 +0,0 @@ -// modules -const express = require("express"); -const router = express.Router(); - -// controller -const post = require("../../controllers/post"); - -// middleware -const middleware = require("../../middlewares"); -const exists = require("../../middlewares/postExists"); - -router.post("/posts/get", post.filterPost); -router.post("/posts/slug", exists, post.postBySlug); - -router.post("/posts", middleware.apiAuth, post.create); -router.patch("/posts", middleware.apiAuth, exists, post.updatePost); - -router.delete("/posts", middleware.apiAuth, exists, post.deleteById); - -// post activity -router.get("/posts/:post_id/activity", post.activity.get); - -// post comment -router.post( - "/posts/:post_id/comments", - middleware.apiAuth, - post.comments.create -); -router.put( - "/posts/:post_id/comments/:comment_id", - middleware.apiAuth, - post.comments.update -); -router.delete( - "/posts/:post_id/comments/:comment_id", - middleware.apiAuth, - post.comments.destroy -); - -module.exports = router; diff --git a/packages/server/routes/v1/roadmaps.js b/packages/server/routes/v1/roadmaps.js deleted file mode 100644 index 69e0fd44f9..0000000000 --- a/packages/server/routes/v1/roadmaps.js +++ /dev/null @@ -1,27 +0,0 @@ -// modules -const express = require("express"); -const router = express.Router(); - -// controller -const roadmaps = require("../../controllers/roadmaps"); - -// middleware -const middleware = require("../../middlewares"); -const exists = require("../../middlewares/roadmapExists"); - -router.get("/roadmaps", roadmaps.filter); -router.get("/roadmaps/:url", exists, roadmaps.roadmapByUrl); -router.get( - "/roadmaps/search/:name", - middleware.apiAuth, - roadmaps.searchRoadmap -); - -router.post("/roadmaps", middleware.apiAuth, roadmaps.create); - -router.patch("/roadmaps", middleware.apiAuth, exists, roadmaps.updateRoadmap); -router.patch("/roadmaps/sort", middleware.apiAuth, roadmaps.sort); - -router.delete("/roadmaps", middleware.apiAuth, exists, roadmaps.deleteById); - -module.exports = router; diff --git a/packages/server/routes/v1/roles.js b/packages/server/routes/v1/roles.js deleted file mode 100644 index 5182098b1d..0000000000 --- a/packages/server/routes/v1/roles.js +++ /dev/null @@ -1,29 +0,0 @@ -// modules -const express = require("express"); -const router = express.Router(); - -// controller -const roles = require("../../controllers/roles"); - -// middleware -const middleware = require("../../middlewares"); -const roleExists = require("../../middlewares/roleExists"); - -router.get("/roles", middleware.apiAuth, roles.get); -router.get("/roles/:id", middleware.apiAuth, roleExists, roles.getOne); - -router.post("/roles", middleware.apiAuth, roles.create); - -router.patch("/roles", middleware.apiAuth, roleExists, roles.update); - -// BETA: Assign role to a user -// todo: add userExists middleware -// todo: add roleExists middleware -router.put("/roles/:role_id/users/:user_id", middleware.apiAuth, roles.addRoleToUser); - -// BETA: Unassign role from a user -// todo: add userExists middleware -// todo: add roleExists middleware -router.delete("/roles/:role_id/users/:user_id", middleware.apiAuth, roles.deleteRoleFromUser); - -module.exports = router; diff --git a/packages/server/routes/v1/settings.js b/packages/server/routes/v1/settings.js deleted file mode 100644 index 681494b13d..0000000000 --- a/packages/server/routes/v1/settings.js +++ /dev/null @@ -1,42 +0,0 @@ -// modules -const path = require("path"); -const express = require("express"); -const router = express.Router(); -const multer = require("multer"); - -const storage = multer.diskStorage({ - destination: (req, file, cb) => { - cb(null, path.resolve(__dirname, "../../../content/images")); - }, - filename: (req, file, cb) => { - const fileExtension = file.originalname.split(".")[ - file.originalname.split(".").length - 1 - ]; - const fileName = Date.now().toString(32); - - cb(null, `${fileName}.${fileExtension}`); - } -}); - -const upload = multer({ - storage -}); - -// controller -const settings = require("../../controllers/settings"); - -// middleware -const middlewares = require("../../middlewares"); - -router.get("/settings/site", settings.siteSettings); -router.patch("/settings/site", middlewares.apiAuth, settings.update); -router.post( - "/settings/update-logo", - middlewares.apiAuth, - upload.single("logo", 1), - settings.updateLogo -); -router.get("/settings/labs", settings.getLabs); -router.patch("/settings/labs", middlewares.apiAuth, settings.updateLabs); - -module.exports = router; diff --git a/packages/server/routes/v1/users.js b/packages/server/routes/v1/users.js deleted file mode 100644 index 7d1b64af7b..0000000000 --- a/packages/server/routes/v1/users.js +++ /dev/null @@ -1,27 +0,0 @@ -// modules -const express = require("express"); -const router = express.Router(); - -// controller -const users = require("../../controllers/users"); - -// middleware -const middleware = require("../../middlewares"); - -router.get("/users", users.filter); -router.get("/users/profile", middleware.apiAuth, users.getProfile); -router.patch("/users/profile", middleware.apiAuth, users.updateProfile); - -router.get("/users/permissions", middleware.apiAuth, users.getUserPermissions); -router.get("/users/dashboard", middleware.apiAuth, users.accessDashboard); - -// TODO: create permission for user:read, user:update, user:create, user:delete -// router.get("/users/get", middleware.apiAuth, users.accessDashboard); -// router.get("/users/:user_id/get", middleware.apiAuth, users.getUserInfo); -// router.patch( -// "/users/:user_id/update", -// middleware.apiAuth, -// users.updateUserInfo -// ); - -module.exports = router; diff --git a/packages/server/routes/v1/votes.js b/packages/server/routes/v1/votes.js deleted file mode 100644 index 50f40106ea..0000000000 --- a/packages/server/routes/v1/votes.js +++ /dev/null @@ -1,14 +0,0 @@ -// modules -const express = require("express"); -const router = express.Router(); - -// controller -const votes = require("../../controllers/votes"); - -// middleware -const middleware = require("../../middlewares"); - -router.post("/votes", middleware.apiAuth, votes.add); -router.delete("/votes", middleware.apiAuth, votes.remove); - -module.exports = router; diff --git a/packages/server/services/auth/createUser.js b/packages/server/services/auth/createUser.js deleted file mode 100644 index e0f88b6c74..0000000000 --- a/packages/server/services/auth/createUser.js +++ /dev/null @@ -1,127 +0,0 @@ -// modules -const { v4: uuidv4 } = require("uuid"); -const md5 = require("md5"); - -// database -const database = require("../../database"); - -// services -const verifyEmail = require("../../services/auth/verifyEmail"); -const { createToken } = require("../../services/token.service"); - -// utils -const { hashPassword } = require("../../utils/password"); -const logger = require("../../utils/logger"); -const error = require("../../errorResponse.json"); - -/** - * Add user to 'users' database table - * - * @param {any} req - * @param {any} res - * @param {any} next - * @param {object} userData - User data to create account - * @param {string} userData.email - User email address - * @param {string} userData.password - User password - * @param {string} userData.name - User name - * @returns {object|null} - Returning user data object from database or null - */ -const createUser = async (req, res, next, userData) => { - // generate user unique identification - const userId = uuidv4(userData.email); - - const name = userData.name; - - // get username from email address - const username = userData.email.split("@")[0]; - - // get avatar by hashing email - const userMd5Hash = md5(userData.email); - const avatar = `https://www.gravatar.com/avatar/${userMd5Hash}`; - - // hash password - const hashedPassword = hashPassword(userData.password); - - try { - const { - rows: [getUser] - } = await database.raw( - ` - SELECT EXISTS ( - SELECT * FROM users WHERE LOWER(email) = LOWER(:email) - ) - `, - { - email: userData.email - } - ); - - const userExists = getUser.exists; - if (userExists) { - res.status(409).send({ - message: error.middleware.user.userExists, - code: "USER_EXISTS" - }); - return null; - } - - // insert user to database - const [newUser] = await database - .insert({ - userId, - name, - username, - email: userData.email, - password: hashedPassword, - avatar - }) - .into("users") - .returning(["userId", "name", "username", "email", "avatar"]); - - if (!newUser) { - return null; - } - - // assign '@everyone' role - const getRole = await database - .select() - .from("roles") - .where({ - name: "@everyone" - }) - .first(); - - await database - .insert({ - id: uuidv4(), - role_id: getRole.id, - user_id: newUser.userId - }) - .into("roles_users"); - - const tokenPayload = { - userId: newUser.userId, - email: newUser.email - }; - // send email verification - const url = req.headers.origin; - await verifyEmail(url, tokenPayload); - - // create auth token - const authToken = createToken(tokenPayload, { - expiresIn: "2d" - }); - - return { - authToken, - ...newUser - }; - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; - -module.exports = createUser; diff --git a/packages/server/services/auth/passwordReset.js b/packages/server/services/auth/passwordReset.js deleted file mode 100644 index 6c566eec07..0000000000 --- a/packages/server/services/auth/passwordReset.js +++ /dev/null @@ -1,56 +0,0 @@ -// database -const database = require("../../database"); - -// services -const { mail, generateContent } = require("../../services/mail"); -const { createToken } = require("../../services/token.service"); - -// utils -const logger = require("../../utils/logger"); - -const passwordReset = async (url, tokenPayload) => { - const token = createToken(tokenPayload, { - expiresIn: "2h" - }); - - try { - // remove existing resetPassword request - await database - .delete() - .from("resetPassword") - .where({ - email: tokenPayload.email - }); - - const insertPasswordResetToken = await database - .insert({ - email: tokenPayload.email, - token - }) - .into("resetPassword") - .returning("*"); - - const urlObject = new URL(url); - const passwordResetMailContent = await generateContent("reset", { - url: urlObject.origin, - domain: urlObject.host, - resetLink: `${urlObject.origin}/password-reset/confirm/?token=${token}` - }); - - const noReplyEmail = `noreply@${urlObject.host}`; - - await mail.sendMail({ - from: noReplyEmail, - to: tokenPayload.email, - subject: "Reset your LogChimp password", - text: passwordResetMailContent.text, - html: passwordResetMailContent.html - }); - - return insertPasswordResetToken[0]; - } catch (err) { - logger.error(err); - } -}; - -module.exports = passwordReset; diff --git a/packages/server/services/auth/verifyEmail.js b/packages/server/services/auth/verifyEmail.js deleted file mode 100644 index 86ad61d791..0000000000 --- a/packages/server/services/auth/verifyEmail.js +++ /dev/null @@ -1,55 +0,0 @@ -// database -const database = require("../../database"); - -// services -const { mail, generateContent } = require("../../services/mail"); -const { createToken } = require("../../services/token.service"); - -// utils -const logger = require("../../utils/logger"); - -const verifyEmail = async (url, tokenPayload) => { - const token = createToken(tokenPayload, { - expiresIn: "2h" - }); - - try { - await database - .delete() - .from("emailVerification") - .where({ - email: tokenPayload.email - }); - - const userEmailVerificationToken = await database - .insert({ - email: tokenPayload.email, - token - }) - .into("emailVerification") - .returning("*"); - - const urlObject = new URL(url); - const onboardingMailContent = await generateContent("verify", { - url: urlObject.origin, - domain: urlObject.host, - verificationLink: `${urlObject.origin}/verify/?token=${token}` - }); - - const noReplyEmail = `noreply@${urlObject.host}`; - - await mail.sendMail({ - from: noReplyEmail, - to: tokenPayload.email, - subject: "LogChimp - Please confirm your email", - text: onboardingMailContent.text, - html: onboardingMailContent.html - }); - - return userEmailVerificationToken[0]; - } catch (err) { - logger.error(err.message); - } -}; - -module.exports = verifyEmail; diff --git a/packages/server/services/boards/getBoardById.js b/packages/server/services/boards/getBoardById.js deleted file mode 100644 index d2e8772292..0000000000 --- a/packages/server/services/boards/getBoardById.js +++ /dev/null @@ -1,30 +0,0 @@ -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); - -const getBoardById = async boardId => { - try { - const boards = await database - .select() - .from("boards") - .where({ - boardId - }) - .limit(1); - - const board = boards[0]; - if (board) { - return board; - } else { - return null; - } - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; - -module.exports = getBoardById; diff --git a/packages/server/services/mail/generateContent.js b/packages/server/services/mail/generateContent.js deleted file mode 100644 index 2ad91cb6e0..0000000000 --- a/packages/server/services/mail/generateContent.js +++ /dev/null @@ -1,34 +0,0 @@ -const _ = require("lodash"); -const path = require("path"); -const fs = require("fs-extra"); -const { htmlToText } = require("html-to-text"); - -const generateContent = async (templateName, options) => { - const mailTemplateFilePath = path.resolve( - __dirname, - "templates", - `${templateName}.html` - ); - - try { - const mailTemplateFileContent = await fs.readFile( - mailTemplateFilePath, - "utf8" - ); - - _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; - const compiled = _.template(mailTemplateFileContent); - const htmlMail = compiled(options); - - const textMail = htmlToText(htmlMail); - - return { - html: htmlMail, - text: textMail - }; - } catch (error) { - console.error(error); - } -}; - -module.exports = generateContent; diff --git a/packages/server/services/mail/index.js b/packages/server/services/mail/index.js deleted file mode 100644 index 3ee82d64d2..0000000000 --- a/packages/server/services/mail/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.mail = require("./mail"); -exports.generateContent = require("./generateContent"); diff --git a/packages/server/services/mail/mail.js b/packages/server/services/mail/mail.js deleted file mode 100644 index 7539df93b6..0000000000 --- a/packages/server/services/mail/mail.js +++ /dev/null @@ -1,25 +0,0 @@ -const nodemailer = require("nodemailer"); -require('dotenv').config() - -// utils -const logchimpConfig = require("../../utils/logchimpConfig"); -const config = logchimpConfig(); -const logger = require("../../utils/logger"); - -if (config.mail) { - const mail = nodemailer.createTransport({ - host: config.mail.host, - port: config.mail.port, - secure: false, - ignoreTLS: process.env.NODE_ENV === "development", - auth: { - user: config.mail.user, - pass: config.mail.password - } - }); - - module.exports = mail; -} else { - logger.warn("Email adapter missing"); - module.exports = null; -} diff --git a/packages/server/services/mail/templates/raw/reset.html b/packages/server/services/mail/templates/raw/reset.html deleted file mode 100644 index fe65316391..0000000000 --- a/packages/server/services/mail/templates/raw/reset.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - -
-
-

- - - -

- -

- Hello, -

- -

- You can change your account page by clicking "Reset password" button, this link will expire in 1 - hours. -

- -

- - Reset password - -

- -

- Thanks -

- -

- LogChimp -
- {{ domain }} -

-
-
- - - diff --git a/packages/server/services/mail/templates/raw/verify.html b/packages/server/services/mail/templates/raw/verify.html deleted file mode 100644 index bf64fc3092..0000000000 --- a/packages/server/services/mail/templates/raw/verify.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - -
-
-

- - - -

- -

- Thank you for creating an account. -

- -

- Please confirm your email address by clicking - Confirm email - button below: -

- -

- - Confirm email - -

- -

- Thanks -

- -

- LogChimp -
- {{ domain }} -

-
-
- - diff --git a/packages/server/services/mail/templates/reset.html b/packages/server/services/mail/templates/reset.html deleted file mode 100644 index 9147857a9e..0000000000 --- a/packages/server/services/mail/templates/reset.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - -
-
-

- - - -

- -

- Hello, -

- -

- You can change your account page by clicking "Reset password" button, this link will expire in 1 - hours. -

- -

- - Reset password - -

- -

- Thanks -

- -

- LogChimp -
- {{ domain }} -

-
-
- - - diff --git a/packages/server/services/mail/templates/verify.html b/packages/server/services/mail/templates/verify.html deleted file mode 100644 index dd209b7a91..0000000000 --- a/packages/server/services/mail/templates/verify.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - -
-
-

- - - -

- -

- Thank you for creating an account. -

- -

- Please confirm your email address by clicking - Confirm email - button below: -

- -

- - Confirm email - -

- -

- Thanks -

- -

- LogChimp -
- {{ domain }} -

-
-
- - - diff --git a/packages/server/services/users/getUsers.js b/packages/server/services/users/getUsers.js deleted file mode 100644 index a8d732c9c2..0000000000 --- a/packages/server/services/users/getUsers.js +++ /dev/null @@ -1,30 +0,0 @@ -// database -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); - -const getUsers = async (created, limit, page) => { - try { - const users = await database - .select("userId", "name", "email", "username", "avatar", "isVerified") - .from("users") - .limit(limit) - .offset(limit * page) - .orderBy([ - { - column: "createdAt", - order: created - } - ]); - - return users; - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; - -module.exports = getUsers; diff --git a/packages/server/services/votes/getVotes.js b/packages/server/services/votes/getVotes.js deleted file mode 100644 index 475675c5bc..0000000000 --- a/packages/server/services/votes/getVotes.js +++ /dev/null @@ -1,47 +0,0 @@ -const database = require("../../database"); - -// utils -const logger = require("../../utils/logger"); - -const getVotes = async (postId, userId) => { - try { - const votesCount = await database - .count("voteId") - .from("votes") - .where({ - postId - }) - .first(); - - const votes = await database - .select("votes.*", "users.name", "users.username", "users.avatar") - .from("votes") - .innerJoin("users", "votes.userId", "users.userId") - .where({ - postId - }) - .limit(6); - - const viewerVote = await database - .select() - .from("votes") - .where({ - postId, - userId: userId || null - }) - .first(); - - return { - votes, - votesCount: parseInt(votesCount.count), - viewerVote: !!viewerVote - }; - } catch (err) { - logger.log({ - level: "error", - message: err - }); - } -}; - -module.exports = getVotes; diff --git a/packages/server/tests/integration/base.spec.js b/packages/server/tests/integration/base.spec.js deleted file mode 100644 index e23e4abc7f..0000000000 --- a/packages/server/tests/integration/base.spec.js +++ /dev/null @@ -1,59 +0,0 @@ -const app = require("../../app"); -const supertest = require("supertest"); -const avatarGenerator = require("avatar-generator"); -const fs = require("fs"); -const path = require("path"); - -test("GET /api", async () => { - const response = await supertest(app).get("/api"); - - expect(response.headers["content-type"]).toContain("text/html"); - expect(response.status).toEqual(200); - expect(response.text).toBe("👍"); -}); - -// test("POST /api", async () => { -// const response = await supertest(app).post("/api"); - -// expect(response.headers["content-type"]).toContain("application/json"); -// expect(response.body.code).toEqual("ROUTE_NOT_FOUND"); -// }); - -describe("Server images", () => { - test("should return 404 for readme.md file", async () => { - const response = await supertest(app).get("/content/images/readme.md"); - - expect(response.status).toEqual(404); - }); - - test("should server 'png' image", async () => { - // generate ramdom image - const generateAvatar = new avatarGenerator({ - imageExtension: ".png" - }); - - // Directory path for "content/image" directory - const contentImageDirectoryPath = path.join( - __dirname, - "../../../../content/images" - ); - const randomAvatarImage = await generateAvatar.generate( - "contact@codecarrot.net", - "male" - ); - - console.log(contentImageDirectoryPath); - - await randomAvatarImage - .png() - .pipe( - fs.createWriteStream(`${contentImageDirectoryPath}/random-avatar.png`) - ); - - const response = await supertest(app).get( - "/content/images/random-avatar.png" - ); - - expect(response.status).toEqual(200); - }); -}); diff --git a/packages/server/tests/integration/v1/auth/login.spec.js b/packages/server/tests/integration/v1/auth/login.spec.js deleted file mode 100644 index 2ee19938e8..0000000000 --- a/packages/server/tests/integration/v1/auth/login.spec.js +++ /dev/null @@ -1,113 +0,0 @@ -const app = require("../../../../app"); -const supertest = require("supertest"); -const { v4: uuidv4 } = require("uuid"); - -const database = require("../../../utils/setupDatabase"); -const { hashPassword } = require("../../../../utils/password"); - -beforeAll(async () => { - return await database.latest(); -}); - -afterAll(async () => { - return await database.rollback(); -}); - -describe("login", () => { - describe("email error", () => { - it("error: no email provided", async () => { - const response = await supertest(app).post("/api/v1/auth/login"); - - expect(response.headers["content-type"]).toContain("application/json"); - expect(response.status).toBe(400); - expect(response.body.code).toBe("EMAIL_INVALID"); - }); - - it("error: email missing", async () => { - const response = await supertest(app) - .post("/api/v1/auth/login") - .send({ - email: "" - }); - - expect(response.headers["content-type"]).toContain("application/json"); - expect(response.status).toBe(400); - expect(response.body.code).toBe("EMAIL_INVALID"); - }); - - it("error: user not found", async () => { - const response = await supertest(app) - .post("/api/v1/auth/login") - .send({ - email: "user_not_found@example.com" - }); - - expect(response.headers["content-type"]).toContain("application/json"); - expect(response.status).toBe(404); - expect(response.body.code).toBe("USER_NOT_FOUND"); - }); - }); - - describe("password error", () => { - beforeAll(async () => { - // seed a user - const password = hashPassword("strongPassword"); - - return await database.instance - .insert({ - userId: uuidv4(), - email: "userExists@example.com", - password, - username: "userExists" - }) - .into("users"); - }); - - it("error: password missing", async () => { - const response = await supertest(app) - .post("/api/v1/auth/login") - .send({ - email: "userExists@example.com", - password: "" - }); - - expect(response.headers["content-type"]).toContain("application/json"); - expect(response.status).toBe(400); - expect(response.body.code).toBe("PASSWORD_MISSING"); - }); - - it("error: incorrect password", async () => { - const response = await supertest(app) - .post("/api/v1/auth/login") - .send({ - email: "userExists@example.com", - password: "incorrect_password" - }); - - expect(response.headers["content-type"]).toContain("application/json"); - expect(response.status).toBe(403); - expect(response.body.code).toBe("INCORRECT_PASSWORD"); - }); - }); - - it("get user data", async () => { - const response = await supertest(app) - .post("/api/v1/auth/login") - .send({ - email: "userExists@example.com", - password: "strongPassword" - }); - - expect(response.headers["content-type"]).toContain("application/json"); - expect(response.status).toBe(200); - - const userObject = response.body.user; - expect(userObject.authToken).toBeDefined(); - expect(userObject.userId).toBeDefined(); - expect(userObject.name).toBeNull(); - expect(userObject.username).toBe("userExists"); - expect(userObject.email).toBe("userExists@example.com"); - expect(userObject.avatar).toBeNull(); - expect(userObject.password).toBeUndefined(); - }); -}); diff --git a/packages/server/tests/integration/v1/auth/setup.spec.js b/packages/server/tests/integration/v1/auth/setup.spec.js deleted file mode 100644 index cf1a5dd96a..0000000000 --- a/packages/server/tests/integration/v1/auth/setup.spec.js +++ /dev/null @@ -1,32 +0,0 @@ -const app = require("../../../../app"); -const supertest = require("supertest"); - -const database = require("../../../utils/setupDatabase"); - -beforeAll(async () => { - return await database.latest(); -}); - -afterAll(async () => { - return await database.rollback(); -}); - -describe("setup", () => { - it("error: email missing", async () => { - const response = await supertest(app).post("/api/v1/auth/setup"); - - expect(response.headers["content-type"]).toContain("application/json"); - expect(response.status).toBe(400); - expect(response.body.code).toBe("EMAIL_INVALID"); - }); - - it("error: password missing", async () => { - const response = await supertest(app).post("/api/v1/auth/setup").send({ - email: "admin@example.com" - }); - - expect(response.headers["content-type"]).toContain("application/json"); - expect(response.status).toBe(400); - expect(response.body.code).toBe("PASSWORD_MISSING"); - }); -}); diff --git a/packages/server/tests/integration/v1/auth/signup.spec.js b/packages/server/tests/integration/v1/auth/signup.spec.js deleted file mode 100644 index 38cc77d4f4..0000000000 --- a/packages/server/tests/integration/v1/auth/signup.spec.js +++ /dev/null @@ -1,64 +0,0 @@ -const app = require("../../../../app"); -const supertest = require("supertest"); - -const database = require("../../../utils/setupDatabase"); - -beforeAll(async () => { - return await database.latest(); -}); - -afterAll(async () => { - return await database.rollback(); -}); - -describe("signup", () => { - it("error: email missing", async () => { - const response = await supertest(app).post("/api/v1/auth/signup"); - - expect(response.headers["content-type"]).toContain("application/json"); - expect(response.status).toBe(400); - expect(response.body.code).toBe("EMAIL_INVALID"); - }); - - it("error: password missing", async () => { - const response = await supertest(app).post("/api/v1/auth/signup").send({ - email: "signup_email@example.com" - }); - - expect(response.headers["content-type"]).toContain("application/json"); - expect(response.status).toBe(400); - expect(response.body.code).toBe("PASSWORD_MISSING"); - }); - - it("should create new user", async () => { - const response = await supertest(app).post("/api/v1/auth/signup").send({ - email: "user@example.com", - password: "password" - }); - - const user = response.body.user; - expect(response.status).toBe(201); - expect(user).toMatchObject({ - name: null, - username: 'user', - email: 'user@example.com', - }) - }) - - it("should not be allowed", async () => { - // set allowSignup to false in settings table - await database.instance.update({ - allowSignup: false, - }) - .from("settings"); - - const response = await supertest(app).post("/api/v1/auth/signup").send({ - email: "user@example.com", - password: "password" - }); - - expect(response.status).toBe(400); - expect(response.body.code).toBe("SIGNUP_NOT_ALLOWED"); - }) -}); - diff --git a/packages/server/tests/integration/v1/settings.test.js b/packages/server/tests/integration/v1/settings.test.js deleted file mode 100644 index 60e6a34693..0000000000 --- a/packages/server/tests/integration/v1/settings.test.js +++ /dev/null @@ -1,35 +0,0 @@ -const app = require('../../../app'); -const supertest = require('supertest'); - -const database = require("../../utils/setupDatabase"); - -beforeAll(async () => { - return await database.latest(); -}); - -afterAll(async () => { - return await database.rollback(); -}); - -describe("GET /api/v1/settings/site", () => { - it("should get all settings", async () => { - const response = await supertest(app).get("/api/v1/settings/site"); - - expect(response.headers["content-type"]).toContain("application/json"); - expect(response.status).toBe(200); - - const settings = response.body.settings; - expect(settings.title).toEqual("LogChimp"); - expect(settings.description).toEqual("Track user feedback to build better products"); - expect(settings.logo).toEqual("https://cdn.logchimp.codecarrot.net/logchimp_circular_logo.png"); - expect(settings.icon).toEqual("https://cdn.logchimp.codecarrot.net/logchimp_circular_logo.png"); - expect(settings.accentColor).toEqual("484d7c"); - expect(settings.googleAnalyticsId).toBeNull(); - expect(settings.isPoweredBy).toBeTruthy(); - expect(settings.allowSignup).toBeTruthy(); - expect(settings.developer_mode).toBeFalsy(); - - // labs - expect(settings.labs.comments).toBeFalsy(); - }) -}) diff --git a/packages/server/tests/unit/helpers.test.js b/packages/server/tests/unit/helpers.test.js deleted file mode 100644 index aea6c54f76..0000000000 --- a/packages/server/tests/unit/helpers.test.js +++ /dev/null @@ -1,187 +0,0 @@ -const _ = require("lodash"); -const generatePassword = require("omgopass"); - -const { - validEmail, - validUUID, - generateHexColor, - hashPassword, - validatePassword -} = require("../../helpers"); - -describe("validate email", () => { - it('should be a valid email "yashu@codecarrot.net"', () => { - const response = validEmail("yashu@codecarrot.net"); - expect(response).toBeTruthy(); - }); - - it('should be a valid email "ya___u@codecarrot.net"', () => { - const response = validEmail("ya___u@codecarrot.net"); - expect(response).toBeTruthy(); - }); - - it('should be a valid email "ya___u@codecarrot.nt"', () => { - const response = validEmail("ya___u@codecarrot.nt"); - expect(response).toBeTruthy(); - }); - - it('should be a valid email "y@codecarrot.nt"', () => { - const response = validEmail("y@codecarrot.nt"); - expect(response).toBeTruthy(); - }); - - it('should be a valid email "y@codecarr.otn"', () => { - const response = validEmail("y@codecar.rotn"); - expect(response).toBeTruthy(); - }); - - it('should not be a valid email "y@codecarrot.n"', () => { - const response = validEmail("y@codecarrot.n"); - expect(response).toBeFalsy(); - }); - - it('should not be a valid email "y@codecarrotn"', () => { - const response = validEmail("y@codecarrotn"); - expect(response).toBeFalsy(); - }); - - it('should not be a valid email "y@codecarrotn@"', () => { - const response = validEmail("y@codecarrotn@"); - expect(response).toBeFalsy(); - }); - - it('should not be a valid email "y@codecarr.otn@"', () => { - const response = validEmail("y@codecar.rotn@"); - expect(response).toBeFalsy(); - }); - - it('should not be a valid email "y@code$%&$%carrot.n"', () => { - const response = validEmail("y@code$%&$%carrot.n"); - expect(response).toBeFalsy(); - }); - - it('should not be a valid email "^#^3y@code$%&$%carrot.n"', () => { - const response = validEmail("^#^3y@code$%&$%carrot.n"); - expect(response).toBeFalsy(); - }); - - it('should not be a valid email "___yashu@carrot.n"', () => { - const response = validEmail("___yashu@carrot.n"); - expect(response).toBeFalsy(); - }); -}); - -describe("validate UUID", () => { - it("should return empty string with empty string", () => { - const res = validUUID(""); - - expect(res).toEqual(""); - expect(typeof res).toEqual("string"); - }); - - it("should return empty string with random string", () => { - const res = validUUID("&(9798709879"); - - expect(res).toEqual(""); - expect(typeof res).toEqual("string"); - }); - - it("should return empty string with SQL injection", () => { - const res = validUUID("DELETE * FROM posts;"); - - expect(res).toEqual(""); - expect(typeof res).toEqual("string"); - }); - - it("should return empty string with empty array", () => { - const res = validUUID([]); - - expect(res).toEqual(""); - expect(typeof res).toEqual("string"); - }); - - it("should return empty string with invalid UUID in array", () => { - const res = validUUID(["sdfs", "tevedfsad", "*****"]); - - expect(res).toEqual(""); - expect(typeof res).toEqual("string"); - }); - - it("should return empty string with SQL injection in array", () => { - const res = validUUID(['UPDATE posts SET title = "LOL"', "DELETE posts"]); - - expect(res).toEqual(""); - expect(typeof res).toEqual("string"); - }); - - it("should return empty string with invalid UUID in array", () => { - const res = validUUID([ - "48EACC70-6D5E-403F-8CC2-AD945A3F3C", - "E82739-FB69-4F06-9FEE-184CC834A492", - "7D663644-5714-42-8A34-C34971A48A45", - "BC8F29C0-5813-4162-94-7EB137CD2B13" - ]); - - expect(res).toEqual(""); - expect(typeof res).toEqual("string"); - }); - - it("should return array of UUID with array of valid UUID", () => { - const res = validUUID([ - "12E67136-3A19-4F71-9B41-DA8CE61BC80F", - "D7573C0E-7909-448C-BA1D-6B29042F95C8" - ]); - - expect(res).toEqual([ - "12E67136-3A19-4F71-9B41-DA8CE61BC80F", - "D7573C0E-7909-448C-BA1D-6B29042F95C8" - ]); - expect(_.isArray(res)).toBeTruthy(); - }); - - it("should return UUID with valid UUID", () => { - const res = validUUID("1A3578E2-9594-4DDD-8D98-ACC55B1D6F99"); - - expect(res).toEqual("1A3578E2-9594-4DDD-8D98-ACC55B1D6F99"); - expect(typeof res).toEqual("string"); - }); -}); - -describe("generateHexColor", () => { - it("should generate 6 digit HEX color code", () => { - const color = generateHexColor(); - const result = /^#([a-fA-F0-9]){3}$|[a-fA-F0-9]{6}$/gi.test(color); - - expect(result).toBeTruthy(); - }); -}); - -describe("hashPassword and validatePassword", () => { - it("should not hash empty string as password", () => { - const hash = hashPassword(""); - - expect(hash).toEqual(null); - }); - - it("should validate hash random password", () => { - const password = generatePassword(); - const hash = hashPassword(password); - const validPassword = validatePassword(password, hash); - - expect(validPassword).toBeTruthy(); - }); - - it("should validate hash random password with missing hash", () => { - const password = generatePassword(); - const validPassword = validatePassword(password); - - expect(validPassword).toEqual(null); - }); - - it("should validate hash random password with missing password", () => { - const hash = hashPassword(""); - const validPassword = validatePassword("", hash); - - expect(validPassword).toEqual(null); - }); -}); diff --git a/packages/server/tests/utils/setupDatabase.js b/packages/server/tests/utils/setupDatabase.js deleted file mode 100644 index d8e89e1a69..0000000000 --- a/packages/server/tests/utils/setupDatabase.js +++ /dev/null @@ -1,15 +0,0 @@ -const database = require("../../database"); - -const latest = async () => { - return await database.migrate.latest(); -}; - -const rollback = async () => { - return await database.migrate.rollback(); -}; - -module.exports = { - instance: database, - latest, - rollback -}; diff --git a/packages/theme/assets/css/base.sass b/packages/theme/assets/css/base.sass deleted file mode 100644 index 931a8703d7..0000000000 --- a/packages/theme/assets/css/base.sass +++ /dev/null @@ -1,34 +0,0 @@ -* - margin: 0 - padding: 0 - box-sizing: border-box - -body - font-family: "Inter", sans-serif - -webkit-font-smoothing: antialiased - font-size: 16px - color: var(--color-text-black) - -#app - position: relative - -a - text-decoration: none - color: var(--color-brand-color) - -.color-dot - min-width: 0.625rem - min-height: 0.625rem - border-radius: 1rem - -svg - fill: none - stroke-width: 2 - stroke-linecap: round - stroke-linejoin: round - -.loader-container - display: flex - justify-content: center - margin-bottom: 1rem - width: 100% diff --git a/packages/theme/assets/css/container.sass b/packages/theme/assets/css/container.sass deleted file mode 100644 index 14df46a54b..0000000000 --- a/packages/theme/assets/css/container.sass +++ /dev/null @@ -1,26 +0,0 @@ -.container - width: 100% - padding-right: 15px - padding-left: 15px - margin-right: auto - margin-left: auto - -@media (min-width: 576px) - .container - max-width: 540px - -@media (min-width: 768px) - .container - max-width: 720px - -@media (min-width: 992px) - .container - max-width: 960px - -@media (min-width: 1200px) - .container - max-width: 1140px - -.container-view - padding: 2rem 3rem 2rem - width: 100% diff --git a/packages/theme/assets/css/dropdown.sass b/packages/theme/assets/css/dropdown.sass deleted file mode 100644 index 9d8d15e500..0000000000 --- a/packages/theme/assets/css/dropdown.sass +++ /dev/null @@ -1,76 +0,0 @@ -.dropdown-wrapper - position: relative - -.dropdown - background-color: var(--color-white) - position: absolute - border: 1px solid var(--color-gray-90) - border-radius: var(--border-radius-default) - padding: 0.375rem 0 - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06) - z-index: 8 - -// dropdown direction -.dropdown.sw - right: 0 - -.dropdown-spacer - background-color: var(--color-gray-90) - margin: 0.375rem 0 - border-width: 0 - height: 1px - -// dropdown item -.dropdown-item - border-radius: var(--border-radius-default) - margin: 0 0.375rem - padding: 0.5rem 0.75rem - display: flex - align-items: center - cursor: pointer - user-select: none - - &:hover:not(.dropdown-item-disabled) - background-color: var(--color-gray-97) - -.dropdown-item-content - color: var(--color-gray-40) - font-weight: 400 - white-space: nowrap - -.dropdown-item-icon - margin-right: 0.625rem - display: flex - - svg - width: 1rem - height: 1rem - stroke: var(--color-gray-60) - -.dropdown-menu-icon svg - stroke: var(--color-gray-60) - width: 1.125rem - height: 1.125rem - -// dropdown item disabled -.dropdown-item-disabled - opacity: 0.7 - cursor: not-allowed - -// dopdown item danger -.dropdown-item.color-danger - - &:hover - background-color: var(--color-color-danger) - - .dropdown-item-content - color: var(--color-white) - - .dropdown-item-icon svg - stroke: var(--color-white) - - .dropdown-item-content - color: var(--color-color-danger) - - .dropdown-item-icon svg - stroke: var(--color-color-danger) diff --git a/packages/theme/assets/css/form.sass b/packages/theme/assets/css/form.sass deleted file mode 100644 index b3f6bef52f..0000000000 --- a/packages/theme/assets/css/form.sass +++ /dev/null @@ -1,21 +0,0 @@ -.form-header - display: flex - justify-content: space-between - margin-bottom: 1.5rem - -.form-section - &:not(:first-child) - margin-top: 2.5rem - -.form-section-title - color: var(--color-gray-60) - padding-bottom: 0.625rem - border-bottom: 1px solid var(--color-gray-90) - margin-bottom: 1rem - -.form-columns - display: flex - justify-content: space-between - -.form-column - width: calc(50% - 1rem) diff --git a/packages/theme/assets/css/main.sass b/packages/theme/assets/css/main.sass deleted file mode 100644 index 569198260c..0000000000 --- a/packages/theme/assets/css/main.sass +++ /dev/null @@ -1,11 +0,0 @@ -@import "./variable" -@import "./base" -@import "./typography" -@import "./container" -@import "./dropdown" -@import "./form" - -// components -@import "./ui/input" -@import "./ui/card" -@import "./ui/breadcrumbs" diff --git a/packages/theme/assets/css/typography.sass b/packages/theme/assets/css/typography.sass deleted file mode 100644 index 4189865d84..0000000000 --- a/packages/theme/assets/css/typography.sass +++ /dev/null @@ -1,24 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap') - -h1, h2, h3, h4, h5, h6, -.h1, .h2, .h3, .h4, .h5, .h6 - font-weight: 500 - margin-bottom: 1rem - -h1, .h1 - font-size: 2.5rem - -h2, .h2 - font-size: 2rem - -h3, .h3 - font-size: 1.75rem - -h4, .h4 - font-size: 1.5rem - -h5, .h5 - font-size: 1.25rem - -h6, .h6 - font-size: 1rem diff --git a/packages/theme/assets/css/ui/breadcrumbs.sass b/packages/theme/assets/css/ui/breadcrumbs.sass deleted file mode 100644 index 288255a7d8..0000000000 --- a/packages/theme/assets/css/ui/breadcrumbs.sass +++ /dev/null @@ -1,15 +0,0 @@ -.breadcrumbs - display: flex - align-items: center - -.breadcrum-item, .breadcrum-divider - font-weight: 500 - -.breadcrum-item - margin-bottom: 0 - font-size: 1.5rem - color: var(--color-text-black) - -.breadcrum-divider - padding: 0 0.5rem - font-weight: 500 diff --git a/packages/theme/assets/css/ui/card.sass b/packages/theme/assets/css/ui/card.sass deleted file mode 100644 index a182d06f53..0000000000 --- a/packages/theme/assets/css/ui/card.sass +++ /dev/null @@ -1,18 +0,0 @@ -.card - padding: 2rem - border: 1px solid var(--color-gray-90) - border-radius: var(--border-radius-default) - -.card-section - margin-bottom: 1.5rem - text-align: center - - &:last-child - margin-bottom: 0 - -.card-header-title - margin-bottom: 0.75rem - -.card-header-label - color: var(--color-gray-60) - font-size: 0.875rem diff --git a/packages/theme/assets/css/ui/input.sass b/packages/theme/assets/css/ui/input.sass deleted file mode 100644 index c477a943ce..0000000000 --- a/packages/theme/assets/css/ui/input.sass +++ /dev/null @@ -1,54 +0,0 @@ -.input - display: flex - flex-direction: column - margin-bottom: 1rem - -.input, .input-field - width: 100% - -.input-field - color: var(--color-text-black) - padding: 0.625rem 0.75rem - background-color: var(--color-white) - border-radius: var(--border-radius-default) - border-width: 1px - border-style: solid - border-color: var(--color-gray-90) - font: - family: inherit - size: 0.875rem - display: flex - outline: none - - &::placeholder - color: var(--color-gray-80) - - &:focus - border-color: var(--color-gray-80) - -.input-field-label - font-size: 0.75rem - margin-bottom: 0.375rem - color: var(--color-gray-60) - -.input-field-disabled - background-color: var(--color-gray-90) - color: var(--color-gray-70) - border-color: var(--color-gray-90) - -.input-error - border-color: var(--color-color-danger) - -.input-error-message - color: var(--color-color-danger) - font-size: 0.75rem - margin-top: 0.375rem - text-align: right - -.input-textarea - resize: vertical - -.input-description - color: var(--color-gray-70) - margin-top: 0.25rem - font-size: 0.75rem diff --git a/packages/theme/assets/css/variable.sass b/packages/theme/assets/css/variable.sass deleted file mode 100644 index 23bdbd0685..0000000000 --- a/packages/theme/assets/css/variable.sass +++ /dev/null @@ -1,24 +0,0 @@ -:root - // fallback brand color - --color-brand-color: #484D7C - - --color-white-light: rgba(255, 255, 255, 0.5) - --color-white: rgb(255, 255, 255) - --color-text-black: #1A1A1A - - --color-gray-40: #666666 - --color-gray-50: #808080 - --color-gray-60: #999999 - --color-gray-70: #B3B3B3 - --color-gray-80: #CCCCCC - --color-gray-90: #E5E5E5 - --color-gray-95: #F2F2F2 - --color-gray-97: #F7F7F7 - - --color-color-success: #64B285 - --color-color-warning: #E8BD43 - --color-color-danger-light: #f8d9d8 - --color-color-danger: #DE544E - - // radius - --border-radius-default: 0.375rem diff --git a/packages/theme/components/activity/ActivityItem.vue b/packages/theme/components/activity/ActivityItem.vue deleted file mode 100644 index c0120778b9..0000000000 --- a/packages/theme/components/activity/ActivityItem.vue +++ /dev/null @@ -1,58 +0,0 @@ - - - - - diff --git a/packages/theme/components/activity/AddComment.vue b/packages/theme/components/activity/AddComment.vue deleted file mode 100644 index ebc31fbea8..0000000000 --- a/packages/theme/components/activity/AddComment.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - - - diff --git a/packages/theme/components/auth/LoginCard.vue b/packages/theme/components/auth/LoginCard.vue deleted file mode 100644 index bd1d217ff7..0000000000 --- a/packages/theme/components/auth/LoginCard.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - diff --git a/packages/theme/components/board/BoardBadge.vue b/packages/theme/components/board/BoardBadge.vue deleted file mode 100644 index 11e0283169..0000000000 --- a/packages/theme/components/board/BoardBadge.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/packages/theme/components/board/BoardItem.vue b/packages/theme/components/board/BoardItem.vue deleted file mode 100644 index cffca95e78..0000000000 --- a/packages/theme/components/board/BoardItem.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - - - diff --git a/packages/theme/components/board/BoardSuggestion.vue b/packages/theme/components/board/BoardSuggestion.vue deleted file mode 100644 index 10de29fbff..0000000000 --- a/packages/theme/components/board/BoardSuggestion.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - - - diff --git a/packages/theme/components/dashboard/AuthUser.vue b/packages/theme/components/dashboard/AuthUser.vue deleted file mode 100644 index a898b86df7..0000000000 --- a/packages/theme/components/dashboard/AuthUser.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - - - diff --git a/packages/theme/components/dashboard/Sidebar.vue b/packages/theme/components/dashboard/Sidebar.vue deleted file mode 100644 index a59fea4042..0000000000 --- a/packages/theme/components/dashboard/Sidebar.vue +++ /dev/null @@ -1,237 +0,0 @@ - - - - - diff --git a/packages/theme/components/icons/Arrow.vue b/packages/theme/components/icons/Arrow.vue deleted file mode 100644 index 4f6b5d545a..0000000000 --- a/packages/theme/components/icons/Arrow.vue +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/packages/theme/components/icons/Loader.vue b/packages/theme/components/icons/Loader.vue deleted file mode 100644 index 650d8d7595..0000000000 --- a/packages/theme/components/icons/Loader.vue +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/packages/theme/components/icons/Roadmap.vue b/packages/theme/components/icons/Roadmap.vue deleted file mode 100644 index 35fcd998c6..0000000000 --- a/packages/theme/components/icons/Roadmap.vue +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/packages/theme/components/posts/CreatePost.vue b/packages/theme/components/posts/CreatePost.vue deleted file mode 100644 index 7bc1720c73..0000000000 --- a/packages/theme/components/posts/CreatePost.vue +++ /dev/null @@ -1,132 +0,0 @@ - - - diff --git a/packages/theme/components/posts/LatestPosts.vue b/packages/theme/components/posts/LatestPosts.vue deleted file mode 100644 index 3c13036d52..0000000000 --- a/packages/theme/components/posts/LatestPosts.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - diff --git a/packages/theme/components/posts/OldestPosts.vue b/packages/theme/components/posts/OldestPosts.vue deleted file mode 100644 index cdccac2e5f..0000000000 --- a/packages/theme/components/posts/OldestPosts.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - diff --git a/packages/theme/components/posts/PostItem.vue b/packages/theme/components/posts/PostItem.vue deleted file mode 100644 index 316115bfd7..0000000000 --- a/packages/theme/components/posts/PostItem.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - - diff --git a/packages/theme/components/roadmap/RoadmapColumn.vue b/packages/theme/components/roadmap/RoadmapColumn.vue deleted file mode 100644 index d23f7c9d06..0000000000 --- a/packages/theme/components/roadmap/RoadmapColumn.vue +++ /dev/null @@ -1,92 +0,0 @@ - - - - - diff --git a/packages/theme/components/roadmap/RoadmapPostCard.vue b/packages/theme/components/roadmap/RoadmapPostCard.vue deleted file mode 100644 index 58e612e7f6..0000000000 --- a/packages/theme/components/roadmap/RoadmapPostCard.vue +++ /dev/null @@ -1,178 +0,0 @@ - - - - - diff --git a/packages/theme/components/site/SiteBranding.vue b/packages/theme/components/site/SiteBranding.vue deleted file mode 100644 index b1f776440f..0000000000 --- a/packages/theme/components/site/SiteBranding.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - - - diff --git a/packages/theme/components/site/SiteSetupCard.vue b/packages/theme/components/site/SiteSetupCard.vue deleted file mode 100644 index 646157b9e8..0000000000 --- a/packages/theme/components/site/SiteSetupCard.vue +++ /dev/null @@ -1,36 +0,0 @@ - - - diff --git a/packages/theme/components/ui/Avatar.vue b/packages/theme/components/ui/Avatar.vue deleted file mode 100644 index 4dbf7f18d1..0000000000 --- a/packages/theme/components/ui/Avatar.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - diff --git a/packages/theme/components/ui/AvatarStack.vue b/packages/theme/components/ui/AvatarStack.vue deleted file mode 100644 index 6c18f8c2d0..0000000000 --- a/packages/theme/components/ui/AvatarStack.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - diff --git a/packages/theme/components/ui/Button.vue b/packages/theme/components/ui/Button.vue deleted file mode 100644 index d19c3cc260..0000000000 --- a/packages/theme/components/ui/Button.vue +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - diff --git a/packages/theme/components/ui/ColorInput.vue b/packages/theme/components/ui/ColorInput.vue deleted file mode 100644 index 5852860bb3..0000000000 --- a/packages/theme/components/ui/ColorInput.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - diff --git a/packages/theme/components/ui/LText.vue b/packages/theme/components/ui/LText.vue deleted file mode 100644 index 72b906d076..0000000000 --- a/packages/theme/components/ui/LText.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - diff --git a/packages/theme/components/ui/LTextarea.vue b/packages/theme/components/ui/LTextarea.vue deleted file mode 100644 index 79ebd15ec7..0000000000 --- a/packages/theme/components/ui/LTextarea.vue +++ /dev/null @@ -1,54 +0,0 @@ -