| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | /* global  getConfigParamsFromUrl, config */
/**
 * Parses and handles JWT tokens. Sets config.token.
 */
import * as jws from "jws";
/**
 * Get the JWT token from the URL.
 */
let params = getConfigParamsFromUrl("search", true);
let jwt = params.jwt;
/**
 * Implements a user of conference.
 */
class User {
    /**
     * @param name {string} the name of the user.
     * @param email {string} the email of the user.
     * @param avatarUrl {string} the URL for the avatar of the user.
     */
    constructor(name, email, avatarUrl) {
        this._name = name;
        this._email = email;
        this._avatarUrl = avatarUrl;
    }
    /**
     * GETERS START.
     */
    /**
     * Returns the name property
     */
    getName() {
        return this._name;
    }
    /**
     * Returns the email property
     */
    getEmail() {
        return this._email;
    }
    /**
     * Returns the URL of the avatar
     */
    getAvatarUrl() {
        return this._avatarUrl;
    }
    /**
     * GETERS END.
     */
}
/**
 * Represent the data parsed from the JWT token
 */
class TokenData{
    /**
     * @param {string} the JWT token
     */
    constructor(jwt) {
        this.isGuest = true;
        if(!jwt)
            return;
        this.isGuest = config.enableUserRolesBasedOnToken !== true;
        this.jwt = jwt;
        //External API settings
        this.externalAPISettings = {
            forceEnable: true,
            enabledEvents: ["video-conference-joined", "video-conference-left"]
        };
        this._decode();
        // Use JWT param as token if there is not other token set and if the
        // iss field is not anonymous. If you want to pass data with JWT token
        // but you don't want to pass the JWT token for verification the iss
        // field should be set to "anonymous"
        if(!config.token && this.payload && this.payload.iss !== "anonymous")
            config.token = jwt;
    }
    /**
     * Decodes the JWT token and sets the decoded data to properties.
     */
    _decode() {
        this.decodedJWT = jws.decode(jwt);
        if(!this.decodedJWT || !this.decodedJWT.payload)
            return;
        this.payload = this.decodedJWT.payload;
        if(!this.payload.context)
            return;
        let callerData = this.payload.context.user;
        let calleeData = this.payload.context.callee;
        if(callerData)
            this.caller = new User(callerData.name, callerData.email,
                callerData.avatarUrl);
        if(calleeData)
            this.callee = new User(calleeData.name, calleeData.email,
                calleeData.avatarUrl);
    }
}
/**
 * Stores the TokenData instance.
 */
let data = null;
/**
 * Returns the data variable. Creates new TokenData instance if <tt>data</tt>
 * variable is null.
 */
export default function getTokenData() {
    if(!data)
        data = new TokenData(jwt);
    return data;
}
 |