function main() { # KFD 2/17/09. If installed with Debian package, will # have username and password of "start". # Must force a new id now. # if (SessionGet('UID') == 'start') { if (gp('user_id') != '') { if (gp('user_id') == '') { ErrorAdd("User Id may not be empty"); } if (substr(gp('user_id'), 0, 5) == 'andro') { ErrorAdd("User Id may not begin with 'andro'"); } if (gp('password1') != gp('password2')) { ErrorAdd("Passwords do not match"); } if (strlen(trim(gp('password1'))) == 0) { ErrorAdd("Password may not be empty"); } if (!Errors()) { $row = array('user_id' => gp('user_id'), 'member_password' => gp('password1')); SQLX_Insert('usersroot', $row); if (!Errors()) { scDBConn_Pop(); SessionSet('UID', gp('user_id')); SessionSet('PWD', gp('password1')); scDBConn_Push(); SQL("DELETE FROM USERSROOT WHERE user_id='start'"); # Get rid of the form that replaces login $file = fsDirTop() . 'application/x_login_form.inc.html'; $fileto = $file . '.done'; @rename($file, $fileto); ?> <h1>New Root User Created</h1> <p>Your new user is created.</p> <p><a href="index.php?st2logout=1"> Return to Login Page</a></p> <?php return; } } } ?> <h1>New Install - Must Create User</h1> <p>You are logged into your Node Manager with the default username of "start" and password "start". We have to change this right now so nobody can get into your new system. </p> <p>Please provide a new ROOT (superuser) user id and password below. Andromeda will create the new user, log you in as that user, and remove the "start" user. </p> <table> <tr><td align="left">User Name <td><input name = 'user_id' /> (may not begin with 'andro') <tr><td align="left">Password <td><input type="password" name = 'password1'/> <tr><td align="left">Password (verify) <td><input type="password" name = 'password2'/> </table> <input type="submit" value="Create User Now" /> <?php return; } /* FUTURE X6 VERSION OF NODE MANAGER ?> <h1>Node Manager Upgrade Required</h1> <p>The new version of the Node Manager uses the "x6" interface to provide a richer experience. Please click the link below to upgrade your Node Manager. Once the upgrade is complete, log out and back in. </p> <p><a href="javascript:Popup('index.php?gp_page=a_builder&gp_out=none&x2=1&txt_application=andro','Build')" >Upgrade Node Manager Now</a>.</p> <p><a href="?st2logout=1">Logout After Upgrade</a>.</p> <?php return; */ # <------- EARLY RETURN. # KFD 1/10/08, The old x_welcome screen is not used anymore, # we have the new 'cpanel' now in x6. # =============================================================== ?> <h1>Welcome to the Andromeda Node Manager</h1> <?php // Work out if there is a new release available // $apps = svnVersions(); $andro = a($apps, 'andro', array('svn_url' => '')); if (trim($andro['svn_url']) == '') { $htmlVersions = ''; } else { $htmlVersions = @file_get_contents($andro['svn_url']); } $matches = array(); preg_match_all('/<li><a href=.*\\>(.*)<\\/a><\\/li>/', $htmlVersions, $matches); $versions = ArraySafe($matches, 1, array()); if (count($versions) > 0) { $latest = array_pop($versions); $latest = str_replace('/', '', $latest); // Get current latest $current = $andro['local']; if ($latest > $current) { ?> <br/> <div style="border: 5px solid gray; color: blue font-weight: bolder; margin: 8px; padding: 0 8px 8px 8px"> <h2>New Version of Andromeda Available</h2> <p>Version <?php echo $latest; ?> is available. <a href="?gp_page=a_pullsvn" >Click Here </a> to go to the Pull Code From Subversion. </div> <?php } } $dirs = SQL_AllRows("select * from webpaths where webpath='DEFAULT'"); ?> <div style="font-size: 120%; line-height: 120%; padding: 10px"> <h2>For First Time Users</h2> This program is the Andromeda <b>Node Manager</b>. You use this program to build your applications. <br/> <br/> Our main documentation is <a target="_blank" href= "http://www.andromeda-project.org/">here</a>. <br/> <br/> If you want to start programming a new application right away, <a target="_blank" href= "http://www.andromeda-project.org/creatinganapplication.html" >The instructions are here</a>, or you can just <a href="?gp_page=applications&gp_mode=ins">define a new application here.</a> <br/> <br/> After you defined an application, click on the "build this application" link to create all of the directories and the empty database.</p> <br/> <br/> <h2>Your Application Program Files</h2> After building the application skeleton you can start working on the database specification. If your application code is "test", then put the database specification into the file <br/> <br/> <b><?php echo $dirs[0]['dir_pub']; ?> /test/application/test.dd.yaml</b> <br/> <br/> All Andromeda applications start with a database specification. These specifications are more powerful than anything else out there, and you will want learn the Andromeda's <a target="_blank" href= "http://www.andromeda-project.org/databaseprogramming.html" >Database Programming</a> language. <br/> <br/> Once you are ready to try some custom pages, you are ready to look at <a target="_blank" href= "http://www.andromeda-project.org/webprogramming.html" >Web Programming</a>. </div> <?php }
function main() { $app = gp('gp_app'); $sApp = SQLFC(gp('gp_app')); $sInst = SQLFC(gp('gp_inst')); $hApp = hSanitize(gp('gp_app')); $hInst = hSanitize(gp('gp_inst')); $rows = SQL_AllRows("SELECT * from instances \n where application={$sApp} AND instance={$sInst}"); if (count($rows) != 1) { ?> <div class="errorbox">Incorrect call to instance processing.</div> <?php return; } $row = $rows[0]; $hVer = hSanitize(trim($row['version'])); // Maybe we are on processing branch if (gp('gp_posted') == 1) { $this->Process($rows[0]); return; } // KFD 2/4/08, Modify this to look for versions on disk // for an svn-enabled server node $hWarn = ''; $av = ''; if (OptionGet('DEV_STATION', '') == 'N') { $sq = "Select * from applications where application={$sApp}"; $rapp = SQL_OneRow($sq); if (trim($rapp['svn_url']) == '') { $hWarn = '<br/><br/><b>Subversion url needed.</b> ' . 'You can begin by providing a URL to the subversions ' . 'repository for this application on ' . '<a href="?gp_page=applications&gp_skey=' . $rapp['skey'] . '">the editing screen</a>.'; } $versions = svnVersions(); $verx = trim($versions[$app]['local']); $av = "<p>Latest Andromeda Version: " . trim($versions['andro']['local']); } else { // Get the current version, and get the latest version available $verx = SQL_OneValue("mv", "Select max(version) as mv from appversions\n WHERE application={$sApp}"); if (is_null($verx)) { $verx = ''; } } ?> <h1>Instance Upgrade</h1> <p>Application: <?php echo $hApp; ?> </p> <p>Instance: <?php echo $hInst; ?> </p> <p>Current Version: <?php echo $hVer == '' ? '-none-' : $hVer; ?> </p> <p>Latest Version Available: <?php echo $verx == '' ? '-none-' : $verx; ?> </p> <?php echo $av; ?> <p> </p> <p> <?php if ($verx == '') { ?> <b>No official versions are available.</b> An instance can only be upgraded when an official version is available. You may download release code for this application, or you may generate files out of your development code. </p> <?php echo $hWarn; ?> <?php return; } else { $caption = $hVer == '' ? 'Build as ' : 'Upgrade To'; echo hLinkPopup('', $caption . ' version ' . $verx, array('gp_app' => gp('gp_app'), 'gp_inst' => gp('gp_inst'), 'gp_posted' => 1, 'gp_page' => 'instances_p2', 'gp_out' => 'none', 'gp_ver' => $verx)); } }
/** * The user has requested that we download the latest * version of each application from its respective * * */ function mainPull() { # Don't hold up the system Session_write_close(); $rows = svnVersions(); $dir = fsDirTop() . 'pkg-apps/'; x_echoFlush('<pre>'); x_EchoFlush('<h2>Pulling Software Updates From SVN</h2>'); // Loop through the apps. foreach ($rows as $row) { x_EchoFlush(""); x_echoFlush("<b>Application: " . $row['application'] . "</b>"); if ($row['svn_url'] == '') { x_echoFlush(" No SVN repository, skipping."); continue; } # Add a trailing slash to svn_url $row['svn_url'] = AddSlash(trim($row['svn_url'])); # If there is a username and password both, use those $urlDisplay = $row['svn_url']; $url = $row['svn_url']; if ($row['svn_uid'] != '' && $row['svn_pwd'] != '') { list($proto, $urlstub) = explode("//", $url); $uid = $row['svn_uid']; $pwd = $row['svn_pwd']; $url = "{$proto}//{$uid}:{$pwd}@{$urlstub}"; $urlDisplay = "{$proto}//{$uid}:*****@{$urlstub}"; } x_echoFlush(" Complete URL: " . $urlDisplay); # Now pull the list of versions x_echoFlush(" Querying for latest version"); $rawtext = @file_get_contents($url); if ($rawtext) { $matches = array(); preg_match_all('!\\<li\\>\\<a.*\\>(.*)\\</a\\>\\</li\\>!U', $rawtext, $matches); $versions = $matches[1]; foreach ($versions as $key => $version) { if ($version == '..') { unset($versions[$key]); } } if (count($versions) == 0) { x_EchoFlush(" No versions listed, nothing to pull."); continue; } } else { x_EchoFlush("Unable to get a release list from the svn server."); continue; } # Work out what the latest was and report it $latest = array_pop($versions); if (substr($latest, -1) == '/') { $latest = substr($latest, 0, strlen($latest) - 1); } x_echoFlush(" Latest version is: " . $latest); x_EchoFlush(" Local version is: " . $row['local']); # Decide if we need to continue if ($latest == $row['local']) { x_EchoFlush(" Local version is latest, nothing do to."); continue; } # Determine some stub values and pass processing to # the recursive file puller. If no uid & pwd, use subversion x_EchoFlush(" Local version is out of date, pulling latest"); $dirv = $dir . trim($row['application']) . '-VER-' . $latest . '/'; if ($row['svn_uid'] != '' && $row['svn_pwd'] != '') { mkdir($dirv); $this->svnWalk("{$url}/{$latest}/", $dirv); } else { $command = "svn export {$url}{$latest} {$dirv}"; x_echoFlush(" Pulling code now, this make take a minute or three..."); x_EchoFlush($command); `{$command}`; x_echoFlush(" Code pulled, finished with this application."); } x_echoFlush(" Copying files into application directory"); $basedir = str_replace('andro/', '', fsDirTop()); if (isWindows()) { $command = 'xcopy /y /e /c /k /o ' . $dirv . '* ' . $basedir . trim($row['application']) . '/'; } else { $command2 = 'cp -Rf ' . $dirv . '* ' . $basedir . trim($row['application']) . '/'; } echo $command2; `{$command2}`; } x_echoFlush("<hr/>"); x_EchoFlush("<h3>Processing Complete</h3>"); $this->flag_buffer = false; }
function main_pr_execute() { ob_start(); $sApp = SQLFC(gp('gp_app')); $sInst = SQLFC(gp('gp_inst')); $hApp = hSanitize(gp('gp_app')); $hInst = hSanitize(gp('gp_inst')); $rows = SQL_AllRows("SELECT * from instances \n where application={$sApp} AND instance={$sInst}"); if (count($rows) != 1) { ?> <div class="errorbox">Incorrect call to instance processing.</div> <?php return; } $row = $rows[0]; $sVer = SQLFC(gp('gp_ver')); $hVer = hSanitize(gp('gp_ver')); // KFD 2/4/08, If this is a subversion-enabled server, // get version information from there if (OptionGet('DEV_STATION', '') != '') { $aversions = svnVersions(); $mv = '-VER-' . $aversions['andro']['local']; } else { // Get information on latest version of Node Manager and // link to that $mv = SQL_OneValue("mv", "SELECT max(version) as mv \n FROM appversions\n WHERE application='andro'"); } $DIR_LINK_LIB = $GLOBALS['AG']['dirs']['root'] . '/pkg-apps/andro' . $mv; // Source of symlinks for app directories $DIR_LINK_APP = $GLOBALS['AG']['dirs']['root'] . "/pkg-apps/{$hApp}-VER-{$hVer}"; // Get application information for the DO program $tsql = 'SELECT * from applications ' . ' WHERE application = ' . $sApp; $row_a = SQL_OneRow($tsql); $tsql = 'SELECT * from webpaths ' . ' WHERE webpath = ' . SQLFC($row_a['webpath']); $row_n = SQL_OneRow($tsql); $dirws = AddSlash(trim($row_n["dir_pub"])); //if (substr($dirws,-1,1)<>"/") $dirws.="/"; //$row["webserver_dir_pub"] = $dirws; $string = '<?php // To run this program from the command line, you must // be logged in as a user that has superuser priveleges, such // as root or postgres. When running from the web app, // the current user\'s priveleges are used. $GLOBALS["parm"] = array( "DBSERVER_URL"=>"localhost" ,"UID"=>"' . SessionGet('UID') . '" ,"DIR_PUBLIC"=>"' . $dirws . '" ,"DIR_PUBLIC_APP"=>"' . $hApp . '_' . $hInst . '" ,"DIR_LINK_LIB"=>"' . $DIR_LINK_LIB . '" ,"DIR_LINK_APP"=>"' . $DIR_LINK_APP . '" ,"APP"=>"' . $hApp . '_' . $hInst . '" ,"INST"=>"' . $hInst . '" ,"IVER"=>"' . $hVer . '" ,"XDIRS"=>"' . trim($row_a['xdirs']) . '" ,"FLAG_PWMD5"=>"' . ArraySafe($row_a, 'flag_pwmd5', 'N') . '" ,"ROLE_LOGIN"=>"' . ArraySafe($row_a, 'flag_rolelogin', 'Y') . '" ,"TEMPLATE"=>"' . $row['template'] . '" ,"APPDSC"=>"' . trim($row_a["description"]) . '" ,"SPEC_BOOT"=>"' . trim($row_a["appspec_boot"]) . '" ,"SPEC_LIB"=>"' . trim($row_a["appspec_lib"]) . '" ,"SPEC_LIST"=>"' . trim($row_a["appspec"]) . '" ); include("androBuild.php"); ?> '; $t = pathinfo(__FILE__); $dircur = AddSlash($t["dirname"]) . "../tmp/"; //$dircur = $t["dirname"]; if (substr($dircur, -1) != "/") { $dircur .= "/"; } $file = $dircur . "do-{$hApp}-{$hInst}.php"; $FILE = fopen($file, "w"); fwrite($FILE, $string); fclose($FILE); include $file; if (ArraySafe($GLOBALS, 'retval', 0) == 1) { SQL("update instances set version={$sVer}\n WHERE application = {$sApp}\n AND instance = {$sInst}"); } echo ob_get_clean(); }