diff --git a/package-lock.json b/package-lock.json
index d1bd62ae..20dfa8d1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "ucap-webmessenger",
- "version": "0.0.19",
+ "version": "0.0.20",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -3281,6 +3281,11 @@
"defer-to-connect": "^1.0.1"
}
},
+ "@tokenizer/token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz",
+ "integrity": "sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w=="
+ },
"@tweenjs/tween.js": {
"version": "17.4.0",
"resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-17.4.0.tgz",
@@ -3334,8 +3339,7 @@
"@types/debug": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz",
- "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==",
- "dev": true
+ "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ=="
},
"@types/detect-browser": {
"version": "4.0.0",
@@ -3388,6 +3392,15 @@
"integrity": "sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw==",
"dev": true
},
+ "@types/file-type": {
+ "version": "10.9.1",
+ "resolved": "https://registry.npmjs.org/@types/file-type/-/file-type-10.9.1.tgz",
+ "integrity": "sha512-oq0fy8Jqj19HofanFsZ56o5anMDUQtFO9B3wfLqM9o42RyCe1WT+wRbSvRbL2l8ARZXNaJturHk0b442+0yi+g==",
+ "dev": true,
+ "requires": {
+ "file-type": "*"
+ }
+ },
"@types/filesize": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/@types/filesize/-/filesize-4.2.0.tgz",
@@ -4584,8 +4597,7 @@
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"base": {
"version": "0.11.2",
@@ -4870,7 +4882,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -5647,8 +5658,7 @@
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream": {
"version": "1.6.2",
@@ -7811,6 +7821,17 @@
"integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==",
"dev": true
},
+ "file-type": {
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-14.1.2.tgz",
+ "integrity": "sha512-9NI4+QzDlEPB6OETc/FcJt8i8vNT396VweRwEwLcE07MnorWkZDopNuc+MeoYA7ArbzoK044JbaDExWys8deTQ==",
+ "requires": {
+ "readable-web-to-node-stream": "^2.0.0",
+ "strtok3": "^6.0.0",
+ "token-types": "^2.0.0",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ },
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
@@ -8099,8 +8120,7 @@
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fsevents": {
"version": "2.0.7",
@@ -8155,7 +8175,6 @@
"version": "7.1.4",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
"integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
- "dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -8713,8 +8732,7 @@
"ieee754": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
- "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
- "dev": true
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
},
"iferr": {
"version": "0.1.5",
@@ -8815,7 +8833,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -8824,8 +8841,7 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ini": {
"version": "1.3.5",
@@ -11158,7 +11174,6 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -11891,7 +11906,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
"requires": {
"wrappy": "1"
}
@@ -12356,6 +12370,11 @@
"sha.js": "^2.4.8"
}
},
+ "peek-readable": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-3.1.0.tgz",
+ "integrity": "sha512-KGuODSTV6hcgdZvDrIDBUkN0utcAVj1LL7FfGbM0viKTtCHmtZcuEJ+lGqsp0fTFkGqesdtemV2yUSMeyy3ddA=="
+ },
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
@@ -13164,6 +13183,11 @@
"util-deprecate": "~1.0.1"
}
},
+ "readable-web-to-node-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-2.0.0.tgz",
+ "integrity": "sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA=="
+ },
"readdir-scoped-modules": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz",
@@ -14859,6 +14883,17 @@
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true
},
+ "strtok3": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.0.0.tgz",
+ "integrity": "sha512-ZXlmE22LZnIBvEU3n/kZGdh770fYFie65u5+2hLK9s74DoFtpkQIdBZVeYEzlolpGa+52G5IkzjUWn+iXynOEQ==",
+ "requires": {
+ "@tokenizer/token": "^0.1.1",
+ "@types/debug": "^4.1.5",
+ "debug": "^4.1.1",
+ "peek-readable": "^3.1.0"
+ }
+ },
"style-loader": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.0.tgz",
@@ -15148,7 +15183,6 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz",
"integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==",
- "dev": true,
"requires": {
"rimraf": "^2.6.3"
},
@@ -15157,7 +15191,6 @@
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
"requires": {
"glob": "^7.1.3"
}
@@ -15235,6 +15268,15 @@
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
"dev": true
},
+ "token-types": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/token-types/-/token-types-2.0.0.tgz",
+ "integrity": "sha512-WWvu8sGK8/ZmGusekZJJ5NM6rRVTTDO7/bahz4NGiSDb/XsmdYBn6a1N/bymUHuWYTWeuLUg98wUzvE4jPdCZw==",
+ "requires": {
+ "@tokenizer/token": "^0.1.0",
+ "ieee754": "^1.1.13"
+ }
+ },
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
@@ -17720,8 +17762,7 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"write-file-atomic": {
"version": "2.4.3",
diff --git a/package.json b/package.json
index 237f6581..b7141823 100644
--- a/package.json
+++ b/package.json
@@ -48,6 +48,7 @@
"electron-store": "^5.1.0",
"electron-updater": "^4.2.0",
"electron-window-state": "^5.0.3",
+ "file-type": "^14.1.2",
"fs-extra": "^8.1.0",
"rxjs": "^6.5.4",
"semver": "^6.3.0",
@@ -88,6 +89,7 @@
"@types/electron-debug": "^2.1.0",
"@types/electron-devtools-installer": "^2.2.0",
"@types/extract-text-webpack-plugin": "^3.0.4",
+ "@types/file-type": "^10.9.1",
"@types/file-saver": "^2.0.1",
"@types/filesize": "^4.1.0",
"@types/fs-extra": "^8.0.1",
diff --git a/projects/ucap-webmessenger-api-common/src/lib/services/common-api.service.ts b/projects/ucap-webmessenger-api-common/src/lib/services/common-api.service.ts
index e6cb24ad..1c70a908 100644
--- a/projects/ucap-webmessenger-api-common/src/lib/services/common-api.service.ts
+++ b/projects/ucap-webmessenger-api-common/src/lib/services/common-api.service.ts
@@ -72,7 +72,7 @@ import {
import { _MODULE_CONFIG } from '../config/token';
import { ModuleConfig } from '../config/module-config';
import { Urls } from '../config/urls';
-import { UrlConfig } from '@ucap-webmessenger/core';
+import { UrlConfig, MimeUtil } from '@ucap-webmessenger/core';
@Injectable({
providedIn: 'root'
@@ -223,6 +223,35 @@ export class CommonApiService {
};
}
+ public acceptableMimeForFileTalk(
+ files: File[]
+ ): Promise<{ accept: boolean; rejected: string[] }> {
+ return new Promise<{ accept: boolean; rejected: string[] }>(
+ async (resolve, reject) => {
+ let accept = true;
+ const rejected: string[] = [];
+ for (const file of files) {
+ const info = await MimeUtil.getMimeFromBlob(file);
+
+ if (
+ !file ||
+ -1 ===
+ this.moduleConfig.acceptableFileExtensions.indexOf(
+ info.ext.toLocaleLowerCase()
+ )
+ ) {
+ rejected.push(info.ext);
+ accept = false;
+ }
+ }
+ resolve({
+ accept,
+ rejected
+ });
+ }
+ );
+ }
+
public mimeCheckForImageAndVideoFiles(files: File[]) {
files.forEach(file => {
console.log(file);
diff --git a/projects/ucap-webmessenger-app/src/app/layouts/messenger/components/messages.component.ts b/projects/ucap-webmessenger-app/src/app/layouts/messenger/components/messages.component.ts
index 521194df..6de66761 100644
--- a/projects/ucap-webmessenger-app/src/app/layouts/messenger/components/messages.component.ts
+++ b/projects/ucap-webmessenger-app/src/app/layouts/messenger/components/messages.component.ts
@@ -1111,14 +1111,36 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
// fileUploadItems.map(fui => fui.file)
// );
- const checkExt = this.commonApiService.acceptableExtensionForFileTalk(
- fileUploadItems.map(fui => FileUtil.getExtension(fui.file.name))
+ const checkExt = await this.commonApiService.acceptableMimeForFileTalk(
+ fileUploadItems.map(fui => fui.file)
);
+
+ // const checkExt = this.commonApiService.acceptableExtensionForFileTalk(
+ // fileUploadItems.map(fui => FileUtil.getExtension(fui.file.name))
+ // );
if (!checkExt.accept) {
if (!!this.fileUploadQueue) {
this.fileUploadQueue.onUploadComplete();
}
+ // this.snackBarService.openFromComponent<
+ // AlertSnackbarComponent,
+ // AlertSnackbarData
+ // >(AlertSnackbarComponent, {
+ // duration: 1000,
+ // verticalPosition: 'bottom',
+ // horizontalPosition: 'center',
+ // data: {
+ // html: this.translateService.instant(
+ // 'common.file.errors.notSupporedType',
+ // {
+ // supporedType:
+ // checkExt.reject.length > 0 ? checkExt.reject.join(',') : ''
+ // }
+ // )
+ // }
+ // });
+
this.snackBarService.openFromComponent<
AlertSnackbarComponent,
AlertSnackbarData
@@ -1128,10 +1150,10 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
horizontalPosition: 'center',
data: {
html: this.translateService.instant(
- 'common.file.errors.notSupporedType',
+ 'common.file.errors.notAcceptableMime',
{
supporedType:
- checkExt.reject.length > 0 ? checkExt.reject.join(',') : ''
+ checkExt.rejected.length > 0 ? checkExt.rejected.join(',') : ''
}
)
}
diff --git a/projects/ucap-webmessenger-app/src/assets/i18n/en.json b/projects/ucap-webmessenger-app/src/assets/i18n/en.json
index 1eb09bdf..7f03a5bd 100644
--- a/projects/ucap-webmessenger-app/src/assets/i18n/en.json
+++ b/projects/ucap-webmessenger-app/src/assets/i18n/en.json
@@ -441,6 +441,7 @@
"noPreview": "This file does not support preview.",
"cantPlay": "This file does not support playing.",
"notSupporedType": "File format is not supported.
({{supporedType}})",
+ "notAcceptableMime": "File type is invalid.
({{supporedType}})",
"oversize": "You cannot upload files larger than {{size}} megabytes."
}
},
diff --git a/projects/ucap-webmessenger-app/src/assets/i18n/ko.json b/projects/ucap-webmessenger-app/src/assets/i18n/ko.json
index cff93453..7f9392b1 100644
--- a/projects/ucap-webmessenger-app/src/assets/i18n/ko.json
+++ b/projects/ucap-webmessenger-app/src/assets/i18n/ko.json
@@ -441,6 +441,7 @@
"noPreview": "미리보기를 지원하지 않는 파일입니다.",
"cantPlay": "재생을 지원하지 않는 파일입니다.",
"notSupporedType": "지원하지 않는 파일형식입니다.
({{supporedType}})",
+ "notAcceptableMime": "유효하지 않은 파일 타입입니다.
({{supporedType}})",
"oversize": "{{maxSize}}MB 이상 파일을 업로드 할 수 없습니다."
}
},
diff --git a/projects/ucap-webmessenger-core/src/lib/utils/mime.util.ts b/projects/ucap-webmessenger-core/src/lib/utils/mime.util.ts
index 039f8306..4b4a4077 100644
--- a/projects/ucap-webmessenger-core/src/lib/utils/mime.util.ts
+++ b/projects/ucap-webmessenger-core/src/lib/utils/mime.util.ts
@@ -1,3 +1,5 @@
+import * as FileType from 'file-type/browser';
+
const MimeMap: Map = new Map([
['123', 'application/vnd.lotus-1-2-3'],
['3dml', 'text/vnd.in3d.3dml'],
@@ -871,4 +873,16 @@ export class MimeUtil {
static getMimeFromExtension(ext: string): string | undefined {
return MimeMap.get(ext);
}
+
+ static getMimeFromBlob(blob: Blob) {
+ return FileType.fromBlob(blob);
+ }
+
+ static getMimeFromBuffer(buffer: Buffer) {
+ return FileType.fromBuffer(buffer);
+ }
+
+ static getMimeFromStream(stream: ReadableStream) {
+ return FileType.fromStream(stream);
+ }
}