From c187c4b7ac919f0f79afe965bf776bf4ee385493 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Wed, 30 Jun 2021 21:56:25 +0200 Subject: :sparkles: checkToken return user data --- src/models/index.ts | 1 + 1 file changed, 1 insertion(+) (limited to 'src/models/index.ts') diff --git a/src/models/index.ts b/src/models/index.ts index 004095db..4cc6ec2b 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -35,3 +35,4 @@ export * from "./Status"; export * from "./Role"; export * from "./User"; export * from "./VoiceState"; +export * from "./RateLimit"; -- cgit 1.5.1 From 4c75b5cc7db95ff162fdd15ac02a41c76020a891 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Sat, 10 Jul 2021 17:51:19 +0200 Subject: auto throw error if findOne doesn't find any doc --- src/models/index.ts | 44 ++++++++++++++++++++++++++++++++++++++++++-- src/util/Database.ts | 1 - 2 files changed, 42 insertions(+), 3 deletions(-) (limited to 'src/models/index.ts') diff --git a/src/models/index.ts b/src/models/index.ts index 4cc6ec2b..61c8d85a 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -1,7 +1,42 @@ -import mongoose from "mongoose"; -import { Schema } from "mongoose"; +import mongoose, { Schema, Document } from "mongoose"; import mongooseAutoPopulate from "mongoose-autopopulate"; +type UpdateWithAggregationPipeline = UpdateAggregationStage[]; +type UpdateAggregationStage = + | { $addFields: any } + | { $set: any } + | { $project: any } + | { $unset: any } + | { $replaceRoot: any } + | { $replaceWith: any }; +type EnforceDocument = T extends Document ? T : T & Document & TMethods; + +declare module "mongoose" { + interface Model { + // removed null -> always return document -> throw error if it doesn't exist + findOne( + filter?: FilterQuery, + projection?: any | null, + options?: QueryOptions | null, + callback?: (err: CallbackError, doc: EnforceDocument) => void + ): QueryWithHelpers, EnforceDocument, TQueryHelpers>; + findOneAndUpdate( + filter?: FilterQuery, + update?: UpdateQuery | UpdateWithAggregationPipeline, + options?: QueryOptions | null, + callback?: (err: any, doc: EnforceDocument | null, res: any) => void + ): QueryWithHelpers, EnforceDocument, TQueryHelpers>; + } +} + +var HTTPError: any; + +try { + HTTPError = require("lambert-server").HTTPError; +} catch (e) { + HTTPError = Error; +} + mongoose.plugin(mongooseAutoPopulate); mongoose.plugin((schema: Schema, opts: any) => { @@ -17,6 +52,11 @@ mongoose.plugin((schema: Schema, opts: any) => { }); }, }); + schema.post("findOne", (doc, next) => { + if (!doc) return next(new HTTPError("Not found", 404)); + // @ts-ignore + return next(); + }); }); export * from "./Activity"; diff --git a/src/util/Database.ts b/src/util/Database.ts index ed596907..16e07d3b 100644 --- a/src/util/Database.ts +++ b/src/util/Database.ts @@ -5,7 +5,6 @@ import EventEmitter from "events"; const uri = process.env.MONGO_URL || "mongodb://localhost:27017/fosscord?readPreference=secondaryPreferred"; import { URL } from "url"; -// TODO: auto throw error if findOne doesn't find anything const url = new URL(uri.replace("mongodb://", "http://")); const connection = mongoose.createConnection(uri, { -- cgit 1.5.1 From 11ace49d8c1e75a41200bb45c0bd50c712d2e5d2 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Mon, 19 Jul 2021 22:42:07 +0200 Subject: :bug: fix findOne exists query --- src/models/index.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/models/index.ts') diff --git a/src/models/index.ts b/src/models/index.ts index 61c8d85a..11a6fe37 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -52,10 +52,17 @@ mongoose.plugin((schema: Schema, opts: any) => { }); }, }); - schema.post("findOne", (doc, next) => { - if (!doc) return next(new HTTPError("Not found", 404)); - // @ts-ignore - return next(); + schema.post("findOne", function (doc, next) { + try { + // @ts-ignore + const isExistsQuery = JSON.stringify(this._userProvidedFields) === JSON.stringify({ _id: 1 }); + if (!doc && !isExistsQuery) return next(new HTTPError("Not found", 404)); + // @ts-ignore + return next(); + } catch (error) { + // @ts-ignore + next(); + } }); }); -- cgit 1.5.1