mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 931b9735e9 | |||
| 8add53f8ab | |||
| 50d75bfc8f |
@@ -23,7 +23,7 @@ repos:
|
|||||||
- id: check-added-large-files
|
- id: check-added-large-files
|
||||||
|
|
||||||
- repo: https://github.com/crate-ci/typos
|
- repo: https://github.com/crate-ci/typos
|
||||||
rev: v1.43.4
|
rev: v1.43.3
|
||||||
hooks:
|
hooks:
|
||||||
- id: typos
|
- id: typos
|
||||||
- id: typos
|
- id: typos
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
Introduce a resolver command to allow flushing a server from the cache or to flush the complete cache. Contributed by @Omar007
|
|
||||||
@@ -19,16 +19,6 @@ hero:
|
|||||||
src: /assets/logo.svg
|
src: /assets/logo.svg
|
||||||
alt: continuwuity logo
|
alt: continuwuity logo
|
||||||
|
|
||||||
beforeFeatures:
|
|
||||||
- title: Matrix for Discord users
|
|
||||||
details: New to Matrix? Learn how Matrix compares to Discord
|
|
||||||
link: https://joinmatrix.org/guide/matrix-vs-discord/
|
|
||||||
buttonText: Find Out the Difference
|
|
||||||
- title: How Matrix Works
|
|
||||||
details: Learn how Matrix works under the hood, and what that means
|
|
||||||
link: https://matrix.org/docs/matrix-concepts/elements-of-matrix/
|
|
||||||
buttonText: Read the Guide
|
|
||||||
|
|
||||||
features:
|
features:
|
||||||
- title: 🚀 High Performance
|
- title: 🚀 High Performance
|
||||||
details: Built with Rust for exceptional speed and efficiency. Designed to run smoothly even on modest hardware.
|
details: Built with Rust for exceptional speed and efficiency. Designed to run smoothly even on modest hardware.
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
"message": "Welcome to Continuwuity! Important announcements about the project will appear here."
|
"message": "Welcome to Continuwuity! Important announcements about the project will appear here."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 9,
|
"id": 8,
|
||||||
"mention_room": false,
|
"mention_room": false,
|
||||||
"date": "2026-02-09",
|
"date": "2026-01-12",
|
||||||
"message": "Yesterday we released [v0.5.4](https://forgejo.ellis.link/continuwuation/continuwuity/releases/tag/v0.5.4). Bugfixes, performance improvements and more moderation features! There's also a security fix, so please update as soon as possible. Don't forget to join [our announcements channel](https://matrix.to/#/!jIdNjSM5X-V5JVx2h2kAhUZIIQ08GyzPL55NFZAH1vM/%2489TY9CqRg4-ff1MGo3Ulc5r5X4pakfdzT-99RD8Docc?via=ellis.link&via=explodie.org&via=matrix.org) to get important information sooner <3 "
|
"message": "Hey everyone!\n\nJust letting you know we've released [v0.5.3](https://forgejo.ellis.link/continuwuation/continuwuity/releases/tag/v0.5.3) - this one is a bit of a hotfix for an issue with inviting and allowing others to join rooms.\n\nIf you appreceate the round-the-clock work we've been doing to keep your servers secure over this holiday period, we'd really appreciate your support - you can sponsor individuals on our team using the 'sponsor' button at the top of [our GitHub repository](https://github.com/continuwuity/continuwuity). If you can't do that, even a star helps - spreading the word and advocating for our project helps keep it going.\n\nHave a lovely rest of your year \\\n[Jade \\(she/her\\)](https://matrix.to/#/%40jade%3Aellis.link) \n🩵"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,19 +112,6 @@ Query the destinations cache
|
|||||||
|
|
||||||
Query the overrides cache
|
Query the overrides cache
|
||||||
|
|
||||||
### `!admin query resolver flush-cache`
|
|
||||||
|
|
||||||
Flush a given server from the resolver caches or flush them completely
|
|
||||||
|
|
||||||
* Examples:
|
|
||||||
* Flush a specific server:
|
|
||||||
|
|
||||||
`!admin query resolver flush-cache matrix.example.com`
|
|
||||||
|
|
||||||
* Flush all resolver caches completely:
|
|
||||||
|
|
||||||
`!admin query resolver flush-cache --all`
|
|
||||||
|
|
||||||
## `!admin query pusher`
|
## `!admin query pusher`
|
||||||
|
|
||||||
pusher service
|
pusher service
|
||||||
|
|||||||
@@ -20,16 +20,6 @@ log into the server account (`@conduit`) from a web client
|
|||||||
|
|
||||||
## General potential issues
|
## General potential issues
|
||||||
|
|
||||||
### Configuration not working as expected
|
|
||||||
|
|
||||||
Sometimes you can make a mistake in your configuration that
|
|
||||||
means things don't get passed to Continuwuity correctly.
|
|
||||||
This is particularly easy to do with environment variables.
|
|
||||||
To check what configuration Continuwuity actually sees, you can
|
|
||||||
use the `!admin server show-config` command in your admin room.
|
|
||||||
Beware that this prints out any secrets in your configuration,
|
|
||||||
so you might want to delete the result afterwards!
|
|
||||||
|
|
||||||
### Potential DNS issues when using Docker
|
### Potential DNS issues when using Docker
|
||||||
|
|
||||||
Docker's DNS setup for containers in a non-default network intercepts queries to
|
Docker's DNS setup for containers in a non-default network intercepts queries to
|
||||||
|
|||||||
Generated
+9
-2
@@ -124,6 +124,7 @@
|
|||||||
"integrity": "sha512-m7L3oi4evTDODcY+Qk3cmY/p7GCaauSRe00D0AkXVohNvxFBt7F49uPwBSThS24I9d31zFuAED2jFqBeBlDqWw==",
|
"integrity": "sha512-m7L3oi4evTDODcY+Qk3cmY/p7GCaauSRe00D0AkXVohNvxFBt7F49uPwBSThS24I9d31zFuAED2jFqBeBlDqWw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@rspack/core": "2.0.0-alpha.1",
|
"@rspack/core": "2.0.0-alpha.1",
|
||||||
"@swc/helpers": "^0.5.18",
|
"@swc/helpers": "^0.5.18",
|
||||||
@@ -376,6 +377,7 @@
|
|||||||
"integrity": "sha512-tU8rUVaPyC8o8k4ezgigRVQuZhBAC41KWdwZZ0BldN6o+QXSEIb722RnxCTpa9FGK2riqcwJgM+OqqcqXsFpmw==",
|
"integrity": "sha512-tU8rUVaPyC8o8k4ezgigRVQuZhBAC41KWdwZZ0BldN6o+QXSEIb722RnxCTpa9FGK2riqcwJgM+OqqcqXsFpmw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@mdx-js/mdx": "^3.1.1",
|
"@mdx-js/mdx": "^3.1.1",
|
||||||
"@mdx-js/react": "^3.1.1",
|
"@mdx-js/react": "^3.1.1",
|
||||||
@@ -562,6 +564,7 @@
|
|||||||
"integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==",
|
"integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.8.0"
|
"tslib": "^2.8.0"
|
||||||
}
|
}
|
||||||
@@ -685,6 +688,7 @@
|
|||||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"acorn": "bin/acorn"
|
"acorn": "bin/acorn"
|
||||||
},
|
},
|
||||||
@@ -938,8 +942,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
|
||||||
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
|
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT"
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"node_modules/debug": {
|
"node_modules/debug": {
|
||||||
"version": "4.4.3",
|
"version": "4.4.3",
|
||||||
@@ -2969,6 +2972,7 @@
|
|||||||
"integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
|
"integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
@@ -2979,6 +2983,7 @@
|
|||||||
"integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
|
"integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"scheduler": "^0.27.0"
|
"scheduler": "^0.27.0"
|
||||||
},
|
},
|
||||||
@@ -3015,6 +3020,7 @@
|
|||||||
"integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==",
|
"integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
@@ -3482,6 +3488,7 @@
|
|||||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use clap::Subcommand;
|
use clap::Subcommand;
|
||||||
use conduwuit::{Err, Result, utils::time};
|
use conduwuit::{Result, utils::time};
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use ruma::OwnedServerName;
|
use ruma::OwnedServerName;
|
||||||
|
|
||||||
@@ -7,7 +7,6 @@ use crate::{admin_command, admin_command_dispatch};
|
|||||||
|
|
||||||
#[admin_command_dispatch]
|
#[admin_command_dispatch]
|
||||||
#[derive(Debug, Subcommand)]
|
#[derive(Debug, Subcommand)]
|
||||||
#[allow(clippy::enum_variant_names)]
|
|
||||||
/// Resolver service and caches
|
/// Resolver service and caches
|
||||||
pub enum ResolverCommand {
|
pub enum ResolverCommand {
|
||||||
/// Query the destinations cache
|
/// Query the destinations cache
|
||||||
@@ -19,14 +18,6 @@ pub enum ResolverCommand {
|
|||||||
OverridesCache {
|
OverridesCache {
|
||||||
name: Option<String>,
|
name: Option<String>,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// Flush a specific server from the resolver caches or everything
|
|
||||||
FlushCache {
|
|
||||||
name: Option<OwnedServerName>,
|
|
||||||
|
|
||||||
#[arg(short, long)]
|
|
||||||
all: bool,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[admin_command]
|
#[admin_command]
|
||||||
@@ -78,18 +69,3 @@ async fn overrides_cache(&self, server_name: Option<String>) -> Result {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[admin_command]
|
|
||||||
async fn flush_cache(&self, name: Option<OwnedServerName>, all: bool) -> Result {
|
|
||||||
if all {
|
|
||||||
self.services.resolver.cache.clear().await;
|
|
||||||
writeln!(self, "Resolver caches cleared!").await
|
|
||||||
} else if let Some(name) = name {
|
|
||||||
self.services.resolver.cache.del_destination(&name);
|
|
||||||
self.services.resolver.cache.del_override(&name);
|
|
||||||
self.write_str(&format!("Cleared {name} from resolver caches!"))
|
|
||||||
.await
|
|
||||||
} else {
|
|
||||||
Err!("Missing name. Supply a name or use --all to flush the whole cache.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -406,10 +406,6 @@ impl Service {
|
|||||||
|
|
||||||
/// Checks whether a given user is an admin of this server
|
/// Checks whether a given user is an admin of this server
|
||||||
pub async fn user_is_admin(&self, user_id: &UserId) -> bool {
|
pub async fn user_is_admin(&self, user_id: &UserId) -> bool {
|
||||||
if self.services.globals.server_user == user_id {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if self
|
if self
|
||||||
.services
|
.services
|
||||||
.server
|
.server
|
||||||
|
|||||||
@@ -105,68 +105,3 @@ body:not(.notTopArrived) header.rp-nav {
|
|||||||
.rspress-logo {
|
.rspress-logo {
|
||||||
height: 32px;
|
height: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* pre-hero */
|
|
||||||
.custom-section {
|
|
||||||
padding: 4rem 1.5rem;
|
|
||||||
background: var(--rp-c-bg);
|
|
||||||
}
|
|
||||||
|
|
||||||
.custom-cards {
|
|
||||||
display: flex;
|
|
||||||
gap: 2rem;
|
|
||||||
max-width: 800px;
|
|
||||||
margin: 0 auto;
|
|
||||||
justify-content: center;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.custom-card {
|
|
||||||
padding: 2rem;
|
|
||||||
border: 1px solid var(--rp-c-divider-light);
|
|
||||||
border-radius: 12px;
|
|
||||||
background: var(--rp-c-bg-soft);
|
|
||||||
text-decoration: none;
|
|
||||||
color: var(--rp-c-text-1);
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
flex: 1;
|
|
||||||
min-width: 280px;
|
|
||||||
max-width: 350px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.custom-card:hover {
|
|
||||||
border-color: var(--rp-c-brand);
|
|
||||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
||||||
transform: translateY(-2px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.custom-card h3 {
|
|
||||||
margin: 0 0 1rem 0;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
font-weight: 600;
|
|
||||||
color: var(--rp-c-text-0);
|
|
||||||
}
|
|
||||||
|
|
||||||
.custom-card p {
|
|
||||||
margin: 0 0 1.5rem 0;
|
|
||||||
color: var(--rp-c-text-2);
|
|
||||||
line-height: 1.6;
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.custom-card-button {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0.5rem 1.5rem;
|
|
||||||
background: var(--rp-c-brand);
|
|
||||||
color: white;
|
|
||||||
border-radius: 6px;
|
|
||||||
font-weight: 500;
|
|
||||||
text-align: center;
|
|
||||||
transition: background 0.2s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.custom-card:hover .custom-card-button {
|
|
||||||
background: var(--rp-c-brand-light);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -12,23 +12,6 @@ function HomeLayout(props: HomeLayoutProps) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<BasicHomeLayout
|
<BasicHomeLayout
|
||||||
beforeFeatures={
|
|
||||||
frontmatter.beforeFeatures ? (
|
|
||||||
<section className="custom-section">
|
|
||||||
<div className="rp-container">
|
|
||||||
<div className="custom-cards">
|
|
||||||
{frontmatter.beforeFeatures.map((item: any, index: number) => (
|
|
||||||
<a key={index} href={item.link} className="custom-card" target="_blank" rel="noopener noreferrer">
|
|
||||||
<h3>{item.title}</h3>
|
|
||||||
<p>{item.details}</p>
|
|
||||||
<span className="custom-card-button">{item.buttonText || 'Learn More'} →</span>
|
|
||||||
</a>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
) : <></>
|
|
||||||
}
|
|
||||||
afterFeatures={
|
afterFeatures={
|
||||||
(frontmatter.doc) ?
|
(frontmatter.doc) ?
|
||||||
<main className="rp-doc-layout__doc-container">
|
<main className="rp-doc-layout__doc-container">
|
||||||
|
|||||||
Reference in New Issue
Block a user