MySQLs string comparisons are case-insensitive by default. This allows to hide notes by creating a new note with an alias that equals the lower-cased alias of another note. The new note is returned first by MySQL, so the original one is not accessible anymore. This fixes the problem by using an explicit binary comparison in the affected queries. See https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html Signed-off-by: David Mehren <git@herrmehren.de>
		
			
				
	
	
		
			41 lines
		
	
	
		
			915 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			915 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict'
 | 
						|
 | 
						|
exports.isSQLite = function isSQLite (sequelize) {
 | 
						|
  return sequelize.options.dialect === 'sqlite'
 | 
						|
}
 | 
						|
 | 
						|
exports.isMySQL = function isMySQL (sequelize) {
 | 
						|
  return ['mysql', 'mariadb'].includes(sequelize.options.dialect)
 | 
						|
}
 | 
						|
 | 
						|
exports.getImageMimeType = function getImageMimeType (imagePath) {
 | 
						|
  const fileExtension = /[^.]+$/.exec(imagePath)
 | 
						|
 | 
						|
  switch (fileExtension[0].toLowerCase()) {
 | 
						|
    case 'bmp':
 | 
						|
      return 'image/bmp'
 | 
						|
    case 'gif':
 | 
						|
      return 'image/gif'
 | 
						|
    case 'jpg':
 | 
						|
    case 'jpeg':
 | 
						|
      return 'image/jpeg'
 | 
						|
    case 'png':
 | 
						|
      return 'image/png'
 | 
						|
    case 'tiff':
 | 
						|
      return 'image/tiff'
 | 
						|
    case 'svg':
 | 
						|
      return 'image/svg+xml'
 | 
						|
    default:
 | 
						|
      return undefined
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
exports.useUnless = function excludeRoute (paths, middleware) {
 | 
						|
  return function (req, res, next) {
 | 
						|
    if (paths.includes(req.path)) {
 | 
						|
      return next()
 | 
						|
    }
 | 
						|
    return middleware(req, res, next)
 | 
						|
  }
 | 
						|
}
 |