37 lines
1.4 KiB
TypeScript
37 lines
1.4 KiB
TypeScript
import dbClient from 'db/client.ts';
|
|
|
|
import stdResp from 'endpoints/stdResponses.ts';
|
|
import { verifyQueryHasParams } from 'endpoints/utils.ts';
|
|
|
|
import utils from 'src/utils.ts';
|
|
|
|
export const apiChannel = async (query: Map<string, string>, apiUserid: bigint): Promise<Response> => {
|
|
if (verifyQueryHasParams(query, ['user'])) {
|
|
if (apiUserid === BigInt(query.get('user') || '0')) {
|
|
// Flag to see if there is an error inside the catch
|
|
let erroredOut = false;
|
|
|
|
// Get all channels userid has authorized
|
|
const dbAllowedChannelQuery = await dbClient.query('SELECT * FROM allowed_channels WHERE userid = ?', [apiUserid]).catch((e) => {
|
|
utils.commonLoggers.dbError('apiChannel.ts', 'query', e);
|
|
erroredOut = true;
|
|
});
|
|
|
|
if (erroredOut) {
|
|
return stdResp.InternalServerError('Failed to get channels.');
|
|
} else {
|
|
// Customized stringification to handle BigInts correctly
|
|
const returnChannels = JSON.stringify(dbAllowedChannelQuery, (_key, value) => (typeof value === 'bigint' ? value.toString() : value));
|
|
// Send channel list as response
|
|
return stdResp.OK(returnChannels);
|
|
}
|
|
} else {
|
|
// Alert API user that they shouldn't be doing this
|
|
return stdResp.Forbidden('You can only view your own channels.');
|
|
}
|
|
} else {
|
|
// Alert API user that they messed up
|
|
return stdResp.BadRequest(stdResp.Strings.missingParams);
|
|
}
|
|
};
|