added /materials route
This commit is contained in:
		
							
								
								
									
										17
									
								
								src/routes/validate/id.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/routes/validate/id.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
import joi from '@hapi/joi';
 | 
			
		||||
 | 
			
		||||
export default class IdValidate {
 | 
			
		||||
  private static id = joi.string().pattern(new RegExp('[0-9a-f]{24}')).length(24);
 | 
			
		||||
 | 
			
		||||
  static get () {
 | 
			
		||||
    return this.id;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static valid (id) {
 | 
			
		||||
    return this.id.validate(id).error === undefined;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static parameter() {  // :id url parameter
 | 
			
		||||
    return ':id([0-9a-f]{24})';
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										82
									
								
								src/routes/validate/material.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								src/routes/validate/material.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
			
		||||
import joi from '@hapi/joi';
 | 
			
		||||
 | 
			
		||||
import IdValidate from './id';
 | 
			
		||||
 | 
			
		||||
export default class MaterialValidate {  // validate input for material
 | 
			
		||||
  private static material = {
 | 
			
		||||
    name: joi.string()
 | 
			
		||||
      .max(128),
 | 
			
		||||
 | 
			
		||||
    supplier: joi.string()
 | 
			
		||||
      .max(128),
 | 
			
		||||
 | 
			
		||||
    group: joi.string()
 | 
			
		||||
      .max(128),
 | 
			
		||||
 | 
			
		||||
    mineral: joi.number()
 | 
			
		||||
      .integer()
 | 
			
		||||
      .min(0)
 | 
			
		||||
      .max(100),
 | 
			
		||||
 | 
			
		||||
    glass_fiber: joi.number()
 | 
			
		||||
      .integer()
 | 
			
		||||
      .min(0)
 | 
			
		||||
      .max(100),
 | 
			
		||||
 | 
			
		||||
    carbon_fiber: joi.number()
 | 
			
		||||
      .integer()
 | 
			
		||||
      .min(0)
 | 
			
		||||
      .max(100),
 | 
			
		||||
 | 
			
		||||
    numbers: joi.array()
 | 
			
		||||
      .items(joi.object({
 | 
			
		||||
        color: joi.string()
 | 
			
		||||
          .max(128),
 | 
			
		||||
        number: joi.number()
 | 
			
		||||
          .min(0)
 | 
			
		||||
      }))
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static input (data, param) {  // validate data, param: new(everything required)/change(available attributes are validated)
 | 
			
		||||
    if (param === 'new') {
 | 
			
		||||
      return joi.object({
 | 
			
		||||
        name: this.material.name.required(),
 | 
			
		||||
        supplier: this.material.supplier.required(),
 | 
			
		||||
        group: this.material.group.required(),
 | 
			
		||||
        mineral: this.material.mineral.required(),
 | 
			
		||||
        glass_fiber: this.material.glass_fiber.required(),
 | 
			
		||||
        carbon_fiber: this.material.carbon_fiber.required(),
 | 
			
		||||
        numbers: this.material.numbers
 | 
			
		||||
      }).validate(data);
 | 
			
		||||
    }
 | 
			
		||||
    else if (param === 'change') {
 | 
			
		||||
      return joi.object({
 | 
			
		||||
        name: this.material.name,
 | 
			
		||||
        supplier: this.material.supplier,
 | 
			
		||||
        group: this.material.group,
 | 
			
		||||
        mineral: this.material.mineral,
 | 
			
		||||
        glass_fiber: this.material.glass_fiber,
 | 
			
		||||
        carbon_fiber: this.material.carbon_fiber,
 | 
			
		||||
        numbers: this.material.numbers
 | 
			
		||||
      }).validate(data);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      return{error: 'No parameter specified!', value: {}};
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static output (data) {  // validate output from database for needed properties, strip everything else
 | 
			
		||||
    data._id = data._id.toString();
 | 
			
		||||
    const {value, error} = joi.object({
 | 
			
		||||
      _id: IdValidate.get(),
 | 
			
		||||
      name: this.material.name,
 | 
			
		||||
      supplier: this.material.supplier,
 | 
			
		||||
      group: this.material.group,
 | 
			
		||||
      mineral: this.material.mineral,
 | 
			
		||||
      glass_fiber: this.material.glass_fiber,
 | 
			
		||||
      carbon_fiber: this.material.carbon_fiber,
 | 
			
		||||
      numbers: this.material.numbers
 | 
			
		||||
    }).validate(data, {stripUnknown: true});
 | 
			
		||||
    return error !== undefined? null : value;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,28 +1,34 @@
 | 
			
		||||
import joi from '@hapi/joi';
 | 
			
		||||
import globals from '../../globals';
 | 
			
		||||
 | 
			
		||||
import IdValidate from './id';
 | 
			
		||||
 | 
			
		||||
export default class UserValidate {  // validate input for user
 | 
			
		||||
  private static user = {
 | 
			
		||||
    _id: joi.any(),
 | 
			
		||||
    name: joi.string()
 | 
			
		||||
      .alphanum()
 | 
			
		||||
      .lowercase(),
 | 
			
		||||
      .lowercase()
 | 
			
		||||
      .max(128),
 | 
			
		||||
 | 
			
		||||
    email: joi.string()
 | 
			
		||||
      .email({minDomainSegments: 2})
 | 
			
		||||
      .lowercase(),
 | 
			
		||||
      .lowercase()
 | 
			
		||||
      .max(128),
 | 
			
		||||
 | 
			
		||||
    pass: joi.string()
 | 
			
		||||
      .pattern(new RegExp('^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!"#%&\'()*+,-.\\/:;<=>?@[\\]^_`{|}~])(?=\\S+$).{8,}$')),
 | 
			
		||||
      .pattern(new RegExp('^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!"#%&\'()*+,-.\\/:;<=>?@[\\]^_`{|}~])(?=\\S+$).{8,}$'))
 | 
			
		||||
      .max(128),
 | 
			
		||||
 | 
			
		||||
    level: joi.string()
 | 
			
		||||
      .valid(...globals.levels),
 | 
			
		||||
 | 
			
		||||
    location: joi.string()
 | 
			
		||||
      .alphanum(),
 | 
			
		||||
      .alphanum()
 | 
			
		||||
      .max(128),
 | 
			
		||||
 | 
			
		||||
    device_name: joi.string()
 | 
			
		||||
      .allow('')
 | 
			
		||||
      .max(128),
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  private static specialUsernames = ['admin', 'user', 'key', 'new', 'passreset'];  // names a user cannot take
 | 
			
		||||
@@ -63,14 +69,15 @@ export default class UserValidate {  // validate input for user
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static output (data) {  // validate output from database for needed properties, strip everything else
 | 
			
		||||
    data._id = data._id.toString();
 | 
			
		||||
    const {value, error} = joi.object({
 | 
			
		||||
      _id: joi.any(),
 | 
			
		||||
      name: joi.string(),
 | 
			
		||||
      email: joi.string(),
 | 
			
		||||
      level: joi.string(),
 | 
			
		||||
      location: joi.string(),
 | 
			
		||||
      device_name: joi.string().allow('')
 | 
			
		||||
    }).validate(data, {stripUnknown: true})
 | 
			
		||||
      _id: IdValidate.get(),
 | 
			
		||||
      name: this.user.name,
 | 
			
		||||
      email: this.user.email,
 | 
			
		||||
      level: this.user.level,
 | 
			
		||||
      location: this.user.location,
 | 
			
		||||
      device_name: this.user.device_name
 | 
			
		||||
    }).validate(data, {stripUnknown: true});
 | 
			
		||||
    return error !== undefined? null : value;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user