source: moodle/trunk/fuentes/auth/pop3/auth.php @ 1331

Last change on this file since 1331 was 1331, checked in by jrpelegrina, 3 years ago

Updated to moodle 3.0.3

File size: 5.2 KB
Line 
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 * Authentication Plugin: POP3 Authentication
19 * Authenticates against a POP3 server.
20 *
21 * @package auth_pop3
22 * @author Martin Dougiamas
23 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
24 */
25
26defined('MOODLE_INTERNAL') || die();
27
28require_once($CFG->libdir.'/authlib.php');
29
30/**
31 * POP3 authentication plugin.
32 */
33class auth_plugin_pop3 extends auth_plugin_base {
34
35    /**
36     * Constructor.
37     */
38    public function __construct() {
39        $this->authtype = 'pop3';
40        $this->config = get_config('auth/pop3');
41    }
42
43    /**
44     * Old syntax of class constructor for backward compatibility.
45     */
46    public function auth_plugin_pop3() {
47        self::__construct();
48    }
49
50    /**
51     * Returns true if the username and password work and false if they are
52     * wrong or don't exist.
53     *
54     * @param string $username The username
55     * @param string $password The password
56     * @return bool Authentication success or failure.
57     */
58    function user_login($username, $password) {
59        if (! function_exists('imap_open')) {
60            print_error('auth_pop3notinstalled','auth_pop3');
61            exit;
62        }
63
64        global $CFG;
65        $hosts = explode(';', $this->config->host);   // Could be multiple hosts
66        foreach ($hosts as $host) {                 // Try each host in turn
67            $host = trim($host);
68
69            // remove any trailing slash
70            if (substr($host, -1) == '/') {
71                $host = substr($host, 0, strlen($host) - 1);
72            }
73
74            switch ($this->config->type) {
75                case 'pop3':
76                    $host = '{'.$host.":{$this->config->port}/pop3}{$this->config->mailbox}";
77                break;
78
79                case 'pop3notls':
80                    $host = '{'.$host.":{$this->config->port}/pop3/notls}{$this->config->mailbox}";
81                break;
82
83                case 'pop3cert':
84                    $host = '{'.$host.":{$this->config->port}/pop3/ssl/novalidate-cert}{$this->config->mailbox}";
85                break;
86            }
87
88            error_reporting(0);
89            $connection = imap_open($host, $username, $password);
90            error_reporting($CFG->debug);
91
92            if ($connection) {
93                imap_close($connection);
94                return true;
95            }
96        }
97        return false;  // No matches found
98    }
99
100    function prevent_local_passwords() {
101        return true;
102    }
103
104    /**
105     * Returns true if this authentication plugin is 'internal'.
106     *
107     * @return bool
108     */
109    function is_internal() {
110        return false;
111    }
112
113    /**
114     * Returns true if this authentication plugin can change the user's
115     * password.
116     *
117     * @return bool
118     */
119    function can_change_password() {
120        return !empty($this->config->changepasswordurl);
121    }
122
123    /**
124     * Returns the URL for changing the user's pw, or false if the default can
125     * be used.
126     *
127     * @return moodle_url
128     */
129    function change_password_url() {
130        if (!empty($this->config->changepasswordurl)) {
131            return new moodle_url($this->config->changepasswordurl);
132        } else {
133            return null;
134        }
135    }
136
137    /**
138     * Prints a form for configuring this authentication plugin.
139     *
140     * This function is called from admin/auth.php, and outputs a full page with
141     * a form for configuring this plugin.
142     *
143     * @param array $page An object containing all the data for this page.
144     */
145    function config_form($config, $err, $user_fields) {
146        global $OUTPUT;
147
148        include "config.html";
149    }
150
151    /**
152     * Processes and stores configuration data for this authentication plugin.
153     */
154    function process_config($config) {
155        // set to defaults if undefined
156        if (!isset ($config->host)) {
157            $config->host = '127.0.0.1';
158        }
159        if (!isset ($config->type)) {
160            $config->type = 'pop3notls';
161        }
162        if (!isset ($config->port)) {
163            $config->port = '143';
164        }
165        if (!isset ($config->mailbox)) {
166            $config->mailbox = 'INBOX';
167        }
168        if (!isset($config->changepasswordurl)) {
169            $config->changepasswordurl = '';
170        }
171
172        // save settings
173        set_config('host',    $config->host,    'auth/pop3');
174        set_config('type',    $config->type,    'auth/pop3');
175        set_config('port',    $config->port,    'auth/pop3');
176        set_config('mailbox', $config->mailbox, 'auth/pop3');
177        set_config('changepasswordurl', $config->changepasswordurl, 'auth/pop3');
178
179        return true;
180    }
181
182}
183
184
Note: See TracBrowser for help on using the repository browser.