| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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 },
- });
- 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);
- };
|