diff options
Diffstat (limited to 'src/server.py')
| -rw-r--r-- | src/server.py | 246 |
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: |
