Skip to content

Commit

Permalink
app dist
Browse files Browse the repository at this point in the history
  • Loading branch information
theADAMJR committed Apr 12, 2020
1 parent 0a8ba68 commit ead0aac
Show file tree
Hide file tree
Showing 61 changed files with 9,651 additions and 51 deletions.
16 changes: 16 additions & 0 deletions api/modules/audit-logger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Change } from "../../models/log";

export default class AuditLogger {
static getChanges(values: { old: {}, new: {} }, module: string, by: string) {
let changes = { old: {}, new: {} };

for (const key in values.old) {
const changed = JSON.stringify(values.old[key]) !== JSON.stringify(values.new[key]);
if (changed) {
changes.old[key] = values.old[key];
changes.new[key] = values.new[key];
}
}
return new Change(by, changes, module);
}
}
2 changes: 1 addition & 1 deletion api/modules/image/xp-card-generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export class XPCardGenerator extends ImageGenerator {
private xpPerMessage: number) {
super();

this.discordUser = bot.users.cache.get(user._id);
this.discordUser = bot.users.cache.get(user.id);
if (!this.discordUser)
throw Error('Could not find Discord user!');
if (this.discordUser.bot)
Expand Down
10 changes: 6 additions & 4 deletions api/routes/api-routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ import { Router } from 'express';
import { SavedCommand, CommandDocument } from '../../models/command';
import { AuthClient, stripe } from '../server';
import * as config from '../../config.json';
import Stripe from 'stripe';
import bodyParser from 'body-parser';

import { router as guildsRoutes } from './guilds-routes';
import { router as userRoutes } from './user-routes';

export const router = Router();
export const router = Router(),
endpointSecret = 'whsec_uNgUHx7T0J1vbOgcTuRCEjXGZYTMvqs0';

let commands: CommandDocument[] = [];
SavedCommand.find().then(cmds => commands = cmds);
Expand All @@ -24,8 +27,8 @@ router.get('/auth', async (req, res) => {

const items = [
{
name: 'Plus',
description: 'Support 2PG',
name: '2PG+',
description: 'Support 2PG, and unlock exclusive user features!',
amount: 500,
currency: 'usd',
quantity: 1,
Expand All @@ -37,7 +40,6 @@ router.get('/pay', async(req, res) => {
success_url: `${config.webapp.url}/payment-success`,
cancel_url: `${config.webapp.url}/plus`,
payment_method_types: ['card'],
mode: 'payment',
line_items: items
});
res.send(session);
Expand Down
67 changes: 50 additions & 17 deletions api/routes/guilds-routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,16 @@ import Members from '../../data/members';
import Ranks from '../modules/ranks';
import Users from '../../data/users';
import Guilds from '../../data/guilds';
import Logs from '../../data/logs';
import AuditLogger from '../modules/audit-logger';

export const router = Router();

const logs = Deps.get<Logs>(Logs),
members = Deps.get<Members>(Members),
users = Deps.get<Users>(Users),
guilds = Deps.get<Guilds>(Guilds);

router.get('/', async (req, res) => {
try {
const guilds = await getManagableGuilds(req.query.key);
Expand All @@ -22,21 +29,34 @@ router.get('/', async (req, res) => {
});

router.put('/:id/:module', async (req, res) => {
try {
const isValidModule = config.modules
.some(m => m.toLowerCase() === req.params.module);
try {
const { id, module } = req.params;

const isValidModule = config.modules.some(m => m.toLowerCase() === module);
if (!isValidModule)
throw new TypeError();

await validateGuildManager(req.query.key, id);

const user = await getUser(req.query.key);
const savedGuild = await SavedGuild.findById(id).lean();

const id = req.params.id;
validateGuildManager(req.query.key, id);
const change = AuditLogger.getChanges({
old: savedGuild[module],
new: req.body
}, module, user.id);

const updatedGuild = await SavedGuild.findById(id);
updatedGuild[req.params.module] = req.body;
await updatedGuild.save();
savedGuild[module] = req.body;
await SavedGuild.findByIdAndUpdate(id, savedGuild);

const guild = bot.guilds.cache.get(id);
const log = await logs.get(guild);

res.json(updatedGuild);
} catch { res.status(400).send('Bad Request'); }
log.changes.push(change);
await log.save();

res.json(savedGuild);
} catch (error) { res.status(400).send(error); console.log(error) }
});

router.get('/:id/config', async (req, res) => {
Expand All @@ -54,8 +74,14 @@ router.get('/:id/channels', async (req, res) => {
} catch { res.status(400).send('Bad Request'); }
});

router.get('/:id/log', (req, res) => {
router.get('/:id/log', async(req, res) => {
try {
const id = req.params.id;
// await validateGuildManager(req.query.key, id);

const guild = bot.guilds.cache.get(id);
const log = await logs.get(guild);
res.send(log);
} catch { res.status(400).send('Bad Request'); }
});

Expand All @@ -78,7 +104,7 @@ router.get('/:id/members', async (req, res) => {

let rankedMembers = [];
for (const savedMember of members) {
const member = bot.users.cache.get(savedMember._id);
const member = bot.users.cache.get(savedMember.id);
const xp = Leveling.xpInfo(savedMember.xpMessages, guild.xp.xpPerMessage);

rankedMembers.push({
Expand Down Expand Up @@ -116,18 +142,18 @@ router.get('/:guildId/members/:memberId/xp-card', async (req, res) => {
const { guildId, memberId } = req.params;

const user = bot.users.cache.get(memberId);
const savedUser = await Deps.get<Users>(Users).get(user);
const savedUser = await users.get(user);

const guild = bot.guilds.cache.get(guildId);
const member = guild?.members.cache.get(memberId);
if (!member)
throw Error();

const savedMember = await Deps.get<Members>(Members).get(member);
const members = await SavedMember.find({ guildId });
const rank = Ranks.get(member, members);
const savedMember = await members.get(member);
const savedMembers = await SavedMember.find({ guildId });
const rank = Ranks.get(member, savedMembers);

const savedGuild = await Deps.get<Guilds>(Guilds).get(guild);
const savedGuild = await guilds.get(guild);
const generator = new XPCardGenerator(savedUser, rank,
savedGuild.xp.xpPerMessage);
const image = await generator.generate(savedMember);
Expand All @@ -139,8 +165,15 @@ router.get('/:guildId/members/:memberId/xp-card', async (req, res) => {
});

async function validateGuildManager(key: string, id: string) {
if (!key)
throw new Error();
const guilds = await getManagableGuilds(key);

if (!guilds.has(id))
throw Error();
}

async function getUser(key: string) {
const { id } = await AuthClient.getUser(key);
return bot.users.cache.get(id);
}
2 changes: 1 addition & 1 deletion api/routes/user-routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,4 @@ router.put('/xp-card', async (req, res) => {
async function getUser(key: string) {
const { id } = await AuthClient.getUser(key);
return bot.users.cache.get(id);
}
}
5 changes: 3 additions & 2 deletions api/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import cors from 'cors';
import OAuthClient from 'disco-oauth';
import bodyParser from 'body-parser';
import { Stripe } from 'stripe';
import { join } from 'path';

import { router as apiRoutes } from './routes/api-routes';
import Log from '../utils/log';
Expand All @@ -22,10 +23,10 @@ export default class API {
app.use(bodyParser.json());
app.use('/api', apiRoutes);

app.use(express.static(config.webapp.distPath)); // use only for production
app.use(express.static(join(__dirname, '..', config.webapp.distPath)));

app.all('*', (req, res) => res.status(200).sendFile(
config.webapp.distPath + '/index.html'));
join(__dirname, '..', config.webapp.distPath, '/index.html')));
}
}

Expand Down
6 changes: 5 additions & 1 deletion bot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,8 @@ Deps.build(
API
);

mongoose.connect(config.mongoURL, { useUnifiedTopology: true, useNewUrlParser: true });
mongoose.connect(config.mongoURL, {
useUnifiedTopology: true,
useNewUrlParser: true,
useFindAndModify: false
});
2 changes: 1 addition & 1 deletion commands/dashboard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ export default class HelpCommand implements Command {
module: ModuleString = 'General';

execute = async(ctx: CommandContext) => {
ctx.channel.send(`${config.webapp.url}/servers/${ctx.guild.id}`);
return ctx.channel.send(`${config.webapp.url}/servers/${ctx.guild.id}`);
}
}
4 changes: 0 additions & 4 deletions data/db-wrapper.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
import { Guild } from 'discord.js';
import { Document } from 'mongoose';

/*
* DBWrapper<Input, Output>
*/
export default abstract class DBWrapper<T1, T2 extends Document> {
get(type: T1) {
return this.getOrCreate(type);
Expand Down
5 changes: 1 addition & 4 deletions data/guilds.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ export default class Guilds extends DBWrapper<Guild, GuildDocument> {
}

protected create(guild: Guild) {
const newGuild = new SavedGuild();
newGuild._id = guild.id;

return newGuild.save();
return new SavedGuild({ _id: guild.id }).save();
}
}
4 changes: 2 additions & 2 deletions data/log.ts → data/logs.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { Guild } from 'discord.js';
import DBWrapper from './db-wrapper';
import { AuditLog, SavedLog } from '../models/log';
import { AuditLog as LogDocument, SavedLog } from '../models/log';

export default class Users extends DBWrapper<Guild, AuditLog> {
export default class Logs extends DBWrapper<Guild, LogDocument> {
protected async getOrCreate(guild: Guild) {
const savedLog = await SavedLog.findById(guild.id);
return savedLog ?? this.create(guild);
Expand Down
2 changes: 1 addition & 1 deletion data/users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ export default class Users extends DBWrapper<User, UserDocument> {
}

protected async create(user: User) {
return new SavedUser({ _id: user.id }).save();
return new SavedUser({ id: user.id }).save();
}
}
Loading

0 comments on commit ead0aac

Please sign in to comment.