source: pmb4.2/trunk/fuentes/pmb/admin/connecteurs/out/apijsonrpc/apijsonrpc.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 6.3 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: apijsonrpc.class.php,v 1.9 2015-04-03 11:16:29 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9global $class_path;
10require_once($class_path."/connecteurs_out.class.php");
11require_once($class_path."/external_services.class.php");
12require_once($class_path."/external_services_esusers.class.php");
13require_once ("$base_path/admin/connecteurs/out/apijsonrpc/apijsonrpc_jsonrpcserver.class.php");
14
15class apijsonrpc extends connecteur_out {
16        var $json_input = '';
17       
18        function get_config_form() {
19                $result = $this->msg["no_configuration_required"];
20                return $result;
21        }
22       
23        function update_config_from_form() {
24                return;
25        }
26       
27        function instantiate_source_class($source_id) {
28                return new apijsonrpc_source($this, $source_id, $this->msg);
29        }
30       
31        //On chargera nous même les messages si on en a besoin
32        function need_global_messages() {
33                return false;
34        }
35       
36        function process($source_id, $pmb_user_id) {
37                global $base_path;
38
39                $apijsonrpc_jsonrpcserver = new apijsonrpc_jsonrpcserver($this);
40                $apijsonrpc_jsonrpcserver->process($source_id, $pmb_user_id, $this->json_input);
41               
42                //Rien
43                return;
44        }
45       
46        function return_json_error($message, $request) {
47                $response = array (
48                        'id' => $request['id'],
49                        'result' => NULL,
50                        'error' => $message
51                );
52                // output the response
53                if (!empty($request['id'])) { // notifications don't want response
54                        header('content-type: text/javascript');
55                        echo json_encode($response);
56                }
57                die();
58        }
59       
60        function get_running_pmb_userid($source_id) {
61                $user_id = 1;
62                $this->json_input = json_decode(file_get_contents('php://input'),true);
63                if (!$this->json_input)
64                        return 1;
65               
66                $credentials_user = '';
67                $credentials_password = '';
68               
69                if (isset($this->json_input["auth_user"])) {
70                        $credentials_user = $this->json_input["auth_user"];
71                        if (isset($this->json_input["auth_pw"])) {
72                                //Vérification du hash salé double
73                                $requete="select esuser_password from es_esusers where esuser_username='".addslashes($credentials_user)."'";
74                                $resultat=pmb_mysql_query($requete);
75                                if ($resultat) {
76                                        $pwd=pmb_mysql_result($resultat,0,0);
77                                        $sc=$this->instantiate_source_class($source_id);
78                                        $salt=md5($credentials_user.md5($pwd).$sc->comment.$this->json_input["id"].$this->json_input["method"]);
79                                        if ($salt==$this->json_input["auth_pw"]) $credentials_password=$pwd;
80                                }
81                        } 
82                        //$credentials_password = isset($this->json_input["auth_pw"]) ? $this->json_input["auth_pw"] : '';
83                }
84
85                if (isset($_SERVER['PHP_AUTH_USER'])) {
86                        $credentials_user = $_SERVER['PHP_AUTH_USER'];
87                        $credentials_password = $_SERVER['PHP_AUTH_PW'];
88                }
89               
90                if (!$credentials_user) {
91                        //Si on ne nous fourni pas de credentials, alors on teste l'utilisateur anonyme
92                        $user_id = connector_out_check_credentials('', '', $source_id);
93                        if ($user_id === false) {
94                            $this->return_json_error('Access with no credentials is forbidden.', $this->json_input);
95                        }
96                } else {
97                        $user_id = connector_out_check_credentials($credentials_user, $credentials_password, $source_id);
98                        if ($user_id === false) {
99                            $this->return_json_error('Bad credentials.', $this->json_input);
100                        }
101                }
102               
103                return $user_id;
104        }
105}
106
107class apijsonrpc_source extends connecteur_out_source {
108
109        function get_config_form() {
110                global $charset;
111                $result = parent::get_config_form();
112               
113                $api_catalog = new es_catalog();
114                $api_functions = array();
115                foreach ($api_catalog->groups as $agroup) {
116                        foreach ($agroup->methods as $amethod) {
117                                $api_functions[$agroup->name][] = $amethod->name;
118                        }
119                }
120
121                if (!isset($this->config["exported_functions"]))
122                        $this->config["exported_functions"] = array();
123                $selected_functions = array();
124                foreach ($this->config["exported_functions"] as $afunction) {
125                        $selected_functions[] = $afunction["group"]."|_|".$afunction["name"];
126                }
127
128                //Adresse d'utilisation
129                global $database;
130                $result .= '<div class=row><label class="etiquette" for="api_exported_functions">'.$this->msg["apijsonrpc_service_endpoint"].'</label><br />';
131                if ($this->id) {
132                        $result .= '<a target="_blank" href="ws/connector_out.php?source_id='.$this->id.'">ws/connector_out.php?source_id='.$this->id.'</a>';
133                }
134                else {
135                        $result .= $this->msg["apijsonrpc_service_endpoint_unrecorded"];
136                }
137                $result .= "</div>";
138               
139                //Fonction exportées
140                $result  .= '<div class=row><label class="etiquette" for="api_exported_functions">'.$this->msg["apijsonrpc_exported_functions"].'</label><br />';
141                $api_select = '<select MULTIPLE name="api_exported_functions[]" size="20">';
142                foreach ($api_functions as $agroup_name => $agroup) {
143                        $api_select .= '<optgroup label="'.htmlentities($agroup_name ,ENT_QUOTES, $charset).'">';
144                        foreach ($agroup as $amethodname) {
145                                $davalue = $agroup_name."|_|".$amethodname;
146                                $api_select .= '<option '.(in_array($davalue, $selected_functions) ? 'selected' : "").' value="'.htmlentities($davalue ,ENT_QUOTES, $charset).'">'.htmlentities($amethodname ,ENT_QUOTES, $charset).'</option>';
147                        }
148                        $api_select .= '</optgroup>';
149                }
150                $api_select .= '</select>';
151                $result .= $api_select;
152                $result .= "</div>";
153               
154                return $result;
155        }
156
157        function update_config_from_form() {
158                parent::update_config_from_form();
159                global $api_exported_functions, $authentication_type, $authorized_groups;
160               
161                if (!$api_exported_functions)
162                        $api_exported_functions = array();
163                if (!isset($authentication_type) || !$authentication_type)
164                        $authentication_type = 'none';
165                if (!isset($authorized_groups) || !$authorized_groups)
166                        $authorized_groups = array();
167               
168                //Récupérons la liste des fonctions pour virer de l'entrée les noms de fonctions qui n'existent pas
169                $api_catalog = new es_catalog();
170                $api_functions = array();
171                foreach ($api_catalog->groups as $agroup) {
172                        foreach ($agroup->methods as $amethod) {
173                                $api_functions[] = $agroup->name."|_|".$amethod->name;
174                        }
175                }
176                $api_exported_functions = array_intersect($api_exported_functions, $api_functions);
177               
178                //Enregistrons
179                $config_exported = array();
180                foreach ($api_exported_functions as $afunction) {
181                        $dafunction = explode("|_|", $afunction);
182                        $config_exported[] = array("group" => $dafunction[0], "name" => $dafunction[1]);
183                }
184                $this->config["exported_functions"] = $config_exported;
185               
186                return;
187        }
188
189}
190
191?>
Note: See TracBrowser for help on using the repository browser.