util/startup.lua
author Matthew Wild <mwild1@gmail.com>
Sun, 19 Jan 2020 15:39:13 +0000
branch0.11
changeset 10604 08f2fe5ac30f
parent 10601 25a3c8134b0a
child 10605 d8b51833926b
child 10606 f23add0df461
permissions -rw-r--r--
util.startup: Fix logic to make --config work again
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8641
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8640
diff changeset
     1
-- Ignore the CFG_* variables
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8640
diff changeset
     2
-- luacheck: ignore 113/CFG_CONFIGDIR 113/CFG_SOURCEDIR 113/CFG_DATADIR 113/CFG_PLUGINDIR
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
local startup = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     4
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
local prosody = { events = require "util.events".new() };
8723
dba17a70fd22 util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents: 8722
diff changeset
     6
local logger = require "util.logger";
dba17a70fd22 util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents: 8722
diff changeset
     7
local log = logger.init("startup");
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
local config = require "core.configmanager";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
local dependencies = require "util.dependencies";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
8669
57780ba1938f util.startup: Move original_logging_config to a local variable
Matthew Wild <mwild1@gmail.com>
parents: 8668
diff changeset
    13
local original_logging_config;
57780ba1938f util.startup: Move original_logging_config to a local variable
Matthew Wild <mwild1@gmail.com>
parents: 8668
diff changeset
    14
10600
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    15
local short_params = { D = "daemonize", F = "no-daemonize" };
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    16
local value_params = { config = true };
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    17
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    18
function startup.parse_args()
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    19
	local parsed_opts = {};
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    20
10604
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    21
	if #arg == 0 then
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    22
		return;
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    23
	end
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    24
	while true do
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    25
		local raw_param = arg[1];
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    26
		if not raw_param then
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    27
			break;
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    28
		end
