<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASensitive_IP_addresses%2Fblocktext</id>
	<title>Module:Sensitive IP addresses/blocktext - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASensitive_IP_addresses%2Fblocktext"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sensitive_IP_addresses/blocktext&amp;action=history"/>
	<updated>2026-05-26T18:14:13Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sensitive_IP_addresses/blocktext&amp;diff=146710&amp;oldid=prev</id>
		<title>imported&gt;Mr. Stradivarius: make all variables local</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sensitive_IP_addresses/blocktext&amp;diff=146710&amp;oldid=prev"/>
		<updated>2018-11-04T06:59:49Z</updated>

		<summary type="html">&lt;p&gt;make all variables local&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module creates a warning about sensitive IP addresses that is intended&lt;br /&gt;
-- to be placed in [[Special:Block]] via the [[Mediawiki:Blockiptext]] message.&lt;br /&gt;
&lt;br /&gt;
local querySensitiveIPs = require(&amp;#039;Module:Sensitive IP addresses&amp;#039;).query&lt;br /&gt;
local mIP = require(&amp;#039;Module:IP&amp;#039;)&lt;br /&gt;
local IPAddress = mIP.IPAddress&lt;br /&gt;
local Subnet = mIP.Subnet&lt;br /&gt;
&lt;br /&gt;
local function normalizeIPOrSubnet(ipOrSubnet)&lt;br /&gt;
	-- Normalize an IP address or subnet.&lt;br /&gt;
	-- If ipOrSubnet is not a valid IP address or subnet, returns nil.&lt;br /&gt;
	local ipSuccess, ipObj = pcall(IPAddress.new, ipOrSubnet)&lt;br /&gt;
	if ipSuccess and ipObj then&lt;br /&gt;
		return tostring(ipObj)&lt;br /&gt;
	end&lt;br /&gt;
	local subnetSuccess, subnetObj = pcall(Subnet.new, ipOrSubnet)&lt;br /&gt;
	if subnetSuccess and subnetObj then&lt;br /&gt;
		return tostring(subnetObj)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseTitle(title)&lt;br /&gt;
	-- Parse a title. If the subpage(s) of the root page are a valid IP&lt;br /&gt;
	-- address or subnet, then return the normalized IP address or subnet.&lt;br /&gt;
	local ipOrSubnet = title.text:gsub(&amp;#039;^.-/&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	return normalizeIPOrSubnet(ipOrSubnet)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fetchSensitivityData(ipOrSubnet)&lt;br /&gt;
	return querySensitiveIPs{test = {ipOrSubnet}}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseSensitivityData(sensitivityData)&lt;br /&gt;
	-- Parse the data from the sensitive IP API call, and return a table with&lt;br /&gt;
	-- information about the first match that we can use as arguments to a&lt;br /&gt;
	-- template call.&lt;br /&gt;
	local function parse(sensitivityData)&lt;br /&gt;
		sensitivityData = sensitivityData.sensitiveips&lt;br /&gt;
		if #sensitivityData.matches == 0 then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local ret = {}&lt;br /&gt;
		ret.type = sensitivityData.matches[1].type&lt;br /&gt;
		if ret.type == &amp;#039;ip&amp;#039; then&lt;br /&gt;
			ret.ip = sensitivityData.matches[1].ip&lt;br /&gt;
		elseif ret.type == &amp;#039;range&amp;#039; then&lt;br /&gt;
			ret.range = sensitivityData.matches[1].range&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		ret[&amp;#039;entity-id&amp;#039;] = sensitivityData.matches[1][&amp;#039;entity-id&amp;#039;]&lt;br /&gt;
		ret[&amp;#039;matches-range&amp;#039;] = sensitivityData.matches[1][&amp;#039;matches-range&amp;#039;]&lt;br /&gt;
		ret[&amp;#039;entity-name&amp;#039;] = sensitivityData.entities[ret[&amp;#039;entity-id&amp;#039;]].name&lt;br /&gt;
		ret[&amp;#039;entity-description&amp;#039;] = sensitivityData.entities[ret[&amp;#039;entity-id&amp;#039;]].description&lt;br /&gt;
		ret.reason = sensitivityData.entities[ret[&amp;#039;entity-id&amp;#039;]].reason&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local success, ret = pcall(parse, sensitivityData)&lt;br /&gt;
	if success and ret then&lt;br /&gt;
		return ret&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderMessage(rawMessage, messageArgs)&lt;br /&gt;
	local message&lt;br /&gt;
	if rawMessage then&lt;br /&gt;
		message = mw.message.newRawMessage(rawMessage)&lt;br /&gt;
	else&lt;br /&gt;
		message = mw.message.new(&amp;#039;sensitive-ip-block-text&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local wikitext = message:params(&lt;br /&gt;
		messageArgs.type,&lt;br /&gt;
		messageArgs.type == &amp;#039;ip&amp;#039; and messageArgs.ip or messageArgs.range,&lt;br /&gt;
		messageArgs[&amp;#039;matches-range&amp;#039;],&lt;br /&gt;
		messageArgs[&amp;#039;entity-id&amp;#039;],&lt;br /&gt;
		messageArgs[&amp;#039;entity-name&amp;#039;],&lt;br /&gt;
		messageArgs[&amp;#039;entity-description&amp;#039;],&lt;br /&gt;
		messageArgs.reason&lt;br /&gt;
	):plain()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	return frame:preprocess(wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._main(args, title)&lt;br /&gt;
	args = args or {}&lt;br /&gt;
	title = title or mw.title.getCurrentTitle()&lt;br /&gt;
	local ipOrSubnet = parseTitle(title)&lt;br /&gt;
	if not ipOrSubnet then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local sensitivityData = fetchSensitivityData(ipOrSubnet)&lt;br /&gt;
	if not sensitivityData then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local messageArgs = parseSensitivityData(sensitivityData)&lt;br /&gt;
	return renderMessage(args.message, messageArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame)&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._exportFunctions()&lt;br /&gt;
	return {&lt;br /&gt;
		parseTitle = parseTitle,&lt;br /&gt;
		fetchSensitivityData = fetchSensitivityData,&lt;br /&gt;
		parseSensitivityData = parseSensitivityData,&lt;br /&gt;
		renderMessage = renderMessage,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Mr. Stradivarius</name></author>
	</entry>
</feed>