potential fix for mixed random results when unathenticated
This commit is contained in:
@@ -226,10 +226,15 @@ export default {
|
|||||||
from favorites
|
from favorites
|
||||||
inner join items on favorites.item_id = items.id
|
inner join items on favorites.item_id = items.id
|
||||||
inner join "user" on "user".id = favorites.user_id
|
inner join "user" on "user".id = favorites.user_id
|
||||||
|
left join tags_assign on tags_assign.item_id = items.id
|
||||||
|
left join tags on tags.id = tags_assign.tag_id
|
||||||
where
|
where
|
||||||
"user".user ilike ${'%' + user + '%'}
|
${db.unsafe(modequery)}
|
||||||
|
and "user".user ilike ${'%' + user + '%'}
|
||||||
and items.active = 'true'
|
and items.active = 'true'
|
||||||
${mime ? db`and items.mime ilike ${smime}` : db``}
|
${mime ? db`and items.mime ilike ${smime}` : db``}
|
||||||
|
${!o.session && globalfilter ? db`and items.id not in (select item_id from tags_assign where item_id = items.id and (${db.unsafe(globalfilter)}))` : db``}
|
||||||
|
group by items.id
|
||||||
order by random()
|
order by random()
|
||||||
limit 1
|
limit 1
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import db from '../../sql.mjs';
|
import db from '../../sql.mjs';
|
||||||
import lib from '../../lib.mjs';
|
import lib from '../../lib.mjs';
|
||||||
|
import cfg from '../../config.mjs';
|
||||||
import search from '../../routeinc/search.mjs';
|
import search from '../../routeinc/search.mjs';
|
||||||
|
|
||||||
const allowedMimes = ["audio", "image", "video", "%"];
|
const allowedMimes = ["audio", "image", "video", "%"];
|
||||||
|
const globalfilter = cfg.nsfp?.length ? cfg.nsfp.map(n => `tag_id = ${n}`).join(' or ') : null;
|
||||||
|
|
||||||
export default router => {
|
export default router => {
|
||||||
router.group(/^\/api\/v2/, group => {
|
router.group(/^\/api\/v2/, group => {
|
||||||
group.get(/$/, (req, res) => {
|
group.get(/$/, (req, res) => {
|
||||||
@@ -19,6 +22,8 @@ export default router => {
|
|||||||
|
|
||||||
const tag = req.url.qs.tag || null;
|
const tag = req.url.qs.tag || null;
|
||||||
const isFav = req.url.qs.fav === 'true';
|
const isFav = req.url.qs.fav === 'true';
|
||||||
|
const hasSession = !!req.session;
|
||||||
|
const modequery = mime.startsWith("audio") ? lib.getMode(0) : lib.getMode(req.session?.mode ?? 0);
|
||||||
|
|
||||||
const rows = await db`
|
const rows = await db`
|
||||||
select "items".*
|
select "items".*
|
||||||
@@ -30,10 +35,12 @@ export default router => {
|
|||||||
left join tags_assign on tags_assign.item_id = items.id
|
left join tags_assign on tags_assign.item_id = items.id
|
||||||
left join tags on tags.id = tags_assign.tag_id
|
left join tags on tags.id = tags_assign.tag_id
|
||||||
where
|
where
|
||||||
|
${db.unsafe(modequery)} and
|
||||||
mime ilike ${mime} and
|
mime ilike ${mime} and
|
||||||
active = 'true'
|
active = 'true'
|
||||||
${isFav ? db`and fu."user" = ${user}` : db`and items.username ilike ${user}`}
|
${isFav ? db`and fu."user" = ${user}` : db`and items.username ilike ${user}`}
|
||||||
${tag ? db`and tags.normalized ilike ${'%' + tag + '%'}` : db``}
|
${tag ? db`and tags.normalized ilike ${'%' + tag + '%'}` : db``}
|
||||||
|
${!hasSession && globalfilter ? db`and items.id not in (select item_id from tags_assign where item_id = items.id and (${db.unsafe(globalfilter)}))` : db``}
|
||||||
order by random()
|
order by random()
|
||||||
limit 1
|
limit 1
|
||||||
`;
|
`;
|
||||||
|
|||||||
Reference in New Issue
Block a user