commit
a21774d589
@ -65,7 +65,7 @@ CUSTOM_DOMAIN_USE_HTTPS=false
|
|||||||
# More info on the configuration on http://nodemailer.com/.
|
# More info on the configuration on http://nodemailer.com/.
|
||||||
MAIL_ENABLED=false
|
MAIL_ENABLED=false
|
||||||
MAIL_HOST=
|
MAIL_HOST=
|
||||||
MAIL_PORT=
|
MAIL_PORT=587
|
||||||
MAIL_SECURE=true
|
MAIL_SECURE=true
|
||||||
MAIL_USER=
|
MAIL_USER=
|
||||||
MAIL_FROM=
|
MAIL_FROM=
|
||||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "kutt",
|
"name": "kutt",
|
||||||
"version": "3.1.0",
|
"version": "3.1.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "kutt",
|
"name": "kutt",
|
||||||
"version": "3.1.0",
|
"version": "3.1.1",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bcryptjs": "2.4.3",
|
"bcryptjs": "2.4.3",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "kutt",
|
"name": "kutt",
|
||||||
"version": "3.1.0",
|
"version": "3.1.1",
|
||||||
"description": "Modern URL shortener.",
|
"description": "Modern URL shortener.",
|
||||||
"main": "./server/server.js",
|
"main": "./server/server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -15,6 +15,11 @@ if (process.env.LINK_CUSTOM_ALPHABET === "") {
|
|||||||
delete process.env.LINK_CUSTOM_ALPHABET;
|
delete process.env.LINK_CUSTOM_ALPHABET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make sure jwt secret is not empty
|
||||||
|
if (process.env.JWT_SECRET === "") {
|
||||||
|
delete process.env.JWT_SECRET;
|
||||||
|
}
|
||||||
|
|
||||||
const env = cleanEnv(process.env, {
|
const env = cleanEnv(process.env, {
|
||||||
PORT: num({ default: 3000 }),
|
PORT: num({ default: 3000 }),
|
||||||
SITE_NAME: str({ example: "Kutt", default: "Kutt" }),
|
SITE_NAME: str({ example: "Kutt", default: "Kutt" }),
|
||||||
|
@ -28,4 +28,6 @@ db.isPostgres = isPostgres;
|
|||||||
db.isSQLite = isSQLite;
|
db.isSQLite = isSQLite;
|
||||||
db.isMySQL = isMySQL;
|
db.isMySQL = isMySQL;
|
||||||
|
|
||||||
|
db.compatibleILIKE = isPostgres ? "andWhereILike" : "andWhereLike";
|
||||||
|
|
||||||
module.exports = db;
|
module.exports = db;
|
||||||
|
@ -142,16 +142,16 @@ async function getAdmin(match, params) {
|
|||||||
if (params?.user) {
|
if (params?.user) {
|
||||||
const id = parseInt(params?.user);
|
const id = parseInt(params?.user);
|
||||||
if (Number.isNaN(id)) {
|
if (Number.isNaN(id)) {
|
||||||
query.andWhereILike("users.email", "%" + params.user + "%");
|
query[knex.compatibleILIKE]("users.email", "%" + params.user + "%");
|
||||||
} else {
|
} else {
|
||||||
query.andWhere("domains.user_id", id);
|
query.andWhere("domains.user_id", id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params?.search) {
|
if (params?.search) {
|
||||||
query.andWhereRaw(
|
query[knex.compatibleILIKE](
|
||||||
"concat_ws(' ', domains.address, domains.homepage) ILIKE '%' || ? || '%'",
|
knex.raw("concat_ws(' ', domains.address, domains.homepage)"),
|
||||||
[params.search]
|
"%" + params.search + "%"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ async function getAdmin(match, params) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
query.leftJoin(
|
query.leftJoin(
|
||||||
knex("links").select("domain_id").count("id as links_count").groupBy("domain_id").as("l"),
|
knex("links").select("domain_id").count("* as links_count").groupBy("domain_id").as("l"),
|
||||||
"domains.id",
|
"domains.id",
|
||||||
"l.domain_id"
|
"l.domain_id"
|
||||||
);
|
);
|
||||||
@ -180,19 +180,22 @@ async function totalAdmin(match, params) {
|
|||||||
if (params?.user) {
|
if (params?.user) {
|
||||||
const id = parseInt(params?.user);
|
const id = parseInt(params?.user);
|
||||||
if (Number.isNaN(id)) {
|
if (Number.isNaN(id)) {
|
||||||
query.andWhereILike("users.email", "%" + params.user + "%");
|
query[knex.compatibleILIKE]("users.email", "%" + params.user + "%");
|
||||||
} else {
|
} else {
|
||||||
query.andWhere("domains.user_id", id);
|
query.andWhere("domains.user_id", id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params?.search) {
|
if (params?.search) {
|
||||||
query.andWhereILike("domains.address", "%" + params.search + "%");
|
query[knex.compatibleILIKE](
|
||||||
|
knex.raw("concat_ws(' ', domains.address, domains.homepage)"),
|
||||||
|
"%" + params.search + "%"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params?.links !== undefined) {
|
if (params?.links !== undefined) {
|
||||||
query.leftJoin(
|
query.leftJoin(
|
||||||
knex("links").select("domain_id").count("id as links_count").groupBy("domain_id").as("l"),
|
knex("links").select("domain_id").count("* as links_count").groupBy("domain_id").as("l"),
|
||||||
"domains.id",
|
"domains.id",
|
||||||
"l.domain_id"
|
"l.domain_id"
|
||||||
);
|
);
|
||||||
@ -200,7 +203,7 @@ async function totalAdmin(match, params) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
query.leftJoin("users", "domains.user_id", "users.id");
|
query.leftJoin("users", "domains.user_id", "users.id");
|
||||||
query.count("domains.id as count");
|
query.count("* as count");
|
||||||
|
|
||||||
const [{ count }] = await query;
|
const [{ count }] = await query;
|
||||||
|
|
||||||
|
@ -64,13 +64,13 @@ async function total(match, params) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (params?.search) {
|
if (params?.search) {
|
||||||
query.andWhereRaw(
|
query[knex.compatibleILIKE](
|
||||||
"concat_ws(' ', description, links.address, target, domains.address) ILIKE '%' || ? || '%'",
|
knex.raw("concat_ws(' ', description, links.address, target, domains.address)"),
|
||||||
[params.search]
|
"%" + params.search + "%"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
query.leftJoin("domains", "links.domain_id", "domains.id");
|
query.leftJoin("domains", "links.domain_id", "domains.id");
|
||||||
query.count("links.id as count");
|
query.count("* as count");
|
||||||
|
|
||||||
const [{ count }] = await query;
|
const [{ count }] = await query;
|
||||||
|
|
||||||
@ -87,26 +87,26 @@ async function totalAdmin(match, params) {
|
|||||||
if (params?.user) {
|
if (params?.user) {
|
||||||
const id = parseInt(params?.user);
|
const id = parseInt(params?.user);
|
||||||
if (Number.isNaN(id)) {
|
if (Number.isNaN(id)) {
|
||||||
query.andWhereILike("users.email", "%" + params.user + "%");
|
query[knex.compatibleILIKE]("users.email", "%" + params.user + "%");
|
||||||
} else {
|
} else {
|
||||||
query.andWhere("links.user_id", params.user);
|
query.andWhere("links.user_id", params.user);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params?.search) {
|
if (params?.search) {
|
||||||
query.andWhereRaw(
|
query[knex.compatibleILIKE](
|
||||||
"concat_ws(' ', description, links.address, target) ILIKE '%' || ? || '%'",
|
knex.raw("concat_ws(' ', description, links.address, target)"),
|
||||||
[params.search]
|
"%" + params.search + "%"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params?.domain) {
|
if (params?.domain) {
|
||||||
query.andWhereRaw("domains.address ILIKE '%' || ? || '%'", [params.domain]);
|
query[knex.compatibleILIKE]("domains.address", "%" + params.domain + "%");
|
||||||
}
|
}
|
||||||
|
|
||||||
query.leftJoin("domains", "links.domain_id", "domains.id");
|
query.leftJoin("domains", "links.domain_id", "domains.id");
|
||||||
query.leftJoin("users", "links.user_id", "users.id");
|
query.leftJoin("users", "links.user_id", "users.id");
|
||||||
query.count("links.id as count");
|
query.count("* as count");
|
||||||
|
|
||||||
const [{ count }] = await query;
|
const [{ count }] = await query;
|
||||||
|
|
||||||
@ -122,9 +122,9 @@ async function get(match, params) {
|
|||||||
.orderBy("links.id", "desc");
|
.orderBy("links.id", "desc");
|
||||||
|
|
||||||
if (params?.search) {
|
if (params?.search) {
|
||||||
query.andWhereRaw(
|
query[knex.compatibleILIKE](
|
||||||
"concat_ws(' ', description, links.address, target, domains.address) ILIKE '%' || ? || '%'",
|
knex.raw("concat_ws(' ', description, links.address, target, domains.address)"),
|
||||||
[params.search]
|
"%" + params.search + "%"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,21 +148,21 @@ async function getAdmin(match, params) {
|
|||||||
if (params?.user) {
|
if (params?.user) {
|
||||||
const id = parseInt(params?.user);
|
const id = parseInt(params?.user);
|
||||||
if (Number.isNaN(id)) {
|
if (Number.isNaN(id)) {
|
||||||
query.andWhereILike("users.email", "%" + params.user + "%");
|
query[knex.compatibleILIKE]("users.email", "%" + params.user + "%");
|
||||||
} else {
|
} else {
|
||||||
query.andWhere("links.user_id", params.user);
|
query.andWhere("links.user_id", params.user);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params?.search) {
|
if (params?.search) {
|
||||||
query.andWhereRaw(
|
query[knex.compatibleILIKE](
|
||||||
"concat_ws(' ', description, links.address, target) ILIKE '%' || ? || '%'",
|
knex.raw("concat_ws(' ', description, links.address, target)"),
|
||||||
[params.search]
|
"%" + params.search + "%"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params?.domain) {
|
if (params?.domain) {
|
||||||
query.andWhereRaw("domains.address ILIKE '%' || ? || '%'", [params.domain]);
|
query[knex.compatibleILIKE]("domains.address", "%" + params.domain + "%");
|
||||||
}
|
}
|
||||||
|
|
||||||
query.leftJoin("domains", "links.domain_id", "domains.id");
|
query.leftJoin("domains", "links.domain_id", "domains.id");
|
||||||
|
@ -144,7 +144,7 @@ async function getAdmin(match, params) {
|
|||||||
if (params?.search) {
|
if (params?.search) {
|
||||||
const id = parseInt(params?.search);
|
const id = parseInt(params?.search);
|
||||||
if (Number.isNaN(id)) {
|
if (Number.isNaN(id)) {
|
||||||
query.andWhereILike("users.email", "%" + params?.search + "%");
|
query[knex.compatibleILIKE]("users.email", "%" + params?.search + "%");
|
||||||
} else {
|
} else {
|
||||||
query.andWhere("users.id", params?.search);
|
query.andWhere("users.id", params?.search);
|
||||||
}
|
}
|
||||||
@ -169,7 +169,7 @@ async function getAdmin(match, params) {
|
|||||||
"d.user_id"
|
"d.user_id"
|
||||||
)
|
)
|
||||||
query.leftJoin(
|
query.leftJoin(
|
||||||
knex("links").select("user_id").count("id as links_count").groupBy("user_id").as("l"),
|
knex("links").select("user_id").count("* as links_count").groupBy("user_id").as("l"),
|
||||||
"users.id",
|
"users.id",
|
||||||
"l.user_id"
|
"l.user_id"
|
||||||
);
|
);
|
||||||
@ -179,14 +179,14 @@ async function getAdmin(match, params) {
|
|||||||
|
|
||||||
async function totalAdmin(match, params) {
|
async function totalAdmin(match, params) {
|
||||||
const query = knex("users")
|
const query = knex("users")
|
||||||
.count("users.id as count")
|
.count("* as count")
|
||||||
.fromRaw('users')
|
.fromRaw('users')
|
||||||
.where(normalizeMatch(match));
|
.where(normalizeMatch(match));
|
||||||
|
|
||||||
if (params?.search) {
|
if (params?.search) {
|
||||||
const id = parseInt(params?.search);
|
const id = parseInt(params?.search);
|
||||||
if (Number.isNaN(id)) {
|
if (Number.isNaN(id)) {
|
||||||
query.andWhereILike("users.email", "%" + params?.search + "%");
|
query[knex.compatibleILIKE]("users.email", "%" + params?.search + "%");
|
||||||
} else {
|
} else {
|
||||||
query.andWhere("users.id", params?.search);
|
query.andWhere("users.id", params?.search);
|
||||||
}
|
}
|
||||||
@ -209,7 +209,7 @@ async function totalAdmin(match, params) {
|
|||||||
if (params?.links !== undefined) {
|
if (params?.links !== undefined) {
|
||||||
query.andWhere("links", params?.links ? "is not" : "is", null);
|
query.andWhere("links", params?.links ? "is not" : "is", null);
|
||||||
query.leftJoin(
|
query.leftJoin(
|
||||||
knex("links").select("user_id").count("id as links").groupBy("user_id").as("l"),
|
knex("links").select("user_id").count("* as links").groupBy("user_id").as("l"),
|
||||||
"users.id",
|
"users.id",
|
||||||
"l.user_id"
|
"l.user_id"
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user