Skip to content

Commit d06e87f

Browse files
fix: base64 img regex (#1018)
* fix: base64 img regex * refactor: minor refactor for file type validation
1 parent 81590c8 commit d06e87f

File tree

3 files changed

+7
-15
lines changed

3 files changed

+7
-15
lines changed

src/backend/photos.ts

+2-5
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@ import axios from 'axios'
22
import ipfs from './utilities/ipfs'
33
import { nodeUrl, sigValidity } from './utilities/config'
44
import libsodium from './utilities/keys'
5-
import { uint8ArrayToHexString } from './utilities/helpers'
5+
import { uint8ArrayToHexString, validFileTypes } from './utilities/helpers'
66
import { getCompressedImage } from './utilities/imageCompression'
77
import { encryptData } from './crypto'
88

9-
const validFileTypes = [`image/jpeg`, `image/jpg`, `image/png`, `image/avif`, `image/webp`]
10-
const regExpString = `^data:${validFileTypes.join(`|`)}:base64,([a-fA-F0-9]+)$`
11-
129
interface IUploadPhotoResult {
1310
cid: string
1411
url: string | ArrayBuffer
@@ -45,7 +42,7 @@ export function addPhotoToIPFS(content: string | ArrayBuffer) {
4542
}
4643

4744
export function isValidPhoto(content: string) {
48-
const regExp = new RegExp(regExpString)
45+
const regExp = new RegExp(`^data:image/(?:${validFileTypes.join(`|`)});base64,([a-zA-Z0-9+/]+=*)$`)
4946
if (!regExp.test(content)) {
5047
return false
5148
}

src/backend/utilities/helpers.ts

+3-8
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ export interface ISignedIPFSObject<T> {
44
public_key: string
55
}
66

7+
export const validFileTypes = [`png`, `jpeg`, `jpg`, `avif`, `webp`]
8+
export const validMimeTypes = validFileTypes.map((t) => `image/${t}`)
9+
710
export function uint8ArrayToHexString(uint8Array: Uint8Array): string {
811
return Buffer.from(uint8Array).toString(`hex`)
912
}
@@ -41,14 +44,6 @@ export function getBlobExtension(blob: Blob): string | null {
4144
}
4245
}
4346

44-
export function isValidFileType(fileType: string) {
45-
const validFileTypes = [`image/png`, `image/jpeg`, `image/jpg`, `image/avif`, `image/webp`]
46-
if (!validFileTypes.includes(fileType)) {
47-
return false
48-
}
49-
return true
50-
}
51-
5247
export function calculateReadingTime(wordCount?: number, postImagesLength: number = 0) {
5348
if (!wordCount) {
5449
return null

src/components/post/Editor.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ import {
113113
Tag,
114114
} from '@/backend/post'
115115
import { preUploadPhoto, uploadPhoto } from '@/backend/photos'
116-
import { isValidFileType } from '@/backend/utilities/helpers'
116+
import { validMimeTypes } from '@/backend/utilities/helpers'
117117
import textLimits from '@/backend/utilities/text_limits'
118118
119119
interface IData {
@@ -484,7 +484,7 @@ export default Vue.extend({
484484
return pastedContent
485485
},
486486
async handleFile(file: File) {
487-
if (!isValidFileType(file.type)) {
487+
if (!validMimeTypes.includes(file.type)) {
488488
this.$toastError(`image of type ${file.type} is invalid`)
489489
return
490490
}

0 commit comments

Comments
 (0)