123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- // @flow
-
- import type { Dispatch } from 'redux';
-
- import { checkIfCanJoin } from '../base/conference';
- import { openDialog } from '../base/dialog';
-
- import {
- STOP_WAIT_FOR_OWNER,
- UPGRADE_ROLE_FINISHED,
- UPGRADE_ROLE_STARTED, WAIT_FOR_OWNER
- } from './actionTypes';
- import { LoginDialog, WaitForOwnerDialog } from './components';
- import logger from './logger';
-
- /**
- * Initiates authenticating and upgrading the role of the local participant to
- * moderator which will allow to create and join a new conference on an XMPP
- * password + guest access configuration. Refer to {@link LoginDialog} for more
- * info.
- *
- * @param {string} id - The XMPP user's ID (e.g. {@code user@domain.com}).
- * @param {string} password - The XMPP user's password.
- * @param {JitsiConference} conference - The conference for which the local
- * participant's role will be upgraded.
- * @returns {Function}
- */
- export function authenticateAndUpgradeRole(
- id: string,
- password: string,
- conference: Object) {
- return (dispatch: Dispatch<any>, getState: Function) => {
- const { password: roomPassword }
- = getState()['features/base/conference'];
- const process
- = conference.authenticateAndUpgradeRole({
- id,
- password,
- roomPassword,
-
- onLoginSuccessful() {
- // When the login succeeds, the process has completed half
- // of its job (i.e. 0.5).
- return dispatch(_upgradeRoleFinished(process, 0.5));
- }
- });
-
- dispatch(_upgradeRoleStarted(process));
- process.then(
- /* onFulfilled */ () => dispatch(_upgradeRoleFinished(process, 1)),
- /* onRejected */ error => {
- // The lack of an error signals a cancellation.
- if (error.authenticationError || error.connectionError) {
- logger.error('authenticateAndUpgradeRole failed', error);
- }
-
- dispatch(_upgradeRoleFinished(process, error));
- });
-
- return process;
- };
- }
-
-
- /**
- * Signals that the process of authenticating and upgrading the local
- * participant's role has finished either with success or with a specific error.
- *
- * @param {Object} thenableWithCancel - The process of authenticating and
- * upgrading the local participant's role.
- * @param {Object} progressOrError - If the value is a {@code number}, then the
- * process of authenticating and upgrading the local participant's role has
- * succeeded in one of its two/multiple steps; otherwise, it has failed with the
- * specified error. Refer to {@link JitsiConference#authenticateAndUpgradeRole}
- * in lib-jitsi-meet for the error details.
- * @private
- * @returns {{
- * type: UPGRADE_ROLE_FINISHED,
- * error: ?Object,
- * progress: number
- * }}
- */
- function _upgradeRoleFinished(
- thenableWithCancel,
- progressOrError: number | Object) {
- let error;
- let progress;
-
- if (typeof progressOrError === 'number') {
- progress = progressOrError;
- } else {
- // Make the specified error object resemble an Error instance (to the
- // extent that jitsi-meet needs it).
- const {
- authenticationError,
- connectionError,
- ...other
- } = progressOrError;
-
- error = {
- name: authenticationError || connectionError,
- ...other
- };
- progress = authenticationError ? 0.5 : 0;
- }
-
- return {
- type: UPGRADE_ROLE_FINISHED,
- error,
- progress,
- thenableWithCancel
- };
- }
-
- /**
- * Signals that a process of authenticating and upgrading the local
- * participant's role has started.
- *
- * @param {Object} thenableWithCancel - The process of authenticating and
- * upgrading the local participant's role.
- * @private
- * @returns {{
- * type: UPGRADE_ROLE_STARTED,
- * thenableWithCancel: Object
- * }}
- */
- function _upgradeRoleStarted(thenableWithCancel) {
- return {
- type: UPGRADE_ROLE_STARTED,
- thenableWithCancel
- };
- }
-
- /**
- * Opens {@link WaitForOnwerDialog}.
- *
- * @protected
- * @returns {Action}
- */
- export function openWaitForOwnerDialog() {
- return openDialog(WaitForOwnerDialog);
- }
-
- /**
- * Stops waiting for the conference owner.
- *
- * @returns {{
- * type: STOP_WAIT_FOR_OWNER
- * }}
- */
- export function stopWaitForOwner() {
- return {
- type: STOP_WAIT_FOR_OWNER
- };
- }
-
- /**
- * Called when Jicofo rejects to create the room for anonymous user. Will
- * start the process of "waiting for the owner" by periodically trying to join
- * the room every five seconds.
- *
- * @returns {Function}
- */
- export function waitForOwner() {
- return (dispatch: Dispatch<any>) =>
- dispatch({
- type: WAIT_FOR_OWNER,
- handler: () => dispatch(checkIfCanJoin()),
- timeoutMs: 5000
- });
- }
-
- /**
- * Opens {@link LoginDialog} which will ask to enter username and password
- * for the current conference.
- *
- * @protected
- * @returns {Action}
- */
- export function openLoginDialog() {
- return openDialog(LoginDialog);
- }
|