MDL-65959 badge: Enable OB2.1 *connection* with cross domain ability
[moodle.git] / badges / backpack-connect.php
CommitLineData
15a00bea
TT
1<?php
2// This file is part of Moodle - http://moodle.org/
3//
4// Moodle is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// Moodle is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
16
17/**
18 * Connect to backpack site.
19 *
20 * @package core_badges
21 * @copyright 2020 Tung Thai
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 * @author Tung Thai <Tung.ThaiDuc@nashtechglobal.com>
24 */
25
26require_once(__DIR__ . '/../config.php');
27require_once($CFG->libdir . '/badgeslib.php');
28
d3af9592 29$backpackid = required_param('backpackid', PARAM_INT);
15a00bea
TT
30$scope = optional_param('scope', '', PARAM_RAW);
31$action = optional_param('action', null, PARAM_RAW);
32
d3af9592 33if (badges_open_badges_backpack_api($backpackid) != OPEN_BADGES_V2P1) {
15a00bea
TT
34 throw new coding_exception('backpacks only support Open Badges V2.1');
35}
36
37require_login();
38
d3af9592 39$externalbackpack = badges_get_site_backpack($backpackid);
15a00bea
TT
40$persistedissuer = \core\oauth2\issuer::get_record(['id' => $externalbackpack->oauth2_issuerid]);
41if ($persistedissuer) {
42 $issuer = new \core\oauth2\issuer($externalbackpack->oauth2_issuerid);
43 $returnurl = new moodle_url('/badges/backpack-connect.php',
d3af9592 44 ['action' => 'authorization', 'sesskey' => sesskey(), 'backpackid' => $backpackid]);
15a00bea
TT
45
46 $client = new core_badges\oauth2\client($issuer, $returnurl, $scope, $externalbackpack);
47 if ($client) {
48 if (!$client->is_logged_in()) {
49 redirect($client->get_login_url());
50 }
51 $wantsurl = new moodle_url('/badges/mybadges.php');
52 $auth = new \core_badges\oauth2\auth();
53 $auth->complete_data($client, $wantsurl);
54 } else {
55 throw new moodle_exception('Could not get an OAuth client.');
56 }
57} else {
58 throw new moodle_exception('Unknown OAuth client.');
59}