Dataface Installer login issue

A place for users and developers of the Xataface to discuss and receive support.

Dataface Installer login issue

Postby Ezek1el » Fri Jul 29, 2011 3:58 pm

Regarding an earlier post about the inability to execute the Dataface Installer due to the request for a username and password, it was suggested to replace localhost name in installer.php with host name of dbms. Can you please take a look at the below code as I have done so and still have the same issue? My MySql username and password do not work. It is hosted at GoDaddy. Thanks in advance for any suggestions.

Code: Select all
<?php
require_once('PEAR.php');
if ( !defined('FILE_APPEND') ){
   define('FILE_APPEND', 1);
}
if ( !function_exists('file_put_contents')  ) {
   
   function file_put_contents($n, $d, $flag = false) {
      $mode = ($flag == FILE_APPEND || strtoupper($flag) == 'FILE_APPEND') ? 'a' : 'w';
      $f = @fopen($n, $mode);
      if ($f === false) {
         return 0;
      } else {
         if (is_array($d)) $d = implode($d);
         $bytes_written = fwrite($f, $d);
         fclose($f);
         return $bytes_written;
      }
   }
}

define('DB_HOST', 'vendorstero.db.7735095.hostedresource.com');  // This is the host of your mysql dbms
ini_set('include_path','.'.PATH_SEPARATOR.'lib');
set_time_limit(1500);
class Dataface_Installer {
   
   function createApplicationArchive($conf, $path=null){}
   function installApplicationArchive($path){}
   function prepareApplicationArchive($path){}
   function authenticate(){
      header('WWW-Authenticate: Basic realm="Dataface Installer"');
      header('HTTP/1.0 401 Unauthorized');
      setcookie('logged_in',1);
      echo 'Please enter your MySQL Username and password to access this page';
      
      exit;
   
   }
   
   
   function logout(){
      //echo "here";
      setcookie("logged_in", "", time() - 3600);
      header('Location: '.$_SERVER['PHP_SELF']);
      exit;
   }
   
   function mainMenu(){
      include('install'.DIRECTORY_SEPARATOR.'mainMenu.inc.php');
   }
   
   
   function infoLink($id){
      return '<img src="images/info.gif" onclick="fieldInfo(\''.$id.'\');" />';
   
   }
   
   function archive2app(){
   
      require_once 'HTML/QuickForm.php';
      $form = new HTML_QuickForm('fromarchive');
      
      $form->addElement('hidden', '-action', 'archive2app');

      $form->addElement('file','archive', 'Installation Archive'.$this->infoLink('archive2app.archive'));
      $form->addElement('text','database_name','Database Name '.$this->infoLink('archive2app.database_name'));

      
      $form->addElement('text','mysql_user', 'MySQL Username '.$this->infoLink('archive2app.mysql_user'));
      $form->addElement('password', 'mysql_password', 'MySQL Password');
      $form->addElement('checkbox', 'create_user', 'Create user '.$this->infoLink('archive2app.create_user'));
      
      $form->addElement('select','install_type', 'Installation type '.$this->infoLink('archive2app.install_type'), array(
         '' => 'Please select ...',
         'download_tarball' => 'Download Tarball',
         'ftp_install' => 'Install on server (using FTP)'
         ),
         array('onchange'=>"listeners.install_type.onchange(this);")
      );
      
      $form->addElement('header', 'ftp_info', 'FTP Connection Info');
      $form->addElement('text', 'ftp_host', 'FTP Host');
      $form->addElement('checkbox', 'ftp_ssl', 'Use SSL');
      $form->addElement('text', 'ftp_path', 'FTP Path');
      $form->addElement('text', 'ftp_username', 'FTP Username');
      $form->addElement('password', 'ftp_password', 'FTP Password');
      
      $form->addElement('submit','submit','Submit');
      
      
      $form->addRule('database_name','Please select a database', 'required', null,'client');
      $form->addRule('mysql_user', 'Please enter a mysql username that the application can connect as.', 'required',null,'client');
      $form->addRule('install_type', 'Please select an installation type and then click submit.', 'required', null, 'client');
      $form->addRule('archive', 'Please choose the application tar.gz file to upload', 'uploadedfile',null,'client');
      
      $form->setDefaults(array(
         'mysql_user'=>$_SERVER['PHP_AUTH_USER'],
         'mysql_password'=>$_SERVER['PHP_AUTH_PW']
         )
      );
      
      if ( $form->validate() ){
         $res = $form->process(array(&$this,'archive2app__process'), true);
         if ( PEAR::isError($res) ){
            die($res->getMessage());
         }
      }
      require_once 'HTML/QuickForm/Renderer/Array.php';
      $renderer = new HTML_QuickForm_Renderer_Array(true,true,true);
      $form->accept($renderer);
      
      $context = $renderer->toArray();
      
      ob_start();
      $form->display();
      $out = ob_get_contents();
      ob_end_clean();
      include 'install'.DIRECTORY_SEPARATOR.'archive2app.inc.php';
   }
   
