Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
    require_once("../../config.php");
4
    require_once($CFG->dirroot."/auth/shibboleth/auth.php");
5
 
6
    $idp = optional_param('idp', null, PARAM_RAW);
7
 
8
    // Check for timed out sessions.
9
    if (!empty($SESSION->has_timed_out)) {
10
        $session_has_timed_out = true;
11
        $SESSION->has_timed_out = false;
12
    } else {
13
        $session_has_timed_out = false;
14
    }
15
 
16
    // Define variables used in page.
17
    $isvalid = true;
18
    $site = get_site();
19
 
20
    $loginsite = get_string("loginsite");
21
 
22
    $loginurl = (!empty($CFG->alternateloginurl)) ? $CFG->alternateloginurl : '';
23
 
24
    $config = get_config('auth_shibboleth');
25
    if (!empty($CFG->registerauth) or is_enabled_auth('none') or !empty($config->auth_instructions)) {
26
        $showinstructions = true;
27
    } else {
28
        $showinstructions = false;
29
    }
30
 
31
    $idplist = get_idp_list($config->organization_selection);
32
    if (isset($idp)) {
33
        if (isset($idplist[$idp])) {
34
            set_saml_cookie($idp);
35
 
36
            $targeturl = new moodle_url('/auth/shibboleth/index.php');
37
            $idpinfo = $idplist[$idp];
38
 
39
            // Redirect to SessionInitiator with entityID as argument.
40
            if (isset($idpinfo[1]) && !empty($idpinfo[1])) {
41
                $sso = $idpinfo[1];
42
            } else {
43
                $sso = '/Shibboleth.sso';
44
            }
45
            // For Shibboleth 1.x Service Providers.
46
            header('Location: ' . $sso . '?providerId=' . urlencode($idp) . '&target=' . urlencode($targeturl->out()));
47
 
48
        } else {
49
            $isvalid = false;
50
        }
51
    }
52
 
53
    $loginsite = get_string("loginsite");
54
 
55
    $PAGE->set_url('/auth/shibboleth/login.php');
56
    $PAGE->set_context(context_system::instance());
57
    $PAGE->navbar->add($loginsite);
58
    $PAGE->set_title($loginsite);
59
    $PAGE->set_heading($site->fullname);
60
    $PAGE->set_pagelayout('login');
61
 
62
    echo $OUTPUT->header();
63
 
64
    if (isloggedin() and !isguestuser()) {
65
        // Prevent logging when already logged in, we do not want them to relogin by accident because sesskey would be changed.
66
        echo $OUTPUT->box_start();
67
        $params = array('sesskey' => sesskey(), 'loginpage' => 1);
68
        $logout = new single_button(new moodle_url('/login/logout.php', $params), get_string('logout'), 'post');
69
        $continue = new single_button(new moodle_url('/'), get_string('cancel'), 'get');
70
        echo $OUTPUT->confirm(get_string('alreadyloggedin', 'error', fullname($USER)), $logout, $continue);
71
        echo $OUTPUT->box_end();
72
    } else {
73
        // Print login page.
74
        $selectedidp = '-';
75
        if (isset($_COOKIE['_saml_idp'])) {
76
            $idpcookie = generate_cookie_array($_COOKIE['_saml_idp']);
77
            do {
78
                $selectedidp = array_pop($idpcookie);
79
            } while (!isset($idplist[$selectedidp]) && count($idpcookie) > 0);
80
        }
81
 
82
        $idps = [];
83
        foreach ($idplist as $value => $data) {
84
            $name = reset($data);
85
            $selected = $value === $selectedidp;
86
            $idps[] = (object)[
87
                'name' => $name,
88
                'value' => $value,
89
                'selected' => $selected
90
            ];
91
        }
92
 
93
        // Whether the user can sign up.
94
        $cansignup = !empty($CFG->registerauth);
95
        // Default instructions.
96
        $instructions = format_text($config->auth_instructions);
97
        if (is_enabled_auth('none')) {
98
            $instructions = get_string('loginstepsnone');
99
        } else if ($cansignup) {
100
            if ($CFG->registerauth === 'email' && empty($instructions)) {
101
                $instructions = get_string('loginsteps');
102
            }
103
        }
104
 
105
        // Build the template context data.
106
        $templatedata = (object)[
107
            'adminemail' => get_admin()->email,
108
            'cansignup' => $cansignup,
109
            'guestlogin' => $CFG->guestloginbutton,
110
            'guestloginurl' => new moodle_url('/login/index.php'),
111
            'idps' => $idps,
112
            'instructions' => $instructions,
113
            'loginname' => $config->login_name ?? null,
114
            'logintoken' => \core\session\manager::get_login_token(),
115
            'loginurl' => new moodle_url('/auth/shibboleth/login.php'),
116
            'showinstructions' => $showinstructions,
117
            'signupurl' => new moodle_url('/login/signup.php'),
118
            'isvalid' => $isvalid
119
        ];
120
 
121
        // Render the login form.
122
        echo $OUTPUT->render_from_template('auth_shibboleth/login_form', $templatedata);
123
    }
124
 
125
    echo $OUTPUT->footer();