diff --git a/packages/server/boot b/packages/server/boot
index 126e0eee..50330407 100755
--- a/packages/server/boot
+++ b/packages/server/boot
@@ -26,6 +26,7 @@ global["aliases"] = {
"src": global["__src"],
// expose shared resources
+ "@db_models": path.resolve(__dirname, "db_models"),
"@shared-utils": path.resolve(__dirname, "utils"),
"@shared-classes": path.resolve(__dirname, "classes"),
"@shared-lib": path.resolve(__dirname, "lib"),
@@ -103,7 +104,7 @@ function registerAliases() {
async function injectEnvFromInfisical() {
const envMode = global.FORCE_ENV ?? global.isProduction ? "prod" : "dev"
- console.log(`🔑 Injecting env variables from INFISICAL in [${envMode}] mode...`)
+ console.log(`[BOOT] 🔑 Injecting env variables from INFISICAL in [${envMode}] mode...`)
const client = new InfisicalClient({
accessToken: process.env.INFISICAL_TOKEN,
@@ -130,7 +131,7 @@ async function Boot(main) {
}
if (process.env.INFISICAL_TOKEN) {
- console.log(`INFISICAL_TOKEN found, injecting env variables from INFISICAL...`)
+ console.log(`[BOOT] INFISICAL_TOKEN found, injecting env variables from INFISICAL...`)
await injectEnvFromInfisical()
}
@@ -138,7 +139,7 @@ async function Boot(main) {
await instance.initialize()
- if (process.send) {
+ if (process.env.lb_service && process.send) {
process.send({
status: "ready"
})
@@ -147,7 +148,7 @@ async function Boot(main) {
return instance
}
-console.log(`Booting in [${global.isProduction ? "production" : "development"}] mode...`)
+console.log(`[BOOT] Booting in [${global.isProduction ? "production" : "development"}] mode...`)
// Apply patches
registerPatches()
diff --git a/packages/server/classes/AuthToken/index.js b/packages/server/classes/AuthToken/index.js
index 505e560d..52baa40a 100644
--- a/packages/server/classes/AuthToken/index.js
+++ b/packages/server/classes/AuthToken/index.js
@@ -1,5 +1,5 @@
import jwt from "jsonwebtoken"
-import { Session, RegenerationToken, User } from "../../classes/DbModels"
+import { Session, RegenerationToken, User } from "../../db_models"
export default class Token {
static get strategy() {
diff --git a/packages/server/classes/SecureSyncEntry/index.js b/packages/server/classes/SecureSyncEntry/index.js
index d0ec7734..3bd86c48 100755
--- a/packages/server/classes/SecureSyncEntry/index.js
+++ b/packages/server/classes/SecureSyncEntry/index.js
@@ -1,4 +1,4 @@
-import { SyncEntry } from "@shared-classes/DbModels"
+import { SyncEntry } from "../../db_models"
import crypto from "crypto"
diff --git a/packages/server/classes/DbModels/NFCTags/index.js b/packages/server/db_models/NFCTags/index.js
similarity index 100%
rename from packages/server/classes/DbModels/NFCTags/index.js
rename to packages/server/db_models/NFCTags/index.js
diff --git a/packages/server/db_models/aprSession/index.js b/packages/server/db_models/aprSession/index.js
new file mode 100644
index 00000000..de7d8720
--- /dev/null
+++ b/packages/server/db_models/aprSession/index.js
@@ -0,0 +1,17 @@
+export default {
+ name: "APRSession",
+ collection: "apr_sessions",
+ schema: {
+ user_id: { type: String, required: true },
+
+ created_at: { type: Date, required: true },
+ expires_at: { type: Date, required: true },
+
+ code: { type: String, required: true },
+
+ ip_address: { type: String, required: true },
+ client: { type: String, required: true },
+
+ status: { type: String, required: true },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/authorizedServerTokens/index.js b/packages/server/db_models/authorizedServerTokens/index.js
similarity index 100%
rename from packages/server/classes/DbModels/authorizedServerTokens/index.js
rename to packages/server/db_models/authorizedServerTokens/index.js
diff --git a/packages/server/classes/DbModels/badge/index.js b/packages/server/db_models/badge/index.js
similarity index 100%
rename from packages/server/classes/DbModels/badge/index.js
rename to packages/server/db_models/badge/index.js
diff --git a/packages/server/classes/DbModels/comment/index.js b/packages/server/db_models/comment/index.js
similarity index 100%
rename from packages/server/classes/DbModels/comment/index.js
rename to packages/server/db_models/comment/index.js
diff --git a/packages/server/classes/DbModels/config/index.js b/packages/server/db_models/config/index.js
similarity index 100%
rename from packages/server/classes/DbModels/config/index.js
rename to packages/server/db_models/config/index.js
diff --git a/packages/server/classes/DbModels/featuredEvent/index.js b/packages/server/db_models/featuredEvent/index.js
similarity index 100%
rename from packages/server/classes/DbModels/featuredEvent/index.js
rename to packages/server/db_models/featuredEvent/index.js
diff --git a/packages/server/classes/DbModels/featuredPlaylist/index.js b/packages/server/db_models/featuredPlaylist/index.js
similarity index 100%
rename from packages/server/classes/DbModels/featuredPlaylist/index.js
rename to packages/server/db_models/featuredPlaylist/index.js
diff --git a/packages/server/classes/DbModels/featuredWallpaper/index.js b/packages/server/db_models/featuredWallpaper/index.js
similarity index 100%
rename from packages/server/classes/DbModels/featuredWallpaper/index.js
rename to packages/server/db_models/featuredWallpaper/index.js
diff --git a/packages/server/classes/DbModels/index.js b/packages/server/db_models/index.js
similarity index 100%
rename from packages/server/classes/DbModels/index.js
rename to packages/server/db_models/index.js
diff --git a/packages/server/db_models/mfaSessions/index.js b/packages/server/db_models/mfaSessions/index.js
new file mode 100644
index 00000000..0a9e4a39
--- /dev/null
+++ b/packages/server/db_models/mfaSessions/index.js
@@ -0,0 +1,13 @@
+export default {
+ name: "MFASession",
+ collection: "mfa_sessions",
+ schema: {
+ type: { type: String, required: true },
+ user_id: { type: String, required: true },
+
+ code: { type: String, required: true },
+
+ created_at: { type: Date, required: true },
+ expires_at: { type: Date, required: true },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/db_models/operationLog/index.js b/packages/server/db_models/operationLog/index.js
new file mode 100644
index 00000000..f8e09d85
--- /dev/null
+++ b/packages/server/db_models/operationLog/index.js
@@ -0,0 +1,13 @@
+export default {
+ name: "OperationLog",
+ collection: "operation_logs",
+ schema: {
+ type: { type: String, required: true },
+ user_id: { type: String },
+ comments: { type: Array, default: [] },
+
+ date: { type: Date, required: true },
+ ip_address: { type: String },
+ client: { type: String },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/playlist/index.js b/packages/server/db_models/playlist/index.js
similarity index 100%
rename from packages/server/classes/DbModels/playlist/index.js
rename to packages/server/db_models/playlist/index.js
diff --git a/packages/server/classes/DbModels/post/index.js b/packages/server/db_models/post/index.js
similarity index 100%
rename from packages/server/classes/DbModels/post/index.js
rename to packages/server/db_models/post/index.js
diff --git a/packages/server/classes/DbModels/postLike/index.js b/packages/server/db_models/postLike/index.js
similarity index 100%
rename from packages/server/classes/DbModels/postLike/index.js
rename to packages/server/db_models/postLike/index.js
diff --git a/packages/server/classes/DbModels/regenerationToken/index.js b/packages/server/db_models/regenerationToken/index.js
similarity index 100%
rename from packages/server/classes/DbModels/regenerationToken/index.js
rename to packages/server/db_models/regenerationToken/index.js
diff --git a/packages/server/classes/DbModels/release/index.js b/packages/server/db_models/release/index.js
similarity index 100%
rename from packages/server/classes/DbModels/release/index.js
rename to packages/server/db_models/release/index.js
diff --git a/packages/server/classes/DbModels/role/index.js b/packages/server/db_models/role/index.js
similarity index 100%
rename from packages/server/classes/DbModels/role/index.js
rename to packages/server/db_models/role/index.js
diff --git a/packages/server/classes/DbModels/savedPost/index.js b/packages/server/db_models/savedPost/index.js
similarity index 100%
rename from packages/server/classes/DbModels/savedPost/index.js
rename to packages/server/db_models/savedPost/index.js
diff --git a/packages/server/classes/DbModels/serverLimit/index.js b/packages/server/db_models/serverLimit/index.js
similarity index 100%
rename from packages/server/classes/DbModels/serverLimit/index.js
rename to packages/server/db_models/serverLimit/index.js
diff --git a/packages/server/classes/DbModels/session/index.js b/packages/server/db_models/session/index.js
similarity index 100%
rename from packages/server/classes/DbModels/session/index.js
rename to packages/server/db_models/session/index.js
diff --git a/packages/server/classes/DbModels/streamingCategory/index.js b/packages/server/db_models/streamingCategory/index.js
similarity index 100%
rename from packages/server/classes/DbModels/streamingCategory/index.js
rename to packages/server/db_models/streamingCategory/index.js
diff --git a/packages/server/classes/DbModels/streamingProfile/index.js b/packages/server/db_models/streamingProfile/index.js
similarity index 100%
rename from packages/server/classes/DbModels/streamingProfile/index.js
rename to packages/server/db_models/streamingProfile/index.js
diff --git a/packages/server/classes/DbModels/syncEntry/index.js b/packages/server/db_models/syncEntry/index.js
similarity index 100%
rename from packages/server/classes/DbModels/syncEntry/index.js
rename to packages/server/db_models/syncEntry/index.js
diff --git a/packages/server/classes/DbModels/track/index.js b/packages/server/db_models/track/index.js
similarity index 100%
rename from packages/server/classes/DbModels/track/index.js
rename to packages/server/db_models/track/index.js
diff --git a/packages/server/classes/DbModels/track_like/index.js b/packages/server/db_models/track_like/index.js
similarity index 100%
rename from packages/server/classes/DbModels/track_like/index.js
rename to packages/server/db_models/track_like/index.js
diff --git a/packages/server/classes/DbModels/user/index.js b/packages/server/db_models/user/index.js
similarity index 100%
rename from packages/server/classes/DbModels/user/index.js
rename to packages/server/db_models/user/index.js
diff --git a/packages/server/db_models/userConfig/index.js b/packages/server/db_models/userConfig/index.js
new file mode 100644
index 00000000..b0fe2e71
--- /dev/null
+++ b/packages/server/db_models/userConfig/index.js
@@ -0,0 +1,8 @@
+export default {
+ name: "UserConfig",
+ collection: "user_config",
+ schema: {
+ user_id: { type: String, required: true },
+ values: { type: Object, default: {} },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/userFollow/index.js b/packages/server/db_models/userFollow/index.js
similarity index 100%
rename from packages/server/classes/DbModels/userFollow/index.js
rename to packages/server/db_models/userFollow/index.js
diff --git a/packages/server/classes/DbModels/widget/index.js b/packages/server/db_models/widget/index.js
similarity index 100%
rename from packages/server/classes/DbModels/widget/index.js
rename to packages/server/db_models/widget/index.js
diff --git a/packages/server/index.js b/packages/server/index.js
index d2d5d005..e224c655 100755
--- a/packages/server/index.js
+++ b/packages/server/index.js
@@ -11,6 +11,8 @@ import Spinnies from "spinnies"
import chokidar from "chokidar"
import { dots as DefaultSpinner } from "spinnies/spinners.json"
+
+import IPCRouter from "linebridge/src/server/classes/IPCRouter"
import getInternalIp from "./lib/getInternalIp"
import comtyAscii from "./ascii"
import pkg from "./package.json"
@@ -50,11 +52,12 @@ let services = null
const spinnies = new Spinnies()
-const instancePool = []
+const ipcRouter = global.ipcRouter = new IPCRouter()
+const instancePool = global.instancePool = []
const serviceFileReference = {}
-const serviceWatcher = Observable.from({})
+const serviceRegistry = global.serviceRegistry = Observable.from({})
-Observable.observe(serviceWatcher, (changes) => {
+Observable.observe(serviceRegistry, (changes) => {
const { type, path, value } = changes[0]
switch (type) {
@@ -62,7 +65,7 @@ Observable.observe(serviceWatcher, (changes) => {
//console.log(`Updated service | ${path} > ${value}`)
//check if all services all ready
- if (Object.values(serviceWatcher).every((service) => service.ready)) {
+ if (Object.values(serviceRegistry).every((service) => service.ready)) {
handleAllReady()
}
@@ -97,9 +100,9 @@ const relp_commands = [
aliases: ["s", "sel"],
fn: (cb, service) => {
if (!isNaN(parseInt(service))) {
- service = serviceWatcher[Object.keys(serviceWatcher)[service]]
+ service = serviceRegistry[Object.keys(serviceRegistry)[service]]
} else {
- service = serviceWatcher[service]
+ service = serviceRegistry[service]
}
if (!service) {
@@ -166,7 +169,7 @@ async function handleAllReady() {
// SERVICE WATCHER FUNCTIONS
async function handleNewServiceStarting(id) {
- if (serviceWatcher[id].ready === false) {
+ if (serviceRegistry[id].ready === false) {
spinnies.add(id, {
text: `📦 [${id}] Loading service...`,
spinner: DefaultSpinner
@@ -175,25 +178,25 @@ async function handleNewServiceStarting(id) {
}
async function handleServiceStarted(id) {
- if (serviceWatcher[id].ready === false) {
+ if (serviceRegistry[id].ready === false) {
if (spinnies.pick(id)) {
- spinnies.succeed(id, { text: `[${id}][${serviceWatcher[id].index}] Ready` })
+ spinnies.succeed(id, { text: `[${id}][${serviceRegistry[id].index}] Ready` })
}
}
- serviceWatcher[id].ready = true
+ serviceRegistry[id].ready = true
}
async function handleServiceExit(id, code, err) {
//console.log(`🛑 Service ${id} exited with code ${code}`, err)
- if (serviceWatcher[id].ready === false) {
+ if (serviceRegistry[id].ready === false) {
if (spinnies.pick(id)) {
- spinnies.fail(id, { text: `[${id}][${serviceWatcher[id].index}] Failed with code ${code}` })
+ spinnies.fail(id, { text: `[${id}][${serviceRegistry[id].index}] Failed with code ${code}` })
}
}
- serviceWatcher[id].ready = false
+ serviceRegistry[id].ready = false
}
// PROCESS HANDLERS
@@ -225,16 +228,24 @@ async function handleIPCData(id, data) {
function spawnService({ id, service, cwd }) {
handleNewServiceStarting(id)
+ const instanceEnv = {
+ ...process.env,
+ lb_service: {
+ id: service.id,
+ index: service.index,
+ },
+ }
+
let instance = ChildProcess.fork(bootloaderBin, [service], {
detached: false,
silent: true,
cwd: cwd,
- env: {
- ...process.env
- }
+ env: instanceEnv,
})
instance.reload = () => {
+ ipcRouter.unregister({ id, instance })
+
instance.kill()
instance = spawnService({ id, service, cwd })
@@ -278,6 +289,8 @@ function spawnService({ id, service, cwd }) {
return handleServiceExit(id, code, err)
})
+ ipcRouter.register({ id, instance })
+
return instance
}
@@ -314,7 +327,7 @@ async function main() {
serviceFileReference[instanceFile] = id
- serviceWatcher[id] = {
+ serviceRegistry[id] = {
index: services.indexOf(service),
id: id,
version: version,
@@ -328,16 +341,18 @@ async function main() {
// create a new process of node for each service
for await (let service of services) {
- const { id, version, cwd } = serviceWatcher[serviceFileReference[path.basename(service)]]
+ const { id, version, cwd } = serviceRegistry[serviceFileReference[path.basename(service)]]
const instance = spawnService({ id, service, cwd })
- // push to pool
- instancePool.push({
+ const serviceInstance = {
id,
version,
instance
- })
+ }
+
+ // push to pool
+ instancePool.push(serviceInstance)
// if is NODE_ENV to development, start a file watcher for hot-reload
if (process.env.NODE_ENV === "development") {
diff --git a/packages/server/middlewares/withAuthentication/index.js b/packages/server/middlewares/withAuthentication/index.js
index b8997202..80e1fb30 100755
--- a/packages/server/middlewares/withAuthentication/index.js
+++ b/packages/server/middlewares/withAuthentication/index.js
@@ -1,8 +1,8 @@
-import { authorizedServerTokens } from "../../classes/DbModels"
+import { authorizedServerTokens } from "../../db_models"
import SecureEntry from "../../classes/SecureEntry"
import AuthToken from "../../classes/AuthToken"
-export default async (req, res, next) => {
+export default async (req, res) => {
function reject(description) {
return res.status(401).json({ error: `${description ?? "Invalid session"}` })
}
@@ -35,7 +35,7 @@ export default async (req, res, next) => {
user: validation.user
}
- return next()
+ return
}
case "Server": {
const [client_id, token] = tokenAuthHeader[1].split(":")
@@ -65,7 +65,7 @@ export default async (req, res, next) => {
roles: ["server"],
}
- return next()
+ return
}
default: {
return reject("Invalid token type")
diff --git a/packages/server/package.json b/packages/server/package.json
index d681e165..5cffaebf 100755
--- a/packages/server/package.json
+++ b/packages/server/package.json
@@ -22,7 +22,6 @@
"clui": "^0.3.6",
"dotenv": "^16.4.4",
"http-proxy-middleware": "^2.0.6",
- "hyper-express": "^6.14.12",
"jsonwebtoken": "^9.0.2",
"linebridge": "^0.16.0",
"module-alias": "^2.2.3",
diff --git a/packages/server/services/auth/classes/account/index.js b/packages/server/services/auth/classes/account/index.js
new file mode 100644
index 00000000..be8c1a17
--- /dev/null
+++ b/packages/server/services/auth/classes/account/index.js
@@ -0,0 +1,7 @@
+export default class Account {
+ static usernameMeetPolicy = require("./methods/usernameMeetPolicy").default
+ static passwordMeetPolicy = require("./methods/passwordMeetPolicy").default
+ static loginStrategy = require("./methods/loginStrategy").default
+ static changePassword = require("./methods/changePassword").default
+ static create = require("./methods/create").default
+}
\ No newline at end of file
diff --git a/packages/server/services/auth/classes/account/methods/changePassword.js b/packages/server/services/auth/classes/account/methods/changePassword.js
new file mode 100644
index 00000000..482ee6a2
--- /dev/null
+++ b/packages/server/services/auth/classes/account/methods/changePassword.js
@@ -0,0 +1,39 @@
+import bcrypt from "bcrypt"
+import { User, OperationLog } from "@db_models"
+import Account from "@classes/account"
+
+export default async ({ user_id, old_hash, old_password, new_password, log_comment }, req) => {
+ let user = await User.findById(user_id).select("+password")
+
+ user = await Account.loginStrategy({ password: old_password, hash: old_hash }, user)
+
+ await Account.passwordMeetPolicy(new_password)
+
+ user.password = bcrypt.hashSync(new_password, parseInt(process.env.BCRYPT_ROUNDS ?? 3))
+
+ await user.save()
+
+ const operation = {
+ type: "password:changed",
+ user_id: user._id.toString(),
+ date: Date.now(),
+ comments: []
+ }
+
+ if (log_comment) {
+ operation.comments.push(log_comment)
+ }
+
+ if (typeof req === "object") {
+ operation.ip_address = req.headers["x-forwarded-for"]?.split(",")[0] ?? req.socket?.remoteAddress ?? req.ip
+ operation.client = req.headers["user-agent"]
+ }
+
+ const log = new OperationLog(operation)
+
+ await log.save()
+
+ ipc.invoke("ems", "password:changed", operation)
+
+ return user
+}
\ No newline at end of file
diff --git a/packages/server/services/auth/classes/account/methods/create.js b/packages/server/services/auth/classes/account/methods/create.js
new file mode 100644
index 00000000..c9d6f0f0
--- /dev/null
+++ b/packages/server/services/auth/classes/account/methods/create.js
@@ -0,0 +1,53 @@
+import bcrypt from "bcrypt"
+import { User } from "@db_models"
+import requiredFields from "@shared-utils/requiredFields"
+import Account from "@classes/account"
+
+export default async (payload) => {
+ requiredFields(["username", "password", "email"], payload)
+
+ let { username, password, email, fullName, roles, avatar, acceptTos } = payload
+
+ if (ToBoolean(acceptTos) !== true) {
+ throw new OperationError(400, "You must accept the terms of service in order to create an account.")
+ }
+
+ await Account.usernameMeetPolicy(username)
+
+ // check if username is already taken
+ const existentUser = await User.findOne({ username: username })
+
+ if (existentUser) {
+ throw new OperationError(400, "User already exists")
+ }
+
+ // check if the email is already in use
+ const existentEmail = await User.findOne({ email: email })
+
+ if (existentEmail) {
+ throw new OperationError(400, "Email already in use")
+ }
+
+ await Account.passwordMeetPolicy(password)
+
+ // hash the password
+ const hash = bcrypt.hashSync(password, parseInt(process.env.BCRYPT_ROUNDS ?? 3))
+
+ let user = new User({
+ username: username,
+ password: hash,
+ email: email,
+ fullName: fullName,
+ avatar: avatar ?? `https://api.dicebear.com/7.x/thumbs/svg?seed=${username}`,
+ roles: roles,
+ createdAt: new Date().getTime(),
+ acceptTos: acceptTos,
+ })
+
+ await user.save()
+
+ // TODO: dispatch event bus
+ //global.eventBus.emit("user.create", user)
+
+ return user
+}
\ No newline at end of file
diff --git a/packages/server/services/auth/classes/account/methods/loginStrategy.js b/packages/server/services/auth/classes/account/methods/loginStrategy.js
new file mode 100644
index 00000000..6dc87e06
--- /dev/null
+++ b/packages/server/services/auth/classes/account/methods/loginStrategy.js
@@ -0,0 +1,28 @@
+import bcrypt from "bcrypt"
+import { User } from "@db_models"
+
+export default async ({ username, password, hash }, user) => {
+ if (typeof user === "undefined") {
+ let isEmail = username.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)
+
+ let query = isEmail ? { email: username } : { username: username }
+
+ user = await User.findOne(query).select("+password")
+ }
+
+ if (!user) {
+ throw new OperationError(401, "User not found")
+ }
+
+ if (typeof hash !== "undefined") {
+ if (user.password !== hash) {
+ throw new OperationError(401, "Invalid credentials")
+ }
+ } else {
+ if (!bcrypt.compareSync(password, user.password)) {
+ throw new OperationError(401, "Invalid credentials")
+ }
+ }
+
+ return user
+}
\ No newline at end of file
diff --git a/packages/server/services/auth/classes/account/methods/passwordMeetPolicy.js b/packages/server/services/auth/classes/account/methods/passwordMeetPolicy.js
new file mode 100644
index 00000000..71393465
--- /dev/null
+++ b/packages/server/services/auth/classes/account/methods/passwordMeetPolicy.js
@@ -0,0 +1,11 @@
+export default async (password) => {
+ if (password.length < 8) {
+ throw new OperationError(400, "Password must be at least 8 characters")
+ }
+
+ if (password.length > 64) {
+ throw new OperationError(400, "Password cannot be longer than 64 characters")
+ }
+
+ return true
+}
\ No newline at end of file
diff --git a/packages/server/services/auth/classes/account/methods/usernameMeetPolicy.js b/packages/server/services/auth/classes/account/methods/usernameMeetPolicy.js
new file mode 100644
index 00000000..708aaf3a
--- /dev/null
+++ b/packages/server/services/auth/classes/account/methods/usernameMeetPolicy.js
@@ -0,0 +1,26 @@
+export default async (username) => {
+ if (username.length < 3) {
+ throw new OperationError(400, "Username must be at least 3 characters")
+ }
+
+ if (username.length > 64) {
+ throw new OperationError(400, "Username cannot be longer than 64 characters")
+ }
+
+ // if username has capital letters, throw error
+ if (username !== username.toLowerCase()) {
+ throw new OperationError(400, "Username must be lowercase")
+ }
+
+ // make sure the username has no spaces
+ if (username.includes(" ")) {
+ throw new OperationError(400, "Username cannot contain spaces")
+ }
+
+ // make sure the username has no valid characters. Only letters, numbers, and underscores
+ if (!/^[a-z0-9_]+$/.test(username)) {
+ throw new OperationError(400, "Username can only contain letters, numbers, and underscores")
+ }
+
+ return true
+}
diff --git a/packages/server/services/auth/routes/auth/delete.js b/packages/server/services/auth/routes/auth/delete.js
index a9da4127..fc40c5c6 100644
--- a/packages/server/services/auth/routes/auth/delete.js
+++ b/packages/server/services/auth/routes/auth/delete.js
@@ -1,4 +1,4 @@
-import { Session } from "@shared-classes/DbModels"
+import { Session } from "@db_models"
export default {
middlewares: ["withAuthentication"],
diff --git a/packages/server/services/auth/routes/auth/password/put.js b/packages/server/services/auth/routes/auth/password/put.js
new file mode 100644
index 00000000..8dba178e
--- /dev/null
+++ b/packages/server/services/auth/routes/auth/password/put.js
@@ -0,0 +1,23 @@
+import Account from "@classes/account"
+import requiredFields from "@shared-utils/requiredFields"
+
+export default {
+ middlewares: ["withAuthentication"],
+ fn: async (req) => {
+ requiredFields(["old_password", "new_password"], req.body)
+
+ await Account.changePassword(
+ {
+ user_id: req.auth.session.user_id,
+ old_password: req.body.old_password,
+ new_password: req.body.new_password,
+ log_comment: "Changed from password change request"
+ },
+ req
+ )
+
+ return {
+ message: "Password changed"
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/services/auth/routes/auth/post.js b/packages/server/services/auth/routes/auth/post.js
index 0d5232c3..8eb9b558 100644
--- a/packages/server/services/auth/routes/auth/post.js
+++ b/packages/server/services/auth/routes/auth/post.js
@@ -1,36 +1,97 @@
import AuthToken from "@shared-classes/AuthToken"
-import { User } from "@shared-classes/DbModels"
+import { UserConfig, MFASession } from "@db_models"
import requiredFields from "@shared-utils/requiredFields"
-import bcrypt from "bcrypt"
+
+import Account from "@classes/account"
export default async (req, res) => {
requiredFields(["username", "password"], req.body)
- const { username, password } = req.body
+ const user = await Account.loginStrategy({
+ username: req.body.username,
+ password: req.body.password,
+ })
- let isEmail = username.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)
+ const userConfig = await UserConfig.findOne({ user_id: user._id.toString() }).catch(() => {
+ return {}
+ })
- let query = isEmail ? { email: username } : { username: username }
+ if (userConfig && userConfig.values) {
+ if (userConfig.values.mfa_enabled) {
+ let codeVerified = false
- const user = await User.findOne(query).select("+password")
+ // search if is already a mfa session
+ let mfaSession = await MFASession.findOne({ user_id: user._id })
- if (!user) {
- throw new OperationError(401, "User not found")
+ if (mfaSession) {
+ if (!req.body.mfa_code) {
+ await mfaSession.delete()
+ } else {
+ if (mfaSession.expires_at < new Date().getTime()) {
+ await mfaSession.delete()
+
+ throw new OperationError(401, "MFA code expired, login again...")
+ }
+
+ if (mfaSession.code == req.body.mfa_code) {
+ codeVerified = true
+ await mfaSession.delete()
+ } else {
+ throw new OperationError(401, "Invalid MFA code, try again...")
+ }
+ }
+ }
+
+ if (!codeVerified) {
+ const mfa = {
+ type: "email",
+ user_id: user._id,
+
+ code: Math.floor(Math.random() * 9000) + 1000,
+
+ created_at: new Date().getTime(),
+ // expires in 1 hour
+ expires_at: new Date().getTime() + 60 * 60 * 1000,
+
+ ip_address: req.headers["x-forwarded-for"]?.split(",")[0] ?? req.socket?.remoteAddress ?? req.ip,
+ client: req.headers["user-agent"],
+ }
+
+ // create a new mfa session
+ mfaSession = new MFASession(mfa)
+
+ await mfaSession.save()
+
+ ipc.invoke("ems", "mfa:send", mfa)
+
+ return {
+ message: `MFA required, using [${mfa.type}] method.`,
+ mfa_required: true,
+ }
+ }
+ }
}
- if (!bcrypt.compareSync(password, user.password)) {
- return res.status(401).json({
- message: "Invalid credentials",
- })
- }
-
- const token = await AuthToken.createAuth({
+ const authData = {
+ date: new Date().getTime(),
username: user.username,
user_id: user._id.toString(),
ip_address: req.headers["x-forwarded-for"]?.split(",")[0] ?? req.socket?.remoteAddress ?? req.ip,
client: req.headers["user-agent"],
- //signLocation: global.signLocation,
- })
+ }
+
+ const token = await AuthToken.createAuth(authData)
+
+ // emit to ems to notify user for the new login, in the background
+ try {
+ global.ipc.call("ems", "new:login", authData).catch((error) => {
+ // whoipsi dupsi
+ console.error(error)
+ })
+ } catch (error) {
+ // whoipsi dupsi
+ console.error(error)
+ }
return { token: token }
}
\ No newline at end of file
diff --git a/packages/server/services/auth/routes/availability/get.js b/packages/server/services/auth/routes/availability/get.js
index f9453a52..89f58b0f 100644
--- a/packages/server/services/auth/routes/availability/get.js
+++ b/packages/server/services/auth/routes/availability/get.js
@@ -1,4 +1,4 @@
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
export default async (req) => {
const { username, email } = req.query
diff --git a/packages/server/services/auth/routes/forgot/[apr_code]/post.js b/packages/server/services/auth/routes/forgot/[apr_code]/post.js
new file mode 100644
index 00000000..bda8a25b
--- /dev/null
+++ b/packages/server/services/auth/routes/forgot/[apr_code]/post.js
@@ -0,0 +1,45 @@
+import { User, APRSession } from "@db_models"
+import requiredFields from "@shared-utils/requiredFields"
+
+import Account from "@classes/account"
+
+export default async (req) => {
+ requiredFields(["new_password"], req.body)
+
+ const { apr_code } = req.params
+
+ const apr = await APRSession.findOne({ code: apr_code })
+
+ if (!apr) {
+ throw new OperationError(400, "Request not found")
+ }
+
+ if (apr.expires_at < new Date().getTime()) {
+ throw new OperationError(400, "Request expired")
+ }
+
+ if (apr.status !== "sended") {
+ throw new OperationError(400, "Request already completed")
+ }
+
+ const user = await User.findById(apr.user_id).select("+password")
+
+ await Account.changePassword(
+ {
+ user_id: apr.user_id,
+ old_hash: user.password,
+ new_password: req.body.new_password,
+ log_comment: "Changed from APR request"
+ },
+ req,
+ )
+
+ apr.status = "completed"
+ apr.completed_at = Date.now()
+
+ await apr.save()
+
+ return {
+ message: "Password changed",
+ }
+}
\ No newline at end of file
diff --git a/packages/server/services/auth/routes/forgot/post.js b/packages/server/services/auth/routes/forgot/post.js
new file mode 100644
index 00000000..654fe71a
--- /dev/null
+++ b/packages/server/services/auth/routes/forgot/post.js
@@ -0,0 +1,49 @@
+import { User, APRSession } from "@db_models"
+import requiredFields from "@shared-utils/requiredFields"
+
+export default async (req) => {
+ requiredFields(["email"], req.body)
+
+ const { email } = req.body
+
+ const user = await User.findOne({ email })
+
+ if (!user) {
+ throw new OperationError(400, "User not found")
+ }
+
+ const apr = new APRSession({
+ user_id: user._id.toString(),
+
+ created_at: new Date().getTime(),
+ expires_at: new Date().getTime() + 60 * 60 * 1000,
+
+ code: nanoid(),
+
+ ip_address: req.headers["x-forwarded-for"]?.split(",")[0] ?? req.socket?.remoteAddress ?? req.ip,
+ client: req.headers["user-agent"],
+
+ status: "sended",
+ })
+
+ await apr.save()
+
+ await ipc.call("ems", "apr:send", {
+ user_id: user._id.toString(),
+ username: user.username,
+ email: user.email,
+ code: apr.code,
+ apr_link: `https://comty.app/forgot/apr/${apr.code}`,
+
+ created_at: apr.created_at,
+ expires_at: apr.expires_at,
+
+ client: apr.client,
+ ip_address: apr.ip_address,
+ })
+
+ return {
+ message: `Email sent to ${email}`,
+ sent: true,
+ }
+}
\ No newline at end of file
diff --git a/packages/server/services/auth/routes/register/post.js b/packages/server/services/auth/routes/register/post.js
index b136c859..36cad636 100644
--- a/packages/server/services/auth/routes/register/post.js
+++ b/packages/server/services/auth/routes/register/post.js
@@ -1,72 +1,7 @@
-import { User } from "@shared-classes/DbModels"
-import bcrypt from "bcrypt"
-
-import requiredFields from "@shared-utils/requiredFields"
+import Account from "@classes/account"
export default async (req) => {
- requiredFields(["username", "password", "email"], req.body)
+ const result = await Account.create(req.body)
- let { username, password, email, fullName, roles, avatar, acceptTos } = req.body
-
- if (ToBoolean(acceptTos) !== true) {
- throw new OperationError(400, "You must accept the terms of service in order to create an account.")
- }
-
- if (username.length < 3) {
- throw new OperationError(400, "Username must be at least 3 characters")
- }
-
- if (username.length > 64) {
- throw new OperationError(400, "Username cannot be longer than 64 characters")
- }
-
- // if username has capital letters, throw error
- if (username !== username.toLowerCase()) {
- throw new OperationError(400, "Username must be lowercase")
- }
-
- // make sure the username has no spaces
- if (username.includes(" ")) {
- throw new OperationError(400, "Username cannot contain spaces")
- }
-
- // make sure the username has no valid characters. Only letters, numbers, and underscores
- if (!/^[a-z0-9_]+$/.test(username)) {
- throw new OperationError(400, "Username can only contain letters, numbers, and underscores")
- }
-
- // check if username is already taken
- const existentUser = await User.findOne({ username: username })
-
- if (existentUser) {
- throw new OperationError(400, "User already exists")
- }
-
- // check if the email is already in use
- const existentEmail = await User.findOne({ email: email })
-
- if (existentEmail) {
- throw new OperationError(400, "Email already in use")
- }
-
- // hash the password
- const hash = bcrypt.hashSync(password, parseInt(process.env.BCRYPT_ROUNDS ?? 3))
-
- let user = new User({
- username: username,
- password: hash,
- email: email,
- fullName: fullName,
- avatar: avatar ?? `https://api.dicebear.com/7.x/thumbs/svg?seed=${username}`,
- roles: roles,
- createdAt: new Date().getTime(),
- acceptTos: acceptTos,
- })
-
- await user.save()
-
- // TODO: dispatch event bus
- //global.eventBus.emit("user.create", user)
-
- return user
+ return result
}
\ No newline at end of file
diff --git a/packages/server/services/ems/ems.service.js b/packages/server/services/ems/ems.service.js
index 2a0c49a4..4516ad92 100644
--- a/packages/server/services/ems/ems.service.js
+++ b/packages/server/services/ems/ems.service.js
@@ -1,5 +1,8 @@
import { Server } from "linebridge/src/server"
import nodemailer from "nodemailer"
+import DbManager from "@shared-classes/DbManager"
+
+import SharedMiddlewares from "@shared-middlewares"
export default class API extends Server {
static refName = "ems"
@@ -7,7 +10,12 @@ export default class API extends Server {
static routesPath = `${__dirname}/routes`
static listen_port = process.env.HTTP_LISTEN_PORT ?? 3007
+ middlewares = {
+ ...SharedMiddlewares
+ }
+
contexts = {
+ db: new DbManager(),
mailTransporter: nodemailer.createTransport({
host: process.env.SMTP_HOSTNAME,
port: process.env.SMTP_PORT ?? 587,
@@ -18,6 +26,17 @@ export default class API extends Server {
},
}),
}
+
+ ipcEvents = {
+ "new:login": require("./ipcEvents/newLogin").default,
+ "mfa:send": require("./ipcEvents/mfaSend").default,
+ "apr:send": require("./ipcEvents/aprSend").default,
+ "password:changed": require("./ipcEvents/passwordChanged").default,
+ }
+
+ async onInitialize() {
+ await this.contexts.db.initialize()
+ }
}
Boot(API)
\ No newline at end of file
diff --git a/packages/server/services/ems/ipcEvents/aprSend.js b/packages/server/services/ems/ipcEvents/aprSend.js
new file mode 100644
index 00000000..f8adb269
--- /dev/null
+++ b/packages/server/services/ems/ipcEvents/aprSend.js
@@ -0,0 +1,26 @@
+import templates from "../templates"
+
+export default async (ctx, data) => {
+ const { user_id, username, email, apr_link, created_at, expires_at, ip_address, client } = data
+
+ if (!user_id || !username || !email || !apr_link || !created_at || !expires_at || !ip_address || !client) {
+ throw new OperationError(400, "Bad request")
+ }
+
+ const result = await ctx.mailTransporter.sendMail({
+ from: process.env.SMTP_USERNAME,
+ to: email,
+ subject: "Password reset",
+ html: templates.password_recovery({
+ username: username,
+
+ apr_link: apr_link,
+
+ date: new Date(created_at),
+ ip: ip_address,
+ client: client,
+ }),
+ })
+
+ return result
+}
diff --git a/packages/server/services/ems/ipcEvents/mfaSend.js b/packages/server/services/ems/ipcEvents/mfaSend.js
new file mode 100644
index 00000000..86b1cc88
--- /dev/null
+++ b/packages/server/services/ems/ipcEvents/mfaSend.js
@@ -0,0 +1,27 @@
+// TODO: Support SMS 2fa
+import { User } from "@db_models"
+import templates from "../templates"
+
+export default async (ctx, data) => {
+ const user = await User.findById(data.user_id)
+
+ if (!user) {
+ throw new OperationError(404, "User not found")
+ }
+
+ const result = await ctx.mailTransporter.sendMail({
+ from: process.env.SMTP_USERNAME,
+ to: user.email,
+ subject: "Verification code",
+ html: templates.mfa_code({
+ mfa_code: data.code,
+ username: user.username,
+ date: new Date(data.created_at),
+ expires_at: new Date(data.expires_at),
+ ip: data.ip_address,
+ client: data.client,
+ }),
+ })
+
+ return result
+}
diff --git a/packages/server/services/ems/ipcEvents/newLogin.js b/packages/server/services/ems/ipcEvents/newLogin.js
new file mode 100644
index 00000000..6fe05d9f
--- /dev/null
+++ b/packages/server/services/ems/ipcEvents/newLogin.js
@@ -0,0 +1,24 @@
+import { User } from "@db_models"
+import templates from "../templates"
+
+export default async (ctx, data) => {
+ const user = await User.findById(data.user_id)
+
+ if (!user) {
+ throw new OperationError(404, "User not found")
+ }
+
+ const result = await ctx.mailTransporter.sendMail({
+ from: process.env.SMTP_USERNAME,
+ to: user.email,
+ subject: "New login",
+ html: templates.new_login({
+ date: new Date(data.date),
+ ip: data.ip_address,
+ client: data.client,
+ username: user.username
+ }),
+ })
+
+ return result
+}
diff --git a/packages/server/services/ems/ipcEvents/passwordChanged.js b/packages/server/services/ems/ipcEvents/passwordChanged.js
new file mode 100644
index 00000000..2bf1b8d5
--- /dev/null
+++ b/packages/server/services/ems/ipcEvents/passwordChanged.js
@@ -0,0 +1,24 @@
+import { User } from "@db_models"
+import templates from "../templates"
+
+export default async (ctx, data) => {
+ const user = await User.findById(data.user_id)
+
+ if (!user) {
+ throw new OperationError(404, "User not found")
+ }
+
+ const result = await ctx.mailTransporter.sendMail({
+ from: process.env.SMTP_USERNAME,
+ to: user.email,
+ subject: "Your password has been changed",
+ html: templates.password_changed({
+ username: user.username,
+ date: new Date(data.date),
+ ip: data.ip_address,
+ client: data.client,
+ }),
+ })
+
+ return result
+}
diff --git a/packages/server/services/ems/package.json b/packages/server/services/ems/package.json
index 7835ffcb..c1beaa73 100644
--- a/packages/server/services/ems/package.json
+++ b/packages/server/services/ems/package.json
@@ -4,7 +4,12 @@
"version": "0.1.0",
"main": "index.js",
"license": "MIT",
+ "proxy": {
+ "path": "/ems",
+ "port": 3007
+ },
"dependencies": {
+ "handlebars": "^4.7.8",
"nodemailer": "^6.9.11",
"web-push": "^3.6.7"
}
diff --git a/packages/server/services/ems/routes/dispatch/post.js b/packages/server/services/ems/routes/dispatch/post.js
index 92fa9023..c5f01470 100644
--- a/packages/server/services/ems/routes/dispatch/post.js
+++ b/packages/server/services/ems/routes/dispatch/post.js
@@ -1,5 +1,6 @@
export default {
useContext: ["mailTransporter"],
+ middlewares: ["withAuthentication"],
fn: async (req, res) => {
req.body = await req.urlencoded()
diff --git a/packages/server/services/ems/routes/preview/email/[email]/get.js b/packages/server/services/ems/routes/preview/email/[email]/get.js
new file mode 100644
index 00000000..d5362690
--- /dev/null
+++ b/packages/server/services/ems/routes/preview/email/[email]/get.js
@@ -0,0 +1,21 @@
+import templates from "../../../../templates"
+
+const testData = {
+ email: "test@example",
+ ip: "127.0.0.1",
+ client: "Firefox",
+ username: "test",
+ date: new Date(),
+ apr_link: "https://comty.app",
+ mfa_code: "000-000-000",
+}
+
+export default (req, res) => {
+ const { email } = req.params
+
+ if (!templates[email]) {
+ throw new OperationError(404, "Template not found")
+ }
+
+ return res.html(templates[email](testData))
+}
\ No newline at end of file
diff --git a/packages/server/services/ems/routes/test/deep/xd/get.js b/packages/server/services/ems/routes/test/deep/xd/get.js
deleted file mode 100644
index 420692ef..00000000
--- a/packages/server/services/ems/routes/test/deep/xd/get.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default (req, res) => {
- return res.json({
- message: "Hi! from the deeps."
- })
-}
\ No newline at end of file
diff --git a/packages/server/services/ems/routes/test/get.js b/packages/server/services/ems/routes/test/get.js
deleted file mode 100644
index 3c5e2c2a..00000000
--- a/packages/server/services/ems/routes/test/get.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default async (req, res) => {
- return res.json({
- msg: "HI!!"
- })
-}
\ No newline at end of file
diff --git a/packages/server/services/ems/templates/index.js b/packages/server/services/ems/templates/index.js
new file mode 100644
index 00000000..5d5404ec
--- /dev/null
+++ b/packages/server/services/ems/templates/index.js
@@ -0,0 +1,11 @@
+import fs from "node:fs"
+import path from "node:path"
+
+import Handlebars from "handlebars"
+
+export default {
+ new_login: Handlebars.compile(fs.readFileSync(path.resolve(__dirname, "new_login/index.handlebars"), "utf-8")),
+ mfa_code: Handlebars.compile(fs.readFileSync(path.resolve(__dirname, "mfa_code/index.handlebars"), "utf-8")),
+ password_recovery: Handlebars.compile(fs.readFileSync(path.resolve(__dirname, "password_recovery/index.handlebars"), "utf-8")),
+ password_changed: Handlebars.compile(fs.readFileSync(path.resolve(__dirname, "password_changed/index.handlebars"), "utf-8")),
+}
\ No newline at end of file
diff --git a/packages/server/services/ems/templates/mfa_code/index.handlebars b/packages/server/services/ems/templates/mfa_code/index.handlebars
new file mode 100644
index 00000000..0914eeff
--- /dev/null
+++ b/packages/server/services/ems/templates/mfa_code/index.handlebars
@@ -0,0 +1,673 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Here
+ is the verification code you need to log in.
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Wasn't
+ it you? So it looks like someone new is trying to log into
+ your account.
+
+
+
+
+ ¡In
+ this case, we recommend change your password as soon as
+ possible!
+
+
+
+
+ Here's
+ more information about this login attempt.
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+ |
+
+
+
+
+
+ {{client}}
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/server/services/ems/templates/new_login/index.handlebars b/packages/server/services/ems/templates/new_login/index.handlebars
new file mode 100644
index 00000000..86e3e7cf
--- /dev/null
+++ b/packages/server/services/ems/templates/new_login/index.handlebars
@@ -0,0 +1,444 @@
+
+
+
+
+ Comty
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hi
+ @{{username}}
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A
+ new device has been logged into your account.
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+ |
+
+
+
+
+
+ {{client}}
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/server/services/ems/templates/password_changed/index.handlebars b/packages/server/services/ems/templates/password_changed/index.handlebars
new file mode 100644
index 00000000..932f31eb
--- /dev/null
+++ b/packages/server/services/ems/templates/password_changed/index.handlebars
@@ -0,0 +1,36 @@
+
+
+
+ Hi @{{username}}
+ Your password has been changed successfully.
+
+
+ Wasn't it you? Please contact us inmediately to recover your account.
+
+
+ or contact via email
+ support@ragestudio.net
+
+
+ Request information:
+
+
+
+
+ Date: |
+ {{date}} |
+
+
+ Client: |
+ {{client}} |
+
+
+ IP |
+ {{ip}} |
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/server/services/ems/templates/password_recovery/index.handlebars b/packages/server/services/ems/templates/password_recovery/index.handlebars
new file mode 100644
index 00000000..e61aa06c
--- /dev/null
+++ b/packages/server/services/ems/templates/password_recovery/index.handlebars
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ It
+ sounds like you need some help recovering your
+ account.
+
+
+
+
+ Don't
+ worry, here is a link to change your password.
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This
+ link will only be available for 1 hour
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/server/services/feed/FeedController/index.js b/packages/server/services/feed/FeedController/index.js
new file mode 100755
index 00000000..6260e6e4
--- /dev/null
+++ b/packages/server/services/feed/FeedController/index.js
@@ -0,0 +1,140 @@
+import { Controller } from "linebridge/dist/server"
+
+import pmap from "p-map"
+
+import getPosts from "./services/getPosts"
+
+import getGlobalReleases from "./services/getGlobalReleases"
+import getReleasesFromFollowing from "./services/getReleasesFromFollowing"
+import getPlaylistsFromFollowing from "./services/getPlaylistsFromFollowing"
+
+export default class FeedController extends Controller {
+ static refName = "FeedController"
+ static useRoute = "/feed"
+
+ httpEndpoints = {
+ get: {
+ "/timeline": {
+ middlewares: ["withAuthentication"],
+ fn: async (req, res) => {
+ const for_user_id = req.user?._id.toString()
+
+ if (!for_user_id) {
+ return res.status(400).json({
+ error: "Invalid user id"
+ })
+ }
+
+ // fetch posts
+ let posts = await getPosts({
+ for_user_id,
+ limit: req.query?.limit,
+ skip: req.query?.trim,
+ })
+
+ // add type to posts and playlists
+ posts = posts.map((data) => {
+ data.type = "post"
+
+ return data
+ })
+
+ let feed = [
+ ...posts,
+ ]
+
+ // sort feed
+ feed.sort((a, b) => {
+ return new Date(b.created_at) - new Date(a.created_at)
+ })
+
+ return res.json(feed)
+ }
+ },
+ "/music/global": {
+ middlewares: ["withAuthentication"],
+ fn: async (req, res) => {
+ const for_user_id = req.user?._id.toString()
+
+ if (!for_user_id) {
+ return res.status(400).json({
+ error: "Invalid user id"
+ })
+ }
+
+ // fetch playlists from global
+ const result = await getGlobalReleases({
+ for_user_id,
+ limit: req.query?.limit,
+ skip: req.query?.trim,
+ })
+
+ return res.json(result)
+ }
+ },
+ "/music": {
+ middlewares: ["withAuthentication"],
+ fn: async (req, res) => {
+ const for_user_id = req.user?._id.toString()
+
+ if (!for_user_id) {
+ return res.status(400).json({
+ error: "Invalid user id"
+ })
+ }
+
+ const searchers = [
+ getGlobalReleases,
+ //getReleasesFromFollowing,
+ //getPlaylistsFromFollowing,
+ ]
+
+ let result = await pmap(
+ searchers,
+ async (fn, index) => {
+ const data = await fn({
+ for_user_id,
+ limit: req.query?.limit,
+ skip: req.query?.trim,
+ })
+
+ return data
+ }, {
+ concurrency: 3,
+ },)
+
+ result = result.reduce((acc, cur) => {
+ return [...acc, ...cur]
+ }, [])
+
+ return res.json(result)
+ }
+ },
+ "/posts": {
+ middlewares: ["withAuthentication"],
+ fn: async (req, res) => {
+ const for_user_id = req.user?._id.toString()
+
+ if (!for_user_id) {
+ return res.status(400).json({
+ error: "Invalid user id"
+ })
+ }
+
+ let feed = []
+
+ // fetch posts
+ const posts = await getPosts({
+ for_user_id,
+ limit: req.query?.limit,
+ skip: req.query?.trim,
+ })
+
+ feed = feed.concat(posts)
+
+ return res.json(feed)
+ }
+ },
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/services/feed/FeedController/services/getGlobalReleases.js b/packages/server/services/feed/FeedController/services/getGlobalReleases.js
new file mode 100755
index 00000000..d0c88316
--- /dev/null
+++ b/packages/server/services/feed/FeedController/services/getGlobalReleases.js
@@ -0,0 +1,25 @@
+import { Release } from "@db_models"
+
+export default async (payload) => {
+ const {
+ limit = 20,
+ skip = 0,
+ } = payload
+
+ let releases = await Release.find({
+ $or: [
+ { public: true },
+ ]
+ })
+ .sort({ created_at: -1 })
+ .limit(limit)
+ .skip(skip)
+
+ releases = Promise.all(releases.map(async (release) => {
+ release = release.toObject()
+
+ return release
+ }))
+
+ return releases
+}
\ No newline at end of file
diff --git a/packages/server/services/feed/FeedController/services/getPlaylistsFromFollowing.js b/packages/server/services/feed/FeedController/services/getPlaylistsFromFollowing.js
new file mode 100755
index 00000000..9faac13d
--- /dev/null
+++ b/packages/server/services/feed/FeedController/services/getPlaylistsFromFollowing.js
@@ -0,0 +1,42 @@
+import { Playlist, User, UserFollow } from "@db_models"
+
+export default async (payload) => {
+ const {
+ for_user_id,
+ limit = 20,
+ skip = 0,
+ } = payload
+
+ // get post from users that the user follows
+ const followingUsers = await UserFollow.find({
+ user_id: for_user_id
+ })
+
+ const followingUserIds = followingUsers.map((followingUser) => followingUser.to)
+
+ const fetchFromUserIds = [
+ for_user_id,
+ ...followingUserIds,
+ ]
+
+ // firter out the playlists that are not public
+ let playlists = await Playlist.find({
+ user_id: { $in: fetchFromUserIds },
+ $or: [
+ { public: true },
+ ]
+ })
+ .sort({ created_at: -1 })
+ .limit(limit)
+ .skip(skip)
+
+ playlists = Promise.all(playlists.map(async (playlist) => {
+ playlist = playlist.toObject()
+
+ playlist.type = "playlist"
+
+ return playlist
+ }))
+
+ return playlists
+}
\ No newline at end of file
diff --git a/packages/server/services/feed/FeedController/services/getPosts.js b/packages/server/services/feed/FeedController/services/getPosts.js
new file mode 100755
index 00000000..4d68c706
--- /dev/null
+++ b/packages/server/services/feed/FeedController/services/getPosts.js
@@ -0,0 +1,39 @@
+import { Post, UserFollow } from "@db_models"
+
+import fullfillPostsData from "@utils/fullfillPostsData"
+
+export default async (payload) => {
+ const {
+ for_user_id,
+ limit = 20,
+ skip = 0,
+ } = payload
+
+ // get post from users that the user follows
+ const followingUsers = await UserFollow.find({
+ user_id: for_user_id
+ })
+
+ const followingUserIds = followingUsers.map((followingUser) => followingUser.to)
+
+ const fetchPostsFromIds = [
+ for_user_id,
+ ...followingUserIds,
+ ]
+
+ let posts = await Post.find({
+ user_id: { $in: fetchPostsFromIds }
+ })
+ .sort({ created_at: -1 })
+ .limit(limit)
+ .skip(skip)
+
+ // fullfill data
+ posts = await fullfillPostsData({
+ posts,
+ for_user_id,
+ skip,
+ })
+
+ return posts
+}
\ No newline at end of file
diff --git a/packages/server/services/feed/FeedController/services/getReleasesFromFollowing.js b/packages/server/services/feed/FeedController/services/getReleasesFromFollowing.js
new file mode 100755
index 00000000..bd35e20f
--- /dev/null
+++ b/packages/server/services/feed/FeedController/services/getReleasesFromFollowing.js
@@ -0,0 +1,40 @@
+import { Release, UserFollow } from "@db_models"
+
+export default async (payload) => {
+ const {
+ for_user_id,
+ limit = 20,
+ skip = 0,
+ } = payload
+
+ // get post from users that the user follows
+ const followingUsers = await UserFollow.find({
+ user_id: for_user_id
+ })
+
+ const followingUserIds = followingUsers.map((followingUser) => followingUser.to)
+
+ const fetchFromUserIds = [
+ for_user_id,
+ ...followingUserIds,
+ ]
+
+ // firter out the releases that are not public
+ let releases = await Release.find({
+ user_id: { $in: fetchFromUserIds },
+ $or: [
+ { public: true },
+ ]
+ })
+ .sort({ created_at: -1 })
+ .limit(limit)
+ .skip(skip)
+
+ releases = Promise.all(releases.map(async (release) => {
+ release = release.toObject()
+
+ return release
+ }))
+
+ return releases
+}
\ No newline at end of file
diff --git a/packages/server/services/feed/feed.service.js b/packages/server/services/feed/feed.service.js
new file mode 100644
index 00000000..6e41e198
--- /dev/null
+++ b/packages/server/services/feed/feed.service.js
@@ -0,0 +1,25 @@
+import { Server } from "linebridge/src/server"
+import DbManager from "@shared-classes/DbManager"
+
+import SharedMiddlewares from "@shared-middlewares"
+
+export default class API extends Server {
+ static refName = "feed"
+ static useEngine = "hyper-express"
+ static routesPath = `${__dirname}/routes`
+ static listen_port = process.env.HTTP_LISTEN_PORT ?? 3007
+
+ middlewares = {
+ ...SharedMiddlewares
+ }
+
+ contexts = {
+ db: new DbManager(),
+ }
+
+ async onInitialize() {
+ await this.contexts.db.initialize()
+ }
+}
+
+Boot(API)
\ No newline at end of file
diff --git a/packages/server/services/feed/package.json b/packages/server/services/feed/package.json
new file mode 100644
index 00000000..941c7b1e
--- /dev/null
+++ b/packages/server/services/feed/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "feed",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT"
+}
diff --git a/packages/server/services/files/file.service.js b/packages/server/services/files/file.service.js
index 8ee64d08..55eabd2e 100755
--- a/packages/server/services/files/file.service.js
+++ b/packages/server/services/files/file.service.js
@@ -1,188 +1,40 @@
-import fs from "fs"
-import path from "path"
-import cors from "cors"
-import express from "express"
+import { Server } from "linebridge/src/server"
import B2 from "backblaze-b2"
import RedisClient from "@shared-classes/RedisClient"
import StorageClient from "@shared-classes/StorageClient"
import CacheService from "@shared-classes/CacheService"
-import ComtyClient from "@shared-classes/ComtyClient"
-import pkg from "./package.json"
+import SharedMiddlewares from "@shared-middlewares"
-global.DEFAULT_HEADERS = {
- "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept, Authorization, provider-type, Provider-Type",
- "Access-Control-Allow-Origin": "*",
- "Access-Control-Allow-Methods": "GET, POST, OPTIONS, PUT, PATCH, DELETE, DEL",
- "Access-Control-Allow-Credentials": "true",
-}
+class API extends Server {
+ static refName = "files"
+ static useEngine = "hyper-express"
+ static routesPath = `${__dirname}/routes`
+ static listen_port = process.env.HTTP_LISTEN_PORT ?? 3008
-global.DEFAULT_MIDDLEWARES = [
- cors({
- "origin": "*",
- "methods": DEFAULT_HEADERS["Access-Control-Allow-Methods"],
- "preflightContinue": true,
- "optionsSuccessStatus": 204,
- }),
-]
-
-export default class FileServerAPI {
- // max body length is 1GB in bytes
static maxBodyLength = 1000 * 1000 * 1000
- internalRouter = express.Router()
-
- server = global.server = express()
-
- listenIp = process.env.HTTP_LISTEN_IP ?? "0.0.0.0"
- listenPort = process.env.HTTP_LISTEN_PORT ?? 3002
-
- redis = global.redis = RedisClient()
-
- storage = global.storage = StorageClient()
-
- b2Storage = global.b2Storage = new B2({
- applicationKeyId: process.env.B2_KEY_ID,
- applicationKey: process.env.B2_APP_KEY,
- })
-
- cache = global.cache = new CacheService()
-
- comty = global.comty = ComtyClient({
- useWs: false,
- })
-
- async __loadControllers() {
- let controllersPath = fs.readdirSync(path.resolve(__dirname, "controllers"))
-
- for await (const controllerPath of controllersPath) {
- const controller = require(path.resolve(__dirname, "controllers", controllerPath)).default
-
- if (!controller) {
- this.server.InternalConsole.error(`Controller ${controllerPath} not found.`)
-
- continue
- }
-
- const handler = await controller(express.Router())
-
- if (!handler) {
- this.server.InternalConsole.error(`Controller ${controllerPath} returning not valid handler.`)
-
- continue
- }
-
- this.internalRouter.use(handler.path ?? "/", handler.router)
-
- continue
- }
+ middlewares = {
+ ...SharedMiddlewares
}
- async __loadMiddlewares() {
- let middlewaresPath = fs.readdirSync(path.resolve(__dirname, "useMiddlewares"))
-
- if (this.constructor.useMiddlewaresOrder) {
- middlewaresPath = middlewaresPath.sort((a, b) => {
- const aIndex = this.constructor.useMiddlewaresOrder.indexOf(a.replace(".js", ""))
- const bIndex = this.constructor.useMiddlewaresOrder.indexOf(b.replace(".js", ""))
-
- if (aIndex === -1) {
- return 1
- }
-
- if (bIndex === -1) {
- return -1
- }
-
- return aIndex - bIndex
- })
- }
-
- for await (const middlewarePath of middlewaresPath) {
- const middleware = require(path.resolve(__dirname, "useMiddlewares", middlewarePath)).default
-
- if (!middleware) {
- this.server.InternalConsole.error(`Middleware ${middlewarePath} not found.`)
-
- continue
- }
-
- this.server.use(middleware)
- }
+ contexts = {
+ cache: new CacheService(),
+ redis: RedisClient(),
+ storage: StorageClient(),
+ b2Storage: new B2({
+ applicationKeyId: process.env.B2_KEY_ID,
+ applicationKey: process.env.B2_APP_KEY,
+ }),
}
- __getRegisteredRoutes() {
- return this.internalRouter.routes.map((route) => {
- return {
- method: route.method,
- path: route.pattern,
- }
- })
- }
-
- __registerInternalRoutes() {
- this.internalRouter.get("/", (req, res) => {
- return res.status(200).json({
- name: pkg.name,
- version: pkg.version,
- })
- })
-
- // this.internalRouter.get("/routes", (req, res) => {
- // return res.status(200).json(this.__getRegisteredRoutes())
- // })
-
- this.internalRouter.get("*", (req, res) => {
- return res.status(404).json({
- error: "Not found",
- })
- })
- }
-
- async initialize() {
- const startHrTime = process.hrtime()
-
- // initialize clients
- await this.redis.initialize()
- await this.storage.initialize()
- await this.b2Storage.authorize()
-
- this.server.use((req, res, next) => {
- Object.keys(global.DEFAULT_HEADERS).forEach((key) => {
- res.setHeader(key, global.DEFAULT_HEADERS[key])
- res.header[key] = global.DEFAULT_HEADERS[key]
- })
-
- next()
- })
-
- global.DEFAULT_MIDDLEWARES.forEach((middleware) => {
- this.server.use(middleware)
- })
-
- this.server.use(express.json({ extended: false }))
- this.server.use(express.urlencoded({ extended: true }))
-
- // register controllers & middlewares
- await this.__loadControllers()
- await this.__loadMiddlewares()
- await this.__registerInternalRoutes()
-
- // use internal router
- this.server.use(this.internalRouter)
-
- // start server
- await this.server.listen(this.listenPort, this.listenIp)
-
- // calculate elapsed time
- const elapsedHrTime = process.hrtime(startHrTime)
- const elapsedTimeInMs = elapsedHrTime[0] * 1000 + elapsedHrTime[1] / 1e6
-
- // log server started
- console.log(`🚀 Server started ready on \n\t - http://${this.listenIp}:${this.listenPort} \n\t - Tooks ${elapsedTimeInMs}ms`)
+ async onInitialize() {
+ await this.contexts.redis.initialize()
+ await this.contexts.storage.initialize()
+ await this.contexts.b2Storage.authorize()
}
}
-Boot(FileServerAPI)
\ No newline at end of file
+Boot(API)
\ No newline at end of file
diff --git a/packages/server/services/files/middlewares/withAuth/index.js b/packages/server/services/files/middlewares/withAuth/index.js
deleted file mode 100755
index 52a30f4a..00000000
--- a/packages/server/services/files/middlewares/withAuth/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-export default async function (req, res, next) {
- // extract authentification header
- let auth = req.headers.authorization
-
- if (!auth) {
- return res.status(401).json({ error: "Unauthorized, missing token" })
- }
-
- auth = auth.replace("Bearer ", "")
-
- // check if authentification is valid
- const validation = await comty.rest.session.validateToken(auth).catch((error) => {
- return {
- valid: false,
- }
- })
-
- if (!validation.valid) {
- return res.status(401).json({ error: "Unauthorized" })
- }
-
- req.session = validation.data
-
- return next()
-}
\ No newline at end of file
diff --git a/packages/server/services/files/middlewares/withOptionalAuth/index.js b/packages/server/services/files/middlewares/withOptionalAuth/index.js
deleted file mode 100755
index 962d15d0..00000000
--- a/packages/server/services/files/middlewares/withOptionalAuth/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-export default function (req, res, next) {
- // extract authentification header
- let auth = req.headers.authorization
-
- if (!auth) {
- return next()
- }
-
- auth = req.sessionToken = auth.replace("Bearer ", "")
-
- // check if authentification is valid
- comty.rest.session.validateToken(auth)
- .catch((error) => {
- return {
- valid: false,
- }
- })
- .then((validation) => {
- req.session = validation.data
-
- next()
- })
-}
\ No newline at end of file
diff --git a/packages/server/services/files/middlewares/withWsAuth.js b/packages/server/services/files/middlewares/withWsAuth.js
deleted file mode 100755
index 31fed9d9..00000000
--- a/packages/server/services/files/middlewares/withWsAuth.js
+++ /dev/null
@@ -1,55 +0,0 @@
-export default async (socket, next) => {
- try {
- const token = socket.handshake.auth.token
-
- if (!token) {
- return next(new Error(`auth:token_missing`))
- }
-
- const validation = await global.comty.rest.session.validateToken(token).catch((err) => {
- console.error(`[${socket.id}] failed to validate session caused by server error`, err)
-
- return {
- valid: false,
- error: err,
- }
- })
-
- if (!validation.valid) {
- if (validation.error) {
- return next(new Error(`auth:server_error`))
- }
-
- return next(new Error(`auth:token_invalid`))
- }
-
- const session = validation.data
-
- const userData = await global.comty.rest.user.data({
- user_id: session.user_id,
- }).catch((err) => {
- console.error(`[${socket.id}] failed to get user data caused by server error`, err)
-
- return null
- })
-
- if (!userData) {
- return next(new Error(`auth:user_failed`))
- }
-
- try {
- socket.userData = userData
- socket.token = token
- socket.session = session
- }
- catch (err) {
- return next(new Error(`auth:decode_failed`))
- }
-
- next()
- } catch (error) {
- console.error(`[${socket.id}] failed to connect caused by server error`, error)
-
- next(new Error(`auth:authentification_failed`))
- }
-}
\ No newline at end of file
diff --git a/packages/server/services/files/package.json b/packages/server/services/files/package.json
index 5748e152..21fad390 100755
--- a/packages/server/services/files/package.json
+++ b/packages/server/services/files/package.json
@@ -20,7 +20,7 @@
"luxon": "^3.0.4",
"merge-files": "^0.1.2",
"mime-types": "^2.1.35",
- "sharp": "^0.33.2",
+ "sharp": "0.32.6",
"minio": "^7.0.32",
"moment": "^2.29.4",
"moment-timezone": "^0.5.40",
diff --git a/packages/server/services/files/routes/stream/[$]/get.js b/packages/server/services/files/routes/stream/[$]/get.js
new file mode 100644
index 00000000..8ecf5ffc
--- /dev/null
+++ b/packages/server/services/files/routes/stream/[$]/get.js
@@ -0,0 +1,25 @@
+import mimetypes from "mime-types"
+
+export default {
+ useContext: ["storage"],
+ fn: async (req, res) => {
+ const streamPath = req.path.replace(req.route.pattern.replace("*", ""), "/")
+
+ this.default.contexts.storage.getObject(process.env.S3_BUCKET, streamPath, (err, dataStream) => {
+ if (err) {
+ return res.status(404).end()
+ }
+
+ const extname = mimetypes.lookup(streamPath)
+
+ // send chunked response
+ res.status(200)
+
+ // set headers
+ res.setHeader("Content-Type", extname)
+ res.setHeader("Accept-Ranges", "bytes")
+
+ return dataStream.pipe(res)
+ })
+ }
+}
\ No newline at end of file
diff --git a/packages/server/services/files/routes/upload/chunk/post.js b/packages/server/services/files/routes/upload/chunk/post.js
new file mode 100644
index 00000000..0fd030c8
--- /dev/null
+++ b/packages/server/services/files/routes/upload/chunk/post.js
@@ -0,0 +1,104 @@
+import path from "path"
+import fs from "fs"
+
+import FileUpload from "@shared-classes/FileUpload"
+import PostProcess from "@services/post-process"
+
+export default {
+ useContext: ["cache", "storage", "b2Storage"],
+ middlewares: [
+ "withAuthentication",
+ ],
+ fn: async (req, res) => {
+ const { cache, storage, b2Storage } = this.default.contexts
+
+ const providerType = req.headers["provider-type"]
+
+ const userPath = path.join(cache.constructor.cachePath, req.session.user_id)
+
+ // 10 GB in bytes
+ const maxFileSize = 10 * 1000 * 1000 * 1000
+
+ // 10MB in bytes
+ const maxChunkSize = 10 * 1000 * 1000
+
+ let build = await FileUpload(req, userPath, maxFileSize, maxChunkSize)
+ .catch((err) => {
+ console.log("err", err)
+
+ throw new OperationError(500, err.message)
+ })
+
+ if (build === false) {
+ return false
+ } else {
+ if (typeof build === "function") {
+ try {
+ build = await build()
+
+ if (!req.headers["no-compression"]) {
+ build = await PostProcess(build)
+ }
+
+ // compose remote path
+ const remotePath = `${req.session.user_id}/${path.basename(build.filepath)}`
+
+ let url = null
+
+ switch (providerType) {
+ case "premium-cdn": {
+ // use backblaze b2
+ await b2Storage.authorize()
+
+ const uploadUrl = await b2Storage.getUploadUrl({
+ bucketId: process.env.B2_BUCKET_ID,
+ })
+
+ const data = await fs.promises.readFile(build.filepath)
+
+ await b2Storage.uploadFile({
+ uploadUrl: uploadUrl.data.uploadUrl,
+ uploadAuthToken: uploadUrl.data.authorizationToken,
+ fileName: remotePath,
+ data: data,
+ info: build.metadata
+ })
+
+ url = `https://${process.env.B2_CDN_ENDPOINT}/${process.env.B2_BUCKET}/${remotePath}`
+
+ break
+ }
+ default: {
+ // upload to storage
+ await storage.fPutObject(process.env.S3_BUCKET, remotePath, build.filepath, build.metadata ?? {
+ "Content-Type": build.mimetype,
+ })
+
+ // compose url
+ url = storage.composeRemoteURL(remotePath)
+
+ break
+ }
+ }
+
+ // remove from cache
+ fs.promises.rm(build.cachePath, { recursive: true, force: true })
+
+ return res.json({
+ name: build.filename,
+ id: remotePath,
+ url: url,
+ })
+ } catch (error) {
+ console.log(error)
+
+ throw new OperationError(500, error.message)
+ }
+ }
+
+ return res.json({
+ success: true,
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/services/files/useMiddlewares/useCors/index.js b/packages/server/services/files/useMiddlewares/useCors/index.js
deleted file mode 100755
index 7ebac0fc..00000000
--- a/packages/server/services/files/useMiddlewares/useCors/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import cors from "cors"
-
-export default cors({
- origin: "*",
- methods: ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD", "CONNECT", "TRACE"],
- preflightContinue: false,
- optionsSuccessStatus: 204,
-})
\ No newline at end of file
diff --git a/packages/server/services/files/useMiddlewares/useLogger/index.js b/packages/server/services/files/useMiddlewares/useLogger/index.js
deleted file mode 100755
index 1d398fc1..00000000
--- a/packages/server/services/files/useMiddlewares/useLogger/index.js
+++ /dev/null
@@ -1,19 +0,0 @@
-export default (req, res, next) => {
- const startHrTime = process.hrtime()
-
- res.on("finish", () => {
- const elapsedHrTime = process.hrtime(startHrTime)
- const elapsedTimeInMs = elapsedHrTime[0] * 1000 + elapsedHrTime[1] / 1e6
-
- res._responseTimeMs = elapsedTimeInMs
-
- // cut req.url if is too long
- if (req.url.length > 100) {
- req.url = req.url.substring(0, 100) + "..."
- }
-
- console.log(`${req.method} ${res._status_code ?? res.statusCode ?? 200} ${req.url} ${elapsedTimeInMs}ms`)
- })
-
- next()
-}
\ No newline at end of file
diff --git a/packages/server/services/files/utils/createRoutesFromDirectory/index.js b/packages/server/services/files/utils/createRoutesFromDirectory/index.js
deleted file mode 100755
index f27647a0..00000000
--- a/packages/server/services/files/utils/createRoutesFromDirectory/index.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import fs from "fs"
-
-function createRoutesFromDirectory(startFrom, directoryPath, router) {
- const files = fs.readdirSync(directoryPath)
-
- files.forEach((file) => {
- const filePath = `${directoryPath}/${file}`
-
- const stat = fs.statSync(filePath)
-
- if (stat.isDirectory()) {
- createRoutesFromDirectory(startFrom, filePath, router)
- } else if (file.endsWith(".js") || file.endsWith(".jsx") || file.endsWith(".ts") || file.endsWith(".tsx")) {
- let splitedFilePath = filePath.split("/")
-
- // slice the startFrom path
- splitedFilePath = splitedFilePath.slice(splitedFilePath.indexOf(startFrom) + 1)
-
- const method = splitedFilePath[0]
-
- let route = splitedFilePath.slice(1, splitedFilePath.length).join("/")
-
- route = route.replace(".jsx", "")
- route = route.replace(".js", "")
- route = route.replace(".ts", "")
- route = route.replace(".tsx", "")
-
- if (route === "index") {
- route = "/"
- } else {
- route = `/${route}`
- }
-
- let handler = require(filePath)
-
- handler = handler.default || handler
-
- router[method](route, handler)
- }
- })
-
- return router
-}
-
-export default createRoutesFromDirectory
\ No newline at end of file
diff --git a/packages/server/services/files/utils/getMiddlewares/index.js b/packages/server/services/files/utils/getMiddlewares/index.js
deleted file mode 100755
index 78a65ea0..00000000
--- a/packages/server/services/files/utils/getMiddlewares/index.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import fs from "node:fs"
-import path from "node:path"
-
-export default async (middlewares, middlewaresPath) => {
- if (typeof middlewaresPath === "undefined") {
- middlewaresPath = path.resolve(globalThis["__src"], "middlewares")
- }
-
- if (!fs.existsSync(middlewaresPath)) {
- return undefined
- }
-
- if (typeof middlewares === "string") {
- middlewares = [middlewares]
- }
-
- let fns = []
-
- for await (const middlewareName of middlewares) {
- const middlewarePath = path.resolve(middlewaresPath, middlewareName)
-
- if (!fs.existsSync(middlewarePath)) {
- console.error(`Middleware ${middlewareName} not found.`)
-
- continue
- }
-
- const middleware = require(middlewarePath).default
-
- if (!middleware) {
- console.error(`Middleware ${middlewareName} not valid export.`)
-
- continue
- }
-
- if (typeof middleware !== "function") {
- console.error(`Middleware ${middlewareName} not valid function.`)
-
- continue
- }
-
- fns.push(middleware)
- }
-
- return fns
-}
\ No newline at end of file
diff --git a/packages/server/services/files/utils/replaceImportsWithRemoteURL/index.js b/packages/server/services/files/utils/replaceImportsWithRemoteURL/index.js
deleted file mode 100755
index bc08db37..00000000
--- a/packages/server/services/files/utils/replaceImportsWithRemoteURL/index.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import resolveUrl from "@utils/resolveUrl"
-
-export default (code, rootURL) => {
- const importRegex = /import\s+(?:(?:([\w*\s{},]*)\s+from\s+)?["']([^"']*)["']|["']([^"']*)["'])/g
-
- // replaces all imports with absolute paths
- const absoluteImportCode = code.replace(importRegex, (match, p1, p2) => {
- let resolved = resolveUrl(rootURL, p2)
-
- if (!p1) {
- return `import "${resolved}"`
- }
-
- return `import ${p1} from "${resolved}"`
- })
-
- return absoluteImportCode
-}
\ No newline at end of file
diff --git a/packages/server/services/main/controllers/AdminController/endpoints/accounts_statistics.js b/packages/server/services/main/controllers/AdminController/endpoints/accounts_statistics.js
index a2bf9566..3e910a66 100755
--- a/packages/server/services/main/controllers/AdminController/endpoints/accounts_statistics.js
+++ b/packages/server/services/main/controllers/AdminController/endpoints/accounts_statistics.js
@@ -1,4 +1,4 @@
-import { User, Session, Post } from "@shared-classes/DbModels"
+import { User, Session, Post } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/AdminController/endpoints/delete_featured_wallpaper.js b/packages/server/services/main/controllers/AdminController/endpoints/delete_featured_wallpaper.js
index 529638d1..15dfea3b 100755
--- a/packages/server/services/main/controllers/AdminController/endpoints/delete_featured_wallpaper.js
+++ b/packages/server/services/main/controllers/AdminController/endpoints/delete_featured_wallpaper.js
@@ -1,4 +1,4 @@
-import { FeaturedWallpaper } from "@shared-classes/DbModels"
+import { FeaturedWallpaper } from "@db_models"
export default {
method: "DELETE",
diff --git a/packages/server/services/main/controllers/AdminController/endpoints/featured_wallpaper.js b/packages/server/services/main/controllers/AdminController/endpoints/featured_wallpaper.js
index 35fa8cd2..37658319 100755
--- a/packages/server/services/main/controllers/AdminController/endpoints/featured_wallpaper.js
+++ b/packages/server/services/main/controllers/AdminController/endpoints/featured_wallpaper.js
@@ -1,4 +1,4 @@
-import { FeaturedWallpaper } from "@shared-classes/DbModels"
+import { FeaturedWallpaper } from "@db_models"
import momentTimezone from "moment-timezone"
export default {
diff --git a/packages/server/services/main/controllers/AdminController/endpoints/resetPassword.js b/packages/server/services/main/controllers/AdminController/endpoints/resetPassword.js
index 28fbbce9..7973baab 100755
--- a/packages/server/services/main/controllers/AdminController/endpoints/resetPassword.js
+++ b/packages/server/services/main/controllers/AdminController/endpoints/resetPassword.js
@@ -1,4 +1,4 @@
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
import bcrypt from "bcrypt"
diff --git a/packages/server/services/main/controllers/AdminController/endpoints/update_user_data.js b/packages/server/services/main/controllers/AdminController/endpoints/update_user_data.js
index 732875b5..b08f5986 100755
--- a/packages/server/services/main/controllers/AdminController/endpoints/update_user_data.js
+++ b/packages/server/services/main/controllers/AdminController/endpoints/update_user_data.js
@@ -1,4 +1,4 @@
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
export default {
method: "POST",
diff --git a/packages/server/services/main/controllers/AuthController/endpoints/dataValidation.js b/packages/server/services/main/controllers/AuthController/endpoints/dataValidation.js
deleted file mode 100755
index 1a99ec5f..00000000
--- a/packages/server/services/main/controllers/AuthController/endpoints/dataValidation.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import { User } from "@shared-classes/DbModels"
-
-export default {
- method: "GET",
- route: "/login/validation",
- fn: async function (req, res) {
- // just check if the provided user or/and email exists, if is return false, otherwise return true
- const { username, email } = req.query
-
- if (!username && !email) {
- return res.status(400).json({
- message: "Missing username or email",
- })
- }
-
- const user = await User.findOne({
- $or: [
- { username: username },
- { email: email },
- ]
- }).catch((error) => {
- return false
- })
-
- if (user) {
- return res.json({
- message: "User already exists",
- exists: true,
- })
- } else {
- return res.json({
- message: "User doesn't exists",
- exists: false,
- })
- }
- }
-}
\ No newline at end of file
diff --git a/packages/server/services/main/controllers/AuthController/endpoints/otpSend.js b/packages/server/services/main/controllers/AuthController/endpoints/otpSend.js
deleted file mode 100644
index c7bbefec..00000000
--- a/packages/server/services/main/controllers/AuthController/endpoints/otpSend.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
- method: "GET",
- route: "/otp/verify",
- fn: async function (req, res) {
-
- }
-}
\ No newline at end of file
diff --git a/packages/server/services/main/controllers/AuthController/endpoints/userLogin.js b/packages/server/services/main/controllers/AuthController/endpoints/userLogin.js
deleted file mode 100755
index de153128..00000000
--- a/packages/server/services/main/controllers/AuthController/endpoints/userLogin.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import Token from "@lib/token"
-import { User } from "@shared-classes/DbModels"
-import bcrypt from "bcrypt"
-
-export default {
- method: "POST",
- route: "/login",
- fn: async (req, res) => {
- const { username, password } = req.body
-
- let isEmail = username.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)
-
- let query = isEmail ? { email: username } : { username: username }
-
- const user = await User.findOne(query).select("+password")
-
- if (!user) {
- return res.status(401).json({
- message: "Invalid credentials, user not found",
- })
- }
-
- if (!bcrypt.compareSync(password, user.password)) {
- return res.status(401).json({
- message: "Invalid credentials",
- })
- }
-
- const token = await Token.createAuth({
- username: user.username,
- user_id: user._id.toString(),
- ip_address: req.headers["x-forwarded-for"]?.split(",")[0] ?? req.socket.remoteAddress,
- client: req.headers["user-agent"],
- signLocation: global.signLocation,
- })
-
- return res.json({ token: token })
- }
-}
\ No newline at end of file
diff --git a/packages/server/services/main/controllers/AuthController/endpoints/userLogout.js b/packages/server/services/main/controllers/AuthController/endpoints/userLogout.js
deleted file mode 100755
index 877b21bd..00000000
--- a/packages/server/services/main/controllers/AuthController/endpoints/userLogout.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Session } from "@shared-classes/DbModels"
-
-export default {
- method: "POST",
- route: "/logout",
- middlewares: ["withAuthentication"],
- fn: async (req, res) => {
- const { token, user_id } = req.body
-
- if (typeof user_id === "undefined") {
- return res.status(400).json({
- message: "No user_id provided",
- })
- }
- if (typeof token === "undefined") {
- return res.status(400).json({
- message: "No token provided",
- })
- }
-
- const session = await Session.findOneAndDelete({ user_id, token })
-
- if (session) {
- return res.json({
- message: "Session deleted",
- })
- }
-
- return res.status(404).json({
- message: "Session not found",
- })
- },
-}
\ No newline at end of file
diff --git a/packages/server/services/main/controllers/AuthController/endpoints/userRegister.js b/packages/server/services/main/controllers/AuthController/endpoints/userRegister.js
deleted file mode 100755
index 2d9344bb..00000000
--- a/packages/server/services/main/controllers/AuthController/endpoints/userRegister.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import { Schematized } from "@lib"
-
-import createUser from "../methods/createUser"
-
-export default {
- method: "POST",
- route: "/register",
- fn: Schematized({
- required: ["username", "email", "password"],
- select: ["username", "email", "password", "fullName"],
- }, async (req, res) => {
- const result = await createUser(req.selection).catch((err) => {
- console.error(err)
-
- res.status(500).json({
- message: `Error creating user > ${err.message}`,
- })
-
- return false
- })
-
- if (!result) {
- return false
- }
-
- return res.json(result)
- })
-}
\ No newline at end of file
diff --git a/packages/server/services/main/controllers/AuthController/index.js b/packages/server/services/main/controllers/AuthController/index.js
deleted file mode 100755
index 87c2d19e..00000000
--- a/packages/server/services/main/controllers/AuthController/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Controller } from "linebridge/dist/server"
-import generateEndpointsFromDir from "linebridge/dist/server/lib/generateEndpointsFromDir"
-
-export default class AuthController extends Controller {
- static refName = "AuthController"
- static useRoute = "/auth"
-
- httpEndpoints = generateEndpointsFromDir(__dirname + "/endpoints")
-}
\ No newline at end of file
diff --git a/packages/server/services/main/controllers/AuthController/methods/createUser.js b/packages/server/services/main/controllers/AuthController/methods/createUser.js
deleted file mode 100755
index 3a43c0af..00000000
--- a/packages/server/services/main/controllers/AuthController/methods/createUser.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import { User } from "@shared-classes/DbModels"
-import bcrypt from "bcrypt"
-
-export default async function (payload) {
- let { username, password, email, fullName, roles, avatar } = payload
-
- // if username has capital letters, throw error
- if (username !== username.toLowerCase()) {
- throw new Error("Username must be lowercase")
- }
-
- // make sure the username has no spaces
- if (username.includes(" ")) {
- throw new Error("Username cannot contain spaces")
- }
-
- // make sure the username has no valid characters. Only letters, numbers, and underscores
- if (!/^[a-z0-9_]+$/.test(username)) {
- throw new Error("Username can only contain letters, numbers, and underscores")
- }
-
- // check if username is already taken
- const existentUser = await User.findOne({ username: username })
-
- if (existentUser) {
- throw new Error("User already exists")
- }
-
- // check if the email is already in use
- const existentEmail = await User.findOne({ email: email })
-
- if (existentEmail) {
- throw new Error("Email already in use")
- }
-
- // hash the password
- const hash = bcrypt.hashSync(password, parseInt(process.env.BCRYPT_ROUNDS ?? 3))
-
- // create the doc
- let user = new User({
- username: username,
- password: hash,
- email: email,
- fullName: fullName,
- avatar: avatar ?? `https://api.dicebear.com/7.x/thumbs/svg?seed=${username}`,
- roles: roles,
- createdAt: new Date().getTime(),
- })
-
- await user.save()
-
- // dispatch event bus
- global.eventBus.emit("user.create", user)
-
- return user
-}
\ No newline at end of file
diff --git a/packages/server/services/main/controllers/BadgesController/endpoints/deleteBadge.js b/packages/server/services/main/controllers/BadgesController/endpoints/deleteBadge.js
index b12ddf94..ca061bfe 100755
--- a/packages/server/services/main/controllers/BadgesController/endpoints/deleteBadge.js
+++ b/packages/server/services/main/controllers/BadgesController/endpoints/deleteBadge.js
@@ -1,4 +1,4 @@
-import { Badge } from "@shared-classes/DbModels"
+import { Badge } from "@db_models"
export default {
method: "DELETE",
diff --git a/packages/server/services/main/controllers/BadgesController/endpoints/getBadges.js b/packages/server/services/main/controllers/BadgesController/endpoints/getBadges.js
index 21a6fab5..e5cdeda2 100755
--- a/packages/server/services/main/controllers/BadgesController/endpoints/getBadges.js
+++ b/packages/server/services/main/controllers/BadgesController/endpoints/getBadges.js
@@ -1,5 +1,5 @@
import { Schematized } from "@lib"
-import { Badge } from "@shared-classes/DbModels"
+import { Badge } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/BadgesController/endpoints/getUserBadges.js b/packages/server/services/main/controllers/BadgesController/endpoints/getUserBadges.js
index 3c385fb4..7b777572 100755
--- a/packages/server/services/main/controllers/BadgesController/endpoints/getUserBadges.js
+++ b/packages/server/services/main/controllers/BadgesController/endpoints/getUserBadges.js
@@ -1,4 +1,4 @@
-import { User, Badge } from "@shared-classes/DbModels"
+import { User, Badge } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/BadgesController/endpoints/giveToUser.js b/packages/server/services/main/controllers/BadgesController/endpoints/giveToUser.js
index 9b858321..0db01a2b 100755
--- a/packages/server/services/main/controllers/BadgesController/endpoints/giveToUser.js
+++ b/packages/server/services/main/controllers/BadgesController/endpoints/giveToUser.js
@@ -1,4 +1,4 @@
-import { Badge, User } from "@shared-classes/DbModels"
+import { Badge, User } from "@db_models"
import { Schematized } from "@lib"
export default {
diff --git a/packages/server/services/main/controllers/BadgesController/endpoints/putBadge.js b/packages/server/services/main/controllers/BadgesController/endpoints/putBadge.js
index f813acfd..62e38896 100755
--- a/packages/server/services/main/controllers/BadgesController/endpoints/putBadge.js
+++ b/packages/server/services/main/controllers/BadgesController/endpoints/putBadge.js
@@ -1,4 +1,4 @@
-import { Badge } from "@shared-classes/DbModels"
+import { Badge } from "@db_models"
import { Schematized } from "@lib"
export default {
diff --git a/packages/server/services/main/controllers/BadgesController/endpoints/removeToUser.js b/packages/server/services/main/controllers/BadgesController/endpoints/removeToUser.js
index 7865219d..fd9ce0cc 100755
--- a/packages/server/services/main/controllers/BadgesController/endpoints/removeToUser.js
+++ b/packages/server/services/main/controllers/BadgesController/endpoints/removeToUser.js
@@ -1,5 +1,5 @@
import { Schematized } from "@lib"
-import { Badge, User } from "@shared-classes/DbModels"
+import { Badge, User } from "@db_models"
export default {
method: "DELETE",
diff --git a/packages/server/services/main/controllers/CommentsController/services/deleteComment.js b/packages/server/services/main/controllers/CommentsController/services/deleteComment.js
index 95c90aa9..63ef98b2 100755
--- a/packages/server/services/main/controllers/CommentsController/services/deleteComment.js
+++ b/packages/server/services/main/controllers/CommentsController/services/deleteComment.js
@@ -1,4 +1,4 @@
-import { Comment } from "@shared-classes/DbModels"
+import { Comment } from "@db_models"
import CheckUserAdmin from "../../../lib/checkUserAdmin"
export default async (payload) => {
diff --git a/packages/server/services/main/controllers/CommentsController/services/getComments.js b/packages/server/services/main/controllers/CommentsController/services/getComments.js
index 4ef805f2..b27bac87 100755
--- a/packages/server/services/main/controllers/CommentsController/services/getComments.js
+++ b/packages/server/services/main/controllers/CommentsController/services/getComments.js
@@ -1,4 +1,4 @@
-import { User, Comment } from "@shared-classes/DbModels"
+import { User, Comment } from "@db_models"
export default async (payload = {}) => {
const { parent_id } = payload
diff --git a/packages/server/services/main/controllers/CommentsController/services/newComment.js b/packages/server/services/main/controllers/CommentsController/services/newComment.js
index 7a0c6f4d..f6d9cac6 100755
--- a/packages/server/services/main/controllers/CommentsController/services/newComment.js
+++ b/packages/server/services/main/controllers/CommentsController/services/newComment.js
@@ -1,4 +1,4 @@
-import { User, Comment } from "@shared-classes/DbModels"
+import { User, Comment } from "@db_models"
export default async (payload) => {
const { parent_id, message, user_id } = payload
diff --git a/packages/server/services/main/controllers/FeaturedEventsController/index.js b/packages/server/services/main/controllers/FeaturedEventsController/index.js
index d001b18a..a1d91325 100755
--- a/packages/server/services/main/controllers/FeaturedEventsController/index.js
+++ b/packages/server/services/main/controllers/FeaturedEventsController/index.js
@@ -1,6 +1,6 @@
import { Controller } from "linebridge/dist/server"
-import { FeaturedEvent } from "@shared-classes/DbModels"
+import { FeaturedEvent } from "@db_models"
import createFeaturedEvent from "./services/createFeaturedEvent"
// TODO: Migrate to new linebridge 0.15 endpoint classes instead of this
diff --git a/packages/server/services/main/controllers/FeaturedEventsController/services/createFeaturedEvent.js b/packages/server/services/main/controllers/FeaturedEventsController/services/createFeaturedEvent.js
index a6da743b..97c25de7 100755
--- a/packages/server/services/main/controllers/FeaturedEventsController/services/createFeaturedEvent.js
+++ b/packages/server/services/main/controllers/FeaturedEventsController/services/createFeaturedEvent.js
@@ -1,4 +1,4 @@
-import { FeaturedEvent } from "@shared-classes/DbModels"
+import { FeaturedEvent } from "@db_models"
export default async (payload) => {
const {
diff --git a/packages/server/services/main/controllers/FeedController/services/getGlobalReleases.js b/packages/server/services/main/controllers/FeedController/services/getGlobalReleases.js
index 71a99b36..d0c88316 100755
--- a/packages/server/services/main/controllers/FeedController/services/getGlobalReleases.js
+++ b/packages/server/services/main/controllers/FeedController/services/getGlobalReleases.js
@@ -1,4 +1,4 @@
-import { Release } from "@shared-classes/DbModels"
+import { Release } from "@db_models"
export default async (payload) => {
const {
diff --git a/packages/server/services/main/controllers/FeedController/services/getPlaylistsFromFollowing.js b/packages/server/services/main/controllers/FeedController/services/getPlaylistsFromFollowing.js
index ef7bbd6f..9faac13d 100755
--- a/packages/server/services/main/controllers/FeedController/services/getPlaylistsFromFollowing.js
+++ b/packages/server/services/main/controllers/FeedController/services/getPlaylistsFromFollowing.js
@@ -1,4 +1,4 @@
-import { Playlist, User, UserFollow } from "@shared-classes/DbModels"
+import { Playlist, User, UserFollow } from "@db_models"
export default async (payload) => {
const {
diff --git a/packages/server/services/main/controllers/FeedController/services/getPosts.js b/packages/server/services/main/controllers/FeedController/services/getPosts.js
index c5cbf1db..4d68c706 100755
--- a/packages/server/services/main/controllers/FeedController/services/getPosts.js
+++ b/packages/server/services/main/controllers/FeedController/services/getPosts.js
@@ -1,4 +1,4 @@
-import { Post, UserFollow } from "@shared-classes/DbModels"
+import { Post, UserFollow } from "@db_models"
import fullfillPostsData from "@utils/fullfillPostsData"
diff --git a/packages/server/services/main/controllers/FeedController/services/getReleasesFromFollowing.js b/packages/server/services/main/controllers/FeedController/services/getReleasesFromFollowing.js
index 97488b6b..bd35e20f 100755
--- a/packages/server/services/main/controllers/FeedController/services/getReleasesFromFollowing.js
+++ b/packages/server/services/main/controllers/FeedController/services/getReleasesFromFollowing.js
@@ -1,4 +1,4 @@
-import { Release, UserFollow } from "@shared-classes/DbModels"
+import { Release, UserFollow } from "@db_models"
export default async (payload) => {
const {
diff --git a/packages/server/services/main/controllers/FollowController/endpoints/getFollowStatus.js b/packages/server/services/main/controllers/FollowController/endpoints/getFollowStatus.js
index c9934750..1622636d 100755
--- a/packages/server/services/main/controllers/FollowController/endpoints/getFollowStatus.js
+++ b/packages/server/services/main/controllers/FollowController/endpoints/getFollowStatus.js
@@ -1,4 +1,4 @@
-import { UserFollow } from "@shared-classes/DbModels"
+import { UserFollow } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/FollowController/endpoints/getUserFollowers.js b/packages/server/services/main/controllers/FollowController/endpoints/getUserFollowers.js
index ca1b7eb1..b4a144e9 100755
--- a/packages/server/services/main/controllers/FollowController/endpoints/getUserFollowers.js
+++ b/packages/server/services/main/controllers/FollowController/endpoints/getUserFollowers.js
@@ -1,4 +1,4 @@
-import { User, UserFollow } from "@shared-classes/DbModels"
+import { User, UserFollow } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/FollowController/endpoints/toggleFollow.js b/packages/server/services/main/controllers/FollowController/endpoints/toggleFollow.js
index 58d89bbe..3043512c 100755
--- a/packages/server/services/main/controllers/FollowController/endpoints/toggleFollow.js
+++ b/packages/server/services/main/controllers/FollowController/endpoints/toggleFollow.js
@@ -1,5 +1,5 @@
import { Schematized } from "@lib"
-import { User, UserFollow } from "@shared-classes/DbModels"
+import { User, UserFollow } from "@db_models"
import followUser from "../services/followUser"
import unfollowUser from "../services/unfollowUser"
diff --git a/packages/server/services/main/controllers/FollowController/services/followUser.js b/packages/server/services/main/controllers/FollowController/services/followUser.js
index f6044842..9232b576 100755
--- a/packages/server/services/main/controllers/FollowController/services/followUser.js
+++ b/packages/server/services/main/controllers/FollowController/services/followUser.js
@@ -1,4 +1,4 @@
-import { User, UserFollow } from "@shared-classes/DbModels"
+import { User, UserFollow } from "@db_models"
export default async (payload) => {
if (typeof payload.user_id === "undefined") {
diff --git a/packages/server/services/main/controllers/FollowController/services/unfollowUser.js b/packages/server/services/main/controllers/FollowController/services/unfollowUser.js
index d7218c77..dfd37328 100755
--- a/packages/server/services/main/controllers/FollowController/services/unfollowUser.js
+++ b/packages/server/services/main/controllers/FollowController/services/unfollowUser.js
@@ -1,4 +1,4 @@
-import { User, UserFollow } from "@shared-classes/DbModels"
+import { User, UserFollow } from "@db_models"
export default async (payload) => {
if (typeof payload.user_id === "undefined") {
diff --git a/packages/server/services/main/controllers/ModerationController/endpoints/modifyPostLikes.js b/packages/server/services/main/controllers/ModerationController/endpoints/modifyPostLikes.js
index dc5ed26e..36bc80bc 100755
--- a/packages/server/services/main/controllers/ModerationController/endpoints/modifyPostLikes.js
+++ b/packages/server/services/main/controllers/ModerationController/endpoints/modifyPostLikes.js
@@ -1,4 +1,4 @@
-import { Post, } from "@shared-classes/DbModels"
+import { Post, } from "@db_models"
import toggleLike from "../../PostsController/services/toggleLike"
export default {
diff --git a/packages/server/services/main/controllers/NFCController/endpoints/getTagById.js b/packages/server/services/main/controllers/NFCController/endpoints/getTagById.js
index 6b7201d5..9eb9b56c 100755
--- a/packages/server/services/main/controllers/NFCController/endpoints/getTagById.js
+++ b/packages/server/services/main/controllers/NFCController/endpoints/getTagById.js
@@ -1,4 +1,4 @@
-import { User, NFCTag } from "@shared-classes/DbModels"
+import { User, NFCTag } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/NFCController/endpoints/getTagBySerial.js b/packages/server/services/main/controllers/NFCController/endpoints/getTagBySerial.js
index 489c2189..3d40408d 100755
--- a/packages/server/services/main/controllers/NFCController/endpoints/getTagBySerial.js
+++ b/packages/server/services/main/controllers/NFCController/endpoints/getTagBySerial.js
@@ -1,4 +1,4 @@
-import { User, NFCTag } from "@shared-classes/DbModels"
+import { User, NFCTag } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/NFCController/endpoints/getTags.js b/packages/server/services/main/controllers/NFCController/endpoints/getTags.js
index 7fd960ad..3758add0 100755
--- a/packages/server/services/main/controllers/NFCController/endpoints/getTags.js
+++ b/packages/server/services/main/controllers/NFCController/endpoints/getTags.js
@@ -1,4 +1,4 @@
-import { NFCTag } from "@shared-classes/DbModels"
+import { NFCTag } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/NFCController/endpoints/registerTag.js b/packages/server/services/main/controllers/NFCController/endpoints/registerTag.js
index 9ec4da71..e9c9e903 100755
--- a/packages/server/services/main/controllers/NFCController/endpoints/registerTag.js
+++ b/packages/server/services/main/controllers/NFCController/endpoints/registerTag.js
@@ -1,4 +1,4 @@
-import { NFCTag } from "@shared-classes/DbModels"
+import { NFCTag } from "@db_models"
const allowedUpdateFields = [
"user_id",
diff --git a/packages/server/services/main/controllers/PostsController/endpoints/getPostReplies.js b/packages/server/services/main/controllers/PostsController/endpoints/getPostReplies.js
index 05fa5cca..bd3571ea 100755
--- a/packages/server/services/main/controllers/PostsController/endpoints/getPostReplies.js
+++ b/packages/server/services/main/controllers/PostsController/endpoints/getPostReplies.js
@@ -1,4 +1,4 @@
-import { Post } from "@shared-classes/DbModels"
+import { Post } from "@db_models"
import fullfillPostsData from "@utils/fullfillPostsData"
export default {
diff --git a/packages/server/services/main/controllers/PostsController/services/createPost.js b/packages/server/services/main/controllers/PostsController/services/createPost.js
index c806c225..058b11db 100755
--- a/packages/server/services/main/controllers/PostsController/services/createPost.js
+++ b/packages/server/services/main/controllers/PostsController/services/createPost.js
@@ -1,5 +1,5 @@
import momentTimezone from "moment-timezone"
-import { Post } from "@shared-classes/DbModels"
+import { Post } from "@db_models"
import getPostData from "./getPostData"
import flagNsfwByAttachments from "./flagNsfwByAttachments"
diff --git a/packages/server/services/main/controllers/PostsController/services/deletePost.js b/packages/server/services/main/controllers/PostsController/services/deletePost.js
index fbed29f3..1d630def 100755
--- a/packages/server/services/main/controllers/PostsController/services/deletePost.js
+++ b/packages/server/services/main/controllers/PostsController/services/deletePost.js
@@ -1,4 +1,4 @@
-import { Post, User } from "@shared-classes/DbModels"
+import { Post, User } from "@db_models"
export default async (payload) => {
const { post_id, by_user_id } = payload
diff --git a/packages/server/services/main/controllers/PostsController/services/flagNsfwByAttachments.js b/packages/server/services/main/controllers/PostsController/services/flagNsfwByAttachments.js
index a0e8eac5..27b3d8ec 100755
--- a/packages/server/services/main/controllers/PostsController/services/flagNsfwByAttachments.js
+++ b/packages/server/services/main/controllers/PostsController/services/flagNsfwByAttachments.js
@@ -1,4 +1,4 @@
-import { Post } from "@shared-classes/DbModels"
+import { Post } from "@db_models"
import indecentPrediction from "../../../utils/indecent-prediction"
import isNSFW from "../../../utils/is-nsfw"
diff --git a/packages/server/services/main/controllers/PostsController/services/getPostData.js b/packages/server/services/main/controllers/PostsController/services/getPostData.js
index 116442a4..b1cb52cd 100755
--- a/packages/server/services/main/controllers/PostsController/services/getPostData.js
+++ b/packages/server/services/main/controllers/PostsController/services/getPostData.js
@@ -1,4 +1,4 @@
-import { Post, SavedPost } from "@shared-classes/DbModels"
+import { Post, SavedPost } from "@db_models"
import fullfillPostsData from "@utils/fullfillPostsData"
export default async (payload) => {
diff --git a/packages/server/services/main/controllers/PostsController/services/modifyPostData.js b/packages/server/services/main/controllers/PostsController/services/modifyPostData.js
index 34aec69f..ac8ee7bb 100755
--- a/packages/server/services/main/controllers/PostsController/services/modifyPostData.js
+++ b/packages/server/services/main/controllers/PostsController/services/modifyPostData.js
@@ -1,4 +1,4 @@
-import { Post } from "@shared-classes/DbModels"
+import { Post } from "@db_models"
import getPostData from "./getPostData"
export default async (post_id, modification) => {
diff --git a/packages/server/services/main/controllers/PostsController/services/toggleLike.js b/packages/server/services/main/controllers/PostsController/services/toggleLike.js
index cd49c5ba..3d43da85 100755
--- a/packages/server/services/main/controllers/PostsController/services/toggleLike.js
+++ b/packages/server/services/main/controllers/PostsController/services/toggleLike.js
@@ -1,4 +1,4 @@
-import { PostLike } from "@shared-classes/DbModels"
+import { PostLike } from "@db_models"
export default async (payload) => {
let { post_id, user_id, to } = payload
diff --git a/packages/server/services/main/controllers/PostsController/services/togglePostSave.js b/packages/server/services/main/controllers/PostsController/services/togglePostSave.js
index f8959629..fafc6aaa 100755
--- a/packages/server/services/main/controllers/PostsController/services/togglePostSave.js
+++ b/packages/server/services/main/controllers/PostsController/services/togglePostSave.js
@@ -1,4 +1,4 @@
-import { SavedPost } from "@shared-classes/DbModels"
+import { SavedPost } from "@db_models"
export default async (payload) => {
let { post_id, user_id } = payload
diff --git a/packages/server/services/main/controllers/PublicController/endpoints/featuredWallpapers.js b/packages/server/services/main/controllers/PublicController/endpoints/featuredWallpapers.js
index 74082ff9..2b92f6f9 100755
--- a/packages/server/services/main/controllers/PublicController/endpoints/featuredWallpapers.js
+++ b/packages/server/services/main/controllers/PublicController/endpoints/featuredWallpapers.js
@@ -1,4 +1,4 @@
-import { FeaturedWallpaper } from "@shared-classes/DbModels"
+import { FeaturedWallpaper } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/PublicController/endpoints/globalServerLimits.js b/packages/server/services/main/controllers/PublicController/endpoints/globalServerLimits.js
index 2da1661c..f0701535 100755
--- a/packages/server/services/main/controllers/PublicController/endpoints/globalServerLimits.js
+++ b/packages/server/services/main/controllers/PublicController/endpoints/globalServerLimits.js
@@ -1,4 +1,4 @@
-import { ServerLimit } from "@shared-classes/DbModels"
+import { ServerLimit } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/RolesController/index.js b/packages/server/services/main/controllers/RolesController/index.js
index 6785e1a2..ce55cfdf 100755
--- a/packages/server/services/main/controllers/RolesController/index.js
+++ b/packages/server/services/main/controllers/RolesController/index.js
@@ -1,5 +1,5 @@
import { Controller } from "linebridge/dist/server"
-import { Role, User } from "@shared-classes/DbModels"
+import { Role, User } from "@db_models"
import { Schematized } from "@lib"
export default class RolesController extends Controller {
diff --git a/packages/server/services/main/controllers/SearchController/endpoints/getSearch.js b/packages/server/services/main/controllers/SearchController/endpoints/getSearch.js
index df766564..933e54d8 100755
--- a/packages/server/services/main/controllers/SearchController/endpoints/getSearch.js
+++ b/packages/server/services/main/controllers/SearchController/endpoints/getSearch.js
@@ -1,4 +1,4 @@
-import { User, Playlist, Track } from "@shared-classes/DbModels"
+import { User, Playlist, Track } from "@db_models"
import pmap from "p-map"
export default {
diff --git a/packages/server/services/main/controllers/SessionController/endpoints/deleteCurrentSession.js b/packages/server/services/main/controllers/SessionController/endpoints/deleteCurrentSession.js
index dec3c53b..50539469 100755
--- a/packages/server/services/main/controllers/SessionController/endpoints/deleteCurrentSession.js
+++ b/packages/server/services/main/controllers/SessionController/endpoints/deleteCurrentSession.js
@@ -1,4 +1,4 @@
-import { Session } from "@shared-classes/DbModels"
+import { Session } from "@db_models"
export default {
method: "DELETE",
diff --git a/packages/server/services/main/controllers/SessionController/endpoints/getSessions.js b/packages/server/services/main/controllers/SessionController/endpoints/getSessions.js
index 9ffa0d3b..ba452c32 100755
--- a/packages/server/services/main/controllers/SessionController/endpoints/getSessions.js
+++ b/packages/server/services/main/controllers/SessionController/endpoints/getSessions.js
@@ -1,4 +1,4 @@
-import { Session } from "@shared-classes/DbModels"
+import { Session } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/StatusController/services/getConnectedUsersFollowing.js b/packages/server/services/main/controllers/StatusController/services/getConnectedUsersFollowing.js
index ba49b8d1..b78d51ae 100755
--- a/packages/server/services/main/controllers/StatusController/services/getConnectedUsersFollowing.js
+++ b/packages/server/services/main/controllers/StatusController/services/getConnectedUsersFollowing.js
@@ -1,4 +1,4 @@
-import { UserFollow } from "@shared-classes/DbModels"
+import { UserFollow } from "@db_models"
export default async (payload = {}) => {
const { from_user_id, limit = 10, offset = 0 } = payload
diff --git a/packages/server/services/main/controllers/StreamingController/endpoints/deleteStreamingProfile.js b/packages/server/services/main/controllers/StreamingController/endpoints/deleteStreamingProfile.js
index fd04f377..19deaa4c 100755
--- a/packages/server/services/main/controllers/StreamingController/endpoints/deleteStreamingProfile.js
+++ b/packages/server/services/main/controllers/StreamingController/endpoints/deleteStreamingProfile.js
@@ -1,4 +1,4 @@
-import { StreamingProfile } from "@shared-classes/DbModels"
+import { StreamingProfile } from "@db_models"
export default {
method: "DELETE",
diff --git a/packages/server/services/main/controllers/StreamingController/endpoints/getProfileFromStreamKey.js b/packages/server/services/main/controllers/StreamingController/endpoints/getProfileFromStreamKey.js
index 32269671..8de0f6f2 100755
--- a/packages/server/services/main/controllers/StreamingController/endpoints/getProfileFromStreamKey.js
+++ b/packages/server/services/main/controllers/StreamingController/endpoints/getProfileFromStreamKey.js
@@ -1,4 +1,4 @@
-import { StreamingProfile } from "@shared-classes/DbModels"
+import { StreamingProfile } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/StreamingController/endpoints/getProfilesVisibility.js b/packages/server/services/main/controllers/StreamingController/endpoints/getProfilesVisibility.js
index 5d968b39..d83ad2b7 100755
--- a/packages/server/services/main/controllers/StreamingController/endpoints/getProfilesVisibility.js
+++ b/packages/server/services/main/controllers/StreamingController/endpoints/getProfilesVisibility.js
@@ -1,4 +1,4 @@
-import { StreamingProfile } from "@shared-classes/DbModels"
+import { StreamingProfile } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/StreamingController/endpoints/getStreamingCategories.js b/packages/server/services/main/controllers/StreamingController/endpoints/getStreamingCategories.js
index 86e7f474..53db7e0e 100755
--- a/packages/server/services/main/controllers/StreamingController/endpoints/getStreamingCategories.js
+++ b/packages/server/services/main/controllers/StreamingController/endpoints/getStreamingCategories.js
@@ -1,4 +1,4 @@
-import { StreamingCategory } from "@shared-classes/DbModels"
+import { StreamingCategory } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/StreamingController/endpoints/getStreamingProfiles.js b/packages/server/services/main/controllers/StreamingController/endpoints/getStreamingProfiles.js
index f92b53b1..1507dd2d 100755
--- a/packages/server/services/main/controllers/StreamingController/endpoints/getStreamingProfiles.js
+++ b/packages/server/services/main/controllers/StreamingController/endpoints/getStreamingProfiles.js
@@ -1,4 +1,4 @@
-import { StreamingProfile } from "@shared-classes/DbModels"
+import { StreamingProfile } from "@db_models"
import NewStreamingProfile from "@services/newStreamingProfile"
import composeStreamingSources from "@utils/compose-streaming-sources"
diff --git a/packages/server/services/main/controllers/StreamingController/endpoints/handleStreamPublish.js b/packages/server/services/main/controllers/StreamingController/endpoints/handleStreamPublish.js
index 27810578..39c0086c 100755
--- a/packages/server/services/main/controllers/StreamingController/endpoints/handleStreamPublish.js
+++ b/packages/server/services/main/controllers/StreamingController/endpoints/handleStreamPublish.js
@@ -1,4 +1,4 @@
-import { StreamingProfile, User } from "@shared-classes/DbModels"
+import { StreamingProfile, User } from "@db_models"
export default {
method: "POST",
diff --git a/packages/server/services/main/controllers/StreamingController/endpoints/handleStreamUnpublish.js b/packages/server/services/main/controllers/StreamingController/endpoints/handleStreamUnpublish.js
index 062bb157..a5545532 100755
--- a/packages/server/services/main/controllers/StreamingController/endpoints/handleStreamUnpublish.js
+++ b/packages/server/services/main/controllers/StreamingController/endpoints/handleStreamUnpublish.js
@@ -1,4 +1,4 @@
-import { StreamingProfile } from "@shared-classes/DbModels"
+import { StreamingProfile } from "@db_models"
export default {
method: "POST",
diff --git a/packages/server/services/main/controllers/StreamingController/endpoints/postStreamingProfile.js b/packages/server/services/main/controllers/StreamingController/endpoints/postStreamingProfile.js
index 3bedabce..d76948f8 100755
--- a/packages/server/services/main/controllers/StreamingController/endpoints/postStreamingProfile.js
+++ b/packages/server/services/main/controllers/StreamingController/endpoints/postStreamingProfile.js
@@ -1,4 +1,4 @@
-import { StreamingProfile } from "@shared-classes/DbModels"
+import { StreamingProfile } from "@db_models"
import NewStreamingProfile from "@services/newStreamingProfile"
const AllowedChangesFields = ["profile_name", "info", "options"]
diff --git a/packages/server/services/main/controllers/StreamingController/endpoints/regenerateStreamingKey.js b/packages/server/services/main/controllers/StreamingController/endpoints/regenerateStreamingKey.js
index 6a2bf2db..33de6b5c 100755
--- a/packages/server/services/main/controllers/StreamingController/endpoints/regenerateStreamingKey.js
+++ b/packages/server/services/main/controllers/StreamingController/endpoints/regenerateStreamingKey.js
@@ -1,4 +1,4 @@
-import { StreamingProfile } from "@shared-classes/DbModels"
+import { StreamingProfile } from "@db_models"
export default {
method: "POST",
diff --git a/packages/server/services/main/controllers/UserController/endpoints/checkEmailAvailable.js b/packages/server/services/main/controllers/UserController/endpoints/checkEmailAvailable.js
index f22e01b1..629153c7 100755
--- a/packages/server/services/main/controllers/UserController/endpoints/checkEmailAvailable.js
+++ b/packages/server/services/main/controllers/UserController/endpoints/checkEmailAvailable.js
@@ -1,4 +1,4 @@
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/UserController/endpoints/checkUsernameAvailable.js b/packages/server/services/main/controllers/UserController/endpoints/checkUsernameAvailable.js
index 62e53738..64d2066a 100755
--- a/packages/server/services/main/controllers/UserController/endpoints/checkUsernameAvailable.js
+++ b/packages/server/services/main/controllers/UserController/endpoints/checkUsernameAvailable.js
@@ -1,4 +1,4 @@
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/UserController/endpoints/getUserData.js b/packages/server/services/main/controllers/UserController/endpoints/getUserData.js
index b0901c0a..328fc93a 100755
--- a/packages/server/services/main/controllers/UserController/endpoints/getUserData.js
+++ b/packages/server/services/main/controllers/UserController/endpoints/getUserData.js
@@ -1,5 +1,5 @@
import lodash from "lodash"
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
const publicGetters = [
"_id",
diff --git a/packages/server/services/main/controllers/UserController/endpoints/getUsersData.js b/packages/server/services/main/controllers/UserController/endpoints/getUsersData.js
index 34cd1771..047af1a7 100755
--- a/packages/server/services/main/controllers/UserController/endpoints/getUsersData.js
+++ b/packages/server/services/main/controllers/UserController/endpoints/getUsersData.js
@@ -1,5 +1,5 @@
import { Schematized } from "@lib"
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/UserController/endpoints/resolveUserIdFromUsername.js b/packages/server/services/main/controllers/UserController/endpoints/resolveUserIdFromUsername.js
index 5003e843..bb97b4ae 100755
--- a/packages/server/services/main/controllers/UserController/endpoints/resolveUserIdFromUsername.js
+++ b/packages/server/services/main/controllers/UserController/endpoints/resolveUserIdFromUsername.js
@@ -1,4 +1,4 @@
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
export default {
method: "GET",
diff --git a/packages/server/services/main/controllers/UserController/endpoints/selfUpdateData.js b/packages/server/services/main/controllers/UserController/endpoints/selfUpdateData.js
index 876f9f45..24092de5 100755
--- a/packages/server/services/main/controllers/UserController/endpoints/selfUpdateData.js
+++ b/packages/server/services/main/controllers/UserController/endpoints/selfUpdateData.js
@@ -1,5 +1,5 @@
import { Schematized } from "@lib"
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
import UpdateUserData from "../services/updateUserData"
const AllowedPublicUpdateFields = [
diff --git a/packages/server/services/main/controllers/UserController/endpoints/selfUpdatePassword.js b/packages/server/services/main/controllers/UserController/endpoints/selfUpdatePassword.js
index 2b28fa71..81726277 100755
--- a/packages/server/services/main/controllers/UserController/endpoints/selfUpdatePassword.js
+++ b/packages/server/services/main/controllers/UserController/endpoints/selfUpdatePassword.js
@@ -1,5 +1,5 @@
import { Schematized } from "@lib"
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
import updateUserPassword from "../services/updateUserPassword"
import bcrypt from "bcrypt"
diff --git a/packages/server/services/main/controllers/UserController/services/createUser.js b/packages/server/services/main/controllers/UserController/services/createUser.js
index bbefe56e..d7683558 100755
--- a/packages/server/services/main/controllers/UserController/services/createUser.js
+++ b/packages/server/services/main/controllers/UserController/services/createUser.js
@@ -1,4 +1,4 @@
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
import Avatars from "dicebar_lib"
import bcrypt from "bcrypt"
diff --git a/packages/server/services/main/controllers/UserController/services/getConnectedUsersFollowing.js b/packages/server/services/main/controllers/UserController/services/getConnectedUsersFollowing.js
index 3ade4cc3..4cdfa5c1 100755
--- a/packages/server/services/main/controllers/UserController/services/getConnectedUsersFollowing.js
+++ b/packages/server/services/main/controllers/UserController/services/getConnectedUsersFollowing.js
@@ -1,4 +1,4 @@
-import { UserFollow } from "@shared-classes/DbModels"
+import { UserFollow } from "@db_models"
export default async (payload = {}) => {
const { from_user_id } = payload
diff --git a/packages/server/services/main/controllers/UserController/services/updateUserData.js b/packages/server/services/main/controllers/UserController/services/updateUserData.js
index 2933c519..abc1cdcf 100755
--- a/packages/server/services/main/controllers/UserController/services/updateUserData.js
+++ b/packages/server/services/main/controllers/UserController/services/updateUserData.js
@@ -1,4 +1,4 @@
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
export default async (payload) => {
if (typeof payload.user_id === "undefined") {
diff --git a/packages/server/services/main/controllers/UserController/services/updateUserPassword.js b/packages/server/services/main/controllers/UserController/services/updateUserPassword.js
index b7b85706..9a4f18da 100755
--- a/packages/server/services/main/controllers/UserController/services/updateUserPassword.js
+++ b/packages/server/services/main/controllers/UserController/services/updateUserPassword.js
@@ -1,4 +1,4 @@
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
import bcrypt from "bcrypt"
export default async function (payload) {
diff --git a/packages/server/services/main/events/user_connected.js b/packages/server/services/main/events/user_connected.js
index b1236f9e..eaaba81d 100755
--- a/packages/server/services/main/events/user_connected.js
+++ b/packages/server/services/main/events/user_connected.js
@@ -1,4 +1,4 @@
-import { UserFollow } from "@shared-classes/DbModels"
+import { UserFollow } from "@db_models"
export default async (user_id) => {
// get followers of the user
diff --git a/packages/server/services/main/events/user_created.js b/packages/server/services/main/events/user_created.js
index a2af95d5..0084fe02 100755
--- a/packages/server/services/main/events/user_created.js
+++ b/packages/server/services/main/events/user_created.js
@@ -1,4 +1,4 @@
-import { User, UserFollow } from "@shared-classes/DbModels"
+import { User, UserFollow } from "@db_models"
export default async function (userData) {
//
diff --git a/packages/server/services/main/events/user_disconnected.js b/packages/server/services/main/events/user_disconnected.js
index f4898adf..affca7d0 100755
--- a/packages/server/services/main/events/user_disconnected.js
+++ b/packages/server/services/main/events/user_disconnected.js
@@ -1,4 +1,4 @@
-import { UserFollow } from "@shared-classes/DbModels"
+import { UserFollow } from "@db_models"
export default async (user_id) => {
// get followers of the user
diff --git a/packages/server/services/main/fixments/additions_to_attachments.js b/packages/server/services/main/fixments/additions_to_attachments.js
index 25dc8131..58634d7b 100755
--- a/packages/server/services/main/fixments/additions_to_attachments.js
+++ b/packages/server/services/main/fixments/additions_to_attachments.js
@@ -1,4 +1,4 @@
-import { Post } from "@shared-classes/DbModels"
+import { Post } from "@db_models"
import DBManager from "../classes/DbManager"
async function main() {
diff --git a/packages/server/services/main/fixments/migrate_posts_likes.js b/packages/server/services/main/fixments/migrate_posts_likes.js
index cc1ba694..81d3b0bf 100755
--- a/packages/server/services/main/fixments/migrate_posts_likes.js
+++ b/packages/server/services/main/fixments/migrate_posts_likes.js
@@ -3,7 +3,7 @@ require("dotenv").config()
import fs from "fs"
import path from "path"
-import { Post, PostLike } from "@shared-classes/DbModels"
+import { Post, PostLike } from "@db_models"
import { performance } from "perf_hooks"
import DBManager from "../classes/DbManager"
diff --git a/packages/server/services/main/fixments/move_playlist_to_release.js b/packages/server/services/main/fixments/move_playlist_to_release.js
index b6373df8..db0a7cae 100755
--- a/packages/server/services/main/fixments/move_playlist_to_release.js
+++ b/packages/server/services/main/fixments/move_playlist_to_release.js
@@ -1,4 +1,4 @@
-import { Release, Playlist } from "@shared-classes/DbModels"
+import { Release, Playlist } from "@db_models"
import DBManager from "@shared-classes/DbManager"
async function main() {
diff --git a/packages/server/services/main/lib/checkUserAdmin/index.js b/packages/server/services/main/lib/checkUserAdmin/index.js
index 64e40724..3c999e4e 100755
--- a/packages/server/services/main/lib/checkUserAdmin/index.js
+++ b/packages/server/services/main/lib/checkUserAdmin/index.js
@@ -1,4 +1,4 @@
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
export default async (user_id) => {
if (!user_id) {
diff --git a/packages/server/services/main/lib/token/index.js b/packages/server/services/main/lib/token/index.js
index 90178cf6..0cfe9b51 100755
--- a/packages/server/services/main/lib/token/index.js
+++ b/packages/server/services/main/lib/token/index.js
@@ -1,5 +1,5 @@
import jwt from "jsonwebtoken"
-import { Session, RegenerationToken } from "@shared-classes/DbModels"
+import { Session, RegenerationToken } from "@db_models"
export default class Token {
static async createNewAuthToken(payload, options = {}) {
diff --git a/packages/server/services/main/main.service.js b/packages/server/services/main/main.service.js
index bbce8741..0b2c4f98 100755
--- a/packages/server/services/main/main.service.js
+++ b/packages/server/services/main/main.service.js
@@ -1,13 +1,14 @@
import { Server } from "linebridge/src/server"
-import { Config, User } from "@shared-classes/DbModels"
+import { Config, User } from "@db_models"
import DbManager from "@shared-classes/DbManager"
import StorageClient from "@shared-classes/StorageClient"
import Token from "@lib/token"
export default class API extends Server {
- static refName = "MAIN-API"
+ static refName = "main"
+ static useEngine = "hyper-express"
static listen_port = process.env.HTTP_LISTEN_PORT || 3000
static requireWSAuth = true
@@ -19,13 +20,6 @@ export default class API extends Server {
maximumFileSize: 80 * 1024 * 1024,
maximunFilesPerRequest: 20,
}
-
- global.jwtStrategy = {
- secretOrKey: process.env.JWT_SECRET,
- expiresIn: "1h",
- algorithm: "HS256",
- enforceRegenerationTokenExpiration: false,
- }
}
middlewares = require("@middlewares")
diff --git a/packages/server/services/main/middlewares/permissions/index.js b/packages/server/services/main/middlewares/permissions/index.js
index 4c4f1dae..161c1b6e 100755
--- a/packages/server/services/main/middlewares/permissions/index.js
+++ b/packages/server/services/main/middlewares/permissions/index.js
@@ -1,4 +1,4 @@
-import { Config } from "@shared-classes/DbModels"
+import { Config } from "@db_models"
export default (req, res, next) => {
const requestedPath = `${req.method.toLowerCase()}${req.path.toLowerCase()}`
diff --git a/packages/server/services/main/middlewares/withAuthentication/index.js b/packages/server/services/main/middlewares/withAuthentication/index.js
index 9df7da86..73b852b8 100755
--- a/packages/server/services/main/middlewares/withAuthentication/index.js
+++ b/packages/server/services/main/middlewares/withAuthentication/index.js
@@ -1,4 +1,4 @@
-import { Session, User, authorizedServerTokens } from "@shared-classes/DbModels"
+import { Session, User, authorizedServerTokens } from "@db_models"
import createTokenRegeneration from "@utils/createTokenRegeneration"
diff --git a/packages/server/services/main/package.json b/packages/server/services/main/package.json
index 3175c278..27c06dc5 100755
--- a/packages/server/services/main/package.json
+++ b/packages/server/services/main/package.json
@@ -27,7 +27,6 @@
"normalize-url": "^8.0.0",
"nsfwjs": "^3.0.0",
"p-map": "^4.0.0",
- "p-queue": "^7.3.4",
- "sharp": "^0.33.2"
+ "p-queue": "^7.3.4"
}
}
diff --git a/packages/server/services/main/services/fetchRemoteStreams/index.js b/packages/server/services/main/services/fetchRemoteStreams/index.js
index 564ced96..d2ee5e77 100755
--- a/packages/server/services/main/services/fetchRemoteStreams/index.js
+++ b/packages/server/services/main/services/fetchRemoteStreams/index.js
@@ -1,6 +1,6 @@
import axios from "axios"
-import { StreamingCategory, StreamingProfile, User } from "@shared-classes/DbModels"
+import { StreamingCategory, StreamingProfile, User } from "@db_models"
import composeStreamingSources from "@utils/compose-streaming-sources"
import lodash from "lodash"
diff --git a/packages/server/services/main/services/getMutuals/index.js b/packages/server/services/main/services/getMutuals/index.js
index c9b7629d..36eaabd9 100755
--- a/packages/server/services/main/services/getMutuals/index.js
+++ b/packages/server/services/main/services/getMutuals/index.js
@@ -1,4 +1,4 @@
-import { User, UserFollow } from "@shared-classes/DbModels"
+import { User, UserFollow } from "@db_models"
// TODO: Sort follows by last activity
export default async (payload = {}) => {
diff --git a/packages/server/services/main/services/newStreamingProfile/index.js b/packages/server/services/main/services/newStreamingProfile/index.js
index 904faaba..d22ff253 100755
--- a/packages/server/services/main/services/newStreamingProfile/index.js
+++ b/packages/server/services/main/services/newStreamingProfile/index.js
@@ -1,4 +1,4 @@
-import { StreamingProfile } from "@shared-classes/DbModels"
+import { StreamingProfile } from "@db_models"
export default async (profile = {}) => {
if (!profile.user_id) {
diff --git a/packages/server/services/main/setup/authorizeSelfServerToken/index.js b/packages/server/services/main/setup/authorizeSelfServerToken/index.js
index d79f3ba3..84087e0b 100755
--- a/packages/server/services/main/setup/authorizeSelfServerToken/index.js
+++ b/packages/server/services/main/setup/authorizeSelfServerToken/index.js
@@ -1,5 +1,5 @@
import SecureEntry from "@lib/secureEntry"
-import { authorizedServerTokens } from "@shared-classes/DbModels"
+import { authorizedServerTokens } from "@db_models"
const rootClientID = "00000000-0000-0000-000000000000"
diff --git a/packages/server/services/main/setup/dbAdmin/index.js b/packages/server/services/main/setup/dbAdmin/index.js
index 3b959597..de513af3 100755
--- a/packages/server/services/main/setup/dbAdmin/index.js
+++ b/packages/server/services/main/setup/dbAdmin/index.js
@@ -1,4 +1,4 @@
-import { User } from "@shared-classes/DbModels"
+import { User } from "@db_models"
import createUser from "@controllers/UserController/services/createUser"
export default async () => {
diff --git a/packages/server/services/main/utils/fullfillPostsData/index.js b/packages/server/services/main/utils/fullfillPostsData/index.js
index 5a3d625f..33abd8fc 100755
--- a/packages/server/services/main/utils/fullfillPostsData/index.js
+++ b/packages/server/services/main/utils/fullfillPostsData/index.js
@@ -1,4 +1,4 @@
-import { User, Comment, PostLike, SavedPost } from "@shared-classes/DbModels"
+import { User, Comment, PostLike, SavedPost } from "@db_models"
export default async (payload) => {
let {
diff --git a/packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/debug.jsx b/packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/debug.jsx
index 65740230..e40411cd 100755
--- a/packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/debug.jsx
+++ b/packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/debug.jsx
@@ -1,4 +1,4 @@
-import { Widget } from "@shared-classes/DbModels"
+import { Widget } from "@db_models"
import getWidgetCode from "@utils/getWidgetCode"
export default async (req, res) => {
diff --git a/packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/manifest.js b/packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/manifest.js
index 49db7f14..be6714c6 100755
--- a/packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/manifest.js
+++ b/packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/manifest.js
@@ -1,4 +1,4 @@
-import { Widget } from "@shared-classes/DbModels"
+import { Widget } from "@db_models"
export default async (req, res) => {
const widget_id = req.params.widgetId
diff --git a/packages/server/services/marketplace/controllers/widgets/routes/get/index.js b/packages/server/services/marketplace/controllers/widgets/routes/get/index.js
index 4db090ed..29483cb8 100755
--- a/packages/server/services/marketplace/controllers/widgets/routes/get/index.js
+++ b/packages/server/services/marketplace/controllers/widgets/routes/get/index.js
@@ -1,4 +1,4 @@
-import { Widget } from "@shared-classes/DbModels"
+import { Widget } from "@db_models"
export default async (req, res) => {
let { limit = 20, offset = 0, keywords } = req.query
diff --git a/packages/server/services/marketplace/controllers/widgets/routes/get/user/:user_id.js b/packages/server/services/marketplace/controllers/widgets/routes/get/user/:user_id.js
index f1ef6a75..c31b52b9 100755
--- a/packages/server/services/marketplace/controllers/widgets/routes/get/user/:user_id.js
+++ b/packages/server/services/marketplace/controllers/widgets/routes/get/user/:user_id.js
@@ -1,4 +1,4 @@
-import { Widget } from "@shared-classes/DbModels"
+import { Widget } from "@db_models"
export default async (req, res) => {
const { user_id } = req.params
diff --git a/packages/server/services/marketplace/controllers/widgets/routes/post/publish.js b/packages/server/services/marketplace/controllers/widgets/routes/post/publish.js
index ea298905..036e7ceb 100755
--- a/packages/server/services/marketplace/controllers/widgets/routes/post/publish.js
+++ b/packages/server/services/marketplace/controllers/widgets/routes/post/publish.js
@@ -5,7 +5,7 @@ import path from "path"
import syncFolder from "@utils/syncDirToRemote"
-import { Widget } from "@shared-classes/DbModels"
+import { Widget } from "@db_models"
const tmpPath = path.join(process.cwd(), ".tmp")
diff --git a/packages/server/services/marketplace/utils/getWidgetCode/index.js b/packages/server/services/marketplace/utils/getWidgetCode/index.js
index 207ba0a7..49544c8e 100755
--- a/packages/server/services/marketplace/utils/getWidgetCode/index.js
+++ b/packages/server/services/marketplace/utils/getWidgetCode/index.js
@@ -1,4 +1,4 @@
-import { Widget } from "@shared-classes/DbModels"
+import { Widget } from "@db_models"
import compileWidgetCode from "@utils/compileWidgetCode"
import path from "path"
diff --git a/packages/server/services/music/controllers/featured/routes/get/playlists.js b/packages/server/services/music/controllers/featured/routes/get/playlists.js
index 206f633a..354ffa54 100755
--- a/packages/server/services/music/controllers/featured/routes/get/playlists.js
+++ b/packages/server/services/music/controllers/featured/routes/get/playlists.js
@@ -1,4 +1,4 @@
-import { FeaturedPlaylist } from "@shared-classes/DbModels"
+import { FeaturedPlaylist } from "@db_models"
export default async (req, res) => {
const includeDisabled = req.query["include-disabled"] === "true"
diff --git a/packages/server/services/music/controllers/lyrics/routes/get/:track_id.js b/packages/server/services/music/controllers/lyrics/routes/get/:track_id.js
index 6e6df77d..09ff199a 100755
--- a/packages/server/services/music/controllers/lyrics/routes/get/:track_id.js
+++ b/packages/server/services/music/controllers/lyrics/routes/get/:track_id.js
@@ -1,4 +1,4 @@
-import { Track } from "@shared-classes/DbModels"
+import { Track } from "@db_models"
import getEnhancedLyricsFromTrack from "@services/getEnhancedLyricsFromTrack"
export default async (req, res) => {
diff --git a/packages/server/services/music/controllers/playlists/routes/delete/:playlist_id.js b/packages/server/services/music/controllers/playlists/routes/delete/:playlist_id.js
index 89326824..ea61bbd9 100755
--- a/packages/server/services/music/controllers/playlists/routes/delete/:playlist_id.js
+++ b/packages/server/services/music/controllers/playlists/routes/delete/:playlist_id.js
@@ -1,4 +1,4 @@
-import { Playlist, Track } from "@shared-classes/DbModels"
+import { Playlist, Track } from "@db_models"
import { AuthorizationError, PermissionError, NotFoundError } from "@shared-classes/Errors"
import RemoveTracks from "@services/removeTracks"
diff --git a/packages/server/services/music/controllers/playlists/routes/get/:playlist_id/data.js b/packages/server/services/music/controllers/playlists/routes/get/:playlist_id/data.js
index b289dc35..9e205a5c 100755
--- a/packages/server/services/music/controllers/playlists/routes/get/:playlist_id/data.js
+++ b/packages/server/services/music/controllers/playlists/routes/get/:playlist_id/data.js
@@ -1,4 +1,4 @@
-import { Playlist, Release, TrackLike, Track } from "@shared-classes/DbModels"
+import { Playlist, Release, TrackLike, Track } from "@db_models"
import { NotFoundError } from "@shared-classes/Errors"
export default async (req, res) => {
diff --git a/packages/server/services/music/controllers/playlists/routes/get/search.js b/packages/server/services/music/controllers/playlists/routes/get/search.js
index 0be2540d..b8621aea 100755
--- a/packages/server/services/music/controllers/playlists/routes/get/search.js
+++ b/packages/server/services/music/controllers/playlists/routes/get/search.js
@@ -1,4 +1,4 @@
-import { Playlist, Track } from "@shared-classes/DbModels"
+import { Playlist, Track } from "@db_models"
export default async (req, res) => {
const { keywords, limit = 5, offset = 0 } = req.query
diff --git a/packages/server/services/music/controllers/playlists/routes/get/self.js b/packages/server/services/music/controllers/playlists/routes/get/self.js
index 4d478f82..5d35ea66 100755
--- a/packages/server/services/music/controllers/playlists/routes/get/self.js
+++ b/packages/server/services/music/controllers/playlists/routes/get/self.js
@@ -1,4 +1,4 @@
-import { Playlist, Release, Track } from "@shared-classes/DbModels"
+import { Playlist, Release, Track } from "@db_models"
import { AuthorizationError, NotFoundError } from "@shared-classes/Errors"
export default async (req, res) => {
diff --git a/packages/server/services/music/controllers/playlists/routes/post/new.js b/packages/server/services/music/controllers/playlists/routes/post/new.js
index 4073a451..f94da757 100755
--- a/packages/server/services/music/controllers/playlists/routes/post/new.js
+++ b/packages/server/services/music/controllers/playlists/routes/post/new.js
@@ -1,4 +1,4 @@
-import { Playlist } from "@shared-classes/DbModels"
+import { Playlist } from "@db_models"
import { AuthorizationError } from "@shared-classes/Errors"
export default async (req, res) => {
diff --git a/packages/server/services/music/controllers/playlists/services/getTrackById.js b/packages/server/services/music/controllers/playlists/services/getTrackById.js
index 2324cfbc..4962ac8f 100755
--- a/packages/server/services/music/controllers/playlists/services/getTrackById.js
+++ b/packages/server/services/music/controllers/playlists/services/getTrackById.js
@@ -1,4 +1,4 @@
-import { Track } from "@shared-classes/DbModels"
+import { Track } from "@db_models"
export default async (_id) => {
if (!_id) {
diff --git a/packages/server/services/music/controllers/releases/routes/delete/:release_id.js b/packages/server/services/music/controllers/releases/routes/delete/:release_id.js
index 1fffcdce..dc90cfd7 100755
--- a/packages/server/services/music/controllers/releases/routes/delete/:release_id.js
+++ b/packages/server/services/music/controllers/releases/routes/delete/:release_id.js
@@ -1,4 +1,4 @@
-import { Release } from "@shared-classes/DbModels"
+import { Release } from "@db_models"
import { AuthorizationError, PermissionError, NotFoundError } from "@shared-classes/Errors"
import RemoveTracks from "@services/removeTracks"
diff --git a/packages/server/services/music/controllers/releases/routes/get/:release_id/data.js b/packages/server/services/music/controllers/releases/routes/get/:release_id/data.js
index 0f387104..3d942bcb 100755
--- a/packages/server/services/music/controllers/releases/routes/get/:release_id/data.js
+++ b/packages/server/services/music/controllers/releases/routes/get/:release_id/data.js
@@ -1,4 +1,4 @@
-import { Release, TrackLike, Track } from "@shared-classes/DbModels"
+import { Release, TrackLike, Track } from "@db_models"
import { NotFoundError } from "@shared-classes/Errors"
export default async (req, res) => {
diff --git a/packages/server/services/music/controllers/releases/routes/get/self.js b/packages/server/services/music/controllers/releases/routes/get/self.js
index 4d2e04ac..6586db33 100755
--- a/packages/server/services/music/controllers/releases/routes/get/self.js
+++ b/packages/server/services/music/controllers/releases/routes/get/self.js
@@ -1,4 +1,4 @@
-import { Release, Track } from "@shared-classes/DbModels"
+import { Release, Track } from "@db_models"
import { AuthorizationError, NotFoundError } from "@shared-classes/Errors"
export default async (req, res) => {
diff --git a/packages/server/services/music/controllers/releases/routes/get/user/:user_id.js b/packages/server/services/music/controllers/releases/routes/get/user/:user_id.js
index 681c59b3..a00507e1 100755
--- a/packages/server/services/music/controllers/releases/routes/get/user/:user_id.js
+++ b/packages/server/services/music/controllers/releases/routes/get/user/:user_id.js
@@ -1,4 +1,4 @@
-import { Release } from "@shared-classes/DbModels"
+import { Release } from "@db_models"
export default async (req, res) => {
if (!req.session) {
diff --git a/packages/server/services/music/controllers/releases/routes/put/release.js b/packages/server/services/music/controllers/releases/routes/put/release.js
index 46cce3a7..61647fd1 100755
--- a/packages/server/services/music/controllers/releases/routes/put/release.js
+++ b/packages/server/services/music/controllers/releases/routes/put/release.js
@@ -1,4 +1,4 @@
-import { Release, Track } from "@shared-classes/DbModels"
+import { Release, Track } from "@db_models"
import { AuthorizationError, NotFoundError, PermissionError, BadRequestError } from "@shared-classes/Errors"
import axios from "axios"
diff --git a/packages/server/services/music/controllers/search/index.js b/packages/server/services/music/controllers/search/index.js
index 2a6e4206..78f97c69 100755
--- a/packages/server/services/music/controllers/search/index.js
+++ b/packages/server/services/music/controllers/search/index.js
@@ -1,4 +1,4 @@
-import { Release, Playlist, Track } from "@shared-classes/DbModels"
+import { Release, Playlist, Track } from "@db_models"
import TidalAPI from "@shared-classes/TidalAPI"
async function searchRoute(req, res) {
diff --git a/packages/server/services/music/controllers/tracks/routes/delete/:track_id/like.js b/packages/server/services/music/controllers/tracks/routes/delete/:track_id/like.js
index f62088af..8d8e6dc6 100755
--- a/packages/server/services/music/controllers/tracks/routes/delete/:track_id/like.js
+++ b/packages/server/services/music/controllers/tracks/routes/delete/:track_id/like.js
@@ -1,4 +1,4 @@
-import { TrackLike, Track } from "@shared-classes/DbModels"
+import { TrackLike, Track } from "@db_models"
import { AuthorizationError, NotFoundError } from "@shared-classes/Errors"
export default async (req, res) => {
diff --git a/packages/server/services/music/controllers/tracks/routes/get/:track_id/data.js b/packages/server/services/music/controllers/tracks/routes/get/:track_id/data.js
index cd255421..2351fe5a 100755
--- a/packages/server/services/music/controllers/tracks/routes/get/:track_id/data.js
+++ b/packages/server/services/music/controllers/tracks/routes/get/:track_id/data.js
@@ -1,4 +1,4 @@
-import { Track } from "@shared-classes/DbModels"
+import { Track } from "@db_models"
import { NotFoundError } from "@shared-classes/Errors"
export default async (req, res) => {
diff --git a/packages/server/services/music/controllers/tracks/routes/get/:track_id/stream.js b/packages/server/services/music/controllers/tracks/routes/get/:track_id/stream.js
index 57a3156b..2a1eaa7c 100755
--- a/packages/server/services/music/controllers/tracks/routes/get/:track_id/stream.js
+++ b/packages/server/services/music/controllers/tracks/routes/get/:track_id/stream.js
@@ -1,4 +1,4 @@
-import { Track } from "@shared-classes/DbModels"
+import { Track } from "@db_models"
import { NotFoundError, InternalServerError } from "@shared-classes/Errors"
import mimetypes from "mime-types"
diff --git a/packages/server/services/music/controllers/tracks/routes/get/liked.js b/packages/server/services/music/controllers/tracks/routes/get/liked.js
index 4eda7bac..8a2b661b 100755
--- a/packages/server/services/music/controllers/tracks/routes/get/liked.js
+++ b/packages/server/services/music/controllers/tracks/routes/get/liked.js
@@ -1,4 +1,4 @@
-import { Track, TrackLike } from "@shared-classes/DbModels"
+import { Track, TrackLike } from "@db_models"
import { AuthorizationError } from "@shared-classes/Errors"
// TODO: Fetch from external linked services (like tidal, spotify, ...)
diff --git a/packages/server/services/music/controllers/tracks/routes/get/many.js b/packages/server/services/music/controllers/tracks/routes/get/many.js
index 92f4ad7e..677af431 100755
--- a/packages/server/services/music/controllers/tracks/routes/get/many.js
+++ b/packages/server/services/music/controllers/tracks/routes/get/many.js
@@ -1,4 +1,4 @@
-import { Track } from "@shared-classes/DbModels"
+import { Track } from "@db_models"
export default async (req, res) => {
const { ids, limit = 20, offset = 0 } = req.query
diff --git a/packages/server/services/music/controllers/tracks/routes/post/:track_id/like.js b/packages/server/services/music/controllers/tracks/routes/post/:track_id/like.js
index 1f1d6560..89266099 100755
--- a/packages/server/services/music/controllers/tracks/routes/post/:track_id/like.js
+++ b/packages/server/services/music/controllers/tracks/routes/post/:track_id/like.js
@@ -1,4 +1,4 @@
-import { TrackLike, Track } from "@shared-classes/DbModels"
+import { TrackLike, Track } from "@db_models"
import { AuthorizationError, NotFoundError } from "@shared-classes/Errors"
export default async (req, res) => {
diff --git a/packages/server/services/music/controllers/tracks/routes/post/:track_id/refresh-cache.js b/packages/server/services/music/controllers/tracks/routes/post/:track_id/refresh-cache.js
index 6488e0ec..43bf4c4c 100755
--- a/packages/server/services/music/controllers/tracks/routes/post/:track_id/refresh-cache.js
+++ b/packages/server/services/music/controllers/tracks/routes/post/:track_id/refresh-cache.js
@@ -1,4 +1,4 @@
-import { Track } from "@shared-classes/DbModels"
+import { Track } from "@db_models"
import { NotFoundError, AuthorizationError } from "@shared-classes/Errors"
import getEnhancedLyricsFromTrack from "@services/getEnhancedLyricsFromTrack"
diff --git a/packages/server/services/music/services/getEnhancedLyricsFromTrack.js b/packages/server/services/music/services/getEnhancedLyricsFromTrack.js
index 99b90813..722e7bbc 100755
--- a/packages/server/services/music/services/getEnhancedLyricsFromTrack.js
+++ b/packages/server/services/music/services/getEnhancedLyricsFromTrack.js
@@ -1,5 +1,5 @@
import findSpotifyId from "@services/findSpotifyId"
-import { Track } from "@shared-classes/DbModels"
+import { Track } from "@db_models"
import axios from "axios"
const syncLyricsProvider = process.env.LYRICS_SYNC_PROVIDER || `https://spotify-lyric-api.herokuapp.com`
diff --git a/packages/server/services/music/services/removeTracks.js b/packages/server/services/music/services/removeTracks.js
index 33eea611..eb79f4dd 100755
--- a/packages/server/services/music/services/removeTracks.js
+++ b/packages/server/services/music/services/removeTracks.js
@@ -1,4 +1,4 @@
-import { Track } from "@shared-classes/DbModels"
+import { Track } from "@db_models"
const urlRegex = new RegExp(`^https://(.*?)/(.*)$`)
diff --git a/packages/server/services/posts/classes/posts/methods/create.js b/packages/server/services/posts/classes/posts/methods/create.js
index 31c45da8..7237ad00 100644
--- a/packages/server/services/posts/classes/posts/methods/create.js
+++ b/packages/server/services/posts/classes/posts/methods/create.js
@@ -1,7 +1,7 @@
import momentTimezone from "moment-timezone"
import requiredFields from "@shared-utils/requiredFields"
-import { Post } from "@shared-classes/DbModels"
+import { Post } from "@db_models"
export default async (payload) => {
if (!payload) {
diff --git a/packages/server/services/posts/classes/posts/methods/data.js b/packages/server/services/posts/classes/posts/methods/data.js
index a24c9312..e2a18ead 100644
--- a/packages/server/services/posts/classes/posts/methods/data.js
+++ b/packages/server/services/posts/classes/posts/methods/data.js
@@ -1,4 +1,4 @@
-import { Post, SavedPost } from "@shared-classes/DbModels"
+import { Post, SavedPost } from "@db_models"
import fullfillPostsData from "./fullfill"
export default async (payload) => {
diff --git a/packages/server/services/posts/classes/posts/methods/fullfill.js b/packages/server/services/posts/classes/posts/methods/fullfill.js
index ffa6589c..d9a10abc 100644
--- a/packages/server/services/posts/classes/posts/methods/fullfill.js
+++ b/packages/server/services/posts/classes/posts/methods/fullfill.js
@@ -1,4 +1,4 @@
-import { User, Comment, PostLike, SavedPost } from "@shared-classes/DbModels"
+import { User, Comment, PostLike, SavedPost } from "@db_models"
export default async (payload) => {
let {
@@ -70,6 +70,7 @@ export default async (payload) => {
if (!user) {
user = {
+ _deleted: true,
username: "Deleted user",
}
}