   function archive2app__process($values){
      require_once 'Archive/Tar.php';
      
      if ( preg_match('/\.gz$/', $_FILES['archive']['name']) ){
         $compression = 'gz';
      } else {
         $compression = null;
      }
      $archive = new Archive_Tar($_FILES['archive']['tmp_name'], $compression);
      $files = $archive->listContent();
      foreach ( $files as $file ){
         if ( !preg_match('/(\.ini)|(\.php)$/', $file['filename']) ){
            continue;
         }
         $content = $archive->extractInString($file['filename']);
         $content = str_replace(
            array(
               '%%DATAFACE_URL%%',
               '%%DATAFACE_PATH%%',
               '%%MYSQL_USER%%',
               '%%MYSQL_PASSWORD%%',
               '%%MYSQL_HOST%%',
               '%%MYSQL_DATABASE_NAME%%'
            ),
            array(
               addslashes(dirname($_SERVER['PHP_SELF'])),
               addslashes(dirname(__FILE__)),
               addslashes($values['mysql_user']),
               addslashes($values['mysql_password']),
               addslashes(DB_HOST),
               addslashes($values['database_name'])
            ),
            $content
         );
         $archive->addString($file['filename'], $content);
               
      }
      $root = $files[0]['filename'];
      
      $install = $archive->extractInString($root.'install/install.sql');
      $res = mysql_select_db($values['database_name'], db());
      if ( !$res ){
         $dbname = str_replace('`','',$values['database_name']);
         $res = mysql_query("create database `".addslashes($dbname)."`", db());
         if ( !$res ){
            return PEAR::raiseError("Failed to create database '$dbname'");
         }
         $res = mysql_select_db($dbname);
         if ( !$res ){
            return PEAR::raiseError("Problem selecting database $dbname.");
         }
      }
      
      if ( $install ){
         $installFile = tempnam(null, 'install.sql');
         file_put_contents($installFile, $install);
         

         $file = file($installFile);
         $queries = array();
         $ctr = 0;
         foreach ($file as $line){
            
            if ( isComment($line) ) continue;
            $queries[$ctr] .= $line;
            $trimmed = trim($line);
            if ( $trimmed{strlen($trimmed)-1} == ';' ) $ctr++;
            
         }
         
         //$file = implode("",$out);
         foreach ($queries as $query){
         
            $res = @mysql_query($query, $db);
            if ( !$res ){
               $my_errs[]  = mysql_error($db);
            }
         }
      }
         
         
      
      switch ($values['install_type'] ){
         case 'ftp_install':
            //echo 'here';
            require_once 'install/FTPExtractor.class.php';
            $extractor = new FTPExtractor($archive);
            $res = $extractor->connect($values['ftp_host'], $values['ftp_username'], $values['ftp_password']);

            if ( PEAR::isError($res) ){
               die($res->getMessage());
            }
            $res = $extractor->extract($values['ftp_path'],'/');
            //if ( PEAR::isError($res) ){
            //   die($res->getMessage());
            //}
            $context = array();
            if ( PEAR::isError($res) ){
               $context['result'] = 'Error: '.$res->getMessage();
            } else {
               $context = $res;
            }
            include 'install'.DIRECTORY_SEPARATOR.'archive2app-results.inc.php';
            exit;
         
         default: // download_tarball
            $tarpath =  $_FILES['archive']['tmp_name'];
            if ( $compression == 'gz' ){
               $mimetype = 'application/x-gzip';
            } else {
               $mimetype = 'application/x-tar';
            }
            header('Content-type: '.$mimetype);
            header('Content-Disposition: attachment; filename="'.basename($_FILES['archive']['name']).'.tar.gz"');
            echo file_get_contents($tarpath);
            exit;
            
      }
      
      
      
   
   }
   
