The secure parameter is now called useSSL https://github.com/minio/minio-js/releases/tag/7.0.0 Signed-off-by: David Mehren <git@herrmehren.de>
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env node
 | |
| 
 | |
| const { cloneDeep } = require('lodash');
 | |
| const config = require('../lib/config');
 | |
| const dbconfig = cloneDeep(config.db);
 | |
| const fs = require('fs');
 | |
| const { getImageMimeType } = require('../lib/utils');
 | |
| const Minio = require('minio');
 | |
| const path = require('path');
 | |
| const Sequelize = require('sequelize');
 | |
| 
 | |
| if (config.dbURL) {
 | |
|   sequelize = new Sequelize(config.dbURL, dbconfig)
 | |
| } else {
 | |
|   sequelize = new Sequelize(dbconfig.database, dbconfig.username, dbconfig.password, dbconfig)
 | |
| }
 | |
| 
 | |
| const minioClient = new Minio.Client({
 | |
|   endPoint: config.minio.endPoint,
 | |
|   port: config.minio.port,
 | |
|   useSSL: config.minio.secure,
 | |
|   accessKey: config.minio.accessKey,
 | |
|   secretKey: config.minio.secretKey
 | |
| });
 | |
| 
 | |
| const minioProtocol = config.minio.secure ? 'https' : 'http';
 | |
| const minioHidePort = [80, 443].includes(config.minio.port);
 | |
| const minioUrlPort = minioHidePort ? '' : `:${config.minio.port}`;
 | |
| 
 | |
| const minioUrl = `${minioProtocol}://${config.minio.endPoint}${minioUrlPort}/${config.s3bucket}`;
 | |
| 
 | |
| console.log(`Make sure to stop your server before starting the procedure.`);
 | |
| 
 | |
| if (config.db.dialect !== 'postgres') {
 | |
|   console.log('This procedure was only tested against postgres, aborting...');
 | |
|   process.exit();
 | |
| } else if (config.serverURL === '' || minioUrl === '' ) {
 | |
|   console.log('You need your server URL AND the minio URL to be defined, aborting...');
 | |
|   process.exit();
 | |
| } else {
 | |
|   console.log(`We'll migrate URLs and files from ${config.serverURL} to ${minioUrl}, proceeding with the file upload...`);
 | |
|   console.log();
 | |
| }
 | |
| 
 | |
| var key;
 | |
| var filePath;
 | |
| var metadata;
 | |
| fs.readdir(config.uploadsPath, function (err, files) {
 | |
|   if (err) {
 | |
|     console.log('Unable to scan directory: ' + err);
 | |
|     process.exit();
 | |
|   }
 | |
|   files.forEach(function (file) {
 | |
|     key = path.join('uploads', file)
 | |
|     filePath = path.join(config.uploadsPath, file)
 | |
|     console.log(`Uploading ${filePath} to ${key}...`);
 | |
|     metadata = {
 | |
|       'Content-Type': getImageMimeType(filePath),
 | |
|     }
 | |
|     minioClient.fPutObject(config.s3bucket, key, filePath, metadata, function(err) {
 | |
|       if (err) {
 | |
|         console.log(err);
 | |
|         process.exit();
 | |
|       }
 | |
|       console.log('File uploaded successfully.');
 | |
|     });
 | |
|   });
 | |
| });
 | |
| 
 | |
| // You can only select to see what it will do
 | |
| // sequelize.query(`SELECT regexp_replace(content, '${minioUrl}/uploads/', '${config.serverURL}/uploads/', 'g') FROM "Notes"`).then(([results, metadata]) => {
 | |
| //   console.log(metadata);
 | |
| // })
 | |
| 
 | |
| sequelize.query(`UPDATE "Notes" SET content = regexp_replace(content, '${config.serverURL}/uploads/', '${minioUrl}/uploads/', 'g')`); // if something goes wrong, then revert '${config.serverURL}', '${minioUrl}' by swapping their place in the query.
 | |
| 
 | |
| const updateStatement = String.raw`UPDATE "Notes" SET content = regexp_replace(content, '\(/uploads/', '(${minioUrl}/uploads/', 'g')`
 | |
| 
 | |
| sequelize.query(updateStatement)
 |