60 lines
2.0 KiB
TypeScript
60 lines
2.0 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { MulterModule } from '@nestjs/platform-express';
|
|
import * as multer from 'multer';
|
|
import * as mime from 'mime-types';
|
|
import { join } from 'path';
|
|
import { ConfigurationService } from '../../config/config.service';
|
|
import { OAuth2Module } from 'src/modules/oauth2/oauth2.module';
|
|
import { ObjectsModule } from 'src/modules/objects/objects.module';
|
|
import { OAuth2AdminController } from './oauth2-admin.controller';
|
|
import { PrivilegeAdminController } from './privilege-admin.controller';
|
|
import { UserAdminController } from './user-admin.controller';
|
|
import { ConfigurationModule } from 'src/modules/config/config.module';
|
|
import { AdminService } from './admin.service';
|
|
|
|
@Module({
|
|
controllers: [
|
|
UserAdminController,
|
|
PrivilegeAdminController,
|
|
OAuth2AdminController,
|
|
],
|
|
imports: [
|
|
ObjectsModule,
|
|
OAuth2Module,
|
|
MulterModule.registerAsync({
|
|
imports: [ConfigurationModule],
|
|
useFactory: async (config: ConfigurationService) => {
|
|
return {
|
|
storage: multer.diskStorage({
|
|
destination: (req, file, cb) => {
|
|
cb(null, join(__dirname, '..', '..', '..', '..', 'uploads'));
|
|
},
|
|
filename: (req, file, cb) => {
|
|
const hashTruncate = req.user.uuid.split('-')[0];
|
|
const timestamp = Math.floor(Date.now() / 1000);
|
|
const ext = mime.extension(file.mimetype);
|
|
cb(null, `app-${hashTruncate}-${timestamp}.${ext}`);
|
|
},
|
|
}),
|
|
limits: {
|
|
fileSize: 1.049e7, // 10 MiB
|
|
},
|
|
fileFilter: (req, file, cb) => {
|
|
if (
|
|
!file.mimetype.startsWith('image/') ||
|
|
file.mimetype.includes('svg')
|
|
) {
|
|
return cb(new Error('Invalid file type.'), false);
|
|
}
|
|
|
|
cb(null, true);
|
|
},
|
|
};
|
|
},
|
|
inject: [ConfigurationService],
|
|
}),
|
|
],
|
|
providers: [AdminService],
|
|
})
|
|
export class AdminApiModule {}
|