   function db2app(){
      require_once 'HTML/QuickForm.php';
      $form = new HTML_QuickForm('db2app');
      $res = mysql_list_dbs(db());
      if ( !$res ) trigger_error(mysql_error(db()), E_USER_ERROR);
      $options = array('' => 'Please Select Database ...');
      while ( $row = mysql_fetch_row($res) ) $options[$row[0]] = $row[0];
      $form->addElement('hidden','-action','db2app');
      $form->addElement('select', 'database_name','Select Database'.$this->infoLink('archive2app.database_name'), $options, array('onchange'=>'listeners.database_name.onchange(this)'));
      $form->addElement('header','db_info','Database connection details');
      //$form->addElement('html', 'this is a test');
      $form->addElement('text', 'mysql_user', 'MySQL Username '.$this->infoLink('archive2app.mysql_user'));
      $form->addElement('password', 'mysql_password', 'MySQL Password');
      //$form->addElement('radio','output_format','Output options','Download as tar.gz archive','download');
      //$form->addElement('radio','output_format','','Install on webserver in apps directory','install');
      
      $form->addElement('select','install_type', 'Installation type '.$this->infoLink('archive2app.install_type'), array(
         '' => 'Please select ...',
         'download_tarball' => 'Download Tarball',
         'ftp_install' => 'Install on server (using FTP)'
         ),
         
         array('onchange'=>"listeners.install_type.onchange(this);")
      );
      
      $form->addElement('header', 'ftp_info', 'FTP Connection Info');
      $form->addElement('text', 'ftp_host', 'FTP Host');
      $form->addElement('checkbox', 'ftp_ssl', 'Use SSL');
      $form->setDefaults(array('ftp_host'=>DB_HOST));
      $form->addElement('text', 'ftp_path', 'FTP Path',array('size'=>50));
      $form->setDefaults(array('ftp_path'=>$_SERVER['DOCUMENT_ROOT']));
      $form->addElement('text', 'ftp_username', 'FTP Username');
      $form->addElement('password', 'ftp_password', 'FTP Password');
      
      
      $form->addElement('submit','submit','Submit');
      
      
      $form->addRule('database_name','Please select a database', 'required', null,'client');
      $form->addRule('mysql_user', 'Please enter a mysql username that the application can connect as.', 'required',null,'client');
      $form->addRule('install_type', 'Please select an installation type and then click submit.', 'required', null, 'client');
      $form->setDefaults(array(
         'mysql_user'=>$_SERVER['PHP_AUTH_USER'],
         'mysql_password'=>$_SERVER['PHP_AUTH_PW']
         )
      );
      
      if ( $form->validate() ){
         $tarpath = $form->process(array(&$this,'db2app__process'), true);
         header('Content-type: application/x-gzip');
         header('Content-Disposition: attachment; filename="'.basename($tarpath).'.tar.gz"');
         echo file_get_contents($tarpath);
         exit;
      }
      
      require_once 'HTML/QuickForm/Renderer/Array.php';
      $renderer = new HTML_QuickForm_Renderer_Array(true,true,true);
      $form->accept($renderer);
      
      $context = $renderer->toArray();
      //print_r($context);
      
      ob_start();
      $form->display();
      $out = ob_get_contents();
      ob_end_clean();
      include 'install'.DIRECTORY_SEPARATOR.'db2app.inc.php';
   }
   
