ماژول:Sensitive IP addresses/summary
ظاهر
بو ماژول اوچون بلگهلر ماژول:Sensitive IP addresses/summary/بلگه صفحهسینده یارادیلا بیلینر
local mSIPA_API = require('Module:Sensitive IP addresses/API')
local yesno = require('Module:Yesno')
local p = {}
-- Strips a suffix from a CIDR string if the suffix is of a given bitLength.
-- bitLength must be either 32 or 128.
-- This is intended to allow CIDR strings to be represented as a single IP
-- address if this can be done unambiguously.
local function stripCIDRSuffix(cidr, bitLength)
assert(bitLength == 32 or bitLength == 128, 'bitLength was not 32 or 128')
local pattern = '/' .. bitLength .. '$'
cidr = cidr:gsub(pattern, '')
return cidr
end
-- Takes an array of CIDR ranges and returns a new array with ranges
-- appropriate for printing.
local function prettifyRanges(ranges, bitLength)
local ret = {}
for i, cidr in ipairs(ranges) do
ret[i] = stripCIDRSuffix(cidr, bitLength)
end
return ret
end
-- Turns an array of CIDR ranges into its string representation.
local function stringifyRanges(ranges, bitLength, separator)
if not ranges then
return ''
end
ranges = prettifyRanges(ranges, bitLength)
return table.concat(ranges, separator)
end
function p._table(options)
-- Return a wikitext table summarizing all the sensitive IP ranges
-- and the entities they belong to.
-- Load dependencies
local lang = mw.language.getContentLanguage()
-- Set up options
options = options or {}
local rangeSeparator = options.rangeseparator or ', '
local showNotes = yesno(options.notes)
local nColumns = showNotes and 3 or 4
-- Get the entity data
local data = mSIPA_API.query{entities={'all'}}
if data['error'] then
error(string.format('%s: %s', data['error'].code, data['error'].info))
end
-- Make the table root
local root = mw.html.create('table')
if options.class then
root:addClass(options.class)
end
if options.style then
root:cssText(options.style)
end
-- Add main header
if options.mainheader then
root:tag('tr'):tag('td')
:attr('colspan', nColumns)
:cssText(options.cellstyle)
:wikitext(options.mainheader)
end
-- Add column headers
local headerRow = root:tag('tr')
headerRow
:tag('th')
:cssText(options.cellstyle)
:wikitext('[[IPv4]]')
:done()
:tag('th')
:cssText(options.cellstyle)
:wikitext('[[IPv6]]')
:done()
:tag('th')
:cssText(options.cellstyle)
:wikitext('Description')
if showNotes then
headerRow:tag('th')
:cssText(options.cellstyle)
:wikitext('Notes')
end
-- Add data cells
for i, id in ipairs(data.sensitiveips['entity-ids']) do
local entityData = data.sensitiveips.entities[id]
if not options.reason or options.reason == entityData.reason then
local dataRow = root:tag('tr')
dataRow
:tag('td')
:cssText(options.cellstyle)
:wikitext(stringifyRanges(
entityData.ipv4Ranges,
32,
rangeSeparator
))
:done()
:tag('td')
:cssText(options.cellstyle)
:wikitext(stringifyRanges(
entityData.ipv6Ranges,
128,
rangeSeparator
))
:done()
:tag('td')
:cssText(options.cellstyle)
:wikitext(lang:ucfirst(entityData.description))
if showNotes then
dataRow:tag('td')
:cssText(options.cellstyle)
:wikitext(entityData.notes)
end
end
end
return tostring(root)
end
function p.table(frame)
local args = require('Module:Arguments').getArgs(frame, {
frameOnly = true
})
return p._table(args)
end
return p