Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.adminSite.callbacks.pathEvaluation
on pathEvaluation () { <<Changes <<6/23/10; 3:47:58 PM by DW <<I got caught up in here again, this time I just wired the whole thing off if it's the OPML Editor. <<5/20/10; 9:24:56 AM by DW <<I don't understand why this code works this way, but it's making it impossible for me to get to the opmlEditor configuration site when I use port 5337. So -- if system.environment.isOpmlEditor is true, we return true instead of throwing a 404 error. You can still get to the controlpanel and mainresponder resources, but it doesn't stop you from going other places. <<6/12/02; 4:33:05 PM by JES <<Allow loads of controlPanel and mainResponderResources URLs to pass through unmodified. <<6/6/02; 12:26:36 PM by JES <<Created. If the port is the one specified by user.inetd.config.http2, set the address of the object to serve, to the address of the specified object in the admin site table. if system.environment.isOpmlEditor { //6/23/10 by DW return (true)}; local (pta, port); if defined (host) { //This strange construction allows for easier debugging. See notes below. <<When called from mainResponder.respond, host will be defined, and its parent is the page table. pta = parentOf (host); port = pta^.port} <<bundle //debugging code. NOTE: comment this out when done debugging. <<workspace.pt = pta^ else { //for debugging <<Since host was not defined, we assume that we've got a saved page table from a previous browser hit, and get the port and pageTableAddress from there. port = workspace.pt.port; pta = @workspace.pt}; on gatherAttributes () { local (adratt); pta^.responderAttributes.allowScriptsToRun = true; for adratt in @mainResponder.adminSite.website.["#prefs"] { pta^.[nameOf (adratt^)] = adratt^}}; on adminSiteDive (pathstring) { local (flSetPageTableAddress = false); local (nomad = @mainResponder.adminSite.website); if pathstring == "" { //the admin site home page pta^.adrObjectToServe = @nomad^.default; return (true)}; while sizeOf (pathstring) > 0 { if flSetPageTableAddress { html.setPageTableAddress (pta)} else { flSetPageTableAddress = true}; local (s = string.nthField (pathstring, "/", 1)); pathstring = string.delete (pathstring, 1, sizeOf (s) + 1); nomad = @nomad^.[s]; if not defined (nomad^) { return (false)}}; pta^.title = nameOf (nomad^); //default title pta^.adrObjectToServe = nomad; <<gatherAttributes () return (true)}; on toolsDive (pathstring) { local (pathpart = string.nthfield (pathstring, "/", 1)); pathstring = string.delete (pathstring, 1, sizeOf (pathpart) + 1); local (nomad = @user.tools.databases); if defined (nomad^.[pathpart]) { nomad = @nomad^.[pathpart]} else { return (false)}; if nomad^.flInstalled { if nomad^.flEnabled { local (toolname = Frontier.tools.cleanToolName (file.fileFromPath (nomad^.path)) ); nomad = @[nomad^.path]; //the Tool's database nomad = @nomad^.[toolname + "Website"]; if defined (nomad^) { if not defined (system.temp.mainResponder.misc) { new (tableType, @system.temp.mainResponder.misc)}; local (adrtempsite = @system.temp.mainResponder.misc.adminSite); if not defined (adrtempsite^) { adrtempsite^ = mainResponder.adminSite.website}; if pathstring == "" { //default or index page if defined (nomad^.default) { table.assign (@adrtempsite^.default, nomad^.default); pta^.title = "default"; pta^.adrObjectToServe = @adrtempsite^.default; return (true)}; if defined (nomad^.index) { table.assign (@adrtempsite^.index, nomad^.index); pta^.title = "index"; pta^.adrObjectToServe = @adrtempsite^.index; return (true)}}; while sizeOf (pathstring) > 0 { local (s = string.nthField (pathstring, "/", 1)); pathstring = string.delete (pathstring, 1, sizeOf (s) + 1); nomad = @nomad^.[s]; if not defined (nomad^) { return (false)}; if typeOf (nomad^) == tableType { adrtempsite = @adrtempsite^.[s]; new (tableType, adrtempsite); continue}; //recurse adrtempsite^.[s] = nomad^; pta^.title = s; pta^.adrObjectToServe = @adrtempsite^.[s]; <<gatherAttributes () return (true)}}}}; return (false)}; if port == user.inetd.config.http2.port { local (pathstring = string.popLeading (pta^.uri, "/")); if string.lower (pathstring) beginsWith "controlpanel" { return (true)}; if string.lower (pathstring) beginsWith "mainresponderresources" { return (true)}; if adminSiteDive (pathstring) { return (true)}; if toolsDive (pathstring) { return (true)}; bundle { //didn't find the page in the admin site or in a Tool if system.environment.isOpmlEditor { //5/20/10 by DW return (true)}; pta^.code = 404; pta^.responseBody = mainResponder.adminSite.html.errorPage ("404 Not Found", "The requested URL http://" + pta^.host + pta^.uri + " was not found on this server."); try {delete (@pta^.responseHeaders.["Content-Type"])}; scriptError ("!404 notFound")}}; return (true)}; bundle { //test code pathEvaluation ()}
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.