| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- const crypto = require('crypto');
- const mongoose = require('mongoose');
- const schema = new mongoose.Schema({
- tokenGtoP: { type: String, required: true, unique: true },
- tokenPtoG: { type: String, required: true, unique: true },
- supportedCommandsForBroadcastUse: { type: [String], default: [] },
- supportedCommandsForSingleUse: { type: [String], default: [] },
- });
- class SlackAppIntegration {
- static generateAccessTokens() {
- const now = new Date().getTime();
- const hasher1 = crypto.createHash('sha512');
- const hasher2 = crypto.createHash('sha512');
- const tokenGtoP = hasher1.update(`gtop${now.toString()}${process.env.SALT_FOR_GTOP_TOKEN}`).digest('base64');
- const tokenPtoG = hasher2.update(`ptog${now.toString()}${process.env.SALT_FOR_PTOG_TOKEN}`).digest('base64');
- return [tokenGtoP, tokenPtoG];
- }
- static async generateUniqueAccessTokens() {
- let duplicateTokens;
- let tokenGtoP;
- let tokenPtoG;
- let generateTokens;
- do {
- generateTokens = this.generateAccessTokens();
- tokenGtoP = generateTokens[0];
- tokenPtoG = generateTokens[1];
- // eslint-disable-next-line no-await-in-loop
- duplicateTokens = await this.findOne({ $or: [{ tokenGtoP }, { tokenPtoG }] });
- } while (duplicateTokens != null);
- return { tokenGtoP, tokenPtoG };
- }
- }
- module.exports = function(crowi) {
- SlackAppIntegration.crowi = crowi;
- schema.loadClass(SlackAppIntegration);
- return mongoose.model('SlackAppIntegration', schema);
- };
|