Skip to content

Instantly share code, notes, and snippets.

@eyaadh

eyaadh/index.js Secret

Created November 11, 2023 09:45
Show Gist options
  • Save eyaadh/82905e522c909c7be090cd2bd81c3316 to your computer and use it in GitHub Desktop.
Save eyaadh/82905e522c909c7be090cd2bd81c3316 to your computer and use it in GitHub Desktop.
agora-video-conference-token-server
const express = require('express');
const {RtcTokenBuilder, RtcRole} = require('agora-token')
const dotenv = require('dotenv').config();
const app = express();
const nocache = (_, resp, next) => {
resp.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
resp.header('Expires', '-1');
resp.header('Pragma', 'no-cache');
next();
}
const generateRTCToken = (req, resp) => {
resp.header('Access-Control-Allow-Origin', '*');
const channelName = req.params.channel;
if (!channelName) {
return resp.status(500).json({'error': 'channel is required'});
}
let uid = req.params.uid;
if (!uid || uid === '') {
return resp.status(500).json({'error': 'uid is required'});
}
// get role
let role;
if (req.params.role === 'publisher') {
role = RtcRole.PUBLISHER;
} else if (req.params.role === 'audience') {
role = RtcRole.SUBSCRIBER
} else {
return resp.status(500).json({'error': 'role is incorrect'});
}
let expireTime = req.query.expiry;
if (!expireTime || expireTime === '') {
expireTime = 3600;
} else {
expireTime = parseInt(expireTime, 10);
}
const currentTime = Math.floor(Date.now() / 1000);
const privilegeExpireTime = currentTime + expireTime;
let token;
if (req.params.tokentype === 'userAccount') {
token = RtcTokenBuilder.buildTokenWithUid(
process.env.APP_ID,
process.env.APP_CERTIFICATE,
channelName,
0,
role,
privilegeExpireTime,
0);
} else if (req.params.tokentype === 'uid') {
token = RtcTokenBuilder.buildTokenWithUid(
process.env.APP_ID,
process.env.APP_CERTIFICATE,
channelName,
0,
role,
privilegeExpireTime,
0);
} else {
return resp.status(500).json({ 'error': 'token type is invalid' });
}
return resp.json({ 'rtcToken': token });
};
app.get('/rtc/:channel/:role/:tokentype/:uid', nocache, generateRTCToken)
app.listen(process.env.PORT, () => {
console.log(`Listening on port: ${process.env.PORT}`);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment