We've recently started seeing a new error in our apache logs:
[Wed Mar 16 08:32:59 2011] [error] [client 10.40.1.2] (36)File name too long: Cannot map GET /static/app/js <..lots of javascript...>
It looks as though JavaScript from a page is being sent in a request to the server. However it's unclear how this would occur. From searching t'internet, looks like this kind of thing has occurred with certain wordpress plugins, but there isn't much other information out there.
Note about the environment: Clients use IE8 running on a Citrix thin client in the UK. The web servers are 1700km away, so there's a bit of latency. The site makes heavy use of AJAX and large cookies.
Could anyone advise on how to debug this issue please?
Thanks
Andrew
I'm getting this too, with a PHP framework that allows URLs formatted so that
index.php?controller=doohickey&id=z61
can be rewritten as
index.php/controller/doohickey/z61
along with a regex in the framework code.
The errors looks like (/var/log/apache/error_log):
GET /index.php/accounts_badoink/confirmaction/WUW%253DWBW%25253DV0tXPWM3Nzc1....
-> in this case, apache is parsing the filename as
/index.php/accounts_badoink/confirmaction/WUW%253DWBW%25253DV0tXPWM3Nzc1....
(I'm serializing an object state and passing it around).
I have to rewrite this (at least the URLs with long appended serialized objects) to the more-customary style:
GET /index.php?controller=accounts_badoink&confirmaction=WUW%253DWBW%25253DV0tXPWM3Nzc1....
-> in this case, Apache is parsing the file name as index.php
So in short, rewrite your URLs and include a ? as early as possible, to pass data as CGI-style parameters instead of path elements.
I Ran strace -p $PID & for each Apache process id (as reported by pidof apache2) :
# pidof apache2 | tr ' ' '\n' | grep -v 21561 | sed "s|\(.*\)|strace -p \1 \&|g" | sh -
to finish :
# kill -HUP `pidof strace`
And see the kernel calls make by apache2:
accept(3, {sa_family=AF_INET, sin_port=htons(38985), sin_addr=inet_addr("127.0.0.1")}, [16]) = 13
fcntl(13, F_GETFD) = 0
fcntl(13, F_SETFD, FD_CLOEXEC) = 0
fcntl(13, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(13, F_SETFL, O_RDWR|O_NONBLOCK) = 0
read(13, "GET /newregcon/index.php/account"..., 8000) = 4949
write(2, "[Wed May 11 15:39:36 2011] [erro"..., 4451) = 4451
writev(13, [{"HTTP/1.1 403 Forbidden\r\nDate: We"..., 219}, {"<!DOCTYPE HTML PUBLIC \"-//IETF//"..., 4610}], 2) = 4829
As these system calls don't return errors (e.g. ' ... = -1' ), I downloaded the apache2 sources, and found:
Grep for "Cannot map" :
server/core.c
3489:AP_DECLARE_NONSTD(int) ap_core_translate(request_rec *r)
3490:{
3520: if ((rv = apr_filepath_merge(&r->filename, conf->ap_document_root, path,
3521: APR_FILEPATH_TRUENAME
3522: | APR_FILEPATH_SECUREROOT, r->pool))
3523: != APR_SUCCESS) {
3524: ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
3525: "Cannot map %s to file", r->the_request);
3526: return HTTP_FORBIDDEN;
3527: }
look for apr_filepath_merge ...
srclib/apr/file_io/unix/filepath.c
81:APR_DECLARE(apr_status_t) apr_filepath_merge(char **newpath,
82: const char *rootpath,
83: const char *addpath,
84: apr_int32_t flags,
85: apr_pool_t *p)
86:{
87: char *path;
88: apr_size_t rootlen; /* is the length of the src rootpath */
89: apr_size_t maxlen; /* maximum total path length */
149: rootlen = strlen(rootpath);
150: maxlen = rootlen + strlen(addpath) + 4; /* 4 for slashes at start, after
151: * root, and at end, plus trailing
152: * null */
153: if (maxlen > APR_PATH_MAX) {
154: return APR_ENAMETOOLONG;
155: }
find APR_PATH_MAX ...
Netware
./srclib/apr/include/apr.hnw:424:#define APR_PATH_MAX PATH_MAX
WIN32
./srclib/apr/include/apr.hw:584:#define APR_PATH_MAX 8192
./srclib/apr/include/apr.h.in
/* header files for PATH_MAX, _POSIX_PATH_MAX */
#if APR_HAVE_LIMITS_H
#include <limits.h>
/usr/src/linux-headers-2.6.35-28/include/linux/limits.h
#define PATH_MAX 4096 /* # chars in a path name including nul */
Another related thing I ran into was PHP 5.2's SUHOSIN security patchset,
which (inter alia) limits get-parameter length (to 512 by default):
http://www.hardened-php.net/suhosin/configuration.html#suhosin.get.max_value_length
Related
I'm using yuicompressor 2.4.7 beceause 2.4.8 is still buged (see here), so i've made a little script to find and mimify js file, but when i run the script multiple time it create file with bad extension.
For an example :
first run : bla.js => bla.min.js
second run : bla.js => bla.min.js
but it also create bla.min.min.js
etc
for /r %I in (*.js) do (
java -jar "C:\Mimifer\yuicompressor-2.4.7.jar" "%~I" -o "%~dpnI.min.js"
)
Should i change the way to find files or its possible to exclude certain extension files ?
I've used this to make this script
for /r %%I in (*.js) do echo %%I|find /i ".min.js">nul&if errorlevel 1 (
Note that all references in your batch to the metavariable I should be %%I, not %I. %I is only applicable if the command is executed from the prompt.
This command echoes the filename found through a pipe | to find which looks for a string /i in any case ".min.js". The output of the find command is discarded by being redirected to nul. If find finds the string, errorlevel is set to 0, otherwise 1.
The & separates cascaded commands
The old original but still-supported syntax if errorlevel 1 means "if the errorlevel is 1 or greater" (ie, in this case, the string was not found)
I'm trying to convert ansi color codes from console output into HTML. I have a found a script to do this but I cant seem to make it parse the strings inside node js. I have tried to JSON.stringify it to also include special chars but its not working.
forever list
[32minfo[39m: Forever processes running
[90mscript[39m [37mforever[39m [37mpid[39m [37mid[39m
[90mdata[39m: [37m [39m [37muid[39m [90mcommand[39m
I get output like this back from ssh2shell in node js. I have a script:
https://github.com/pixelb/scripts/blob/master/scripts/ansi2html.sh
This is supposed to convert the above to html and add the appropriate color codes. It works fine with normal terminal output for example:
npm install --color=always | ansi2html.sh > npminstall.html
This is the raw output on the linux machine piped to a file. It seems the JS strings are missing these escapes when they are shown in console.log but they are also missing newlines there. Perhaps its because im concatenating them directly into the string and its removing special chars?
total 24
-rwxr-xr-x 1 admin admin 17002 May 13 02:52 ^[[0m^[[38;5;34mansi2html.sh^[[0m
drwxr-xr-x 4 admin admin 4096 May 13 00:00 ^[[38;5;27mgit^[[0m
-rw-r--r-- 1 admin admin 0 May 13 02:57 ls.html
Hopefully some of this makes sense.
Thanks
There are a couple of filters that SSH2shell applies to the output from commands. The first removes non-standard ASCII from the response and then the colour formatting codes are removed.
In v1.6.0 I have added pipe()/unpipe(), the events for both and exposed the stream.on('data', function(data){}) event so you can access the stream output directly without SSH2shell interacting with it in any way.
This should resolve the problem of not getting the right output from SSH2shell by giving you access to the raw data.
var fs = require('fs')
var host = {
server: {
host: mydomain.com,
port: 22,
userName: user,
password: password:)
},
commands: [
"`Test session text message: passed`",
"msg:console test notification: passed",
"ls -la"
],
}
//until npm published use the cloned dir path.
var SSH2Shell = require ('ssh2shell')
//run the commands in the shell session
var SSH = new SSH2Shell(host),
callback = function( sessionText ){
console.log ( "-----Callback session text:\n" + sessionText);
console.log ( "-----Callback end" );
},
firstLog = fs.createWriteStream('first.log'),
secondLog = fs.createWriteStream('second.log'),
buffer = ""
//multiple pipes can be added but they wont be bound to the stream until the connection is established
SSH.pipe(firstLog).pipe(secondLog);
SSH.on('data', function(data){
//do something with the data chunk
console.log(data)
})
SSH.connect(callback)
tried this ?
https://github.com/hughsk/ansi-html-stream
var spawn = require('child_process').spawn
, ansi = require('ansi-html-stream')
, fs = require('fs')
var npm = spawn('npm', ['install', 'browserify', '--color', 'always'], {
cwd: process.cwd()
})
var stream = ansi({ chunked: false })
, file = fs.createWriteStream('browserify.html', 'utf8')
npm.stdout.pipe(stream)
npm.stderr.pipe(stream)
stream.pipe(file, { end: false })
stream.once('end', function() {
file.end('</pre>\n')
})
file.write('<pre>\n');
My requirement is I need to check whether Chrome browser is insatlled on the client machine or not using Javascript. I have searched on the net not able to find the way out.
Please help in getting this done.
You can't do that with JavaScript, and even if you could, you shouldn't.
JavaScript on the client doesn't have access to the user's system, for very good reasons. (Think, servers with bad intentions.)
You can check if the browser is Chrome with the next code
if(!window.chrome){
//Chrome code
}else{
// Chrome block
}
You can't. Not with JavaScript. However, you can check whether the browser that is currently being used to view your webpage is Google Chrome or not.
<script type="text/javascript">
if(window.chrome){
document.write("Browser is Chrome");
}
else{
document.write("Please download Chrome");
}
</script>
You can't get that kind of information directly from javascript.
What you can do is use that PowerShell command in a script and save the result in a file that you'll read later using javascript.
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, InstallLocation, Publisher, InstallDate | Format-Table -AutoSize
This will get you all the installed programs on the machine from the HKEY_LOCAL_MACHINE registry folder.
The exact path to the folder from wich the informations are retrieved is : HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
The given command will display you the application name followed by it's version, it's install location, publisher name and installation date in a PowerShell terminal.
If you want to output that list in a file simply add >FileName.txt after the command before pressing enter.
Note that by default the file will be created in the C:\Users\YourUserName\ folder so if you want the file to be created in a specific location you'll have to use the CD command to get to that specific location before executing the Get-Item-Property command.
This will get you done for the get installed programs on a machine part.
Now we can get into the check if app x is installed on the machine part.
First load the previously generated file in your js application you will use it's content to determine if an application is installed on the computer.
The faster way to get if 'chrome' is installed will be to load the file as a string and then do that basic stuff :
if (string.includes('chrome') == true) {
// chrome is installed on the machine
// you can do some more stuff
// like extracting it's path from the file content
} else {
console.log('error: chrome is not installed on this computer');
}
Needless to say that this will only work if used on the same computer from which you want to check the installed applications.
Edit: If you want a more practical file to use in javascript you can replace
Format-Table -AutoSize >FileName.txt
with :
Export-Csv -path .\FileName.txt -NoTypeInformation
this way you can split your file lines using the string.split(',') method and don't have to do some extra stuff to deal with the spaces between data.
Edit 2:
Here's a full working implementation that will let you retrieve informations from a PowerShell script directly from your javascript using NodeJs.
get_programs.ps1 (PowerShell script file) :
chcp 65001 # sets the encoding for displaying chars correctly
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, InstallLocation | ConvertTo-Csv -NoTypeInformation
chcp 850 # restores the default encoding set this will avoid police changes due to the terminal modifications
Notice the change at the end of the command which is now:
| ConvertTo-Csv -NoTypeInformation
this allows to log data in the PowerShell terminal in the csv format which will simplify it's parsing as a string.
If you don't want to use another file to hold those few PowerShell
commands you can use this
child = spawn("powershell.exe",[`chcp 65001
Get-ItemProperty HKLM:\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* | Select-Object DisplayName, DisplayVersion, InstallLocation | ConvertTo-Csv -NoTypeInformation
chcp 850`]);
as a replacement for
child = spawn("powershell.exe",["./get_programs.ps1"]);
If you choose to do this don't forget to escape the \ chars else it will not work.
app.js :
var spawn = require("child_process").spawn,child;
child = spawn("powershell.exe",["./get_programs.ps1"]); // here we start our PowerShell script "./" means that it's in the same directory as the .js file
let chromeDetails;
child.stdout.on("data", (data) => { // data event
// here we receive each outputed line in the PowerShell terminal as an Uint8Array
if (data.includes('Chrome')) { // check for the 'Chrome' string in data
chromeDetails = data.toString(); // adds data converted as string
}
});
child.stderr.on("data", (data) => { // logs errors
console.log(`Powershell Errors: ${data}`);
});
child.on("exit", () => { // exit event
console.log("Powershell Script finished");
if (chromeDetails != undefined) {
console.log(`> chrome has been detected on this computer
available informations (appName, version, installPath):
${chromeDetails}`);
} else
console.log('> chrome has not been detected on this computer');
});
child.stdin.end(); // we end the child
Expected output :
Powershell Script finished
> chrome has been detected on this computer
available informations (appName, version, installPath):
"Google Chrome","103.0.5060.114","C:\Program Files\Google\Chrome\Application"
If you are not on Windows you may want to take a look at Spawning .bat and .cmd files on Windows from the NodeJs documentation to get hints on how to adapt the above app.js code to work on your system.
Is ther any way to execute javascript from a .bat file or embed the javascript in .bat file.
I need a javascript code to write/read to a file in a local folder.This javascript i should be able to execute it using a .bat.
Is it possible?.
Thanks
SNA
Follow these two steps to run Javascript in a Windows batch file, either .BAT or .CMD.
First step: add these lines to the beginning of your file
#set #junk=1 /*
#echo off
cscript //nologo //E:jscript %0 %*
goto :eof
*/
Second step: write your Javascript to only use objects that are available in Windows Scripting Host, i.e. use Wscript.Echo() to print output on the standard output.
Here is a complete example ready to run by typing calen 2011 02
#set #junk=1 /*
#echo off
cscript //nologo //E:jscript %0 %*
goto :eof
*/
x = WScript.Arguments
Yr = x(0) ; Mo = x(1)
YS = "JanFebMarAprMayJunJulAugSepOctNovDec"
MN = Mo<1 || Mo>12 ? Mo : YS.substr(3*Mo-3, 3) // Month Name
WScript.echo(" ", Yr, " ", MN)
WScript.echo(" Mo Tu We Th Fr Sa Su")
WD = new Date(Yr, Mo-1, 1).getDay() ;
if (WD==0) WD = 7 // Week Day Number of 1st
LD = new Date(Yr, Mo, 0).getDate() // Last Day of month
Wk = "" ; for (D=1 ; D < WD ; D++) Wk += " "
for (D=1 ; D<=LD ; D++) {
Wk = Wk + " " + (D<10 ? "0"+D : D) ; WD++
if ((WD==8) || (D==LD)) { WScript.echo(Wk) ; WD = WD-7 ; Wk = "" }
}
WScript.echo(" ------ ")
Just put this in calen.bat or calen.cmd and run it on any reasonably recent Windows.
Never struggle with another convoluted batch file again.
I know I am a bit late to this, but if you have node.js installed on your system you can use the bat file to call in a node function and execute your javascript code.
https://nodejs.org/en/
Node.js (when using modules) lets you do quite a few things bat files can do. Using only javascript you can edit/phrase local files, run exe files ect... ect..
A step by step guide to setting this up would be:
1) download and install node.js https://nodejs.org/en/download/
2) Create a javascript file on your computer with the js code you want to run.
In this file you will add the code to allow node.js to access local files on your machine. Put the below code at the top of your javascript file:
//Load required modules
fs = require('fs')
//Function to read local files
fs.readFile('path-to-file/this-is-my-file.txt', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
//data is the text file
}
3) create a bat file like this:
echo off
node "path-to-javascript\index.js"
And you're all setup!
Depends on which javascript you mean. You have few options - all the scripts bellow should be saved with .bat extension:
1) JScript that comes with csript.exe:
#if (#X) == (#Y) #end /*
#cscript //E:JScript //nologo "%~f0" "%*"
#exit /b %errorlevel%
*/
WScript.StdOut.WriteLine("Echo from cscript's javascript");
2) javascript that comes with HTA/IExplorer (which allows you also to use UI elements and access to the local file system):
<!-- :
#echo off
mshta.exe "%~f0"
exit /b %errorlevel%
-->
<html>
<head>
<title>~~~~</title>
<!--meta http-equiv="X-UA-Compatible" content="IE=edge"-->
</head>
<body>
<font size="15"><b>Hello from HTA's javascript</b></font>
<script type="text/javascript">
setTimeout(function() {
document.body.innerHTML=document.body.innerHTML + "<p/><p><font size='7'>Hello from HTA's javascript</font></p>";;
}, 2000);
</script>
</body>
</html>
3) JSCrip.NET - may be most powerfull option as gives you access to the .NET framework (though it creates a small .exe file):
#if (#X)==(#Y) #end /* JScript comment
#echo off
setlocal
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do (
set "jsc=%%v"
)
if not exist "%~n0.exe" (
"%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0"
)
%~n0.exe %*
endlocal & exit /b %errorlevel%
*/
import System;
Console.Write("Echo from .NET")
There are ways to use it without creating this exe file ,but this is the most readable way according to me.
4) If you are aming NODE.JS there's also a way:
0</* ::
#echo off
echo hello from batch
node "%~f0" %*
exit /b %errorlevel%
*/0;
console.log('Hello from Node');
on Windows, in a batch file, try
cscript jsfile.js
You can run a JScript script from a batch-file with the command-line based scripting host CScript.exe.
You would need the script in a separate file though which you pass as an argument to CScript.exe. If you want to keep everything in a sinle file, you can embed the JScript code in you batch-file, dump it to a temporary file which you pass to CScript.exe and delete the temporary script file afterwards.
There might be more elegant solutions (hopefully)
It is, sort of. On Windows only, of course.
That said, there is probably a better way to do this. What do you need the JavaScript to do? Why does it have to be JavaScript?
Short answer: no.
Javascript (when run from a browser) can't access the client resources (this is by design, to avoid security risks).
You can use Javascript outside of the browser, to create scripts, but you should provide more details on what you are trying to do (and what Operative System you expect to run this on).
Also, check this page for more details.
You can run a JScript script from a batch-file with the command-line based scripting host CScript.exe.
You would need the script in a separate file though which you pass as an argument to CScript.exe. If you want to keep everything in a single file, you can embed the JScript code in you batch-file, dump it to a temporary file which you pass to CScript.exe and delete the temporary script file afterwards.
There might be more elegant solutions (hopefully)
Two related questions:
Is there an API to produce a list of all the installed extensions in Firefox?
If so, how would I uniquely identify an extension? What I need is to have an ID that persists through different versions of an extension and ideally through a renaming (so name may not be the best option). Is it GUID?
Thanks!
Note: this answer is outdated. nsIExtensionManager was replaced by AddonManager, and FUEL is deprecated.
You can get the list of items from nsIExtensionManager. Yes there is a unique ID for extensions (nsIUpdateItem::id), as specified in the install manifest.
On a second thought, this is where FUEL is really useful. Try this in the Error Console:
Application.extensions.all.forEach(function(item) { alert(item.id) })
To get extensions list, Please take a look at nsExtensionManager.js in components folder,
there is a variable called validExtensions which use to generate extensions.ini in firefox profile directory
For unique ID, I guess its depend on extensions itself, because some extensions like noscript, adblockplus use GUID, and some extensions like firebug,foxmarks using email address style.
From outside of Firefox (in version 60.0 at least) the installed extensions list can be obtained from extensions.json file in profile directory. There can be also found extensions.sqlite and addons.sqlite sqlite databases, but they don't cover all the extensions.
There is also addons.json but it does not contain 'active' flag (i.e. whether extension is active, enabled or disabled).
To get CSV-like list of installed extensions with type and active flag the following XPath3 query can be used:
( json-doc("extensions.json") ? addons ? * )
! (( ?type, ?defaultLocale ?name, ?active )
=> string-join(",") || "
" ) => string-join()
Output example:
extension,Mozilla Archive Format,false
extension,Restart,false
theme,Default,false
webextension,Add HTTPS,true
webextension,Greasemonkey,true
NB: for a correct CSV it also needs to wrap with quotes the values containing comma or quotation mark and escape the quotation marks.
From a shell, using xq command, and with filter for active extensions:
xq ' ( json-doc("extensions.json") ? addons ? * ) [ ?active eq true() ]
! (( ?type, ?defaultLocale ?name, ?active )
=> string-join(",") || "
" ) => string-join() '
Output example:
webextension,Add HTTPS,true
webextension,Greasemonkey,true
xq script:
#!/bin/bash
declare_ns_map='declare namespace map = "http://www.w3.org/2005/xpath-functions/map";'
declare_ns_array='declare namespace array = "http://www.w3.org/2005/xpath-functions/array";'
q="$1"; shift
saxonhe-xquery -qs:"$declare_ns_map $declare_ns_array $q" "$#" \!omit-xml-declaration=yes \!indent=yes
saxonhe-xquery script (a wrapper for Saxon XQuery):
#!/bin/sh
exec java -classpath /usr/share/java/Saxon-HE.jar net.sf.saxon.Query "$#"
Update
A slightly simpler query than XPath to get the same result using jq JSON processor:
jq -j '.addons [] | ( .type, ",", .defaultLocale.name, ",", .active, "\n" )' extensions.json | sort
Output only active extension and generate output in CSV format (using #csv filter):
jq -r '.addons[] | select( .active == true )
| [ .type, .defaultLocale.name, .active ] | #csv ' extensions.json
A similar select via the jj (manual), but without an ability to have output in a plain text format (i.e. not JSON):
jj -i ./extensions.json 'addons.#( active == true )#
.[type,defaultLocale.name,active] .#pretty'
For documentation and backup purposes, I wanted a list of all the extensions I installed, including a link to its page at addons.mozilla.org so I could easily reinstall them if necessary.
First, cd into the firefox profile directory. For example:
cd ~/.mozilla/firefox/juxa1m2n.default-1644874267533
The addons.mozilla.org site is internationalized. When creating the URLs we need to embed our preferred language code. To prepare for this, we set a variable, lang, to the language portion of our LANG environment variable:
lang=$(grep -Eo '^[^.]*' <<<"$LANG")
Then use jq to list your enabled or disabled extensions that you installed.
List enabled firefox extensions
jq --arg lang "$lang" -j '.addons |
map(select(.type == "extension" and .location == "app-profile" and (.userDisabled | not)))
| .[] | "- [",.defaultLocale.name,"]",
"(https://addons.mozilla.org/\($lang)/firefox/addon/",(.id|#uri),")\n" ' \
extensions.json
Result in my case:
- [Open in Browser](https://addons.mozilla.org/en-US/firefox/addon/openinbrowser%40www.spasche.net)
- [Bookmarklets context menu](https://addons.mozilla.org/en-US/firefox/addon/%7B8d2a1b8a-2ff6-4bde-aae4-4a9dd54b7e66%7D)
- [ContextSearch web-ext](https://addons.mozilla.org/en-US/firefox/addon/%7B5dd73bb9-e728-4d1e-990b-c77d8e03670f%7D)
- [Export Cookies](https://addons.mozilla.org/en-US/firefox/addon/%7B36bdf805-c6f2-4f41-94d2-9b646342c1dc%7D)
- [Wayback Machine](https://addons.mozilla.org/en-US/firefox/addon/wayback_machine%40mozilla.org)
- [Duplicate Tab](https://addons.mozilla.org/en-US/firefox/addon/%7B54fa1e34-a0ad-4526-a81b-b06139adf332%7D)
- [Reader View](https://addons.mozilla.org/en-US/firefox/addon/%7B2495d258-41e7-4cd5-bc7d-ac15981f064e%7D)
- [FaviconSwitcher](https://addons.mozilla.org/en-US/firefox/addon/%7B1220100b-db8f-419f-9cd4-ed7a51cee7f3%7D)
- [Display #Anchors](https://addons.mozilla.org/en-US/firefox/addon/display-anchors%40robwu.nl)
- [CopyTabTitleUrl](https://addons.mozilla.org/en-US/firefox/addon/CopyTabTitleUrl%40bugbugnow.net)
- [Stylus](https://addons.mozilla.org/en-US/firefox/addon/%7B7a7a4a92-a2a0-41d1-9fd7-1e92480d612d%7D)
- [Nuke Anything](https://addons.mozilla.org/en-US/firefox/addon/%7B1ced4832-f06e-413f-aa14-9eb63ad40ace%7D)
- [New Tab Beside](https://addons.mozilla.org/en-US/firefox/addon/%7B93c2f785-16bd-49fa-91f3-6a28a8f0d7f9%7D)
- [AlwaysSmile](https://addons.mozilla.org/en-US/firefox/addon/alwayssmile%40mozilla.org)
I formatted it as a list of links using Markdown syntax. You can paste it into a Markdown document.
List disabled firefox extensions
jq --arg lang "$lang" -j '.addons | map(select(.type == "extension" and .location == "app-profile" and .userDisabled)) | .[] |
"- [",.defaultLocale.name,"](https://addons.mozilla.org/\($lang)/firefox/addon/",(.id|#uri),")\n" ' extensions.json