aboutsummaryrefslogtreecommitdiffstats
path: root/src/server.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.py')
-rw-r--r--src/server.py246
1 files changed, 154 insertions, 92 deletions
diff --git a/src/server.py b/src/server.py
index 6c4743d..8fc0235 100644
--- a/src/server.py
+++ b/src/server.py
@@ -31,275 +31,335 @@ MAX_PASSPHRASE_SIZE = 512
MAX_LANGUAGE_SIZE = 32
MAX_DECRYPT_SIZE = 3 * 1024 * 1024 # headroom for decrypt requests with long passphrases
ID_PATTERN = re.compile(r"^[0-9]{10,}[a-f0-9]{40}$")
-LANGUAGE_PATTERN = re.compile(r"^[a-z0-9_+#-]{1,32}$")
+LANGUAGE_PATTERN = re.compile(r"^[a-z0-9_.+#-]{1,32}$")
REQUESTS_PER_WINDOW = int(os.environ.get("KJ_CLIPBOARD_RATE_LIMIT", "60"))
RATE_WINDOW_SECONDS = int(os.environ.get("KJ_CLIPBOARD_RATE_WINDOW", "60"))
ALLOWED_LANGUAGES = {
"1c",
- "4d",
- "sap-abap",
- "abc",
"abnf",
"accesslog",
"actionscript",
+ "as",
"ada",
- "aiken",
- "ln",
- "alan",
"angelscript",
+ "asc",
"apache",
- "apex",
+ "apacheconf",
"applescript",
+ "osascript",
"arcade",
"arduino",
+ "ino",
"armasm",
+ "arm",
"asciidoc",
+ "adoc",
"aspectj",
"autohotkey",
"autoit",
"avrasm",
"awk",
+ "mawk",
+ "nawk",
+ "gawk",
"ballerina",
+ "bal",
"bash",
+ "sh",
+ "zsh",
"basic",
- "bbcode",
- "bicep",
- "blade",
"bnf",
- "bqn",
"brainfuck",
+ "bf",
"c",
+ "h",
"csharp",
"cpp",
+ "hpp",
+ "cc",
+ "hh",
+ "c++",
+ "h++",
+ "cxx",
+ "hxx",
"cal",
- "c3",
"cos",
- "candid",
+ "cls",
"capnproto",
- "chaos",
- "chapel",
- "cisco",
+ "capnp",
"clojure",
+ "clj",
"cmake",
- "cobol",
- "codeowners",
+ "cmake.in",
"coffeescript",
+ "coffee",
+ "cson",
+ "iced",
"coq",
- "cpc",
"crmsh",
+ "crm",
+ "pcmk",
"crystal",
+ "cr",
"csp",
"css",
- "curl",
- "cypher",
"d",
- "dafny",
"dart",
"dpr",
+ "dfm",
+ "pas",
+ "pascal",
"diff",
+ "patch",
"django",
+ "jinja",
"dns",
+ "zone",
+ "bind",
"dockerfile",
+ "docker",
"dos",
+ "bat",
+ "cmd",
"dsconfig",
"dts",
"dust",
- "dylan",
+ "dst",
"ebnf",
"elixir",
"elm",
"erlang",
+ "erl",
"excel",
+ "xls",
+ "xlsx",
"extempore",
+ "xtlang",
+ "xtm",
"fsharp",
+ "fs",
+ "fsx",
+ "fsi",
+ "fsscript",
"fix",
- "flix",
"fortran",
- "func",
+ "f90",
+ "f95",
"gcode",
+ "nc",
"gams",
+ "gms",
"gauss",
- "godot",
+ "gss",
"gherkin",
- "gleam",
- "hbs",
- "gn",
"go",
+ "golang",
"golo",
+ "gololang",
"gradle",
- "gf",
"graphql",
+ "gql",
"groovy",
- "gsql",
"haml",
"handlebars",
+ "hbs",
+ "html.hbs",
+ "html.handlebars",
"haskell",
+ "hs",
"haxe",
- "hlsl",
+ "hx",
"xml",
+ "html",
+ "xhtml",
+ "rss",
+ "atom",
+ "xjb",
+ "xsd",
+ "xsl",
+ "plist",
+ "svg",
"http",
+ "https",
"hy",
+ "hylang",
"inform7",
+ "i7",
"ini",
- "iptables",
+ "toml",
"irpf90",
"java",
+ "jsp",
"javascript",
- "jolie",
+ "js",
+ "jsx",
"json",
- "jsonata",
+ "jsonc",
+ "json5",
"julia",
+ "jl",
"julia-repl",
"kotlin",
- "l4",
+ "kt",
"lasso",
+ "lassoscript",
"tex",
"ldif",
"leaf",
- "lean",
"less",
- "liquid",
"lisp",
"livecodeserver",
"livescript",
- "lookml",
"lua",
- "luau",
- "macaulay2",
- "magik",
+ "pluto",
"makefile",
+ "mk",
+ "mak",
+ "make",
"markdown",
+ "md",
+ "mkdown",
+ "mkd",
"mathematica",
+ "mma",
+ "wl",
"matlab",
"maxima",
"mel",
"mercury",
- "metapost",
- "mint",
"mips",
- "mirc",
- "mirth",
+ "mipsasm",
"mizar",
- "mkb",
- "mlir",
"mojolicious",
"monkey",
"moonscript",
- "motoko",
+ "moon",
"n1ql",
- "never",
"nginx",
+ "nginxconf",
"nim",
+ "nimrod",
"nix",
"nsis",
- "oak",
- "ocl",
"objectivec",
+ "mm",
+ "objc",
+ "obj-c",
+ "obj-c++",
+ "objective-c++",
"ocaml",
- "odin",
"glsl",
"openscad",
+ "scad",
"ruleslanguage",
"oxygene",
- "papyrus",
"parser3",
"perl",
+ "pl",
+ "pm",
"pf",
- "phix",
+ "pf.conf",
"php",
- "pine",
"plaintext",
+ "txt",
+ "text",
"pony",
"pgsql",
- "poweron",
+ "postgres",
+ "postgresql",
"powershell",
- "prisma",
+ "ps",
+ "ps1",
"processing",
"prolog",
"properties",
"proto",
+ "protobuf",
"puppet",
+ "pp",
"python",
+ "py",
+ "gyp",
"profile",
"python-repl",
+ "pycon",
"k",
- "qsharp",
+ "kdb",
"qml",
"r",
- "raku",
- "pod6",
- "rakuquoting",
- "rakuregexe",
- "cshtml",
"reasonml",
- "redbol",
"rib",
"rsl",
- "rescript",
- "riscv",
- "risc",
"graph",
- "robot",
- "rpm-specfile",
+ "instances",
"ruby",
+ "rb",
+ "gemspec",
+ "podspec",
+ "thor",
+ "irb",
"rust",
- "rvt",
+ "rs",
"sas",
"scala",
"scheme",
"scilab",
+ "sci",
"scss",
- "sfz",
- "shexc",
"shell",
+ "console",
"smali",
"smalltalk",
+ "st",
"sml",
- "solidity",
- "spl",
"sql",
"stan",
+ "stanfuncs",
"stata",
"p21",
- "iecst",
+ "step",
+ "stp",
"stylus",
+ "styl",
"subunit",
- "supercollider",
- "svelte",
"swift",
"tcl",
- "terraform",
+ "tk",
"tap",
"thrift",
- "toit",
"tp",
- "tsql",
- "ttcn",
"twig",
+ "craftcms",
"typescript",
- "unicorn-rails-log",
- "unison",
+ "ts",
+ "tsx",
+ "mts",
+ "cts",
"vala",
"vbnet",
- "vba",
+ "vb",
"vbscript",
+ "vbs",
"verilog",
+ "v",
"vhdl",
"vim",
- "voltscript",
- "wgsl",
- "xsharp",
"axapta",
+ "x++",
"x86asm",
- "x86asmatt",
"xl",
+ "tao",
"xquery",
+ "xpath",
+ "xq",
+ "xqm",
"yml",
- "zenscript",
+ "yaml",
"zephir",
- "zig",
+ "zep",
+
}
@@ -609,6 +669,8 @@ def normalize_language(value):
return None
if len(lang) > MAX_LANGUAGE_SIZE:
return None
+ if lang in {"ls", "ml"}:
+ return None
if not LANGUAGE_PATTERN.match(lang):
return None
if lang not in ALLOWED_LANGUAGES: