add content
This commit is contained in:
parent
6386c3f1b3
commit
c2f263ae82
11
src/modules/content/repositories/post.repository.ts
Normal file
11
src/modules/content/repositories/post.repository.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { PostEntity } from '@/modules/content/entities/post.entity';
|
||||
import { CustomRepository } from '@/modules/database/decorators/repository.decorator';
|
||||
|
||||
@CustomRepository(PostEntity)
|
||||
export class PostRepository extends Repository<PostEntity> {
|
||||
buildBaseQB() {
|
||||
return this.createQueryBuilder('post');
|
||||
}
|
||||
}
|
23
src/modules/content/services/SanitizeService.ts
Normal file
23
src/modules/content/services/SanitizeService.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import sanitizeHtml from 'sanitize-html';
|
||||
|
||||
import { deepMerge } from '@/modules/core/helpers';
|
||||
|
||||
export class SanitizeService {
|
||||
protected config: sanitizeHtml.IOptions = {};
|
||||
constructor() {
|
||||
this.config = {
|
||||
allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img', 'code']),
|
||||
allowedAttributes: {
|
||||
...sanitizeHtml.defaults.allowedAttributes,
|
||||
'*': ['class', 'style', 'height', 'width'],
|
||||
},
|
||||
parser: {
|
||||
lowerCaseTags: true,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
sanitize(body: string, options: sanitizeHtml.IOptions = {}) {
|
||||
return sanitizeHtml(body, deepMerge(this.config, options ?? {}, 'replace'));
|
||||
}
|
||||
}
|
26
src/modules/content/subscribers/post.subscriber.ts
Normal file
26
src/modules/content/subscribers/post.subscriber.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import { DataSource, EventSubscriber } from 'typeorm';
|
||||
|
||||
import { PostBodyType } from '@/modules/content/constants';
|
||||
import { PostEntity } from '@/modules/content/entities/post.entity';
|
||||
import { PostRepository } from '@/modules/content/repositories/post.repository';
|
||||
import { SanitizeService } from '@/modules/content/services/SanitizeService';
|
||||
|
||||
@EventSubscriber()
|
||||
export class PostSubscriber {
|
||||
constructor(
|
||||
protected dataSource: DataSource,
|
||||
protected sanitizeService: SanitizeService,
|
||||
protected postRepository: PostRepository,
|
||||
) {
|
||||
dataSource.subscribers.push(this);
|
||||
}
|
||||
listenTo() {
|
||||
return PostEntity;
|
||||
}
|
||||
|
||||
async afterLoad(entity: PostEntity) {
|
||||
if (entity.type === PostBodyType.HTML) {
|
||||
entity.body = this.sanitizeService.sanitize(entity.body);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user