aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* util.jsonschema: Silence Teal warnings about utf8 libraryKim Alvefur2023-06-172-4/+4
| | | | | | Teal worries that we redefine the global. Also that the fallback was missing type information.
* util.jsonschema: Silence Teal warnings about counting items in tablesKim Alvefur2023-06-172-8/+8
| | | | | Teal thinks that these are key-value maps which are always of length zero, but that is not the case.
* mod_invites: Refactor argument handling using util.argparseKim Alvefur2022-01-121-63/+59
| | | | | | | | | | This makes it so that --admin and --role are no longer mutually exclusive, they the former is simply treated as another --role. This was likely a leftover from when only a single role was possible. It does however become unclear which should be the primary, since the order is not preserved by argparse. Bonus: Loading of modules is avoided with only the --help is shown.
* util.argparse: Add support for repeatable parametersKim Alvefur2022-01-052-2/+16
| | | | These are gathered into arrays
* mod_storage_sql: Fix column name in index check for PostgreSQLKim Alvefur2023-06-171-1/+1
| | | | Forgot to change the column name in 9a7523ea45cb
* mod_storage_sql: Adjust indentation to align with surrounding codeKim Alvefur2023-06-171-3/+3
|
* mod_storage_sql: Only remove old index if it existsKim Alvefur2023-06-171-9/+11
| | | | Avoids an error if the upgrade is performed twice..
* mod_storage_sql: Be more specific when checking for old index in SQLite3Kim Alvefur2023-06-171-1/+1
| | | | | Prevents false positives in the odd case where something other than an index with this name might exist.
* mod_storage_sql: Improve check for old table index on PostgreSQLKim Alvefur2023-06-161-1/+1
| | | | The "pg_indexes" view is much simpler to inspect than "pg_class"
* mod_storage_sql: Enable UPSERT with PostgreSQLKim Alvefur2023-06-161-1/+1
| | | | Tested. Works.
* doap: Fix typo in attribute nameKim Alvefur2023-06-161-1/+1
|
* util.pposix: Use Lua enum API for resource limit name argumentKim Alvefur2023-06-141-47/+33
| | | | Because diffstat.
* mod_storage_sql: Add some TODO comments for future UPSERT workKim Alvefur2023-06-111-0/+2
|
* mod_storage_sql: Do not keep track of quota when no quota is setKim Alvefur2023-06-111-20/+29
| | | | | | | | | No point in doing this expensive O(n) query if the result is not used for anything. Will still cache the total item count if an explicit query for this is performed, then try to keep it updated with new items added. Will likely forget eventually tho.
* mod_storage_sql: Add setting to tune SQLite3 performance vs safetyKim Alvefur2023-06-111-0/+38
| | | | | Notably the default journal_mode of DELETE is somewhat slow, some users might want to catch up to the amazing performance of internal storage.
* mod_storage_sql: Record all SQLite3 compile options for potential useKim Alvefur2023-06-101-4/+6
| | | | | Knowing what features are available could be useful for future experiments. For example, with the JSON module or full text search.
* util.sqlite3: Don't cache prepared statements for one-off queriesKim Alvefur2023-06-101-10/+8
| | | | | | | | | The :execute method is mainly used for one-off queries such as creating tables and indices. There is no need to cache this prepared statement, as those queries are only done on startup. Further, prepared statements can't be reused without being reset, so this was likely broken anyway.
* util.sqlite3: Deduplicate query methodsKim Alvefur2023-06-101-34/+27
| | | | | | | | | | | | | | There were 3 very similar methods: - :execute() - :execute_query() - :execute_update() The first one returns the prepared statement and is mainly used internally in the library for CREATE statements. The later two only really differ in how the results are returned. Those two are one main method and one small one that only picks out the iterator.
* util.sqlite3: Fix indentationKim Alvefur2023-06-101-5/+7
|
* mod_storage_sql: Compose a keyval+ store out of keyval and map store methodsKim Alvefur2023-06-101-0/+17
| | | | | | | Removes the need for the shim in storagemanager. The methods only really access the 'store' property of the first (self) argument, so this is safe.
* mod_storage_sql: Add UPSERT supportKim Alvefur2023-06-101-7/+41
| | | | | | | Currently limited to SQLite3 for lack of testing on other databases. Adds a migration to replace the non-UNIQUE prosody_index, renaming it prosody_unique_index since ALTER INDEX does not seem to be portable.
* tools: Update imports to use new prosody.* namespaceKim Alvefur2023-06-089-29/+59
|
* Merge 0.12->trunkKim Alvefur2023-06-102-1/+3
|\
| * mod_http: Fix error if 'access_control_allow_origins' is setKim Alvefur2023-06-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | Because it changes the type of the 'opt_origins' variable from util.set to the internal _items table so next time an http app is added an error "attempt to call a nil value (method 'empty')" is triggered. The value is not used anywhere else. Noticed when reviewing uses of the '_items' set property. Not reported by any users, implying this setting is rarely used.
| * util.array: Expose new() on module tableKim Alvefur2023-06-101-0/+2
| | | | | | | | | | | | For consistency with other utils. Consistency is good.
* | mod_http: Simplify conversion of Set to ArrayKim Alvefur2023-06-101-1/+1
| | | | | | | | | | Avoids the _items semi-private value, that is used everywhere for some reason.
* | util.datamanager: Halve size of list indexKim Alvefur2021-05-141-11/+15
| | | | | | | | | | Instead of storing (start, length) tuples, store the offset to the end of items and derive length using the previous entry.
* | mod_storage_internal: Use a binary search for time based rangesKim Alvefur2021-05-121-8/+55
| | | | | | | | | | | | | | | | | | Iterating over an entire archive to find a few items in the far end from where iteration started is expensive, and probably more expensive with the lazy-loading of items added in the previous commit. Since we can now efficiently read items in random order, we can now use a binary search to find a better starting point for iteration.
* | mod_storage_internal: Lazy-load archive items while iteratingKim Alvefur2021-05-121-59/+57
| | | | | | | | | | | | | | | | | | | | Very large list files previously ran into limits of the Lua parser, or just caused Prosody to freeze while parsing. Using the new index we can parse individual items one at a time. This probably won't reduce overall CPU usage, probably the opposite, but it will reduce the number of items in memory at once and allow collection of items after we iterated past them.
* | util.datamanager: Add O(1) list indexing with on-disk indexKim Alvefur2021-05-111-0/+191
| | | | | | | | | | | | | | | | | | | | | | | | Index file contains offsets and lengths of each item() which allows seeking directly to each item and reading it without parsing the entire file. Also allows tricks like binary search, assuming items have some defined order. We take advantage of the 1-based indexing in tables to store a magic header in the 0 position, so that table index 1 ends up at file index 1.
* | storagemanager tests: Reorder test data in chronological orderKim Alvefur2021-05-111-13/+13
| | | | | | | | | | | | | | Why was the test data not in chronological order? Altho, maybe that was the point? Except for MAM, the data might *not* be in chronological order!
* | mod_admin_shell: Use new serialize preset to simplify default configKim Alvefur2023-06-091-2/+5
| | | | | | | | Two pairs replaced by one. Blame lua-format for the line diff delta.
* | util.serialization: Add a "pretty" presetKim Alvefur2023-06-091-0/+4
| | | | | | | | | | This is the config I want 90% of the time when just showing data in the console or so.
* | doc/hgrc-email: Example config for using 'hg email' to contributeKim Alvefur2023-06-071-0/+16
| | | | | | | | | | | | | | The initial setup can be tricky if you don't know what and were settings should be added. This should maybe also go into site/doc/contributing
* | doc/hgrc: Some useful Mercurial settingsKim Alvefur2023-06-071-0/+43
| | | | | | | | | | Some useful settings that might benefit new contributors and get them up to speed with Modern Mercurialâ„¢ faster :)
* | mod_admin_shell: Warn when (un-)loading module would be undone by restartKim Alvefur2023-06-061-0/+12
| | | | | | | | Reminder to update the configuration if the change is to be permanent.
* | mod_http: Make RFC 7239 Forwarded opt-in for now to be safeKim Alvefur2023-06-032-4/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | Supporting both methods at the same time may open to spoofing attacks, whereby a client sends a Forwarded header that is not stripped by a reverse proxy, leading Prosody to use that instead of the X-Forwarded-* headers actually sent by the proxy. By only supporting one at a time, it can be configured to match what the proxy uses. Disabled by default since implementations are sparse and X-Forwarded-* are everywhere.
* | mod_http: Use RFC 7239 Forwarded header to find original client IPKim Alvefur2023-06-032-1/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Prefer over X-Forwarded-* since it has an actual specification. Main practical difference is that Forwarded may carry more properties than only the IP address since it is a structured header. Since we parse it into an array, it is easier to do the logical thing and iterate backwards trough proxies until an untrusted one is encountered. Compare the handling of X-Forwarded-For. The 'secure' field now accounts for the full chain of proxies, which must be secure all the way to be considered secure.
* | mod_http: Handle bracketed IP address format from RFC 7239Kim Alvefur2023-06-031-0/+6
| | | | | | | | | | | | There are hints that this format might be used in X-Forwarded-For as well, so best handle it everywhere. Strips both brackets and optional port number.
* | util.http: Implement parser for RFC 7239 Forwarded headerKim Alvefur2023-06-033-0/+55
| | | | | | | | | | | | | | | | Standardized and structured replacement for the X-Forwarded-For, X-Forwarded-Proto set of headers. Notably, this allows per-hop protocol information, unlike X-Forwarded-Proto which is always a single value for some reason.
* | util.set: Remove duplicate __freeze metamethodKim Alvefur2023-06-011-9/+0
| | | | | | | | Backs out 895a82c5d8d4 beacuse __freeze already added in a96a2fbcc6c0
* | Merge 0.12->trunkKim Alvefur2023-05-311-4/+5
|\|
| * util.prosodyctl.check: Fix error where hostname can't be turned into A labelKim Alvefur2023-05-311-4/+5
| | | | | | | | | | | | | | | | | | Where gethostname or tohostname returns an invalid name, e.g. containing underscores or something, to_ascii would reject this and return nil, which triggers an error in the dns lookup. Reported by prova2 in the chat, for whom tohostname returned a long name containing underscores.
* | util.startup: Record current version in a metricKim Alvefur2023-05-311-1/+1
| | | | | | | | | | Useful to have this info available when juggling metrics, e.g. to see if things changed between versions.
* | util.startup: Remove componentmanager backwards compatibilityKim Alvefur2023-05-311-5/+0
| | | | | | | | Module was removed in 0.8.0 in c52b06de9b27
* | net.http.server: Return request ID in header to aid debuggingKim Alvefur2023-05-291-1/+1
| | | | | | | | Eases locating the request in logs
* | mod_admin_shell: Show internal URL where different from externalKim Alvefur2023-05-281-4/+8
| |
* | net.tls_luasec: Expose method for loading a certificateKim Alvefur2023-05-272-2/+2
| | | | | | | | | | Further isolates LuaSec from Prosody core, with the ultimate goal of allowing LuaSec to be replaced more easily.
* | net.certmanager: Move LuaSec feature detection to net.tls_luasecKim Alvefur2023-05-272-35/+36
| | | | | | | | | | Further isolates LuaSec from Prosody core, with the ultimate goal of allowing LuaSec to be replaced more easily.
* | util.dependencies: Print tables itself to reduce number of importsKim Alvefur2023-05-261-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rationale: See diffstat When this module is imported, it ends up calling stty via term_width() in util.human.io.table(). When this happens outside of a terminal, the following message is sent to stdout: stty: 'standard input': Inappropriate ioctl for device Not importing this module avoids that. Furthermore three is value in this module having minimal dependencies as they might not be available when it does the checks. Ref a1fed82c44b9