   function db2app__process($values){
      require_once 'Archive/Tar.php';
      $tarpath = tempnam('./tmp',strval($values['database_name']));
      //echo $tarpath;
      $archive = new Archive_Tar($tarpath,'gz');
      $path = strval($values['database_name']);
      $archive->addString($path.'/.htaccess', '<FilesMatch "\.ini$">
Deny from all
</FilesMatch>');
      
      

      mysql_select_db($values['database_name'], db());
      $res = mysql_query('show tables', db());
      if ( !$res ) trigger_error(mysql_error(db()), E_USER_ERROR);
      $tables = array();
      while ( $row = mysql_fetch_row($res) ){
         if ( $row[0]{0} == '_' ) continue;
         if ( strpos($row[0], 'dataface_') === 0 ) continue;
         if ( preg_match('/__history$/', $row[0]) ) continue;
         $tables[] = $row[0].' = "'.ucwords(str_replace('_',' ', $row[0])).'"';
      }
      
      $archive->addString($path.'/conf.ini',';;Configuration settings for application
title="'.addslashes($values['database_name']).'"

[_database]
   host="'.DB_HOST.'"
   name="'.addslashes($values['database_name']).'"
   user="'.addslashes($values['mysql_user']).'"
   password="'.addslashes($values['mysql_password']).'"
   
[_tables]
'.implode("\n",$tables).'
'
      );
      
      $archive->addString($path.'/index.php','<?php //Main Application access point
require_once "'.addslashes(dirname(__FILE__).'/dataface-public-api.php').'";
df_init(__FILE__, "'.addslashes(dirname($_SERVER['PHP_SELF'])).'");
$app =& Dataface_Application::getInstance();
$app->display();
'
      );
      
      
      switch ($values['install_type'] ){
         case 'ftp_install':
            //echo 'here';
            require_once 'install/FTPExtractor.class.php';
            $extractor = new FTPExtractor($archive);
            $res = $extractor->connect($values['ftp_host'], $values['ftp_username'], $values['ftp_password']);

            if ( PEAR::isError($res) ){
               die($res->getMessage());
            }
            
            
            $res = $extractor->extract($values['ftp_path'],'/');
            //if ( PEAR::isError($res) ){
            //   die($res->getMessage());
            //}
            $context = array();
            if ( PEAR::isError($res) ){
               $context['result'] = 'Error: '.$res->getMessage();
            } else {
               $context = $res;
               
               
            }
            include 'install'.DIRECTORY_SEPARATOR.'archive2app-results.inc.php';
            exit;
         
         default: // download_tarball
            //$tarpath =  $_FILES['archive']['tmp_name'];
            if ( $compression == 'gz' ){
               $mimetype = 'application/x-gzip';
            } else {
               $mimetype = 'application/x-tar';
            }
            header('Content-type: '.$mimetype);
            header('Content-Disposition: attachment; filename="'.basename($tarpath).'.tar.gz"');
            echo file_get_contents($tarpath);
            exit;
            
      }
      
      //return $tarpath;
      
   }
   
   function test_db_access($dbname, $username, $password){
      $db = @mysql_connect(DB_HOST, $username, $password);
      if ( !$db ){
         return PEAR::raiseError("Could not connect to the MySQL server with username $username.");
      }
      
      $res = mysql_select_db($dbname, $db);
      if ( !$res ) return PEAR::raiseError("Could not access the database $dbname as user $username.");
      
      return true;
   }
   
   function test_ftp_access($host, $path, $user, $password, $ssl=false){
      require_once 'install/ftp.api.php';
      require_once 'install/ftp.class.php';
      if ( $ssl ){
         $conn = ftp_ssl_connect($host);
      } else {
         $conn = ftp_connect($host);
      }
      if ( !$conn ) return PEAR::raiseError("Could not connect to FTP server");
      
      $res = @ftp_login($conn, $user, $password);
      if ( !$res ) return PEAR::raiseError("Failed to login to FTP server with the provided username ($user) and password");
      
      $res = @ftp_chdir($conn, $path);
      if ( !$res ){
         return PEAR::raiseError("Failed: The directory $path on the server $host does not exist.");
         
      }
      
      return true;
   
   }
   
   function testdb(){
      if ( !@$_REQUEST['-dbname'] || !$_REQUEST['-dbuser'] || !isset($_REQUEST['-dbpass']) ){
         trigger_error("Please provide all of -dbname, -dbuser, and -dbpass parameters in the POST variables.", E_USER_ERROR);
         
      }
      
      $res = $this->test_db_access($_REQUEST['-dbname'], $_REQUEST['-dbuser'], $_REQUEST['-dbpass']);
      if ( PEAR::isError($res) ){
         $msg = array(
            'success' => false,
            'message' => $res->getMessage()
            );
         
         
      } else {
         $msg = array(
            'success' => true,
            'message' => 'Connected to database successfully'
            );
      }
      
      header('Content-type: text/json');
      require_once 'Services/JSON.php';
      $json = new Services_JSON;
      echo $json->encode($msg);
      exit;
   }
   
   function testftp(){
      if ( !@$_REQUEST['-ftphost'] || !$_REQUEST['-ftpuser'] || !isset($_REQUEST['-ftppass']) ){
         trigger_error("Please provide all of -ftphost, -ftpuser, and -ftppass parameters in the POST variables.", E_USER_ERROR);
         
      }
      
      $res = $this->test_ftp_access($_REQUEST['-ftphost'], @$_REQUEST['-ftppath'], $_REQUEST['-ftpuser'], $_REQUEST['-ftppass'], @$_REQUEST['-ftpssl']);
      if ( PEAR::isError($res) ){
         $msg = array(
            'success' => false,
            'message' => $res->getMessage()
            );
         
         
      } else {
         $msg = array(
            'success' => true,
            'message' => 'Connected to FTP server successfully'
            );
      }
      
      header('Content-type: text/json');
      require_once 'Services/JSON.php';
      $json = new Services_JSON;
      echo $json->encode($msg);
      exit;
   }

}
//print_r($_SERVER);
function db(){
   static $db=-1;
   if ( $db == -1 ){
      if (!@$_SERVER['PHP_AUTH_USER'] || !$_COOKIE['logged_in'] ){
         Dataface_Installer::authenticate();
      }
      $db = @mysql_connect(DB_HOST,@$_SERVER['PHP_AUTH_USER'], @$_SERVER['PHP_AUTH_PW']);
      if ( !$db ){
         Dataface_Installer::authenticate();
         }
      }
      return $db;
}

function isComment($line){
   $line = trim($line);
   if ( strlen($line) > 1 and $line{0} == '-' and $line{1} == '-') return true;
   return false;
}


db();


$installer = new Dataface_Installer;
switch (@$_REQUEST['-action']){
   case 'testdb':
      $installer->testdb();
      break;
      
   case 'testftp':
      $installer->testftp();
      break;
   
   case 'logout':
      $installer->logout();
      break;
   
   case 'db2app':
      $installer->db2app();
      break;
      
   case 'archive2app':
      $installer->archive2app();
      break;
      
   default:
      Dataface_Installer::mainMenu();

}
Ezek1el
 
Posts: 1
Joined: Fri Jul 29, 2011 2:47 pm

Return to Xataface Users

Who is online

Users browsing this forum: No registered users and 24 guests

cron
Powered by Dataface
© 2005-2007 Steve Hannah All rights reserved