mirror of
https://github.com/chuot/rdio-scanner.git
synced 2026-08-14 08:53:03 -06:00
71 lines
2.3 KiB
TypeScript
71 lines
2.3 KiB
TypeScript
import { IncomingMessage, ServerResponse } from 'http';
|
|
import { Meteor } from 'meteor/meteor';
|
|
import { WebApp } from 'meteor/webapp';
|
|
import { Form } from 'multiparty';
|
|
import { Calls } from '../../../imports/collections/calls';
|
|
import { Call } from '../../../imports/models/call';
|
|
|
|
if (Meteor.isServer) {
|
|
WebApp.connectHandlers.use('/upload', (req: IncomingMessage, res: ServerResponse) => {
|
|
if (req.method === 'POST') {
|
|
const form = new Form();
|
|
|
|
let audio = 'data:audio/mpeg;base64,';
|
|
let json = '';
|
|
let key = '';
|
|
let system = '';
|
|
|
|
form.on('part', (part) => {
|
|
part.on('data', (data) => {
|
|
switch (part.name.toLowerCase()) {
|
|
case 'audio':
|
|
audio += data.toString('base64');
|
|
break;
|
|
case 'json':
|
|
json += data.toString('binary');
|
|
break;
|
|
case 'key':
|
|
key += data.toString('utf8');
|
|
break;
|
|
case 'system':
|
|
system += data.toString('utf8');
|
|
break;
|
|
}
|
|
});
|
|
|
|
part.resume();
|
|
});
|
|
|
|
form.on('close', Meteor.bindEnvironment(() => {
|
|
const apiKeys = Meteor.settings.apiKeys;
|
|
|
|
if (key && Array.isArray(apiKeys) && apiKeys.find((apiKey) => apiKey === key)) {
|
|
try {
|
|
const call = new Call(Object.assign({}, JSON.parse(json), { audio, system }));
|
|
|
|
Calls.collection.insert(call, (error: Meteor.Error) => {
|
|
res.writeHead(error ? 500 : 200);
|
|
res.end();
|
|
});
|
|
|
|
} catch (error) {
|
|
res.writeHead(500);
|
|
res.end(error.message);
|
|
}
|
|
|
|
} else {
|
|
res.writeHead(403);
|
|
res.end('wrong or no api key provided');
|
|
}
|
|
|
|
}));
|
|
|
|
form.parse(req);
|
|
|
|
} else {
|
|
res.writeHead(404);
|
|
res.end();
|
|
}
|
|
});
|
|
}
|