Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.userland.finishInstall
<<Changes <<8/18/02; 5:26:14 PM by JES <<Open the setupFrontier page in the mainResponder admin site, instead of the older one in the control panel. We use port 5335 for this. <<4/11/02; 3:02:14 PM by JES <<Rewrite: This script now installs mainResponder and manila, and opens the Setup Frontier Control Panel page. Called by startup.startupScript. <<bundle //original code <<10/20/99; 12:29:43 PM by DW <<This is a test version of the script that will run the first time the user runs Frontier, after entering a correct serial number. <<After confirmation we connect with a UserLand.Com server that walks the user thru a wizard-like configuration process. We poll the server every five seconds to see if the user has clicked on the Finish>> button. When this happens our XML-RPC call will not error. <<We then copy the information from the table it returns into the appropriate locations in the local database and take any actions implicit in the configuration. <<Changes: <<10/26/99; 2:56:52 PM by PBS <<Moved the main code out of the loop. Since it was in a try, it could lead to an infinite loop. <<If the user has chosen to turn on the webserver: <<Set up mainResponder.root and manila.root. <<Build a default Manila site. <<Add the Server menu to the menu bar. <<If the webserver is already running, but on another port, stop it and restart it on the specified port. << <<local (server = "installfrontier.userland.com", port = 80, procedure = "installFrontier.getInstallationData") <<if dialog.confirm ("Connect to UserLand.Com to finish installation?") <<try <<local (uniqueNumber = clock.ticks ()) <<local (keyString = user.prefs.serialNumber + "!" + uniqueNumber) <<local (configuration) << <<if system.environment.isCarbon <<webBrowser.openUrl ("http://" + server + "/07/00/osx$" + keyString) <<else <<webBrowser.openUrl ("http://" + server + "/07/00/default$" + keyString) << <<webBrowser.bringToFront () << <<loop //loop until the configuration data is returned via XML-RPC <<thread.sleepFor (5) <<try <<local (params = {user.prefs.serialNumber, uniqueNumber}) <<msg ("Polling..." + clock.now ()) <<configuration = betty.rpc.client (server, port, procedure, @params) <<msg ("") <<break << <<Set up basic Frontier prefs. <<user.prefs.mailHost = configuration.mailHost <<user.prefs.initials = configuration.userInitials <<user.prefs.mailAddress = configuration.userMailAddress <<user.prefs.name = configuration.userName <<user.prefs.organization = configuration.userOrganization << <<bundle //webserver configuration <<local (adrTable = @user.inetd.config.http) <<local (flServerOnNow = inetd.isDaemonRunning (adrtable)) << <<if configuration.webServerOn //set up the webserver << <<if flServerOnNow and adrTable^.port != configuration.webServerPort <<If the server's on, but on another port, stop it, so it will be restarted on the specified port. <<inetd.stopOne (adrTable) <<flServerOnNow = false <<if not flServerOnNow <<adrTable^.startup = true <<inetd.startOne (adrTable) << <<userland.installApp ("mainResponder.root") <<userland.installApp ("manila.root") << <<bundle //CP prefs <<local (adrRoot = @[system.temp.mainResponder.membersRootFile]) <<local (adrGroup = @adrRoot^.admin) <<bundle //create the Admin membership group if needed <<if not defined (adrGroup^) <<new (tableType, adrGroup) <<if not defined (adrGroup^.callbacks) <<new (tableType, @adrGroup^.callbacks) <<if not defined (adrGroup^.cookieDomain) <<adrGroup^.cookieDomain = "" <<if not defined (adrGroup^.cookieExpires) <<adrGroup^.cookieExpires = "Mon, 01 Apr 2030 07:00:00 GMT" <<if not defined (adrGroup^.cookieName) <<adrGroup^.cookieName = "Admin" <<if not defined (adrGroup^.mailReturnAddress) <<adrGroup^.mailReturnAddress = user.prefs.mailAddress <<if not defined (adrGroup^.mailSubject) <<adrGroup^.mailSubject = "Admin" <<if not defined (adrGroup^.mailTemplate) <<wp.newTextObject ("", @adrGroup^.mailTemplate) <<if not defined (adrGroup^.openToPublic) <<adrGroup^.openToPublic = false <<if not defined (adrGroup^.users) <<new (tableType, @adrGroup^.users) << <<local (adrMember = @adrGroup^.users.[user.prefs.mailAddress]) <<if not defined (adrMember^) <<new (tableType, adrMember) <<adrMember^.password = configuration.userPassword <<if not defined (adrMember^.personalInfo) <<new (tableType, @adrMember^.personalInfo) <<if not defined (adrMember^.personalInfo.name) <<adrMember^.personalInfo.name = user.prefs.name << <<bundle //add prefs.root to user.databases and open it hidden <<local (adrTable = @user.databases.["prefs.root"]) <<new (tableType, adrTable) <<local (f = Frontier.getSubFolder ("www") + "prefs.root") <<adrTable^.f = f <<adrTable^.openOnStartup = true <<adrTable^.runStartupScript = false <<adrTable^.supportsSubscribe = false <<if not defined ([f]) //open prefs.root if necessary <<fileMenu.open (f, true) << <<bundle //set up root updates prefs <<local (lastUpdateTime = date.netStandardString (Frontier.shipDate)) <<local (lastUpdateTime = userland.initialLastUpdateTime) <<user.rootUpdates.servers.mainResponder.lastUpdate = lastUpdateTime <<user.rootUpdates.servers.manila.lastUpdate = lastUpdateTime <<user.rootUpdates.servers.prefs = user.rootUpdates.servers.manila <<user.rootUpdates.servers.prefs.dbName = "prefs.root" <<user.rootUpdates.servers.prefs.url = "" <<user.rootUpdates.servers.manila.url = "" << <<Create the default Manila website if it doesn't already exist. <<local (serverName = configuration.webServerName) <<if configuration.webServerPort != 80 <<serverName = serverName + ":" + configuration.webServerPort <<config.manila.prefs.baseUrl = "http://" + serverName + "/" <<userland.createDefaultManilaSite (configuration.webSiteName, serverName:serverName) <<userland.createDefaultIspSite (serverName:serverName, password:configuration.userPassword) << <<Add the Server menu to user.menus, if it's not already there. <<userland.addServerMenu () << <<bundle //PBS 05/11/01: port forwarding <<if system.environment.isCarbon <<local (port = number (configuration.webServerPort)) <<if port < 1024 //uh-oh, UNIX <<try <<Frontier.bringToFront () <<if dialog.yesNo ("Set up port forwarding?") <<local (realPort = 8080) <<if defined (configuration.webServerRealPort) <<realPort = number (string.trimWhiteSpace (configuration.webServerRealPort)) <<configuration.webServerPort = realPort <<adrTable^.apparentPort = port <<adrTable^.port = realPort <<userland.portForward () <<else <<if flServerOnNow <<inetd.stopOne (adrTable) <<adrTable^.startup = false << <<adrTable^.port = configuration.webServerPort << <<fileMenu.save () //all changes are in Frontier.root, for now << <<return (true) <<else <<wp.newTextObject (tryError, @temp.installError) <<edit (@temp.installError) <<window.update ("Update Frontier") <<return (false) <<bundle //make sure we have a web browser for Windows <<if system.environment.isWindows <<user.webBrowser.winDefaultBrowserApp = file.findApplication ("htm") << <<bundle //start the webserver on port 80, unless running on MacOS X -- there we're on 8080 <<local (port = 80) <<if system.environment.isCarbon //port 8080 -- will be forwarded by userland.completeSetup <<port = 8080 <<local (adrtable = @user.inetd.config.http) <<adrtable^.startup = true <<if inetd.isDaemonRunning (adrtable) <<if port != adrtable^.port <<inetd.stopOne (adrtable) <<adrtable^.port = port <<if not inetd.isDaemonRunning (adrtable) <<inetd.startOne (adrtable) <<if system.environment.isCarbon //set apparentPort, used by userland.completeSetup to set up port forwarding <<adrtable^.apparentPort = 80 userland.trialVersionCheck (); bundle { //install mainResponder and manila local (appFolder = Frontier.getSubFolder ("apps")); if not defined ( [appFolder + "mainResponder.root"] ) { userland.installApp ("mainResponder.root")}; if not defined ( [appFolder + "manila.root"] ) { userland.installApp ("manila.root")}}; bundle { //open prefs.root local (wwwFolder = Frontier.getSubFolder ("www")); if not defined ( [wwwFolder + "prefs.root"] ) { fileMenu.open (wwwFolder + "prefs.root", true)}}; //open hidden bundle { //create the Admin membership group if needed local (adrRoot = @[system.temp.mainResponder.membersRootFile]); local (adrGroup = @adrRoot^.admin); if not defined (adrGroup^) { new (tableType, adrGroup)}; if not defined (adrGroup^.callbacks) { new (tableType, @adrGroup^.callbacks)}; if not defined (adrGroup^.cookieDomain) { adrGroup^.cookieDomain = ""}; if not defined (adrGroup^.cookieExpires) { adrGroup^.cookieExpires = "Mon, 01 Apr 2030 07:00:00 GMT"}; if not defined (adrGroup^.cookieName) { adrGroup^.cookieName = "Admin"}; if not defined (adrGroup^.mailReturnAddress) { adrGroup^.mailReturnAddress = user.prefs.mailAddress}; if not defined (adrGroup^.mailSubject) { adrGroup^.mailSubject = "Admin"}; if not defined (adrGroup^.mailTemplate) { wp.newTextObject ("", @adrGroup^.mailTemplate)}; if not defined (adrGroup^.openToPublic) { adrGroup^.openToPublic = false}; if not defined (adrGroup^.users) { new (tableType, @adrGroup^.users)}}; local (portString = ""); if user.inetd.config.http2.port != 80 { portString = ":" + user.inetd.config.http2.port}; if not defined (system.temp.Frontier.setupFrontier) { new (tableType, @system.temp.Frontier.setupFrontier)}; system.temp.Frontier.setupFrontier.flAllowLocalAccessToSetupPage = true; local (setupUrl = "http://127.0.0.1" + portString + "/setupFrontier"); if not defined (system.temp.installer) { new (tableType, @system.temp.installer)}; system.temp.installer.urlToOpen = setupUrl; <<webBrowser.openUrl (setupUrl) <<webBrowser.bringToFront () <<fileMenu.save () //all changes are in Frontier.root, for now return (true)
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.