MDL-16180 - add portfolio support to mnet
[moodle.git] / mnet / remote_client.php
1 <?php // $Id$
2 /**
3  * An object to represent lots of information about an RPC-peer machine
4  *
5  * @author  Donal McMullan  donal@catalyst.net.nz
6  * @version 0.0.1
7  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
8  * @package mnet
9  */
11 class mnet_remote_client extends mnet_peer {
13     // If the remote client is trying to execute a method on an object instead
14     // of just a function, we'll instantiate the proper class and store it in
15     // this 'object_to_call' property, or 'static_location' if it wants to be called statically
16     var $object_to_call         = false;
17     var $static_location        = false;
18     var $request_was_encrypted  = false;
19     var $request_was_signed     = false;
21     function was_encrypted() {
22         $this->request_was_encrypted  = true;
23     }
25     function was_signed() {
26         $this->request_was_signed  = true;
27     }
29     function object_to_call($object) {
30         $this->object_to_call = $object;
31     }
33     function static_location($location) {
34         $this->static_location = $location;
35     }
37     function plaintext_is_ok() {
38         global $CFG;
40         $trusted_hosts = explode(',', get_config('mnet', 'mnet_trusted_hosts'));
42         foreach($trusted_hosts as $host) {
43             list($network, $mask) = explode('/', $host.'/');
44             if (empty($network)) continue;
45             if (strlen($mask) == 0) $mask = 32;
46             
47             if (ip_in_range($_SERVER['REMOTE_ADDR'], $network, $mask)) {
48                 return true;
49             }
50         }
52         return false;
53     }
55     function refresh_key() {
56         global $CFG;
57         // set up an RPC request
58         require_once $CFG->dirroot.'/mnet/xmlrpc/client.php';
59         $mnetrequest = new mnet_xmlrpc_client();
60         // Use any method - listServices is pretty lightweight.
61         $mnetrequest->set_method('system/listServices');
63         // Do RPC call and store response
64         if ($mnetrequest->send($this) === true) {
65             // Ok - we actually don't care about the result
66             $temp = new mnet_peer();
67             $temp->set_id($this->id);
68             if($this->public_key != $temp->public_key) {
69                 $newkey = param_clean($temp->public_key, PARAM_PEM);
70                 if(!empty($newkey)) {
71                     $this->public_key = $newkey;
72                     return true;
73                 }
74             }
75         }
76         return false;
77     }
78 }
79 ?>