Added data validation diagnostics for offline use

This commit is contained in:
Stefan Zermatten
2022-03-08 15:04:51 +02:00
parent fada07e048
commit c68667be9c
3 changed files with 38 additions and 2 deletions

View File

@@ -1,2 +1,3 @@
import './migrateTo.js';
import './validateDatabase.js';
import './getVersion.js';

View File

@@ -16,8 +16,8 @@ const migrateTo = new ValidatedMethod({
}).validator(),
mixins: [RateLimiterMixin],
rateLimit: {
numRequests: 5,
timeInterval: 5000,
numRequests: 1,
timeInterval: 10000,
},
run({version}) {
if (Meteor.isClient) return;

View File

@@ -0,0 +1,35 @@
import { ValidatedMethod } from 'meteor/mdg:validated-method';
import { RateLimiterMixin } from 'ddp-rate-limiter-mixin';
import { assertAdmin } from '/imports/api/sharing/sharingPermissions.js';
const validateDatabase = new ValidatedMethod({
name: 'validateDatabase',
validate: null,
mixins: [RateLimiterMixin],
rateLimit: {
numRequests: 1,
timeInterval: 10000,
},
run() {
assertAdmin(this.userId);
// Very computationally expensive data diagnostics
// Only run in an offline instance you control
return;
if (Meteor.isClient) return;
Meteor.Collection.getAll().forEach(collection => {
if (!collection.instance._c2?._simpleSchemas) return;
collection.instance.find({}).forEach(doc => {
const schema = collection.instance.simpleSchema(doc);
let cleanDoc = schema.clean(doc);
try {
schema.validate(cleanDoc, {modifier: false});
} catch (e){
console.log(collection.name, doc._id, e.message || e.reason || e.toString());
}
});
});
},
});
export default validateDatabase;