const { ZoomAuthResult, ZoomSDKError } = require('./settings.js');
const ZOOMDIRECTSHAREMOD = require('./zoom_direct_share_helper.js');
const messages = require('./electron_sdk_pb.js');
const ZoomAuth = (function () {
let instance;
/**
* Zoom SDK Authentication Service Init
* @module zoom_auth
* @param {Function} authcb Authentication result callback.
* @param {Function} logoutcb Logout result callback.
* @param {Function} onZoomIdentityExpired Zoom identity has expired, please re-login or generate a new Zoom access token via REST Api.
* @param {Function} onZoomAuthIdentityExpired Zoom authentication identity will be expired in 10 minutes, please re-auth.
* @param {Function} onLoginReturnWithReason Callback of login result with fail reason.
* @return {ZoomAuth}
*/
function init(opts) {
let clientOpts = opts || {};
let _addon = clientOpts.addon.GetAuthObj() || null;
let _authcb = clientOpts.authcb || null;
let _logoutcb = clientOpts.logoutcb || null;
let _onZoomIdentityExpired = clientOpts.onZoomIdentityExpired || null;
let _onZoomAuthIdentityExpired = clientOpts.onZoomAuthIdentityExpired || null;
let _onLoginReturnWithReason = clientOpts.onLoginReturnWithReason || null;
let _isSDKAuthentication = false;
/**
Authentication result callback.
@event onAuthenticationReturn
@param {Number} Authentication Defined in: {@link ZoomAuthResult}
*/
function onAuthenticationReturn(authResult) {
if (ZoomAuthResult.AUTHRET_SUCCESS == authResult) {
_isSDKAuthentication = true;
} else {
_isSDKAuthentication = false;
}
if (_authcb)
_authcb(authResult);
}
/**
Logout result callback.
@event logoutcb
*/
function logoutcb() {
if (_logoutcb)
_logoutcb();
}
/**
Zoom identity has expired, please re-login or generate a new Zoom access token via REST Api.
@event onZoomIdentityExpired
*/
function onZoomIdentityExpired() {
if (_onZoomIdentityExpired) {
_onZoomIdentityExpired()
}
}
/**
Zoom authentication identity will be expired in 10 minutes, please re-auth.
@event onZoomAuthIdentityExpired
*/
function onZoomAuthIdentityExpired() {
if (_onZoomAuthIdentityExpired) {
_onZoomAuthIdentityExpired()
}
}
/**
Callback of login result with fail reason.
@event onLoginReturnWithReason
@param {Number} loginStatus Defined in: {@link ZoomAuthResult}
@param {Number} loginFailReason Login fail reason. Valid when the ret is LOGIN_FAILED. Otherwise LoginFail_None. Defined in: {@link LoginFailReason}
*/
function onLoginReturnWithReason(loginStatus, loginFailReason) {
if (_onLoginReturnWithReason) {
_onLoginReturnWithReason(loginStatus, loginFailReason)
}
}
if (_addon) {
_addon.SetOnAuthReturnCB(onAuthenticationReturn);
_addon.SetLogoutCB(logoutcb);
_addon.SetOnZoomIdentityExpiredCB(onZoomIdentityExpired);
_addon.SetOnZoomAuthIdentityExpiredCB(onZoomAuthIdentityExpired);
_addon.SetLoginReturnWithReasonCB(onLoginReturnWithReason);
}
return {
// Public methods and variables
/**
* Set auth callback function.
* @method SetOnAuthReturnCB
* @param {Function} authcb
* @return {Boolean} true or false
*/
SetOnAuthReturnCB: function (authcb) {
if (_addon && authcb && authcb instanceof Function) {
_authcb = authcb;
return true
}
return false
},
/**
* Set logout callback function.
* @method SetLogoutCB
* @param {Function} logoutcb
* @return {Boolean} true or false
*/
SetLogoutCB: function (logoutcb) {
if (_addon && logoutcb && logoutcb instanceof Function) {
_logoutcb = logoutcb;
return true
}
return false
},
/**
* Set Zoom identity expired callback function.
* @method SetOnZoomIdentityExpiredCB
* @param {Function} onZoomIdentityExpired
* @return {Boolean} true or false
*/
SetOnZoomIdentityExpiredCB: function (onZoomIdentityExpired) {
if (_addon && onZoomIdentityExpired && onZoomIdentityExpired instanceof Function) {
_onZoomIdentityExpired = onZoomIdentityExpired;
return true
}
return false
},
/**
* Set On Zoom Auth Identity Expired Callback
* @method SetOnZoomAuthIdentityExpiredCB
* @param {Function} onZoomAuthIdentityExpired
* @return {Boolean} true or false
*/
SetOnZoomAuthIdentityExpiredCB: function (onZoomAuthIdentityExpired) {
if (_addon && onZoomAuthIdentityExpired && onZoomAuthIdentityExpired instanceof Function) {
_onZoomAuthIdentityExpired = onZoomAuthIdentityExpired;
return true
}
return false
},
/**
* Set Login Return With Reason Callback
* @method SetLoginReturnWithReasonCB
* @param {Function} onLoginReturnWithReason
* @return {Boolean} true or false
*/
SetLoginReturnWithReasonCB: function (onLoginReturnWithReason) {
if (_addon && onLoginReturnWithReason && onLoginReturnWithReason instanceof Function) {
_onLoginReturnWithReason = onLoginReturnWithReason;
return true
}
return false
},
/**
* @ignore
* Generate SSO Login Web URL.
* @method GenerateSSOLoginWebURL
* @param {String} prefixOfVanityUrl The prefix of vanity url.
* @return {Number} If the function succeeds,will return url of can launch app. Defined in: {@link ZoomSDKError}
*/
GenerateSSOLoginWebURL: function (opts) {
if (_addon) {
let clientOpts = opts || {};
let prefixOfVanityUrl = clientOpts.prefixOfVanityUrl;
try {
let GenerateSSOLoginWebURLParams = new messages.GenerateSSOLoginWebURLParams();
GenerateSSOLoginWebURLParams.setPrefixofvanityurl(prefixOfVanityUrl);
let bytes = GenerateSSOLoginWebURLParams.serializeBinary();
return _addon.GenerateSSOLoginWebURL(bytes);
} catch (error) {
return ZoomSDKError.SDKERR_INVALID_PARAMETER;
}
}
return _isSDKAuthentication ? ZoomSDKError.SDKERR_UNAUTHENTICATION : ZoomSDKError.SDKERR_UNINITIALIZE;
},
/**
* @ignore
* Login ZOOM with SSO token.
* @method SSOLoginWithWebUriProtocol
* @param {String} uriProtocol For the parameter to be used for sso account login.
* @return {Number} Defined in: {@link ZoomSDKError}
*/
SSOLoginWithWebUriProtocol: function (opts) {
if (_addon) {
let clientOpts = opts || {};
let uriProtocol = clientOpts.uriProtocol;
try {
let SSOLoginWithWebUriProtocolParams = new messages.SSOLoginWithWebUriProtocolParams();
SSOLoginWithWebUriProtocolParams.setUriprotocol(uriProtocol);
let bytes = SSOLoginWithWebUriProtocolParams.serializeBinary();
return _addon.SSOLoginWithWebUriProtocol(bytes);
} catch (error) {
return ZoomSDKError.SDKERR_INVALID_PARAMETER;
}
}
return _isSDKAuthentication ? ZoomSDKError.SDKERR_UNAUTHENTICATION : ZoomSDKError.SDKERR_UNINITIALIZE;
},
/**
* Account Logout
* @method Logout
* @return {Number} Defined in: {@link ZoomSDKError}
*/
Logout: function () {
if (_isSDKAuthentication && _addon)
return _addon.Logout();
return _isSDKAuthentication ? ZoomSDKError.SDKERR_UNAUTHENTICATION : ZoomSDKError.SDKERR_UNINITIALIZE;
},
/**
* Auth With Jwt Token
* @method AuthWithJwtToken
* @param {String} sdk_context
* @return {Number} Defined in: {@link ZoomSDKError}
*/
AuthWithJwtToken: function (sdk_context) {
if (_addon) {
try {
let AuthWithJwtTokenParams = new messages.AuthWithJwtTokenParams();
AuthWithJwtTokenParams.setSdkjwttoken(sdk_context);
let bytes = AuthWithJwtTokenParams.serializeBinary();
return _addon.AuthWithJwtToken(bytes);
} catch (error) {
return ZoomSDKError.SDKERR_INVALID_PARAMETER;
}
}
return _isSDKAuthentication ? ZoomSDKError.SDKERR_UNAUTHENTICATION : ZoomSDKError.SDKERR_UNINITIALIZE;
},
/**
* Get Authentication Status
* @method GetAuthResult
* @return {Number} Defined in: {@link ZoomAuthResult}
*/
GetAuthResult: function () {
return _addon.GetAuthResult();
},
/**
* Get Login Status
* @method GetLoginStatus
* @return {Number} Defined in: {@link ZoomAuthResult}
*/
GetLoginStatus: function () {
return _addon.GetLoginStatus();
},
GetDirectShare: function (opts) {
if (_addon) {
let clientOpts = opts || {};
clientOpts.addon = _addon;
return ZOOMDIRECTSHAREMOD.ZoomDirectShareHelper.getInstance(clientOpts);
}
return _isSDKAuthentication ? ZoomSDKError.SDKERR_UNAUTHENTICATION : ZoomSDKError.SDKERR_UNINITIALIZE;
}
}
}
return {
getInstance: function (opts) {
if (!instance) {
instance = init(opts);
}
return instance
}
};
})();
module.exports = {
ZoomAuth: ZoomAuth
};