Laurent David 315f4f2bd4 MDL-74638 mod_bigbluebuttonbn: Guest access for meetings
* Provide a way for external participants to be invited to a meeting by giving them an url/password
  for external users (not registered in Moodle)
* Add guest access page with username and password prompt
* Add form and modify API calls to take into account guest login
* Add a form modal to add guest users emails
* Allow copy of link and password in both popup form and module form
* The guest should be approved by default. It should be intentional to let them
in without checks.
* Guest access URL and password should not be copied when duplicating or backing
up the activity.
* The mod_bigbluebuttonbn_meeting_info web service function now
returns guestjoinurl and guestpassword only for moderators.
* Redirect if user already logged in

Note: this will allow guest to connect to an existing and running meeting. The moderator will then
be able to adjust the guest user's right. For security reasons we do not yet allow moderators
to join the meeting directly (or start a meeting)
2022-11-11 14:56:24 +11:00

80 lines
2.3 KiB
PHP

<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace mod_bigbluebuttonbn;
/**
* Class plugin.
*
* @package mod_bigbluebuttonbn
* @copyright 2019 onwards, Blindside Networks Inc
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @author Darko Miletic (darko.miletic [at] gmail [dt] com)
*/
abstract class plugin {
/**
* Component name.
*/
const COMPONENT = 'mod_bigbluebuttonbn';
/**
* Helper function to convert an html string to plain text.
*
* @param string $html
* @param int $len
*
* @return string
*/
public static function html2text($html, $len = 0) {
$text = strip_tags($html);
$text = str_replace('&nbsp;', ' ', $text);
$textlen = strlen($text);
$text = mb_substr($text, 0, $len);
if ($textlen > $len) {
$text .= '...';
}
return $text;
}
/**
* Helper generates a random password.
*
* @param int $length
* @param string $unique
*
* @return string
*/
public static function random_password($length = 8, $unique = "") {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
do {
$password = substr(str_shuffle($chars), 0, $length);
} while ($unique == $password);
return $password;
}
/**
* Generate random credentials for guest access
*
* @return array
*/
public static function generate_guest_meeting_credentials(): array {
$password = self::random_password();
$guestlinkuid = sha1(self::random_password(1024));
return [$guestlinkuid, $password];
}
}