2022-04-11 16:31:51 -04:00
|
|
|
const Joi = require('joi').extend(require('@joi/date'))
|
2022-04-08 15:59:38 -04:00
|
|
|
const path = require('path')
|
2022-02-11 21:55:50 -05:00
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
id: Joi.string()
|
|
|
|
.regex(/^[A-Za-z0-9]+\.[a-z]{2}$/)
|
|
|
|
.required(),
|
|
|
|
name: Joi.string()
|
2022-06-02 14:06:08 -04:00
|
|
|
.regex(/^[\sa-z\u00C0-\u00FF0-9-čâộăšİ!:&.+'/»#%°$@?()¡]+$/i)
|
2022-02-11 21:55:50 -05:00
|
|
|
.required(),
|
2022-03-01 04:26:55 -05:00
|
|
|
native_name: Joi.string()
|
|
|
|
.regex(/^[^",]+$/)
|
2022-05-24 17:37:36 -04:00
|
|
|
.invalid(Joi.ref('name'))
|
2022-03-01 04:26:55 -05:00
|
|
|
.allow(null),
|
2022-10-17 09:25:59 -04:00
|
|
|
network: Joi.string()
|
|
|
|
.regex(/^[^",]+$/)
|
|
|
|
.allow(null),
|
|
|
|
owners: Joi.array().items(Joi.string().regex(/^[^",]+$/)),
|
2022-02-11 21:55:50 -05:00
|
|
|
country: Joi.string()
|
|
|
|
.regex(/^[A-Z]{2}$/)
|
|
|
|
.required(),
|
|
|
|
subdivision: Joi.string()
|
|
|
|
.regex(/^[A-Z]{2}-[A-Z0-9]{1,3}$/)
|
|
|
|
.allow(null),
|
2022-02-16 16:03:39 -05:00
|
|
|
city: Joi.string()
|
|
|
|
.regex(/^[\sa-zA-Z\u00C0-\u00FF0-9'-]+$/)
|
|
|
|
.allow(null),
|
2022-02-11 21:55:50 -05:00
|
|
|
broadcast_area: Joi.array().items(
|
2022-02-18 22:18:41 -05:00
|
|
|
Joi.string()
|
|
|
|
.regex(/^(s\/[A-Z]{2}-[A-Z0-9]{1,3}|c\/[A-Z]{2}|r\/[A-Z0-9]{3,7})$/)
|
|
|
|
.required()
|
|
|
|
),
|
|
|
|
languages: Joi.array().items(
|
|
|
|
Joi.string()
|
|
|
|
.regex(/^[a-z]{3}$/)
|
|
|
|
.required()
|
2022-02-11 21:55:50 -05:00
|
|
|
),
|
|
|
|
categories: Joi.array().items(Joi.string().regex(/^[a-z]+$/)),
|
2022-02-16 14:58:26 -05:00
|
|
|
is_nsfw: Joi.boolean().strict().required(),
|
2022-04-11 16:31:51 -04:00
|
|
|
launched: Joi.date().format('YYYY-MM-DD').raw().allow(null),
|
2022-09-22 21:03:49 -04:00
|
|
|
closed: Joi.date().format('YYYY-MM-DD').raw().allow(null).greater(Joi.ref('launched')),
|
2022-04-21 14:47:00 -04:00
|
|
|
replaced_by: Joi.string()
|
|
|
|
.regex(/^[A-Za-z0-9]+\.[a-z]{2}$/)
|
|
|
|
.allow(null),
|
2022-02-19 23:05:31 -05:00
|
|
|
website: Joi.string()
|
|
|
|
.uri({
|
|
|
|
scheme: ['http', 'https']
|
|
|
|
})
|
|
|
|
.allow(null),
|
2022-02-19 11:10:21 -05:00
|
|
|
logo: Joi.string()
|
|
|
|
.uri({
|
|
|
|
scheme: ['https']
|
|
|
|
})
|
2022-04-08 15:59:38 -04:00
|
|
|
.custom((value, helper) => {
|
|
|
|
const ext = path.extname(value)
|
|
|
|
if (!ext || /(\.png|\.jpeg|\.jpg)/i.test(ext)) {
|
|
|
|
return true
|
|
|
|
} else {
|
|
|
|
return helper.message(`"logo" has an invalid file extension "${ext}"`)
|
|
|
|
}
|
|
|
|
})
|
2022-04-29 09:29:16 -04:00
|
|
|
.required()
|
2022-02-11 21:55:50 -05:00
|
|
|
}
|