Property definitions

nitc $ NitwebPhase :: defaultinit
# Phase that builds the model and wait for http request to serve pages.
private class NitwebPhase
	super Phase

	# Build the nitweb config from `toolcontext` options.
	fun build_config(toolcontext: ToolContext, mainmodule: MModule): NitwebConfig do

		var model = toolcontext.modelbuilder.model

		var filter = new ModelFilter(
			if toolcontext.opt_no_private.value then protected_visibility else private_visibility,
			accept_fictive = not toolcontext.opt_no_fictive.value,
			accept_empty_doc = not toolcontext.opt_no_empty_doc.value,
			accept_test = not toolcontext.opt_no_test.value,
			accept_attribute = not toolcontext.opt_no_attribute.value
		)

		var catalog = build_catalog(toolcontext.modelbuilder, filter)

		var config = new NitwebConfig(model, mainmodule, toolcontext.modelbuilder, filter, catalog)
		var config_file = toolcontext.opt_config.value
		if config_file == null then config.default_config_file = "nitweb.ini"
		config.parse_options(args)
		var opt_host = toolcontext.opt_host.value
		if opt_host != null then config.ini["app.host"] = opt_host
		var opt_port = toolcontext.opt_port.value
		if opt_port >= 0 then config.ini["app.port"] = opt_port.to_s
		return config
	end

	redef fun process_mainmodule(mainmodule, mmodules)
	do
		var config = build_config(toolcontext, mainmodule)
		config.model.index # pre load model index
		config.model.nitdoc_md_processor = config.md_processor

		var app = new App

		app.use_before("/*", new SessionInit)
		app.use_before("/*", new RequestClock)
		app.use("/api", new APIRouter(config))
		app.use("/login", new GithubLogin(config.github_client_id))
		app.use("/oauth", new GithubOAuthCallBack(config.github_client_id, config.github_client_secret))
		app.use("/logout", new GithubLogout)
		app.use("/*", new StaticHandler(toolcontext.share_dir / "nitweb", "index.html"))
		app.use_after("/*", new PopLogger(info_level))

		app.listen(config.app_host, config.app_port)
	end

	# Build the catalog
	#
	# This method should be called at nitweb startup.
	fun build_catalog(modelbuilder: ModelBuilder, filter: nullable ModelFilter): Catalog do
		var catalog = new Catalog(modelbuilder)
		var mpackages = modelbuilder.model.collect_mpackages(filter)
		# Compute the poset
		for p in mpackages do
			var g = p.root
			assert g != null
			modelbuilder.scan_group(g)
		end
		# Build the catalog
		for mpackage in mpackages do
			catalog.package_page(mpackage)
			catalog.git_info(mpackage)
			catalog.mpackage_stats(mpackage)
		end
		return catalog
	end

end
src/nitweb.nit:57,1--128,3