mirror of
https://github.com/mollersuite/monofile.git
synced 2024-11-25 07:06:25 -08:00
whatever i'm making rin is terrible
This commit is contained in:
parent
c57f4ed692
commit
79ecb5e408
|
@ -95,6 +95,11 @@ async function pushWebStream(stream: Readable, webStream: ReadableStream) {
|
||||||
return last
|
return last
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface UploadStream {
|
||||||
|
uploaded: number // number of bytes uploaded
|
||||||
|
stream : Readable
|
||||||
|
}
|
||||||
|
|
||||||
export default class Files {
|
export default class Files {
|
||||||
config: Configuration
|
config: Configuration
|
||||||
api: API
|
api: API
|
||||||
|
@ -111,39 +116,73 @@ export default class Files {
|
||||||
.catch(console.error)
|
.catch(console.error)
|
||||||
}
|
}
|
||||||
|
|
||||||
async writeFileStream(metadata: FileUploadSettings) {
|
/**
|
||||||
|
* @description Start a new message.
|
||||||
|
* @param streamCount Number of files to upload.
|
||||||
|
*/
|
||||||
|
private startMessage(streamCount: number): UploadStream[] {
|
||||||
|
|
||||||
|
let streams = []
|
||||||
|
|
||||||
|
// can't think of a better way to do
|
||||||
|
for (let i = 0; i < streamCount; i++) {
|
||||||
|
streams.push({
|
||||||
|
uploaded: 0,
|
||||||
|
stream: new Readable()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.api.send(streams.map(e =< e.stream));
|
||||||
|
|
||||||
|
return streams
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
writeFileStream(metadata: FileUploadSettings & { size: number }) {
|
||||||
|
|
||||||
let uploadId = (metadata.uploadId || generateFileId()).toString()
|
let uploadId = (metadata.uploadId || generateFileId()).toString()
|
||||||
|
let processor = new Promise((resolve, reject) => {
|
||||||
|
|
||||||
multiAssert(
|
multiAssert(
|
||||||
new Map()
|
new Map()
|
||||||
.set(!metadata.filename, {status: 400, message: "missing filename"})
|
.set(!metadata.filename, {status: 400, message: "missing filename"})
|
||||||
.set(metadata.filename.length > 128, {status: 400, message: "filename too long"})
|
.set(metadata.filename.length > 128, {status: 400, message: "filename too long"})
|
||||||
.set(!metadata.mime, {status: 400, message: "missing mime type"})
|
.set(!metadata.mime, {status: 400, message: "missing mime type"})
|
||||||
.set(metadata.mime.length > 128, {status: 400, message: "mime type too long"})
|
.set(metadata.mime.length > 128, {status: 400, message: "mime type too long"})
|
||||||
.set(
|
.set(
|
||||||
uploadId.match(id_check_regex)?.[0] != uploadId
|
uploadId.match(id_check_regex)?.[0] != uploadId
|
||||||
|| uploadId.length > this.config.maxUploadIdLength,
|
|| uploadId.length > this.config.maxUploadIdLength,
|
||||||
{ status: 400, message: "invalid file ID" }
|
{ status: 400, message: "invalid file ID" }
|
||||||
)
|
)
|
||||||
.set(
|
.set(
|
||||||
this.files[uploadId] &&
|
this.files[uploadId] &&
|
||||||
(metadata.owner
|
(metadata.owner
|
||||||
? this.files[uploadId].owner != metadata.owner
|
? this.files[uploadId].owner != metadata.owner
|
||||||
: true),
|
: true),
|
||||||
{ status: 403, message: "you don't own this file" }
|
{ status: 403, message: "you don't own this file" }
|
||||||
)
|
)
|
||||||
.set(
|
.set(
|
||||||
this.files[uploadId]?.reserved,
|
this.files[uploadId]?.reserved,
|
||||||
{
|
{
|
||||||
status: 400,
|
status: 400,
|
||||||
message: "already uploading this file. if your file is stuck in this state, contact an administrator"
|
message: "already uploading this file. if your file is stuck in this state, contact an administrator"
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
stream: new Writable({
|
||||||
|
write(data: any) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
processor
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue