101 lines
3.0 KiB
JavaScript
101 lines
3.0 KiB
JavaScript
const Joi = require('joi');
|
|
|
|
// ========================
|
|
// Auth Validation
|
|
// ========================
|
|
const registerSchema = Joi.object({
|
|
fullname: Joi.string().min(3).max(100).required(),
|
|
name: Joi.string().alphanum().min(3).max(50).required(),
|
|
email: Joi.string().email().required(),
|
|
phone: Joi.string()
|
|
.pattern(/^(?:\+62|0)8\d{7,10}$/)
|
|
.required()
|
|
.messages({
|
|
'string.pattern.base':
|
|
'Phone number must be a valid Indonesian number in format +628XXXXXXXXX'
|
|
}),
|
|
password: Joi.string()
|
|
.min(8)
|
|
.pattern(/[A-Z]/, 'uppercase letter')
|
|
.pattern(/[a-z]/, 'lowercase letter')
|
|
.pattern(/\d/, 'number')
|
|
.pattern(/[!@#$%^&*(),.?":{}|<>]/, 'special character')
|
|
.required()
|
|
.messages({
|
|
'string.min': 'Password must be at least 8 characters long',
|
|
'string.pattern.name': 'Password must contain at least one {#name}'
|
|
})
|
|
});
|
|
const loginSchema = Joi.object({
|
|
email: Joi.string().email().required(),
|
|
password: Joi.string().required(),
|
|
captcha: Joi.string().required(),
|
|
captchaText: Joi.string().required()
|
|
});
|
|
|
|
// ========================
|
|
// Device Validation
|
|
// ========================
|
|
const deviceSchema = Joi.object({
|
|
device_code: Joi.string().max(100).required(),
|
|
device_name: Joi.string().max(100).required(),
|
|
device_status: Joi.boolean().required(),
|
|
device_location: Joi.string().max(100).required(),
|
|
device_description: Joi.string().required(),
|
|
ip_address: Joi.string()
|
|
.ip({ version: ['ipv4', 'ipv6'] })
|
|
.required()
|
|
.messages({
|
|
'string.ip': 'IP address must be a valid IPv4 or IPv6 address'
|
|
})
|
|
});
|
|
|
|
const deviceUpdateSchema = Joi.object({
|
|
device_code: Joi.string().max(100),
|
|
device_name: Joi.string().max(100),
|
|
device_status: Joi.boolean(),
|
|
device_location: Joi.string().max(100),
|
|
device_description: Joi.string(),
|
|
ip_address: Joi.string()
|
|
.ip({ version: ['ipv4', 'ipv6'] })
|
|
.messages({
|
|
'string.ip': 'IP address must be a valid IPv4 or IPv6 address'
|
|
})
|
|
}).min(1);
|
|
|
|
// ========================
|
|
// Users Validation
|
|
// ========================
|
|
const userSchema = Joi.object({
|
|
fullname: Joi.string().min(3).max(100).required(),
|
|
name: Joi.string().alphanum().min(3).max(50).required(),
|
|
email: Joi.string().email().required(),
|
|
phone: Joi.string()
|
|
.pattern(/^(?:\+62|0)8\d{7,10}$/)
|
|
.required()
|
|
.messages({
|
|
'string.pattern.base':
|
|
'Phone number must be a valid Indonesian number in format +628XXXXXXXXX'
|
|
}),
|
|
password: Joi.string()
|
|
.min(8)
|
|
.pattern(/[A-Z]/, 'uppercase letter')
|
|
.pattern(/[a-z]/, 'lowercase letter')
|
|
.pattern(/\d/, 'number')
|
|
.pattern(/[!@#$%^&*(),.?":{}|<>]/, 'special character')
|
|
.required()
|
|
.messages({
|
|
'string.min': 'Password must be at least 8 characters long',
|
|
'string.pattern.name': 'Password must contain at least one {#name}'
|
|
}),
|
|
role_id : Joi.number().integer().min(1)
|
|
});
|
|
|
|
module.exports = {
|
|
registerSchema,
|
|
loginSchema,
|
|
deviceSchema,
|
|
deviceUpdateSchema,
|
|
userSchema,
|
|
};
|