| 
					
				 | 
			
			
				@@ -1,112 +0,0 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const log = require('../utils/Log'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const { server } = require('../../../config'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const db = require('knex')(server.database); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const bcrypt = require('bcrypt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const moment = require('moment'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const randomstring = require('randomstring'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class Database { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	constructor() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.createTables(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	async createTables() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (!await db.schema.hasTable('users')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			await db.schema.createTable('users', table => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.increments(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.string('username'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.string('password'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.boolean('enabled').defaultTo(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.boolean('isAdmin').defaultTo(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.string('apiKey'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('passwordEditedAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('apiKeyEditedAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('createdAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('editedAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (!await db.schema.hasTable('albums')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			await db.schema.createTable('albums', table => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.increments(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.integer('userId'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.string('name'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// table.string('identifier'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// table.boolean('enabled'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// table.boolean('enableDownload').defaultTo(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('zippedAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('createdAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('editedAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (!await db.schema.hasTable('files')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			await db.schema.createTable('files', table => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.increments(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.integer('userId'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.string('name'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.string('original'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.string('type'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.integer('size'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.string('hash'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.string('ip'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('createdAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('editedAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (!await db.schema.hasTable('links')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			await db.schema.createTable('links', table => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.increments(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.integer('userId'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.integer('albumId'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.string('identifier'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.integer('views').defaultTo(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.boolean('enabled').defaultTo(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.boolean('enableDownload').defaultTo(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('expiresAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('createdAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.timestamp('editedAt'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (!await db.schema.hasTable('albumsFiles')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			await db.schema.createTable('albumsFiles', table => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.increments(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.integer('albumId'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.integer('fileId'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (!await db.schema.hasTable('albumsLinks')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			await db.schema.createTable('albumsLinks', table => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.increments(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.integer('albumId'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				table.integer('linkId'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		const now = moment.utc().toDate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		const user = await db.table('users').where({ username: 'root' }).first(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (user) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			const hash = await bcrypt.hash('root', 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			await db.table('users').insert({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				username: 'root', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				password: hash, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				apiKey: randomstring.generate(64), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				passwordEditedAt: now, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				apiKeyEditedAt: now, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				createdAt: now, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				editedAt: now, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				isAdmin: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			log.success('Successfully created the root user with password "root". Make sure to log in and change it!'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			log.error(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (error) log.error('Error generating password hash for root'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-module.exports = Database; 
			 |