pidgin/nest

Add pgp public key and refer to it in our security disclosure method

The idea behind this is to make sure people that choose to use email to let us
known about a potential security issue in Pidgin encrypt the content of the
emails using a set of pgp keys of trusted Pidgin developers. For now we only
have the pgp key of grim but more keys can easily be added later on.

At the same time, since Hugo does not currently have a built-in shortcode for
linking directly to static resources, I had to add a new shortcode for doing so

Testing Done:
Ran `dev-server.sh` and made sure content looked as intended and links worked.

Bugs closed: NEST-46

Reviewed at https://reviews.imfreedom.org/r/860/
/**
* Runs after Hugo has built the site
* * Cleans, Minifies and Optimises hugo output
*
* USAGE: node tools/pre-prod [path to hugo output]
*/
/*****************************************************************************
* Imports
*****************************************************************************/
const fs = require('fs')
const path = require('path')
const { html: beautify_html } = require('js-beautify')
/*****************************************************************************
* Set Up
*****************************************************************************/
const target =
// looks for a path in first arg or default to `./public/`
path.join(__dirname, `..`, process.argv[2] || 'public') + path.sep
const xmlRegex = /\.(html|xml)$/
const jsonRegex = /\.json$/
const svgRegex = /\.svg$/
const htmlBeautifyOptions = { max_preserve_newlines: 0 }
/*****************************************************************************
* Execution
*****************************************************************************/
getFilePaths(target).forEach(path => {
if (path.match(xmlRegex)) {
tidyXML(path)
} else if (path.match(jsonRegex)) {
minifyJSON(path)
}
})
/*****************************************************************************
* File Handlers
*****************************************************************************/
/**
* Format XML and HTML, removing hugo template artifacts,
* like whitespace chasms
* @param {string} path
*/
function tidyXML(path) {
const data = fs.readFileSync(path, 'utf8')
const formatted = beautify_html(data, htmlBeautifyOptions)
fs.writeFile(path, formatted, err => {
if (err) {
console.log(`Error Tidying ${path}`, err)
}
console.log(`Tidied path: ${path.replace(target, '')}`)
})
}
/**
* Minify JSON
* @param {string} path
*/
function minifyJSON(path) {
const data = fs.readFileSync(path, 'utf8')
const formatted = JSON.stringify(JSON.parse(data))
fs.writeFile(path, formatted, err => {
if (err) {
console.log(`Error minifying ${path}`, err)
}
console.log(`Minified path: ${path.replace(target, '')}`)
})
}
/*****************************************************************************
* Helpers
*****************************************************************************/
function getFilePaths(input) {
const items = readDir(input)
const ret = []
while (items.length) {
const item = items.pop()
const stat = fs.statSync(item)
if (stat.isDirectory()) {
items.push(...readDir(item))
} else if (stat.isFile()) {
ret.push(item)
}
}
return ret
}
function readDir(item) {
return fs.readdirSync(item).map(i => path.join(item, i))
}