55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import config from '../../../config.ts';
|
|
import { dbClient } from '../../db.ts';
|
|
import {
|
|
// Log4Deno deps
|
|
log,
|
|
LT,
|
|
// nanoid deps
|
|
nanoid,
|
|
// Discordeno deps
|
|
sendMessage,
|
|
} from '../../../deps.ts';
|
|
import { generateApiKeyEmail } from '../../commandUtils.ts';
|
|
import stdResp from '../stdResponses.ts';
|
|
|
|
export const apiKey = async (requestEvent: Deno.RequestEvent, query: Map<string, string>) => {
|
|
if ((query.has('user') && ((query.get('user') || '').length > 0)) && (query.has('email') && ((query.get('email') || '').length > 0))) {
|
|
// Generate new secure key
|
|
const newKey = await nanoid(25);
|
|
|
|
// Flag to see if there is an error inside the catch
|
|
let erroredOut = false;
|
|
|
|
// Insert new key/user pair into the db
|
|
await dbClient.execute('INSERT INTO all_keys(userid,apiKey,email) values(?,?,?)', [BigInt(query.get('user') || '0'), newKey, (query.get('email') || '').toLowerCase()]).catch(
|
|
(e) => {
|
|
log(LT.ERROR, `Failed to insert into database: ${JSON.stringify(e)}`);
|
|
requestEvent.respondWith(stdResp.InternalServerError('Failed to store key.'));
|
|
erroredOut = true;
|
|
},
|
|
);
|
|
|
|
// Exit this case now if catch errored
|
|
if (erroredOut) {
|
|
return;
|
|
}
|
|
|
|
// "Send" the email
|
|
await sendMessage(config.api.email, generateApiKeyEmail(query.get('email') || 'no email', newKey)).catch(() => {
|
|
requestEvent.respondWith(stdResp.InternalServerError('Failed to send email.'));
|
|
erroredOut = true;
|
|
});
|
|
|
|
if (erroredOut) {
|
|
return;
|
|
} else {
|
|
// Send basic OK to indicate key has been sent
|
|
requestEvent.respondWith(stdResp.OK('Email Sent.'));
|
|
return;
|
|
}
|
|
} else {
|
|
// Alert API user that they messed up
|
|
requestEvent.respondWith(stdResp.BadRequest(stdResp.Strings.missingParams));
|
|
}
|
|
};
|