mirror of
https://github.com/nodemailer/wildduck.git
synced 2024-09-20 15:26:03 +08:00
started with import stream parser
This commit is contained in:
parent
c1acc970d1
commit
e213df2255
|
@ -104,6 +104,67 @@ class ExportStream extends Transform {
|
|||
}
|
||||
}
|
||||
|
||||
class ImportStream extends Transform {
|
||||
constructor() {
|
||||
super({ readableObjectMode: true, writableObjectMode: false });
|
||||
this.TYPE_HEADER = 0x01;
|
||||
this.TYPE_CONTENT = 0x02;
|
||||
|
||||
this.magickBuffer = [];
|
||||
this.magickFound = false;
|
||||
|
||||
this.entryBuffer = false;
|
||||
}
|
||||
|
||||
readMagick(data) {
|
||||
if (this.magickFound) {
|
||||
return data;
|
||||
}
|
||||
|
||||
let removeSuffix = 0;
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
this.magickBuffer.push(data[i]);
|
||||
removeSuffix++;
|
||||
if (this.magickBuffer.length === 3) {
|
||||
if (Buffer.concat(this.magickBuffer).compare(Buffer.from([0x09, 0x06, 0x82]))) {
|
||||
this.magickFound = true;
|
||||
break;
|
||||
} else {
|
||||
let error = new Error('Invalid content sequence');
|
||||
error.code = 'INVALID_SEQUENCE';
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (removeSuffix) {
|
||||
return data.slice(removeSuffix);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
async readRecords(data) {}
|
||||
|
||||
_transform(data, encoding, done) {
|
||||
try {
|
||||
data = this.readMagick(data);
|
||||
} catch (err) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
}
|
||||
|
||||
this.readRecords(data)
|
||||
.then(() => done())
|
||||
.catch(err => done(err));
|
||||
}
|
||||
|
||||
_flush(done) {
|
||||
done();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = (db, server, userHandler, settingsHandler) => {
|
||||
const taskHandler = new TaskHandler({ database: db.database });
|
||||
|
||||
|
|
Loading…
Reference in a new issue