Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.userland.completeSetup
on completeSetup (serverDomainName="127.0.0.1", defaultSitePassword="", adminPassword="", flSavePortForwardingPassword=true, flEnablePortForwarding=true) { <<Changes <<5/19/04; 4:16:11 PM by JES <<The Create-a-Site Manila site must *not* be a news item site. <<5/18/04; 11:17:51 PM by JES <<New optional parameter, flEnablePortForwarding. If false, don't install port forwarding startup callback, don't set password, and don't start forwarding. <<4/2/04; 2:51:52 PM by JES <<Ensure that folders for static rendering, gems, static images and downloaded sites all exist. <<Force recompile of the default domain's site tree after creating all the sub-sites. <<3/12/04; 4:43:38 PM by JES <<Fixed configuration of site tree and manila prefs for static rendering, gems, static images and downloaded sites. <<3/12/04; 4:31:37 PM by JES <<Modified port forwarding startup callback, so that it works properly regardless of whether the sysadmin has saved their MacOS X admin password. <<9/5/02; 11:57:47 PM by JES <<Set config.manila.backups.notifyList after completing the setup. Initialize static file prefs -- static rendering, static pictures, gems and site downloads. <<4/11/02; 5:14:28 PM by JES <<Created. After personalizing Frontier 8.0.7 via the Setup Frontier Control Panel page, this script is called. Code cribbed from userland.finishInstall. <<Here, we do the following: <<1) Add prefs.root to user.databases, and open it. <<2) Set up root-updates prefs for Manila. <<3) Set up the default Manila site (the Create-a-Site Manila site). <<4) Add the Server menu to user.menus, if it's not already there. <<5) If running on MacOS X, set up port-forwarding. local (pc = file.getPathChar ()); bundle { //add prefs.root to user.databases and open it hidden local (adrTable = @user.databases.["prefs.root"]); local (f = Frontier.getSubFolder ("www") + "prefs.root"); if not defined (adrTable^) { new (tableType, adrTable); 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); if date (user.rootUpdates.servers.mainResponder.lastUpdate) < date (lastUpdateTime) { user.rootUpdates.servers.mainResponder.lastUpdate = lastUpdateTime}; if date (user.rootUpdates.servers.manila.lastUpdate) < date (lastUpdateTime) { user.rootUpdates.servers.manila.lastUpdate = lastUpdateTime}; if date (user.rootUpdates.servers.Frontier.lastUpdate) < date (lastUpdateTime) { user.rootUpdates.servers.Frontier.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 = ""}; bundle { //set up port forwarding if running in MacOS X if system.environment.isCarbon { if not defined (user.inetd.config.http.apparentPort) { user.inetd.config.http.apparentPort = 80}; local (actualPort = user.inetd.config.http.port); local (apparentPort = user.inetd.config.http.apparentPort); if (actualPort < 1024) or (actualPort != apparentPort) { //set up port forwarding if defined (user.prefs.portForwardingAdminPassword) and (adminPassword == "") { adminPassword = string (user.prefs.portForwardingAdminPassword)}; if flEnablePortForwarding { userland.portForward (adminPassword:adminPassword, flSaveAdminPassword:flSavePortForwardingPassword); if defined (user.callbacks.startup.enablePortForwarding) { //possibly delete the old version of the port forwarding callback if string.trimWhiteSpace (string (user.callbacks.startup.enablePortForwarding)) == "userland.portForward (adminPassword:string (user.prefs.portForwardingAdminPassword))" { delete (@user.callbacks.startup.enablePortForwarding)}}; if not defined (user.callbacks.startup.enablePortForwarding) { //install port forwarding callback local (s = "if defined (user.prefs.portForwardingAdminPassword)\r\tuserland.portForward (adminPassword:string (user.prefs.portForwardingAdminPassword))\relse\r\tuserland.portForward ()"); script.newScriptObject (s, @user.callbacks.startup.enablePortForwarding)}}}}}; bundle { //Create the default Manila website if it doesn't already exist. on createSite (canonicalSiteName, displaySiteName, tagline, theme, path="/", flHostingSite=false) { local (serverName = string.lower (serverDomainName)); //Some MacOS X installs can't do DNS lookups with uppercase chars local (port = user.inetd.config.http.port); if system.environment.isCarbon { if defined (user.inetd.config.http.apparentPort) { port = user.inetd.config.http.apparentPort}}; if port != 80 { serverName = serverName + ":" + port}; if flHostingSite { config.manila.prefs.baseUrl = "http://" + serverName + "/"}; if defaultSitePassword == "" { //try to get the password from the Admin user's membership table local (adrMember = mainResponder.members.getMemberTable ("Admin", user.prefs.mailAddress)); if defined (adrMember^) { defaultSitePassword = adrMember^.password}}; if defaultSitePassword == "" { //couldn't get password from the admin membership group -- that's a fatal error scriptError ("Could not create the default Manila site because no password was specified.")}; local (flDefaultSiteIsInstalled = false, adrsite); try { adrsite = manilaSuite.rpcUtils.getSiteAddress (canonicalSiteName); flDefaultSiteIsInstalled = true}; if flDefaultSiteIsInstalled { //set its URL to the one the server is set to local (oldUrl = manilaSuite.getSiteUrl (adrsite)); local (newUrl = config.manila.prefs.baseUrl); //it's a top-level site if string.lower (oldUrl) != string.lower (newUrl) { manilaSuite.admin.changeSiteUrl (oldUrl, newUrl, adrsite)}} else { //create the default site if not defined ([canonicalSiteName]) { //only create the default site if it doesn't already exist -- it may have been purposely uninstalled userland.createDefaultSite (canonicalSiteName, defaultSitePassword, serverName, displaySiteName, tagline, theme, path, flHostingSite)}}}; <<createSite ("myManilaServerManilaWebsite", "My Manila Server", "View stats, and find and create sites, with a click of the mouse.", "myManilaServer") createSite ("homeManilaWebsite", "Home", "", "firstSite"); createSite ("createASiteManilaWebsite", "Create a Manila Site", "Create a new Manila site whenever you want.", "ISP2", "/newSite/", true); createASiteManilaWebsite.["#newsSite"].flNewsItemSite = false}; bundle { //install the RCS sites mainResponder.siteTree.addSiteToTree ("default", "/rcsPublic/", @radioCommunityServerSuite.websites.public, true, true); mainResponder.siteTree.addSiteToTree ("default", "/rcsAdmin/", @radioCommunityServerSuite.websites.admin, true, true); delete (@config.mainResponder.domains.default.siteTree.directory.structure); mainResponder.siteTree.compileIfDirty (@config.mainResponder.domains.default)}; userland.addServerMenu (); //Add the Server menu to user.menus, if it's not already there. bundle { //miscellaneous cleanup if config.manila.backups.notifyList == "" { //default email address for backup notifications config.manila.backups.notifyList = user.prefs.mailAddress}; local (baseurl); bundle { //build baseurl local (serverName = string.lower (serverDomainName)); local (port = user.inetd.config.http.port); if system.environment.isCarbon { if defined (user.inetd.config.http.apparentPort) { port = user.inetd.config.http.apparentPort}}; if port != 80 { serverName = serverName + ":" + port}; baseurl = "http://" + serverName + "/"}; local (wwwfolder = Frontier.getSubFolder ("www")); on sureFolder (adrpref, foldername) { adrpref^ = wwwfolder + foldername + pc; file.sureFilePath (adrpref^ + "x"); return (true)}; if config.manila.prefs.staticRenderingFolder == "" { sureFolder (@config.manila.prefs.staticRenderingFolder, "manila"); config.manila.prefs.staticRenderingUrl = baseurl + "manila/"; mainResponder.siteTree.addSiteToTree ("default", "/manila/", config.manila.prefs.staticRenderingFolder, true, true)}; if config.manila.prefs.staticFilesFolder == "" { sureFolder (@config.manila.prefs.staticFilesFolder, "manila" + pc + "staticFiles"); config.manila.prefs.staticFilesUrl = baseurl + "manila/static/"; mainResponder.siteTree.addSiteToTree ("default", "/manila/static/", config.manila.prefs.staticFilesFolder, true, true)}; if config.manila.prefs.gemsFolder == "" { sureFolder (@config.manila.prefs.gemsFolder, "manila" + pc + "gems"); config.manila.prefs.gemsUrl = baseurl + "manila/gems/"; mainResponder.siteTree.addSiteToTree ("default", "/manila/gems/", config.manila.prefs.gemsFolder, true, true)}; if config.manila.prefs.siteDownloadFolder == "" { sureFolder (@config.manila.prefs.siteDownloadFolder, "manila" + pc + "downloadedSites"); config.manila.prefs.siteDownloadUrl = baseurl + "manila/downloadedSites/"; config.manila.prefs.flFrontierServesDownloadedSites = true; mainResponder.siteTree.addSiteToTree ("default", "/manila/downloadedSites/", config.manila.prefs.siteDownloadFolder, true, true)}; bundle { //ensure that all folders exist file.sureFilePath (config.manila.prefs.staticRenderingFolder + "X"); file.sureFilePath (config.manila.prefs.staticFilesFolder + "X"); file.sureFilePath (config.manila.prefs.gemsFolder + "X"); file.sureFilePath (config.manila.prefs.siteDownloadFolder + "X")}; bundle { //force re-compile of site tree try {delete (@config.mainResponder.domains.default.siteTree.directory.structure)}}}; bundle { //save all open databases local (rootPath = window.getFile (@root)); on visitproc (f) { if f != rootPath { fileMenu.save (f)} else { fileMenu.saveMyRoot (@root)}; return (true)}; table.visitOpenDatabases (@visitproc)}; return (true)}; <<bundle //testing <<bundle //delete initial sites <<try {delete (@config.manila.sites.home)} <<try {delete (@config.manila.sites.createASite)} <<try {delete (@homeManilaWebsite)} <<try {delete (@homeManilaWebsiteMembers)} <<try {delete (@homeManilaWebsiteDiscuss)} <<try {delete (@createASiteManilaWebsite)} <<try {delete (@createASiteManilaWebsiteMembers)} <<try {delete (@createASiteManilaWebsiteDiscuss)} <<completeSetup ()
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.