|
|
const Ajv = require("ajv") |
|
|
const addFormats = require("ajv-formats") |
|
|
|
|
|
const ajv = new Ajv() |
|
|
addFormats(ajv) |
|
|
|
|
|
const schema = { |
|
|
"type": "object", |
|
|
"properties": { |
|
|
"mode": { |
|
|
"type": "string", |
|
|
"enum": ["source", "turnstile-min", "turnstile-max", "waf-session", "proxy-request"], |
|
|
}, |
|
|
"proxy": { |
|
|
"type": "object", |
|
|
"properties": { |
|
|
"host": { "type": "string" }, |
|
|
"port": { "type": "integer" }, |
|
|
"username": { "type": "string" }, |
|
|
"password": { "type": "string" } |
|
|
}, |
|
|
"additionalProperties": false |
|
|
}, |
|
|
"url": { |
|
|
"type": "string", |
|
|
"format": "uri", |
|
|
}, |
|
|
"authToken": { |
|
|
"type": "string" |
|
|
}, |
|
|
"siteKey": { |
|
|
"type": "string" |
|
|
}, |
|
|
"method": { |
|
|
"type": "string", |
|
|
"enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"] |
|
|
}, |
|
|
"body": { |
|
|
"type": ["string", "object"] |
|
|
}, |
|
|
"headers": { |
|
|
"type": "object" |
|
|
}, |
|
|
"cookies": { |
|
|
"type": "array", |
|
|
"items": { |
|
|
"type": "object", |
|
|
"properties": { |
|
|
"name": { "type": "string" }, |
|
|
"value": { "type": "string" }, |
|
|
"domain": { "type": "string" }, |
|
|
"path": { "type": "string" }, |
|
|
"secure": { "type": "boolean" }, |
|
|
"httpOnly": { "type": "boolean" }, |
|
|
"sameSite": { "type": "string" } |
|
|
}, |
|
|
"required": ["name", "value"] |
|
|
} |
|
|
}, |
|
|
"sessionHeaders": { |
|
|
"type": "object" |
|
|
} |
|
|
}, |
|
|
"required": ["mode", "url"], |
|
|
"additionalProperties": false |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function validate(data) { |
|
|
const valid = ajv.validate(schema, data) |
|
|
if (!valid) return ajv.errors |
|
|
else return true |
|
|
} |
|
|
|
|
|
module.exports = validate |