Files
cista-storage/cista/util/pwgen.py
T
LeoVasanko 8c93a4f2b5 Add OnlyOffice-based preview for office documents
Replace Aspose.Words with OnlyOffice Document Server for generating
bitmap previews of office documents (Word, Excel, PowerPoint, etc.).

Backend:
- Add cista/onlyoffice.py conversion client
- Convert office docs directly to PNG via OnlyOffice, then AVIF via pyvips
- Make office previews optional based on OnlyOffice availability
- Remove Aspose.Words dependency and all related code
- Add spreadsheet and presentation format support

Frontend:
- Mark office files as previewable in Document.ts
- Add office extensions to MediaPreview.vue preview list
- Fix pre-existing @ts-ignore in HeaderMain.vue

Tests:
- Fix test_lrucache.py parameter name (open -> opener)

Also run ruff format across the codebase to satisfy linter checks.
2026-04-26 06:59:01 +00:00

1039 lines
13 KiB
Python

import secrets
def generate(n=4):
"""Generate a password of random words without repeating any word."""
wl = list(words)
return ".".join(wl.pop(secrets.randbelow(len(wl))) for i in range(n))
# A custom list of 1024 common 3-6 letter words, with unique 3-prefixes and no prefix words, entropy 2.1b/letter 10b/word
words: list = [
"able",
"about",
"absent",
"abuse",
"access",
"acid",
"across",
"act",
"adapt",
"add",
"adjust",
"admit",
"adult",
"advice",
"affair",
"afraid",
"again",
"age",
"agree",
"ahead",
"aim",
"air",
"aisle",
"alarm",
"album",
"alert",
"alien",
"all",
"almost",
"alone",
"alpha",
"also",
"alter",
"always",
"amazed",
"among",
"amused",
"anchor",
"angle",
"animal",
"ankle",
"annual",
"answer",
"any",
"apart",
"appear",
"april",
"arch",
"are",
"argue",
"army",
"around",
"array",
"art",
"ascent",
"ash",
"ask",
"aspect",
"assume",
"asthma",
"atom",
"attack",
"audit",
"august",
"aunt",
"author",
"avoid",
"away",
"awful",
"axis",
"baby",
"back",
"bad",
"bag",
"ball",
"bamboo",
"bank",
"bar",
"base",
"battle",
"beach",
"become",
"beef",
"before",
"begin",
"behind",
"below",
"bench",
"best",
"better",
"beyond",
"bid",
"bike",
"bind",
"bio",
"birth",
"bitter",
"black",
"bleak",
"blind",
"blood",
"blue",
"board",
"body",
"boil",
"bomb",
"bone",
"book",
"border",
"boss",
"bottom",
"bounce",
"bowl",
"box",
"boy",
"brain",
"bread",
"bring",
"brown",
"brush",
"bubble",
"buck",
"budget",
"build",
"bulk",
"bundle",
"burden",
"bus",
"but",
"buyer",
"buzz",
"cable",
"cache",
"cage",
"cake",
"call",
"came",
"can",
"car",
"case",
"catch",
"cause",
"cave",
"celery",
"cement",
"census",
"cereal",
"change",
"check",
"child",
"choice",
"chunk",
"cigar",
"circle",
"city",
"civil",
"class",
"clean",
"client",
"close",
"club",
"coast",
"code",
"coffee",
"coil",
"cold",
"come",
"cool",
"copy",
"core",
"cost",
"cotton",
"couch",
"cover",
"coyote",
"craft",
"cream",
"crime",
"cross",
"cruel",
"cry",
"cube",
"cue",
"cult",
"cup",
"curve",
"custom",
"cute",
"cycle",
"dad",
"damage",
"danger",
"daring",
"dash",
"dawn",
"day",
"deal",
"debate",
"decide",
"deer",
"define",
"degree",
"deity",
"delay",
"demand",
"denial",
"depth",
"derive",
"design",
"detail",
"device",
"dial",
"dice",
"die",
"differ",
"dim",
"dinner",
"direct",
"dish",
"divert",
"dizzy",
"doctor",
"dog",
"dollar",
"domain",
"donate",
"door",
"dose",
"double",
"dove",
"draft",
"dream",
"drive",
"drop",
"drum",
"dry",
"duck",
"dumb",
"dune",
"during",
"dust",
"dutch",
"dwarf",
"eager",
"early",
"east",
"echo",
"eco",
"edge",
"edit",
"effort",
"egg",
"eight",
"either",
"elbow",
"elder",
"elite",
"else",
"embark",
"emerge",
"emily",
"employ",
"enable",
"end",
"enemy",
"engine",
"enjoy",
"enlist",
"enough",
"enrich",
"ensure",
"entire",
"envy",
"equal",
"era",
"erode",
"error",
"erupt",
"escape",
"essay",
"estate",
"ethics",
"evil",
"evoke",
"exact",
"excess",
"exist",
"exotic",
"expect",
"extent",
"eye",
"fabric",
"face",
"fade",
"faith",
"fall",
"family",
"fan",
"far",
"father",
"fault",
"feel",
"female",
"fence",
"fetch",
"fever",
"few",
"fiber",
"field",
"figure",
"file",
"find",
"first",
"fish",
"fit",
"fix",
"flat",
"flesh",
"flight",
"float",
"fluid",
"fly",
"foam",
"focus",
"fog",
"foil",
"follow",
"food",
"force",
"fossil",
"found",
"fox",
"frame",
"fresh",
"friend",
"frog",
"fruit",
"fuel",
"fun",
"fury",
"future",
"gadget",
"gain",
"galaxy",
"game",
"gap",
"garden",
"gas",
"gate",
"gauge",
"gaze",
"genius",
"ghost",
"giant",
"gift",
"giggle",
"ginger",
"girl",
"give",
"glass",
"glide",
"globe",
"glue",
"goal",
"god",
"gold",
"good",
"gospel",
"govern",
"gown",
"grant",
"great",
"grid",
"group",
"grunt",
"guard",
"guess",
"guide",
"gulf",
"gun",
"gym",
"habit",
"hair",
"half",
"hammer",
"hand",
"happy",
"hard",
"hat",
"have",
"hawk",
"hay",
"hazard",
"head",
"hedge",
"height",
"help",
"hen",
"hero",
"hidden",
"high",
"hill",
"hint",
"hip",
"hire",
"hobby",
"hockey",
"hold",
"home",
"honey",
"hood",
"hope",
"horse",
"host",
"hotel",
"hour",
"hover",
"how",
"hub",
"huge",
"human",
"hungry",
"hurt",
"hybrid",
"ice",
"icon",
"idea",
"idle",
"ignore",
"ill",
"image",
"immune",
"impact",
"income",
"index",
"infant",
"inhale",
"inject",
"inmate",
"inner",
"input",
"inside",
"into",
"invest",
"iron",
"island",
"issue",
"italy",
"item",
"ivory",
"jacket",
"jaguar",
"james",
"jar",
"jazz",
"jeans",
"jelly",
"jewel",
"job",
"joe",
"joke",
"joy",
"judge",
"juice",
"july",
"jump",
"june",
"just",
"kansas",
"kate",
"keep",
"kernel",
"key",
"kick",
"kid",
"kind",
"kiss",
"kit",
"kiwi",
"knee",
"knife",
"know",
"labor",
"lady",
"lag",
"lake",
"lamp",
"laptop",
"large",
"later",
"laugh",
"lava",
"law",
"layer",
"lazy",
"leader",
"left",
"legal",
"lemon",
"length",
"lesson",
"letter",
"level",
"liar",
"libya",
"lid",
"life",
"light",
"like",
"limit",
"line",
"lion",
"liquid",
"list",
"little",
"live",
"lizard",
"load",
"local",
"logic",
"long",
"loop",
"lost",
"loud",
"love",
"low",
"loyal",
"lucky",
"lumber",
"lunch",
"lust",
"luxury",
"lyrics",
"mad",
"magic",
"main",
"major",
"make",
"male",
"mammal",
"man",
"map",
"market",
"mass",
"matter",
"maze",
"mccoy",
"meadow",
"media",
"meet",
"melt",
"member",
"men",
"mercy",
"mesh",
"method",
"middle",
"milk",
"mimic",
"mind",
"mirror",
"miss",
"mix",
"mobile",
"model",
"mom",
"monkey",
"moon",
"more",
"mother",
"mouse",
"move",
"much",
"muffin",
"mule",
"must",
"mutual",
"myself",
"myth",
"naive",
"name",
"napkin",
"narrow",
"nasty",
"nation",
"near",
"neck",
"need",
"nephew",
"nerve",
"nest",
"net",
"never",
"news",
"next",
"nice",
"night",
"noble",
"noise",
"noodle",
"normal",
"nose",
"note",
"novel",
"now",
"number",
"nurse",
"nut",
"oak",
"obey",
"object",
"oblige",
"obtain",
"occur",
"ocean",
"odor",
"off",
"often",
"oil",
"okay",
"old",
"olive",
"omit",
"once",
"one",
"onion",
"online",
"open",
"opium",
"oppose",
"option",
"orange",
"orbit",
"order",
"organ",
"orient",
"orphan",
"other",
"outer",
"oval",
"oven",
"own",
"oxygen",
"oyster",
"ozone",
"pact",
"paddle",
"page",
"pair",
"palace",
"panel",
"paper",
"parade",
"past",
"path",
"pause",
"pave",
"paw",
"pay",
"peace",
"pen",
"people",
"pepper",
"permit",
"pet",
"philip",
"phone",
"phrase",
"piano",
"pick",
"piece",
"pig",
"pilot",
"pink",
"pipe",
"pistol",
"pitch",
"pizza",
"place",
"please",
"pluck",
"poem",
"point",
"polar",
"pond",
"pool",
"post",
"pot",
"pound",
"powder",
"praise",
"prefer",
"price",
"profit",
"public",
"pull",
"punch",
"pupil",
"purity",
"push",
"put",
"puzzle",
"qatar",
"quasi",
"queen",
"quite",
"quoted",
"rabbit",
"race",
"radio",
"rail",
"rally",
"ramp",
"range",
"rapid",
"rare",
"rather",
"raven",
"raw",
"razor",
"real",
"rebel",
"recall",
"red",
"reform",
"region",
"reject",
"relief",
"remain",
"rent",
"reopen",
"report",
"result",
"return",
"review",
"reward",
"rhythm",
"rib",
"rich",
"ride",
"rifle",
"right",
"ring",
"riot",
"ripple",
"risk",
"ritual",
"river",
"road",
"robot",
"rocket",
"room",
"rose",
"rotate",
"round",
"row",
"royal",
"rubber",
"rude",
"rug",
"rule",
"run",
"rural",
"sad",
"safe",
"sage",
"sail",
"salad",
"same",
"santa",
"sauce",
"save",
"say",
"scale",
"scene",
"school",
"scope",
"screen",
"scuba",
"sea",
"second",
"seed",
"self",
"semi",
"sense",
"series",
"settle",
"seven",
"shadow",
"she",
"ship",
"shock",
"shrimp",
"shy",
"sick",
"side",
"siege",
"sign",
"silver",
"simple",
"since",
"siren",
"sister",
"six",
"size",
"skate",
"sketch",
"ski",
"skull",
"slab",
"sleep",
"slight",
"slogan",
"slush",
"small",
"smile",
"smooth",
"snake",
"sniff",
"snow",
"soap",
"soccer",
"soda",
"soft",
"solid",
"son",
"soon",
"sort",
"south",
"space",
"speak",
"sphere",
"spirit",
"split",
"spoil",
"spring",
"spy",
"square",
"state",
"step",
"still",
"story",
"strong",
"stuff",
"style",
"submit",
"such",
"sudden",
"suffer",
"sugar",
"suit",
"summer",
"sun",
"supply",
"sure",
"swamp",
"sweet",
"switch",
"sword",
"symbol",
"syntax",
"syria",
"system",
"table",
"tackle",
"tag",
"tail",
"talk",
"tank",
"tape",
"target",
"task",
"tattoo",
"taxi",
"team",
"tell",
"ten",
"term",
"test",
"text",
"that",
"theme",
"this",
"three",
"thumb",
"tibet",
"ticket",
"tide",
"tight",
"tilt",
"time",
"tiny",
"tip",
"tired",
"tissue",
"title",
"toast",
"today",
"toe",
"toilet",
"token",
"tomato",
"tone",
"tool",
"top",
"torch",
"toss",
"total",
"toward",
"toy",
"trade",
"tree",
"trial",
"trophy",
"true",
"try",
"tube",
"tumble",
"tunnel",
"turn",
"twenty",
"twice",
"two",
"type",
"ugly",
"unable",
"uncle",
"under",
"unfair",
"unique",
"unlock",
"until",
"unveil",
"update",
"uphold",
"upon",
"upper",
"upset",
"urban",
"urge",
"usage",
"use",
"usual",
"vacuum",
"vague",
"valid",
"van",
"vapor",
"vast",
"vault",
"vein",
"velvet",
"vendor",
"very",
"vessel",
"viable",
"video",
"view",
"villa",
"violin",
"virus",
"visit",
"vital",
"vivid",
"vocal",
"voice",
"volume",
"vote",
"voyage",
"wage",
"wait",
"wall",
"want",
"war",
"wash",
"water",
"wave",
"way",
"wealth",
"web",
"weird",
"were",
"west",
"wet",
"what",
"when",
"whip",
"wide",
"wife",
"will",
"window",
"wire",
"wish",
"wolf",
"woman",
"wonder",
"wood",
"work",
"wrap",
"wreck",
"write",
"wrong",
"xander",
"xbox",
"xerox",
"xray",
"yang",
"yard",
"year",
"yellow",
"yes",
"yin",
"york",
"you",
"zane",
"zara",
"zebra",
"zen",
"zero",
"zippo",
"zone",
"zoo",
"zorro",
"zulu",
]
if len(words) != 1024:
raise ValueError("pwgen word list must contain exactly 1024 words")