MDL-14679 towards authlib conversion
[moodle.git] / auth / pop3 / auth.php
1 <?php
3 /**
4  * @author Martin Dougiamas
5  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
6  * @package moodle multiauth
7  *
8  * Authentication Plugin: POP3 Authentication
9  *
10  * Authenticates against a POP3 server.
11  *
12  * 2006-08-31  File created.
13  */
15 if (!defined('MOODLE_INTERNAL')) {
16     die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
17 }
19 require_once($CFG->libdir.'/authlib.php');
21 /**
22  * POP3 authentication plugin.
23  */
24 class auth_plugin_pop3 extends auth_plugin_base {
26     /**
27      * Constructor.
28      */
29     function auth_plugin_pop3() {
30         $this->authtype = 'pop3';
31         $this->config = get_config('auth/pop3');
32     }
34     /**
35      * Returns true if the username and password work and false if they are
36      * wrong or don't exist.
37      *
38      * @param string $username The username
39      * @param string $password The password
40      * @return bool Authentication success or failure.
41      */
42     function user_login($username, $password) {
43         if (! function_exists('imap_open')) {
44             print_error('auth_pop3notinstalled','auth');
45             exit;
46         }
48         global $CFG;
49         $hosts = split(';', $this->config->host);   // Could be multiple hosts
50         foreach ($hosts as $host) {                 // Try each host in turn
51             $host = trim($host);
53             // remove any trailing slash
54             if (substr($host, -1) == '/') {
55                 $host = substr($host, 0, strlen($host) - 1);
56             }
58             switch ($this->config->type) {
59                 case 'pop3':
60                     $host = '{'.$host.":{$this->config->port}/pop3}{$this->config->mailbox}";
61                 break;
63                 case 'pop3notls':
64                     $host = '{'.$host.":{$this->config->port}/pop3/notls}{$this->config->mailbox}";
65                 break;
67                 case 'pop3cert':
68                     $host = '{'.$host.":{$this->config->port}/pop3/ssl/novalidate-cert}{$this->config->mailbox}";
69                 break;
70             }
72             error_reporting(0);
73             $connection = imap_open($host, $username, $password);
74             error_reporting($CFG->debug);
76             if ($connection) {
77                 imap_close($connection);
78                 return true;
79             }
80         }
81         return false;  // No matches found
82     }
84     /**
85      * Returns true if this authentication plugin is 'internal'.
86      *
87      * @return bool
88      */
89     function is_internal() {
90         return false;
91     }
93     /**
94      * Returns true if this authentication plugin can change the user's
95      * password.
96      *
97      * @return bool
98      */
99     function can_change_password() {
100         return !empty($this->config->changepasswordurl);
101     }
103     /**
104      * Returns the URL for changing the user's pw, or false if the default can
105      * be used.
106      *
107      * @return bool
108      */
109     function change_password_url() {
110         return $this->config->changepasswordurl;
111     }
113     /**
114      * Prints a form for configuring this authentication plugin.
115      *
116      * This function is called from admin/auth.php, and outputs a full page with
117      * a form for configuring this plugin.
118      *
119      * @param array $page An object containing all the data for this page.
120      */
121     function config_form($config, $err, $user_fields) {
122         include "config.html";
123     }
125     /**
126      * Processes and stores configuration data for this authentication plugin.
127      */
128     function process_config($config) {
129         // set to defaults if undefined
130         if (!isset ($config->host)) {
131             $config->host = '127.0.0.1';
132         }
133         if (!isset ($config->type)) {
134             $config->type = 'pop3notls';
135         }
136         if (!isset ($config->port)) {
137             $config->port = '143';
138         }
139         if (!isset ($config->mailbox)) {
140             $config->mailbox = 'INBOX';
141         }
142         if (!isset($config->changepasswordurl)) {
143             $config->changepasswordurl = '';
144         }
146         // save settings
147         set_config('host',    $config->host,    'auth/pop3');
148         set_config('type',    $config->type,    'auth/pop3');
149         set_config('port',    $config->port,    'auth/pop3');
150         set_config('mailbox', $config->mailbox, 'auth/pop3');
151         set_config('changepasswordurl', $config->changepasswordurl, 'auth/pop3');
153         return true;
154     }
158 ?>