[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/auth/fc/ -> fcFPP.php (source)

   1  <?php
   2  /************************************************************************/
   3  /* fcFPP: Php class for FirstClass Flexible Provisining Protocol        */
   4  /* =============================================================        */
   5  /*                                                                      */
   6  /* Copyright (c) 2004 SKERIA Utveckling, Teknous                        */
   7  /* http://skeria.skelleftea.se                                          */
   8  /*                                                                      */
   9  /* Flexible Provisioning Protocol is a real-time, IP based protocol     */
  10  /* which provides direct access to the scriptable remote administration */
  11  /* subsystem of the core FirstClass Server. Using FPP, it is possible to*/
  12  /* implement automated provisioning and administration systems for      */
  13  /* FirstClass, avoiding the need for a point and click GUI. FPP can also*/
  14  /* be used to integrate FirstClass components into a larger unified     */
  15  /* system.                                                              */
  16  /*                                                                      */
  17  /* This program is free software. You can redistribute it and/or modify */
  18  /* it under the terms of the GNU General Public License as published by */
  19  /* the Free Software Foundation; either version 2 of the License or any */
  20  /* later version.                                                       */
  21  /************************************************************************/
  22  /* Author: Torsten Anderson, [email protected]
  23   */
  24  
  25  class fcFPP
  26  {
  27      var $_hostname;         // hostname of FirstClass server we are connection to
  28      var $_port;             // port on which fpp is running
  29      var $_conn = 0;         // socket we are connecting on
  30      var $_debug = FALSE;    // set to true to see some debug info
  31  
  32      // class constructor
  33      function fcFPP($host="localhost", $port="3333")
  34      {
  35      $this->_hostname = $host;
  36      $this->_port = $port;
  37      $this->_user = "";
  38      $this->_pwd = "";
  39      }
  40  
  41      // open a connection to the FirstClass server
  42      function open()
  43      {
  44      if ($this->_debug) echo "Connecting to host ";
  45      $host = $this->_hostname;
  46      $port = $this->_port;
  47  
  48      if ($this->_debug) echo "[$host:$port]..";
  49  
  50      // open the connection to the FirstClass server
  51      $conn = fsockopen($host, $port, $errno, $errstr, 5);
  52      if (!$conn)
  53      {
  54          print_error('auth_fcconnfail','auth_fc', '', array('no'=>$errno, 'str'=>$errstr));
  55          return false;
  56      }
  57  
  58      // We are connected
  59      if ($this->_debug) echo "connected!";
  60  
  61      // Read connection message.
  62      $line = fgets ($conn);        //+0
  63      $line = fgets ($conn);        //new line
  64  
  65      // store the connection in this class, so we can use it later
  66      $this->_conn = & $conn;
  67  
  68      return true;
  69      }
  70  
  71      // close any open connections
  72      function close()
  73      {
  74      // get the current connection
  75      $conn = &$this->_conn;
  76  
  77      // close it if it's open
  78          if ($conn)
  79      {
  80          fclose($conn);
  81  
  82          // cleanup the variable
  83          unset($this->_conn);
  84          return true;
  85      }
  86      return;
  87      }
  88  
  89  
  90      // Authenticate to the FirstClass server
  91      function login($userid, $passwd)
  92      {
  93      // we did have a connection right?!
  94          if ($this->_conn)
  95      {
  96          # Send username
  97          fputs($this->_conn,"$userid\r\n");
  98  
  99          $line = fgets ($this->_conn);        //new line
 100          $line = fgets ($this->_conn);        //+0
 101          $line = fgets ($this->_conn);        //new line
 102  
 103          # Send password
 104          fputs($this->_conn,"$passwd\r\n");
 105          $line = fgets ($this->_conn);        //new line
 106          $line = fgets ($this->_conn);        //+0
 107          $line = fgets ($this->_conn);        //+0 or message
 108  
 109          if ($this->_debug) echo $line;
 110  
 111          if (preg_match ("/^\+0/", $line)) {      //+0, user with subadmin privileges
 112              $this->_user = $userid;
 113              $this->_pwd  = $passwd;
 114              return TRUE;
 115          } elseif (strpos($line, 'You are not allowed')) { // Denied access but a valid user and password
 116                                                           // "Sorry. You are not allowed to login with the FPP interface"
 117              return TRUE;
 118          } else {                    //Invalid user or password
 119              return FALSE;
 120          }
 121  
 122  
 123      }
 124      return FALSE;
 125      }
 126  
 127      // Get the list of groups the user is a member of
 128      function getGroups($userid) {
 129  
 130      $groups = array();
 131  
 132      // we must be logged in as a user with subadmin privileges
 133      if ($this->_conn AND $this->_user) {
 134          # Send BA-command to get groups
 135          fputs($this->_conn,"GET USER '" . $userid . "' 4 -1\r");
 136          $line = "";
 137          while (!$line) {
 138          $line = trim(fgets ($this->_conn));
 139          }
 140          $n = 0;
 141          while ($line AND !preg_match("/^\+0/", $line) AND $line != "-1003") {
 142          list( , , $groups[$n++]) = explode(" ",$line,3);
 143          $line = trim(fgets ($this->_conn));
 144          }
 145              if ($this->_debug) echo "getGroups:" . implode(",",$groups);
 146      }
 147  
 148      return $groups;
 149      }
 150  
 151      // Check if the user is member of any of the groups.
 152      // Return the list of groups the user is member of.
 153      function isMemberOf($userid, $groups) {
 154  
 155      $usergroups = array_map("strtolower",$this->getGroups($userid));
 156      $groups = array_map("strtolower",$groups);
 157  
 158      $result = array_intersect($groups,$usergroups);
 159  
 160          if ($this->_debug) echo "isMemberOf:" . implode(",",$result);
 161  
 162      return $result;
 163  
 164      }
 165  
 166      function getUserInfo($userid, $field) {
 167  
 168      $userinfo = "";
 169  
 170      if ($this->_conn AND $this->_user) {
 171          # Send BA-command to get data
 172          fputs($this->_conn,"GET USER '" . $userid . "' " . $field . "\r");
 173          $line = "";
 174          while (!$line) {
 175              $line = trim(fgets ($this->_conn));
 176          }
 177          $n = 0;
 178          while ($line AND !preg_match("/^\+0/", $line)) {
 179          list( , , $userinfo) = explode(" ",$line,3);
 180          $line = trim(fgets ($this->_conn));
 181          }
 182          if ($this->_debug) echo "getUserInfo:" . $userinfo;
 183      }
 184  
 185      return str_replace('\r',' ',trim($userinfo,'"'));
 186  
 187      }
 188  
 189      function getResume($userid) {
 190  
 191      $resume = "";
 192  
 193      $pattern = "/\[.+:.+\..+\]/";         // Remove references to pictures in resumes
 194  
 195      if ($this->_conn AND $this->_user) {
 196          # Send BA-command to get data
 197          fputs($this->_conn,"GET RESUME '" . $userid . "' 6\r");
 198          $line = "";
 199          while (!$line) {
 200                 $line = trim(fgets ($this->_conn));
 201          }
 202          $n = 0;
 203          while ($line AND !preg_match("/^\+0/", $line)) {
 204              $resume .= preg_replace($pattern,"",str_replace('\r',"\n",trim($line,'6 ')));
 205          $line = trim(fgets ($this->_conn));
 206          //print $line;
 207  
 208          }
 209          if ($this->_debug) echo "getResume:" . $resume;
 210      }
 211  
 212      return $resume;
 213  
 214      }
 215  
 216  
 217  }
 218  
 219  
 220  ?>


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1