10600
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    29
10604
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    30
		local prefix = raw_param:match("^%-%-?");
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    31
		if not prefix then
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    32
			break;
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    33
		elseif prefix == "--" and raw_param == "--" then
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    34
			table.remove(arg, 1);
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    35
			break;
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    36
		end
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    37
		local param = table.remove(arg, 1):sub(#prefix+1);
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    38
		if #param == 1 then
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    39
			param = short_params[param];
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    40
		end
10600
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    41
10604
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    42
		if not param then
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    43
			print("Unknown command-line option: "..tostring(param));
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    44
			print("Perhaps you meant to use prosodyctl instead?");
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    45
			os.exit(1);
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    46
		end
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    47
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    48
		local param_k, param_v;
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    49
		if value_params[param] then
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    50
			param_k, param_v = param, table.remove(arg, 1);
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    51
			if not param_v then
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    52
				print("Expected a value to follow command-line option: "..raw_param);
10600
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    53
				os.exit(1);
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    54
			end
10604
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    55
		else
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    56
			param_k, param_v = param:match("^([^=]+)=(.+)$");
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    57
			if not param_k then
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    58
				if param:match("^no%-") then
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    59
					param_k, param_v = param:sub(4), false;
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    60
				else
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    61
					param_k, param_v = param, true;
10600
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    62
				end
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    63
			end
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    64
		end
10604
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    65
		parsed_opts[param_k] = param_v;
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    66
		print("ARG", param_k, param_v);
10600
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    67
	end
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    68
	prosody.opts = parsed_opts;
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    69
end
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    70
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    71
function startup.read_config()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    72
	local filenames = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    73
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    74
	local filename;
10601
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10600
diff changeset
    75
	if prosody.opts.config then
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10600
diff changeset
    76
		table.insert(filenames, prosody.opts.config);
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    77
		if CFG_CONFIGDIR then
10601
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10600
diff changeset
    78
			table.insert(filenames, CFG_CONFIGDIR.."/"..prosody.opts.config);
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    79
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    80
	elseif os.getenv("PROSODY_CONFIG") then -- Passed by prosodyctl
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    81
			table.insert(filenames, os.getenv("PROSODY_CONFIG"));
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    82
	else
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    83
		table.insert(filenames, (CFG_CONFIGDIR or ".").."/prosody.cfg.lua");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    84
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    85
	for _,_filename in ipairs(filenames) do
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    86
		filename = _filename;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    87
		local file = io.open(filename);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    88
		if file then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    89
			file:close();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    90
			prosody.config_file = filename;
10393
dbb8dae58265 util.startup: Update config path (fixes #1430)
Kim Alvefur <zash@zash.se>
parents: 9766
diff changeset
    91
			prosody.paths.config = filename:match("^(.*)[\\/][^\\/]*$");
dbb8dae58265 util.startup: Update config path (fixes #1430)
Kim Alvefur <zash@zash.se>
parents: 9766
diff changeset
    92
			CFG_CONFIGDIR = prosody.paths.config; -- luacheck: ignore 111
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    93
			break;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    94
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    95
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    96
	prosody.config_file = filename
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    97
	local ok, level, err = config.load(filename);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    98
	if not ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    99
		print("\n");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   100
		print("**************************");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   101
		if level == "parser" then
8731
41c959c5c84b Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents: 8724
diff changeset
   102
			print("A problem occurred while reading the config file "..filename);
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   103
			print("");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   104
			local err_line, err_message = tostring(err):match("%[string .-%]:(%d*): (.*)");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   105
			if err:match("chunk has too many syntax levels$") then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   106
				print("An Include statement in a config file is including an already-included");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   107
				print("file and causing an infinite loop. An Include statement in a config file is...");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   108
			else
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   109
				print("Error"..(err_line and (" on line "..err_line) or "")..": "..(err_message or tostring(err)));
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   110
			end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   111
			print("");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   112
		elseif level == "file" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   113
			print("Prosody was unable to find the configuration file.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   114
			print("We looked for: "..filename);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   115
			print("A sample config file is included in the Prosody download called prosody.cfg.lua.dist");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   116
			print("Copy or rename it to prosody.cfg.lua and edit as necessary.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   117
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   118
		print("More help on configuring Prosody can be found at https://prosody.im/doc/configure");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   119
		print("Good luck!");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   120
		print("**************************");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   121
		print("");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   122
		os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   123
	end
9217
8b2b8f1a911f util.startup: Set flag when config fully loaded
Matthew Wild <mwild1@gmail.com>
parents: 8961
diff changeset
   124
	prosody.config_loaded = true;
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   125
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   126
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   127
function startup.check_dependencies()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   128
	if not dependencies.check_dependencies() then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   129
		os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   130
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   131
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   132
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   133
-- luacheck: globals socket server
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   134
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   135
function startup.load_libraries()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   136
	-- Load socket framework
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   137
	-- luacheck: ignore 111/server 111/socket
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   138
	socket = require "socket";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   139
	server = require "net.server"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   140
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   141
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   142
function startup.init_logging()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   143
	-- Initialize logging
8724
b773b15fee71 util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents: 8723
diff changeset
   144
	local loggingmanager = require "core.loggingmanager"
b773b15fee71 util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents: 8723
diff changeset
   145
	loggingmanager.reload_logging();
9766
34988a408b74 util.startup: Always reload logging after config (fixes #1284)
Kim Alvefur <zash@zash.se>
parents: 9217
diff changeset
   146
	prosody.events.add_handler("config-reloaded", function ()
34988a408b74 util.startup: Always reload logging after config (fixes #1284)
Kim Alvefur <zash@zash.se>
parents: 9217
diff changeset
   147
		prosody.events.fire_event("reopen-log-files");
34988a408b74 util.startup: Always reload logging after config (fixes #1284)
Kim Alvefur <zash@zash.se>
parents: 9217
diff changeset
   148
	end);
8724
b773b15fee71 util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents: 8723
diff changeset
   149
	prosody.events.add_handler("reopen-log-files", function ()
b773b15fee71 util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents: 8723
diff changeset
   150
		loggingmanager.reload_logging();
b773b15fee71 util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents: 8723
diff changeset
   151
		prosody.events.fire_event("logging-reloaded");
b773b15fee71 util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents: 8723
diff changeset
   152
	end);
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   153
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   154
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   155
function startup.log_dependency_warnings()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   156
	dependencies.log_warnings();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   157
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   158
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   159
function startup.sanity_check()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   160
	for host, host_config in pairs(config.getconfig()) do
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   161
		if host ~= "*"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   162
		and host_config.enabled ~= false
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   163
		and not host_config.component_module then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   164
			return;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   165
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   166
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   167
	log("error", "No enabled VirtualHost entries found in the config file.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   168
	log("error", "At least one active host is required for Prosody to function. Exiting...");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   169
	os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   170
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   171
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   172
function startup.sandbox_require()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   173
	-- Replace require() with one that doesn't pollute _G, required
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   174
	-- for neat sandboxing of modules
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   175
	-- luacheck: ignore 113/getfenv 111/require
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   176
	local _realG = _G;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   177
	local _real_require = require;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   178
	local getfenv = getfenv or function (f)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   179
		-- FIXME: This is a hack to replace getfenv() in Lua 5.2
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   180
		local name, env = debug.getupvalue(debug.getinfo(f or 1).func, 1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   181
		if name == "_ENV" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   182
			return env;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   183
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   184
	end
8641
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8640
diff changeset
   185
	function require(...) -- luacheck: ignore 121
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   186
		local curr_env = getfenv(2);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   187
		local curr_env_mt = getmetatable(curr_env);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   188
		local _realG_mt = getmetatable(_realG);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   189
		if curr_env_mt and curr_env_mt.__index and not curr_env_mt.__newindex and _realG_mt then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   190
			local old_newindex, old_index;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   191
			old_newindex, _realG_mt.__newindex = _realG_mt.__newindex, curr_env;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   192
			old_index, _realG_mt.__index = _realG_mt.__index, function (_G, k) -- luacheck: ignore 212/_G
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   193
				return rawget(curr_env, k);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   194
			end;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   195
			local ret = _real_require(...);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   196
			_realG_mt.__newindex = old_newindex;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   197
			_realG_mt.__index = old_index;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   198
			return ret;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   199
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   200
		return _real_require(...);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   201
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   202
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   203
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   204
function startup.set_function_metatable()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   205
	local mt = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   206
	function mt.__index(f, upvalue)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   207
		local i, name, value = 0;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   208
		repeat
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   209
			i = i + 1;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   210
			name, value = debug.getupvalue(f, i);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   211
		until name == upvalue or name == nil;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   212
		return value;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   213
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   214
	function mt.__newindex(f, upvalue, value)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   215
		local i, name = 0;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   216
		repeat
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   217
			i = i + 1;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   218
			name = debug.getupvalue(f, i);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   219
		until name == upvalue or name == nil;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   220
		if name then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   221
			debug.setupvalue(f, i, value);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   222
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   223
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   224
	function mt.__tostring(f)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   225
		local info = debug.getinfo(f);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   226
		return ("function(%s:%d)"):format(info.short_src:match("[^\\/]*$"), info.linedefined);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   227
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   228
	debug.setmetatable(function() end, mt);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   229
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   230
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   231
function startup.detect_platform()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   232
	prosody.platform = "unknown";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   233
	if os.getenv("WINDIR") then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   234
		prosody.platform = "windows";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   235
	elseif package.config:sub(1,1) == "/" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   236
		prosody.platform = "posix";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   237
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   238
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   239
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   240
function startup.detect_installed()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   241
	prosody.installed = nil;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   242
	if CFG_SOURCEDIR and (prosody.platform == "windows" or CFG_SOURCEDIR:match("^/")) then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   243
		prosody.installed = true;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   244
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   245
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   246
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   247
function startup.init_global_state()
8641
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8640
diff changeset
   248
	-- luacheck: ignore 121
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   249
	prosody.bare_sessions = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   250
	prosody.full_sessions = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   251
	prosody.hosts = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   252
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   253
	-- COMPAT: These globals are deprecated
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   254
	-- luacheck: ignore 111/bare_sessions 111/full_sessions 111/hosts
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   255
	bare_sessions = prosody.bare_sessions;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   256
	full_sessions = prosody.full_sessions;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   257
	hosts = prosody.hosts;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   258
8701
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   259
	prosody.paths = { source = CFG_SOURCEDIR, config = CFG_CONFIGDIR or ".",
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   260
	                  plugins = CFG_PLUGINDIR or "plugins", data = "data" };
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   261
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   262
	prosody.arg = _G.arg;
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   263
8723
dba17a70fd22 util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents: 8722
diff changeset
   264
	_G.log = logger.init("general");
dba17a70fd22 util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents: 8722
diff changeset
   265
	prosody.log = logger.init("general");
dba17a70fd22 util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents: 8722
diff changeset
   266
8701
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   267
	startup.detect_platform();
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   268
	startup.detect_installed();
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   269
	_G.prosody = prosody;
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   270
end
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   271
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   272
function startup.setup_datadir()
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   273
	prosody.paths.data = config.get("*", "data_path") or CFG_DATADIR or "data";
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   274
end
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   275
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   276
function startup.setup_plugindir()
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   277
	local custom_plugin_paths = config.get("*", "plugin_paths");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   278
	if custom_plugin_paths then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   279
		local path_sep = package.config:sub(3,3);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   280
		-- path1;path2;path3;defaultpath...
8641
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8640
diff changeset
   281
		-- luacheck: ignore 111
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   282
		CFG_PLUGINDIR = table.concat(custom_plugin_paths, path_sep)..path_sep..(CFG_PLUGINDIR or "plugins");
8736
6a234e77c99f util.startup: Fix traceback due to both plugin path becoming nil if plugin_paths is unset
Kim Alvefur <zash@zash.se>
parents: 8731
diff changeset
   283
		prosody.paths.plugins = CFG_PLUGINDIR;
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   284
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   285
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   286
8667
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   287
function startup.chdir()
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   288
	if prosody.installed then
10394
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10393
diff changeset
   289
		local lfs = require "lfs";
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10393
diff changeset
   290
		-- Ensure paths are absolute, not relative to the working directory which we're about to change
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10393
diff changeset
   291
		local cwd = lfs.currentdir();
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10393
diff changeset
   292
		prosody.paths.source = config.resolve_relative_path(cwd, prosody.paths.source);
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10393
diff changeset
   293
		prosody.paths.config = config.resolve_relative_path(cwd, prosody.paths.config);
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10393
diff changeset
   294
		prosody.paths.data = config.resolve_relative_path(cwd, prosody.paths.data);
8667
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   295
		-- Change working directory to data path.
10394
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10393
diff changeset
   296
		lfs.chdir(prosody.paths.data);
8667
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   297
	end
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   298
end
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   299
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   300
function startup.add_global_prosody_functions()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   301
	-- Function to reload the config file
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   302
	function prosody.reload_config()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   303
		log("info", "Reloading configuration file");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   304
		prosody.events.fire_event("reloading-config");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   305
		local ok, level, err = config.load(prosody.config_file);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   306
		if not ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   307
			if level == "parser" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   308
				log("error", "There was an error parsing the configuration file: %s", tostring(err));
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   309
			elseif level == "file" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   310
				log("error", "Couldn't read the config file when trying to reload: %s", tostring(err));
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   311
			end
8695
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8691
diff changeset
   312
		else
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8691
diff changeset
   313
			prosody.events.fire_event("config-reloaded", {
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8691
diff changeset
   314
				filename = prosody.config_file,
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8691
diff changeset
   315
				config = config.getconfig(),
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8691
diff changeset
   316
			});
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   317
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   318
		return ok, (err and tostring(level)..": "..tostring(err)) or nil;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   319
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   320
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   321
	-- Function to reopen logfiles
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   322
	function prosody.reopen_logfiles()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   323
		log("info", "Re-opening log files");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   324
		prosody.events.fire_event("reopen-log-files");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   325
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   326
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   327
	-- Function to initiate prosody shutdown
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   328
	function prosody.shutdown(reason, code)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   329
		log("info", "Shutting down: %s", reason or "unknown reason");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   330
		prosody.shutdown_reason = reason;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   331
		prosody.shutdown_code = code;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   332
		prosody.events.fire_event("server-stopping", {
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   333
			reason = reason;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   334
			code = code;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   335
		});
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   336
		server.setquitting(true);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   337
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   338
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   339
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   340
function startup.load_secondary_libraries()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   341
	--- Load and initialise core modules
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   342
	require "util.import"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   343
	require "util.xmppstream"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   344
	require "core.stanza_router"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   345
	require "core.statsmanager"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   346
	require "core.hostmanager"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   347
	require "core.portmanager"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   348
	require "core.modulemanager"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   349
	require "core.usermanager"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   350
	require "core.rostermanager"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   351
	require "core.sessionmanager"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   352
	package.loaded['core.componentmanager'] = setmetatable({},{__index=function()
8961
b10a37f6f75f util.startup: Add a comment marking some compat code
Kim Alvefur <zash@zash.se>
parents: 8885
diff changeset
   353
		-- COMPAT which version?
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   354
		log("warn", "componentmanager is deprecated: %s", debug.traceback():match("\n[^\n]*\n[ \t]*([^\n]*)"));
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   355
		return function() end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   356
	end});
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   357
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   358
	require "util.array"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   359
	require "util.datetime"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   360
	require "util.iterators"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   361
	require "util.timer"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   362
	require "util.helpers"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   363
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   364
	pcall(require, "util.signal") -- Not on Windows
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   365
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   366
	-- Commented to protect us from
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   367
	-- the second kind of people
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   368
	--[[
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   369
	pcall(require, "remdebug.engine");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   370
	if remdebug then remdebug.engine.start() end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   371
	]]
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   372
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   373
	require "util.stanza"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   374
	require "util.jid"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   375
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   376
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   377
function startup.init_http_client()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   378
	local http = require "net.http"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   379
	local config_ssl = config.get("*", "ssl") or {}
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   380
	local https_client = config.get("*", "client_https_ssl")
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   381
	http.default.options.sslctx = require "core.certmanager".create_context("client_https port 0", "client",
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   382
		{ capath = config_ssl.capath, cafile = config_ssl.cafile, verify = "peer", }, https_client);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   383
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   384
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   385
function startup.init_data_store()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   386
	require "core.storagemanager";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   387
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   388
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   389
function startup.prepare_to_start()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   390
	log("info", "Prosody is using the %s backend for connection handling", server.get_backend());
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   391
	-- Signal to modules that we are ready to start
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   392
	prosody.events.fire_event("server-starting");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   393
	prosody.start_time = os.time();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   394
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   395
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   396
function startup.init_global_protection()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   397
	-- Catch global accesses
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   398
	-- luacheck: ignore 212/t
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   399
	local locked_globals_mt = {
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   400
		__index = function (t, k) log("warn", "%s", debug.traceback("Attempt to read a non-existent global '"..tostring(k).."'", 2)); end;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   401
		__newindex = function (t, k, v) error("Attempt to set a global: "..tostring(k).." = "..tostring(v), 2); end;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   402
	};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   403
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   404
	function prosody.unlock_globals()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   405
		setmetatable(_G, nil);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   406
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   407
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   408
	function prosody.lock_globals()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   409
		setmetatable(_G, locked_globals_mt);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   410
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   411
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   412
	-- And lock now...
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   413
	prosody.lock_globals();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   414
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   415
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   416
function startup.read_version()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   417
	-- Try to determine version
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   418
	local version_file = io.open((CFG_SOURCEDIR or ".").."/prosody.version");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   419
	prosody.version = "unknown";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   420
	if version_file then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   421
		prosody.version = version_file:read("*a"):gsub("%s*$", "");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   422
		version_file:close();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   423
		if #prosody.version == 12 and prosody.version:match("^[a-f0-9]+$") then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   424
			prosody.version = "hg:"..prosody.version;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   425
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   426
	else
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   427
		local hg = require"util.mercurial";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   428
		local hgid = hg.check_id(CFG_SOURCEDIR or ".");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   429
		if hgid then prosody.version = "hg:" .. hgid; end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   430
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   431
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   432
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   433
function startup.log_greeting()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   434
	log("info", "Hello and welcome to Prosody version %s", prosody.version);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   435
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   436
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   437
function startup.notify_started()
8640
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8639
diff changeset
   438
	prosody.events.fire_event("server-started");
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   439
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   440
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   441
-- Override logging config (used by prosodyctl)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   442
function startup.force_console_logging()
8669
57780ba1938f util.startup: Move original_logging_config to a local variable
Matthew Wild <mwild1@gmail.com>
parents: 8668
diff changeset
   443
	original_logging_config = config.get("*", "log");
8885
a420b386a72a Merge 0.10->trunk
Matthew Wild <mwild1@gmail.com>
parents: 8759
diff changeset
   444
	config.set("*", "log", { { levels = { min = os.getenv("PROSODYCTL_LOG_LEVEL") or "info" }, to = "console" } });
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   445
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   446
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   447
function startup.switch_user()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   448
	-- Switch away from root and into the prosody user --
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   449
	-- NOTE: This function is only used by prosodyctl.
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   450
	-- The prosody process is built with the assumption that
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   451
	-- it is already started as the appropriate user.
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   452
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   453
	local want_pposix_version = "0.4.0";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   454
	local have_pposix, pposix = pcall(require, "util.pposix");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   455
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   456
	if have_pposix and pposix then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   457
		if pposix._VERSION ~= want_pposix_version then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   458
			print(string.format("Unknown version (%s) of binary pposix module, expected %s",
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   459
				tostring(pposix._VERSION), want_pposix_version));
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   460
			os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   461
		end
8675
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8670
diff changeset
   462
		prosody.current_uid = pposix.getuid();
10601
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10600
diff changeset
   463
		local arg_root = prosody.opts.root;
8675
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8670
diff changeset
   464
		if prosody.current_uid == 0 and config.get("*", "run_as_root") ~= true and not arg_root then
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   465
			-- We haz root!
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   466
			local desired_user = config.get("*", "prosody_user") or "prosody";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   467
			local desired_group = config.get("*", "prosody_group") or desired_user;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   468
			local ok, err = pposix.setgid(desired_group);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   469
			if ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   470
				ok, err = pposix.initgroups(desired_user);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   471
			end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   472
			if ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   473
				ok, err = pposix.setuid(desired_user);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   474
				if ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   475
					-- Yay!
8675
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8670
diff changeset
   476
					prosody.switched_user = true;
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   477
				end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   478
			end
8675
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8670
diff changeset
   479
			if not prosody.switched_user then
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   480
				-- Boo!
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   481
				print("Warning: Couldn't switch to Prosody user/group '"..tostring(desired_user).."'/'"..tostring(desired_group).."': "..tostring(err));
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   482
			else
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   483
				-- Make sure the Prosody user can read the config
8670
a05d36075c6a util.startup: Fix variable usage [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 8669
diff changeset
   484
				local conf, err, errno = io.open(prosody.config_file);
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   485
				if conf then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   486
					conf:close();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   487
				else
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   488
					print("The config file is not readable by the '"..desired_user.."' user.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   489
					print("Prosody will not be able to read it.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   490
					print("Error was "..err);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   491
					os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   492
				end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   493
			end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   494
		end
8640
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8639
diff changeset
   495
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   496
		-- Set our umask to protect data files
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   497
		pposix.umask(config.get("*", "umask") or "027");
8670
a05d36075c6a util.startup: Fix variable usage [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 8669
diff changeset
   498
		pposix.setenv("HOME", prosody.paths.data);
a05d36075c6a util.startup: Fix variable usage [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 8669
diff changeset
   499
		pposix.setenv("PROSODY_CONFIG", prosody.config_file);
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   500
	else
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   501
		print("Error: Unable to load pposix module. Check that Prosody is installed correctly.")
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   502
		print("For more help send the below error to us through https://prosody.im/discuss");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   503
		print(tostring(pposix))
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   504
		os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   505
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   506
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   507
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   508
function startup.check_unwriteable()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   509
	local function test_writeable(filename)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   510
		local f, err = io.open(filename, "a");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   511
		if not f then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   512
			return false, err;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   513
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   514
		f:close();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   515
		return true;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   516
	end
8640
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8639
diff changeset
   517
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   518
	local unwriteable_files = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   519
	if type(original_logging_config) == "string" and original_logging_config:sub(1,1) ~= "*" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   520
		local ok, err = test_writeable(original_logging_config);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   521
		if not ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   522
			table.insert(unwriteable_files, err);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   523
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   524
	elseif type(original_logging_config) == "table" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   525
		for _, rule in ipairs(original_logging_config) do
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   526
			if rule.filename then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   527
				local ok, err = test_writeable(rule.filename);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   528
				if not ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   529
					table.insert(unwriteable_files, err);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   530
				end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   531
			end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   532
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   533
	end
8640
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8639
diff changeset
   534
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   535
	if #unwriteable_files > 0 then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   536
		print("One of more of the Prosody log files are not");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   537
		print("writeable, please correct the errors and try");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   538
		print("starting prosodyctl again.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   539
		print("");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   540
		for _, err in ipairs(unwriteable_files) do
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   541
			print(err);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   542
		end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   543
		print("");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   544
		os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   545
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   546
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   547
8676
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   548
function startup.make_host(hostname)
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   549
	return {
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   550
		type = "local",
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   551
		events = prosody.events,
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   552
		modules = {},
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   553
		sessions = {},
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   554
		users = require "core.usermanager".new_null_provider(hostname)
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   555
	};
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   556
end
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   557
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   558
function startup.make_dummy_hosts()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   559
	-- When running under prosodyctl, we don't want to
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   560
	-- fully initialize the server, so we populate prosody.hosts
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   561
	-- with just enough things for most code to work correctly
8641
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8640
diff changeset
   562
	-- luacheck: ignore 122/hosts
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   563
	prosody.core_post_stanza = function () end; -- TODO: mod_router!
8640
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8639
diff changeset
   564
8642
070a77c15f63 util.startup: Remove unused loop variable [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8641
diff changeset
   565
	for hostname in pairs(config.getconfig()) do
8718
25d8d6091ec3 util.startup: Access the hosts table via the prosody global for consistency
Kim Alvefur <zash@zash.se>
parents: 8716
diff changeset
   566
		prosody.hosts[hostname] = startup.make_host(hostname);
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   567
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   568
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   569
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   570
-- prosodyctl only
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   571
function startup.prosodyctl()
10601
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10600
diff changeset
   572
	startup.parse_args();
8702
580c13ed0ca1 util.startup: Initialize the 'prosody' global earlier (various things needs the global util.events instance)
Kim Alvefur <zash@zash.se>
parents: 8701
diff changeset
   573
	startup.init_global_state();
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   574
	startup.read_config();
8758
857d8f38a010 util.startup: Force console logging before initializing logging (see 2fdeb979cc7c)
Kim Alvefur <zash@zash.se>
parents: 8751
diff changeset
   575
	startup.force_console_logging();
8751
2fdeb979cc7c util.startup: Initialize logging immediately after configuration is read (which is how it used to work)
Matthew Wild <mwild1@gmail.com>
parents: 8737
diff changeset
   576
	startup.init_logging();
8701
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   577
	startup.setup_plugindir();
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   578
	startup.setup_datadir();
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   579
	startup.chdir();
8691
019b4b3dd5ad util.startup: Read version for prosodyctl (restores version in 'about' command)
Kim Alvefur <zash@zash.se>
parents: 8685
diff changeset
   580
	startup.read_version();
8668
4b260a3f8b94 util.startup: Restore user switching
Matthew Wild <mwild1@gmail.com>
parents: 8667
diff changeset
   581
	startup.switch_user();
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   582
	startup.check_dependencies();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   583
	startup.log_dependency_warnings();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   584
	startup.check_unwriteable();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   585
	startup.load_libraries();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   586
	startup.init_http_client();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   587
	startup.make_dummy_hosts();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   588
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   589
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   590
function startup.prosody()
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   591
	-- These actions are in a strict order, as many depend on
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   592
	-- previous steps to have already been performed
10601
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10600
diff changeset
   593
	startup.parse_args();
8702
580c13ed0ca1 util.startup: Initialize the 'prosody' global earlier (various things needs the global util.events instance)
Kim Alvefur <zash@zash.se>
parents: 8701
diff changeset
   594
	startup.init_global_state();
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   595
	startup.read_config();
8751
2fdeb979cc7c util.startup: Initialize logging immediately after configuration is read (which is how it used to work)
Matthew Wild <mwild1@gmail.com>
parents: 8737
diff changeset
   596
	startup.init_logging();
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   597
	startup.sanity_check();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   598
	startup.sandbox_require();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   599
	startup.set_function_metatable();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   600
	startup.check_dependencies();
8722
0cb84aafeee6 util.startup: Initialize logging earlier, so that messages from eg net.server are shown
Kim Alvefur <zash@zash.se>
parents: 8718
diff changeset
   601
	startup.init_logging();
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   602
	startup.load_libraries();
8701
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   603
	startup.setup_plugindir();
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   604
	startup.setup_datadir();
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   605
	startup.chdir();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   606
	startup.add_global_prosody_functions();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   607
	startup.read_version();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   608
	startup.log_greeting();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   609
	startup.log_dependency_warnings();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   610
	startup.load_secondary_libraries();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   611
	startup.init_http_client();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   612
	startup.init_data_store();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   613
	startup.init_global_protection();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   614
	startup.prepare_to_start();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   615
	startup.notify_started();
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   616
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   617
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   618
return startup;