Compare commits
23 commits
nex/wip-75
...
alpine-pac
Author | SHA1 | Date | |
---|---|---|---|
b562b8cf92 | |||
80e8900f04 | |||
|
4158c1cf62 | ||
|
edd5fc6c7e | ||
|
6b0288dd4c | ||
|
90f1a193e3 | ||
|
a9a478f077 | ||
|
b2620e6922 | ||
|
60caa448b0 | ||
|
eb886b6760 | ||
|
73c991edd0 | ||
|
c698d65a92 | ||
|
1a5ab33852 | ||
|
77c4f9ff2f | ||
|
dcbacb5b78 | ||
|
c203c1fead | ||
|
cdf105a24e | ||
|
859ec56b4f | ||
|
45872ede7a | ||
|
f83238df78 | ||
|
4c8dfc4c2c | ||
|
bfd7ab5a22 | ||
|
ee11afb460 |
26 changed files with 629 additions and 239 deletions
49
.forgejo/workflows/build-alpine.yml
Normal file
49
.forgejo/workflows/build-alpine.yml
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
on:
|
||||||
|
- workflow-dispatch
|
||||||
|
- push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: alpine:edge
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: set up dependencies
|
||||||
|
run: |
|
||||||
|
apk update
|
||||||
|
apk upgrade
|
||||||
|
apk add nodejs git alpine-sdk
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
name: checkout the alpine dir
|
||||||
|
with:
|
||||||
|
sparse-checkout: "alpine/"
|
||||||
|
|
||||||
|
# - uses: actions/checkout@v4
|
||||||
|
# name: checkout the rest in the alpine dir
|
||||||
|
# with:
|
||||||
|
# path: 'alpine/continuwuity'
|
||||||
|
- name: set up user
|
||||||
|
run: adduser -DG abuild ci
|
||||||
|
|
||||||
|
- name: set up keys
|
||||||
|
run: |
|
||||||
|
pwd
|
||||||
|
mkdir ~/.abuild
|
||||||
|
echo "${{ secrets.abuild_privkey }}" > ~/.abuild/ci@continuwuity.rsa
|
||||||
|
echo "${{ secrets.abuild_pubkey }}" > ~/.abuild/ci@continuwuity.rsa.pub
|
||||||
|
echo $HOME
|
||||||
|
echo 'PACKAGER_PRIVKEY="/root/.abuild/ci@continuwuity.rsa"' > ~/.abuild/abuild.conf
|
||||||
|
ls ~/.abuild
|
||||||
|
|
||||||
|
- name: go go gadget abuild
|
||||||
|
run: |
|
||||||
|
cd alpine
|
||||||
|
# modify the APKBUILD to use the current branch instead of the release
|
||||||
|
# note that it seems to require the repo to be public (as you'll get
|
||||||
|
# a 404 even if the token is provided)
|
||||||
|
export ARCHIVE_URL="${{ github.server_url }}/${{ github.repository }}/archive/${{ github.ref_name }}.tar.gz"
|
||||||
|
echo $ARCHIVE_URL
|
||||||
|
sed -i '/^source=/c\source="'"$ARCHIVE_URL" APKBUILD
|
||||||
|
abuild -F checksum
|
||||||
|
abuild -Fr
|
|
@ -57,17 +57,17 @@ jobs:
|
||||||
run: npm install --save-dev wrangler@latest
|
run: npm install --save-dev wrangler@latest
|
||||||
|
|
||||||
- name: Deploy to Cloudflare Pages (Production)
|
- name: Deploy to Cloudflare Pages (Production)
|
||||||
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
if: github.ref == 'refs/heads/main' && vars.CLOUDFLARE_PROJECT_NAME != ''
|
||||||
uses: https://github.com/cloudflare/wrangler-action@v3
|
uses: https://github.com/cloudflare/wrangler-action@v3
|
||||||
with:
|
with:
|
||||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
command: pages deploy ./public --branch=main --commit-dirty=true --project-name=${{ vars.CLOUDFLARE_PROJECT_NAME }}"
|
command: pages deploy ./public --branch="main" --commit-dirty=true --project-name="${{ vars.CLOUDFLARE_PROJECT_NAME }}"
|
||||||
|
|
||||||
- name: Deploy to Cloudflare Pages (Preview)
|
- name: Deploy to Cloudflare Pages (Preview)
|
||||||
if: ${{ github.event_name != 'push' || github.ref != 'refs/heads/main' }}
|
if: github.ref != 'refs/heads/main' && vars.CLOUDFLARE_PROJECT_NAME != ''
|
||||||
uses: https://github.com/cloudflare/wrangler-action@v3
|
uses: https://github.com/cloudflare/wrangler-action@v3
|
||||||
with:
|
with:
|
||||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
command: pages deploy ./public --branch=${{ github.head_ref }} --commit-dirty=true --project-name=${{ vars.CLOUDFLARE_PROJECT_NAME }}"
|
command: pages deploy ./public --branch="${{ github.head_ref || github.ref_name }}" --commit-dirty=true --project-name="${{ vars.CLOUDFLARE_PROJECT_NAME }}"
|
||||||
|
|
127
.forgejo/workflows/element.yml
Normal file
127
.forgejo/workflows/element.yml
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
name: Deploy Element Web
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * *"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "element-${{ github.ref }}"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-deploy:
|
||||||
|
name: Build and Deploy Element Web
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: https://code.forgejo.org/actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Clone, setup, and build Element Web
|
||||||
|
run: |
|
||||||
|
echo "Cloning Element Web..."
|
||||||
|
git clone https://github.com/maunium/element-web
|
||||||
|
cd element-web
|
||||||
|
git checkout develop
|
||||||
|
git pull
|
||||||
|
|
||||||
|
echo "Cloning matrix-js-sdk..."
|
||||||
|
git clone https://github.com/matrix-org/matrix-js-sdk.git
|
||||||
|
|
||||||
|
echo "Installing Yarn..."
|
||||||
|
npm install -g yarn
|
||||||
|
|
||||||
|
echo "Installing dependencies..."
|
||||||
|
yarn install
|
||||||
|
|
||||||
|
echo "Preparing build environment..."
|
||||||
|
mkdir -p .home
|
||||||
|
|
||||||
|
echo "Cleaning up specific node_modules paths..."
|
||||||
|
rm -rf node_modules/@types/eslint-scope/ matrix-*-sdk/node_modules/@types/eslint-scope || echo "Cleanup paths not found, continuing."
|
||||||
|
|
||||||
|
echo "Getting matrix-js-sdk commit hash..."
|
||||||
|
cd matrix-js-sdk
|
||||||
|
jsver=$(git rev-parse HEAD)
|
||||||
|
jsver=${jsver:0:12}
|
||||||
|
cd ..
|
||||||
|
echo "matrix-js-sdk version hash: $jsver"
|
||||||
|
|
||||||
|
echo "Getting element-web commit hash..."
|
||||||
|
ver=$(git rev-parse HEAD)
|
||||||
|
ver=${ver:0:12}
|
||||||
|
echo "element-web version hash: $ver"
|
||||||
|
|
||||||
|
chmod +x ./build-sh
|
||||||
|
|
||||||
|
export VERSION="$ver-js-$jsver"
|
||||||
|
echo "Building Element Web version: $VERSION"
|
||||||
|
./build-sh
|
||||||
|
|
||||||
|
echo "Checking for build output..."
|
||||||
|
ls -la webapp/
|
||||||
|
|
||||||
|
- name: Create config.json
|
||||||
|
run: |
|
||||||
|
cat <<EOF > ./element-web/webapp/config.json
|
||||||
|
{
|
||||||
|
"default_server_name": "continuwuity.org",
|
||||||
|
"default_server_config": {
|
||||||
|
"m.homeserver": {
|
||||||
|
"base_url": "https://matrix.continuwuity.org"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"default_country_code": "GB",
|
||||||
|
"default_theme": "dark",
|
||||||
|
"mobile_guide_toast": false,
|
||||||
|
"show_labs_settings": true,
|
||||||
|
"room_directory": [
|
||||||
|
"continuwuity.org",
|
||||||
|
"matrixrooms.info"
|
||||||
|
],
|
||||||
|
"settings_defaults": {
|
||||||
|
"UIFeature.urlPreviews": true,
|
||||||
|
"UIFeature.feedback": false,
|
||||||
|
"UIFeature.voip": false,
|
||||||
|
"UIFeature.shareQrCode": false,
|
||||||
|
"UIFeature.shareSocial": false,
|
||||||
|
"UIFeature.locationSharing": false,
|
||||||
|
"enableSyntaxHighlightLanguageDetection": true
|
||||||
|
},
|
||||||
|
"features": {
|
||||||
|
"feature_pinning": true,
|
||||||
|
"feature_custom_themes": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
echo "Created ./element-web/webapp/config.json"
|
||||||
|
cat ./element-web/webapp/config.json
|
||||||
|
|
||||||
|
- name: Upload Artifact
|
||||||
|
uses: https://code.forgejo.org/actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: element-web
|
||||||
|
path: ./element-web/webapp/
|
||||||
|
retention-days: 14
|
||||||
|
|
||||||
|
- name: Install Wrangler
|
||||||
|
run: npm install --save-dev wrangler@latest
|
||||||
|
|
||||||
|
- name: Deploy to Cloudflare Pages (Production)
|
||||||
|
if: github.ref == 'refs/heads/main' && vars.CLOUDFLARE_PROJECT_NAME != ''
|
||||||
|
uses: https://github.com/cloudflare/wrangler-action@v3
|
||||||
|
with:
|
||||||
|
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
|
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
|
command: pages deploy ./element-web/webapp --branch="main" --commit-dirty=true --project-name="${{ vars.CLOUDFLARE_PROJECT_NAME }}-element"
|
||||||
|
|
||||||
|
- name: Deploy to Cloudflare Pages (Preview)
|
||||||
|
if: github.ref != 'refs/heads/main' && vars.CLOUDFLARE_PROJECT_NAME != ''
|
||||||
|
uses: https://github.com/cloudflare/wrangler-action@v3
|
||||||
|
with:
|
||||||
|
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
|
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
|
command: pages deploy ./element-web/webapp --branch="${{ github.head_ref || github.ref_name }}" --commit-dirty=true --project-name="${{ vars.CLOUDFLARE_PROJECT_NAME }}-element"
|
|
@ -1,24 +1,25 @@
|
||||||
name: Release Docker Image
|
name: Release Docker Image
|
||||||
concurrency:
|
concurrency:
|
||||||
group: "release-image-${{ github.ref }}"
|
group: "release-image-${{ github.ref }}"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
push:
|
push:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '.gitlab-ci.yml'
|
- "*.md"
|
||||||
- '.gitignore'
|
- "**/*.md"
|
||||||
- 'renovate.json'
|
- ".gitlab-ci.yml"
|
||||||
- 'debian/**'
|
- ".gitignore"
|
||||||
- 'docker/**'
|
- "renovate.json"
|
||||||
- 'docs/**'
|
- "debian/**"
|
||||||
|
- "docker/**"
|
||||||
|
- "docs/**"
|
||||||
# Allows you to run this workflow manually from the Actions tab
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
BUILTIN_REGISTRY: forgejo.ellis.link
|
BUILTIN_REGISTRY: forgejo.ellis.link
|
||||||
BUILTIN_REGISTRY_ENABLED: "${{ ((vars.BUILTIN_REGISTRY_USER && secrets.BUILTIN_REGISTRY_PASSWORD) || (github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)) && 'true' || 'false' }}"
|
BUILTIN_REGISTRY_ENABLED: "${{ ((vars.BUILTIN_REGISTRY_USER && secrets.BUILTIN_REGISTRY_PASSWORD) || (github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)) && 'true' || 'false' }}"
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
define-variables:
|
define-variables:
|
||||||
|
@ -37,7 +38,7 @@ jobs:
|
||||||
script: |
|
script: |
|
||||||
const githubRepo = '${{ github.repository }}'.toLowerCase()
|
const githubRepo = '${{ github.repository }}'.toLowerCase()
|
||||||
const repoId = githubRepo.split('/')[1]
|
const repoId = githubRepo.split('/')[1]
|
||||||
|
|
||||||
core.setOutput('github_repository', githubRepo)
|
core.setOutput('github_repository', githubRepo)
|
||||||
const builtinImage = '${{ env.BUILTIN_REGISTRY }}/' + githubRepo
|
const builtinImage = '${{ env.BUILTIN_REGISTRY }}/' + githubRepo
|
||||||
let images = []
|
let images = []
|
||||||
|
@ -48,7 +49,7 @@ jobs:
|
||||||
core.setOutput('images_list', images.join(","))
|
core.setOutput('images_list', images.join(","))
|
||||||
const platforms = ['linux/amd64', 'linux/arm64']
|
const platforms = ['linux/amd64', 'linux/arm64']
|
||||||
core.setOutput('build_matrix', JSON.stringify({
|
core.setOutput('build_matrix', JSON.stringify({
|
||||||
platform: platforms,
|
platform: platforms,
|
||||||
include: platforms.map(platform => { return {
|
include: platforms.map(platform => { return {
|
||||||
platform,
|
platform,
|
||||||
slug: platform.replace('/', '-')
|
slug: platform.replace('/', '-')
|
||||||
|
@ -65,22 +66,15 @@ jobs:
|
||||||
attestations: write
|
attestations: write
|
||||||
id-token: write
|
id-token: write
|
||||||
strategy:
|
strategy:
|
||||||
matrix: {
|
matrix:
|
||||||
"include": [
|
{
|
||||||
{
|
"include":
|
||||||
"platform": "linux/amd64",
|
[
|
||||||
"slug": "linux-amd64"
|
{ "platform": "linux/amd64", "slug": "linux-amd64" },
|
||||||
},
|
{ "platform": "linux/arm64", "slug": "linux-arm64" },
|
||||||
{
|
],
|
||||||
"platform": "linux/arm64",
|
"platform": ["linux/amd64", "linux/arm64"],
|
||||||
"slug": "linux-arm64"
|
}
|
||||||
}
|
|
||||||
],
|
|
||||||
"platform": [
|
|
||||||
"linux/amd64",
|
|
||||||
"linux/arm64"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
steps:
|
steps:
|
||||||
- name: Echo strategy
|
- name: Echo strategy
|
||||||
run: echo '${{ toJSON(fromJSON(needs.define-variables.outputs.build_matrix)) }}'
|
run: echo '${{ toJSON(fromJSON(needs.define-variables.outputs.build_matrix)) }}'
|
||||||
|
@ -105,9 +99,9 @@ jobs:
|
||||||
- name: Login to builtin registry
|
- name: Login to builtin registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
registry: ${{ env.BUILTIN_REGISTRY }}
|
registry: ${{ env.BUILTIN_REGISTRY }}
|
||||||
username: ${{ vars.BUILTIN_REGISTRY_USER || github.actor }}
|
username: ${{ vars.BUILTIN_REGISTRY_USER || github.actor }}
|
||||||
password: ${{ secrets.BUILTIN_REGISTRY_PASSWORD || secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.BUILTIN_REGISTRY_PASSWORD || secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
# This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
|
# This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
|
||||||
- name: Extract metadata (labels, annotations) for Docker
|
- name: Extract metadata (labels, annotations) for Docker
|
||||||
|
@ -165,7 +159,7 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
mkdir -p /tmp/digests
|
mkdir -p /tmp/digests
|
||||||
digest="${{ steps.build.outputs.digest }}"
|
digest="${{ steps.build.outputs.digest }}"
|
||||||
touch "/tmp/digests/${digest#sha256:}"
|
touch "/tmp/digests/${digest#sha256:}"
|
||||||
|
|
||||||
- name: Upload digest
|
- name: Upload digest
|
||||||
uses: forgejo/upload-artifact@v4
|
uses: forgejo/upload-artifact@v4
|
||||||
|
@ -174,7 +168,7 @@ jobs:
|
||||||
path: /tmp/digests/*
|
path: /tmp/digests/*
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
merge:
|
merge:
|
||||||
runs-on: dind
|
runs-on: dind
|
||||||
container: ghcr.io/catthehacker/ubuntu:act-latest
|
container: ghcr.io/catthehacker/ubuntu:act-latest
|
||||||
|
@ -190,9 +184,9 @@ jobs:
|
||||||
- name: Login to builtin registry
|
- name: Login to builtin registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
registry: ${{ env.BUILTIN_REGISTRY }}
|
registry: ${{ env.BUILTIN_REGISTRY }}
|
||||||
username: ${{ vars.BUILTIN_REGISTRY_USER || github.actor }}
|
username: ${{ vars.BUILTIN_REGISTRY_USER || github.actor }}
|
||||||
password: ${{ secrets.BUILTIN_REGISTRY_PASSWORD || secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.BUILTIN_REGISTRY_PASSWORD || secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
@ -211,7 +205,7 @@ jobs:
|
||||||
images: ${{needs.define-variables.outputs.images}}
|
images: ${{needs.define-variables.outputs.images}}
|
||||||
# default labels & annotations: https://github.com/docker/metadata-action/blob/master/src/meta.ts#L509
|
# default labels & annotations: https://github.com/docker/metadata-action/blob/master/src/meta.ts#L509
|
||||||
env:
|
env:
|
||||||
DOCKER_METADATA_ANNOTATIONS_LEVELS: index
|
DOCKER_METADATA_ANNOTATIONS_LEVELS: index
|
||||||
|
|
||||||
- name: Create manifest list and push
|
- name: Create manifest list and push
|
||||||
working-directory: /tmp/digests
|
working-directory: /tmp/digests
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
# Contributor Covenant Code of Conduct
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
## Our Pledge
|
## Our Pledge
|
||||||
|
@ -60,8 +59,7 @@ representative at an online or offline event.
|
||||||
## Enforcement
|
## Enforcement
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
reported to the community leaders responsible for enforcement over email at
|
reported to the community leaders responsible for enforcement over Matrix at [#continuwuity:continuwuity.org](https://matrix.to/#/#continuwuity:continuwuity.org) or email at <tom@tcpip.uk>, <jade@continuwuity.org> and <nex@continuwuity.org> respectively.
|
||||||
<strawberry@puppygock.gay> or over Matrix at @strawberry:puppygock.gay.
|
|
||||||
All complaints will be reviewed and investigated promptly and fairly.
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
All community leaders are obligated to respect the privacy and security of the
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
|
|
@ -4,7 +4,7 @@ This page is for about contributing to conduwuit. The
|
||||||
[development](./development.md) page may be of interest for you as well.
|
[development](./development.md) page may be of interest for you as well.
|
||||||
|
|
||||||
If you would like to work on an [issue][issues] that is not assigned, preferably
|
If you would like to work on an [issue][issues] that is not assigned, preferably
|
||||||
ask in the Matrix room first at [#conduwuit:puppygock.gay][conduwuit-matrix],
|
ask in the Matrix room first at [#continuwuity:continuwuity.org][continuwuity-matrix],
|
||||||
and comment on it.
|
and comment on it.
|
||||||
|
|
||||||
### Linting and Formatting
|
### Linting and Formatting
|
||||||
|
@ -23,9 +23,9 @@ suggestion, allow the lint and mention that in a comment.
|
||||||
|
|
||||||
### Running CI tests locally
|
### Running CI tests locally
|
||||||
|
|
||||||
conduwuit's CI for tests, linting, formatting, audit, etc use
|
continuwuity's CI for tests, linting, formatting, audit, etc use
|
||||||
[`engage`][engage]. engage can be installed from nixpkgs or `cargo install
|
[`engage`][engage]. engage can be installed from nixpkgs or `cargo install
|
||||||
engage`. conduwuit's Nix flake devshell has the nixpkgs engage with `direnv`.
|
engage`. continuwuity's Nix flake devshell has the nixpkgs engage with `direnv`.
|
||||||
Use `engage --help` for more usage details.
|
Use `engage --help` for more usage details.
|
||||||
|
|
||||||
To test, format, lint, etc that CI would do, install engage, allow the `.envrc`
|
To test, format, lint, etc that CI would do, install engage, allow the `.envrc`
|
||||||
|
@ -111,33 +111,28 @@ applies here.
|
||||||
|
|
||||||
### Creating pull requests
|
### Creating pull requests
|
||||||
|
|
||||||
Please try to keep contributions to the GitHub. While the mirrors of conduwuit
|
Please try to keep contributions to the Forgejo Instance. While the mirrors of continuwuity
|
||||||
allow for pull/merge requests, there is no guarantee I will see them in a timely
|
allow for pull/merge requests, there is no guarantee the maintainers will see them in a timely
|
||||||
manner. Additionally, please mark WIP or unfinished or incomplete PRs as drafts.
|
manner. Additionally, please mark WIP or unfinished or incomplete PRs as drafts.
|
||||||
This prevents me from having to ping once in a while to double check the status
|
This prevents us from having to ping once in a while to double check the status
|
||||||
of it, especially when the CI completed successfully and everything so it
|
of it, especially when the CI completed successfully and everything so it
|
||||||
*looks* done.
|
*looks* done.
|
||||||
|
|
||||||
If you open a pull request on one of the mirrors, it is your responsibility to
|
|
||||||
inform me about its existence. In the future I may try to solve this with more
|
|
||||||
repo bots in the conduwuit Matrix room. There is no mailing list or email-patch
|
|
||||||
support on the sr.ht mirror, but if you'd like to email me a git patch you can
|
|
||||||
do so at `strawberry@puppygock.gay`.
|
|
||||||
|
|
||||||
Direct all PRs/MRs to the `main` branch.
|
Direct all PRs/MRs to the `main` branch.
|
||||||
|
|
||||||
By sending a pull request or patch, you are agreeing that your changes are
|
By sending a pull request or patch, you are agreeing that your changes are
|
||||||
allowed to be licenced under the Apache-2.0 licence and all of your conduct is
|
allowed to be licenced under the Apache-2.0 licence and all of your conduct is
|
||||||
in line with the Contributor's Covenant, and conduwuit's Code of Conduct.
|
in line with the Contributor's Covenant, and continuwuity's Code of Conduct.
|
||||||
|
|
||||||
Contribution by users who violate either of these code of conducts will not have
|
Contribution by users who violate either of these code of conducts will not have
|
||||||
their contributions accepted. This includes users who have been banned from
|
their contributions accepted. This includes users who have been banned from
|
||||||
conduwuit Matrix rooms for Code of Conduct violations.
|
continuwuityMatrix rooms for Code of Conduct violations.
|
||||||
|
|
||||||
[issues]: https://github.com/girlbossceo/conduwuit/issues
|
[issues]: https://forgejo.ellis.link/continuwuation/continuwuity/issues
|
||||||
[conduwuit-matrix]: https://matrix.to/#/#conduwuit:puppygock.gay
|
[continuwuity-matrix]: https://matrix.to/#/#continuwuity:continuwuity.org
|
||||||
[complement]: https://github.com/matrix-org/complement/
|
[complement]: https://github.com/matrix-org/complement/
|
||||||
[engage.toml]: https://github.com/girlbossceo/conduwuit/blob/main/engage.toml
|
[engage.toml]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/engage.toml
|
||||||
[engage]: https://charles.page.computer.surgery/engage/
|
[engage]: https://charles.page.computer.surgery/engage/
|
||||||
[sytest]: https://github.com/matrix-org/sytest/
|
[sytest]: https://github.com/matrix-org/sytest/
|
||||||
[cargo-deb]: https://github.com/kornelski/cargo-deb
|
[cargo-deb]: https://github.com/kornelski/cargo-deb
|
||||||
|
@ -146,4 +141,4 @@ conduwuit Matrix rooms for Code of Conduct violations.
|
||||||
[cargo-audit]: https://github.com/RustSec/rustsec/tree/main/cargo-audit
|
[cargo-audit]: https://github.com/RustSec/rustsec/tree/main/cargo-audit
|
||||||
[direnv]: https://direnv.net/
|
[direnv]: https://direnv.net/
|
||||||
[mdbook]: https://rust-lang.github.io/mdBook/
|
[mdbook]: https://rust-lang.github.io/mdBook/
|
||||||
[documentation.yml]: https://github.com/girlbossceo/conduwuit/blob/main/.github/workflows/documentation.yml
|
[documentation.yml]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/.forgejo/workflows/documentation.yml
|
||||||
|
|
22
Cargo.lock
generated
22
Cargo.lock
generated
|
@ -3652,7 +3652,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma"
|
name = "ruma"
|
||||||
version = "0.10.1"
|
version = "0.10.1"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=d6870a7fb7f6cccff63f7fd0ff6c581bad80e983#d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assign",
|
"assign",
|
||||||
"js_int",
|
"js_int",
|
||||||
|
@ -3672,7 +3672,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-appservice-api"
|
name = "ruma-appservice-api"
|
||||||
version = "0.10.0"
|
version = "0.10.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=d6870a7fb7f6cccff63f7fd0ff6c581bad80e983#d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"ruma-common",
|
"ruma-common",
|
||||||
|
@ -3684,7 +3684,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-client-api"
|
name = "ruma-client-api"
|
||||||
version = "0.18.0"
|
version = "0.18.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=d6870a7fb7f6cccff63f7fd0ff6c581bad80e983#d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"as_variant",
|
"as_variant",
|
||||||
"assign",
|
"assign",
|
||||||
|
@ -3707,7 +3707,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-common"
|
name = "ruma-common"
|
||||||
version = "0.13.0"
|
version = "0.13.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=d6870a7fb7f6cccff63f7fd0ff6c581bad80e983#d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"as_variant",
|
"as_variant",
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
|
@ -3739,7 +3739,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-events"
|
name = "ruma-events"
|
||||||
version = "0.28.1"
|
version = "0.28.1"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=d6870a7fb7f6cccff63f7fd0ff6c581bad80e983#d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"as_variant",
|
"as_variant",
|
||||||
"indexmap 2.8.0",
|
"indexmap 2.8.0",
|
||||||
|
@ -3764,7 +3764,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-federation-api"
|
name = "ruma-federation-api"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=d6870a7fb7f6cccff63f7fd0ff6c581bad80e983#d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"headers",
|
"headers",
|
||||||
|
@ -3786,7 +3786,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-identifiers-validation"
|
name = "ruma-identifiers-validation"
|
||||||
version = "0.9.5"
|
version = "0.9.5"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=d6870a7fb7f6cccff63f7fd0ff6c581bad80e983#d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
|
@ -3795,7 +3795,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-identity-service-api"
|
name = "ruma-identity-service-api"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=d6870a7fb7f6cccff63f7fd0ff6c581bad80e983#d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"ruma-common",
|
"ruma-common",
|
||||||
|
@ -3805,7 +3805,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-macros"
|
name = "ruma-macros"
|
||||||
version = "0.13.0"
|
version = "0.13.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=d6870a7fb7f6cccff63f7fd0ff6c581bad80e983#d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"proc-macro-crate",
|
"proc-macro-crate",
|
||||||
|
@ -3820,7 +3820,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-push-gateway-api"
|
name = "ruma-push-gateway-api"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=d6870a7fb7f6cccff63f7fd0ff6c581bad80e983#d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"ruma-common",
|
"ruma-common",
|
||||||
|
@ -3832,7 +3832,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-signatures"
|
name = "ruma-signatures"
|
||||||
version = "0.15.0"
|
version = "0.15.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=d6870a7fb7f6cccff63f7fd0ff6c581bad80e983#d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"ed25519-dalek",
|
"ed25519-dalek",
|
||||||
|
|
|
@ -350,7 +350,7 @@ version = "0.1.2"
|
||||||
[workspace.dependencies.ruma]
|
[workspace.dependencies.ruma]
|
||||||
git = "https://forgejo.ellis.link/continuwuation/ruwuma"
|
git = "https://forgejo.ellis.link/continuwuation/ruwuma"
|
||||||
#branch = "conduwuit-changes"
|
#branch = "conduwuit-changes"
|
||||||
rev = "fa3c868e5a1c049dc9472310dc4955289a96bb35"
|
rev = "d6870a7fb7f6cccff63f7fd0ff6c581bad80e983"
|
||||||
features = [
|
features = [
|
||||||
"compat",
|
"compat",
|
||||||
"rand",
|
"rand",
|
||||||
|
|
63
alpine/APKBUILD
Normal file
63
alpine/APKBUILD
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
# Contributor: magmaus3 <maia@magmaus3.eu.org>
|
||||||
|
# Maintainer: magmaus3 <maia@magmaus3.eu.org>
|
||||||
|
pkgname=continuwuity
|
||||||
|
|
||||||
|
# abuild doesn't like the format of v0.5.0-rc.5, so i had to change it
|
||||||
|
# see https://wiki.alpinelinux.org/wiki/Package_policies
|
||||||
|
pkgver=0.5.0_rc5
|
||||||
|
pkgrel=0
|
||||||
|
pkgdesc="a continuwuation of a very cool, featureful fork of conduit"
|
||||||
|
url="https://continuwuity.org/"
|
||||||
|
arch="all"
|
||||||
|
license="Apache-2.0"
|
||||||
|
depends="liburing"
|
||||||
|
|
||||||
|
# cargo version on alpine v3.21 is too old to use the 2024 edition
|
||||||
|
# i recommend either building everything on edge, or adding
|
||||||
|
# the edge repo as a tag
|
||||||
|
makedepends="cargo liburing-dev clang-dev linux-headers"
|
||||||
|
checkdepends=""
|
||||||
|
install="$pkgname.pre-install"
|
||||||
|
subpackages="$pkgname-openrc"
|
||||||
|
source="https://forgejo.ellis.link/continuwuation/continuwuity/archive/v0.5.0-rc.5.tar.gz
|
||||||
|
continuwuity.initd
|
||||||
|
continuwuity.confd
|
||||||
|
"
|
||||||
|
builddir="$srcdir/continuwuity"
|
||||||
|
options="net !check"
|
||||||
|
|
||||||
|
prepare() {
|
||||||
|
default_prepare
|
||||||
|
cd $srcdir/continuwuity
|
||||||
|
|
||||||
|
# add the default database path to the config (commented out)
|
||||||
|
cat conduwuit-example.toml \
|
||||||
|
| sed '/#database_path/ s:$: "/var/lib/continuwuity":' \
|
||||||
|
> "$srcdir"/continuwuity.toml
|
||||||
|
|
||||||
|
cargo fetch --target="$CTARGET" --locked
|
||||||
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cargo build --frozen --release --all-features
|
||||||
|
}
|
||||||
|
|
||||||
|
check() {
|
||||||
|
# TODO: make sure the tests work
|
||||||
|
#cargo test --frozen
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
cd $srcdir
|
||||||
|
install -Dm755 continuwuity/target/release/conduwuit "$pkgdir"/usr/bin/continuwuity
|
||||||
|
install -Dm644 "$srcdir"/continuwuity.toml -t "$pkgdir"/etc/continuwuity
|
||||||
|
install -Dm755 "$srcdir"/continuwuity.initd "$pkgdir"/etc/init.d/continuwuity
|
||||||
|
install -Dm644 "$srcdir"/continuwuity.confd "$pkgdir"/etc/conf.d/continuwuity
|
||||||
|
}
|
||||||
|
|
||||||
|
sha512sums="
|
||||||
|
66f6da5e98b6f7bb8c1082500101d5c87b1b79955c139b44c6ef5123919fb05feb0dffc669a3af1bc8d571ddb9f3576660f08dc10a6b19eab6db9e391175436a v0.5.0-rc.5.tar.gz
|
||||||
|
0482674be24740496d70da256d4121c5a5e3b749f2445d2bbe0e8991f1449de052724f8427da21a6f55574bc53eac9ca1e47e5012b4c13049b2b39044734d80d continuwuity.initd
|
||||||
|
38e2576278b450d16ba804dd8f4a128f18cd793e6c3ce55aedee1e186905755b31ee23baaa6586b1ab0e25a1f29bf1ea86bfaae4185b0cb1a29203726a199426 continuwuity.confd
|
||||||
|
"
|
7
alpine/README.md
Normal file
7
alpine/README.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# building
|
||||||
|
|
||||||
|
1. [set up your build
|
||||||
|
environment](https://wiki.alpinelinux.org/wiki/Include:Setup_your_system_and_account_for_building_packages)
|
||||||
|
|
||||||
|
2. run `abuild` (or `abuild -K` if you want to keep the source directory to make
|
||||||
|
rebuilding faster)
|
3
alpine/continuwuity.confd
Normal file
3
alpine/continuwuity.confd
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
supervisor=supervise-daemon
|
||||||
|
export CONTINUWUITY_CONFIG=/etc/continuwuity/continuwuity.toml
|
||||||
|
|
19
alpine/continuwuity.initd
Normal file
19
alpine/continuwuity.initd
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/sbin/openrc-run
|
||||||
|
|
||||||
|
command="/usr/bin/continuwuity"
|
||||||
|
command_user="continuwuity:continuwuity"
|
||||||
|
command_args="--config ${CONTINUWUITY_CONFIG=/etc/continuwuity/continuwuity.toml}"
|
||||||
|
command_background=true
|
||||||
|
pidfile="/run/$RC_SVCNAME.pid"
|
||||||
|
|
||||||
|
output_log="/var/log/continuwuity.log"
|
||||||
|
error_log="/var/log/continuwuity.log"
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
need net
|
||||||
|
}
|
||||||
|
|
||||||
|
start_pre() {
|
||||||
|
checkpath -d -m 0755 -o "$command_user" /var/lib/continuwuity
|
||||||
|
checkpath -f -m 0644 -o "$command_user" "$output_log"
|
||||||
|
}
|
4
alpine/continuwuity.pre-install
Normal file
4
alpine/continuwuity.pre-install
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
|
addgroup -S continuwuity 2>/dev/null
|
||||||
|
adduser -S -D -H -h /var/lib/continuwuity -s /sbin/nologin -G continuwuity -g continuwuity continuwuity 2>/dev/null
|
||||||
|
exit 0
|
|
@ -116,7 +116,7 @@
|
||||||
# `https://continuwuity.org/.well-known/continuwuity/announcements` for any new
|
# `https://continuwuity.org/.well-known/continuwuity/announcements` for any new
|
||||||
# announcements or major updates. This is not an update check endpoint.
|
# announcements or major updates. This is not an update check endpoint.
|
||||||
#
|
#
|
||||||
#allow_announcements_check =
|
#allow_announcements_check = true
|
||||||
|
|
||||||
# Set this to any float value to multiply conduwuit's in-memory LRU caches
|
# Set this to any float value to multiply conduwuit's in-memory LRU caches
|
||||||
# with such as "auth_chain_cache_capacity".
|
# with such as "auth_chain_cache_capacity".
|
||||||
|
@ -967,9 +967,9 @@
|
||||||
#rocksdb_compaction_ioprio_idle = true
|
#rocksdb_compaction_ioprio_idle = true
|
||||||
|
|
||||||
# Enables RocksDB compaction. You should never ever have to set this
|
# Enables RocksDB compaction. You should never ever have to set this
|
||||||
# option to false. If you for some reason find yourself needing to use this
|
# option to false. If you for some reason find yourself needing to use
|
||||||
# option as part of troubleshooting or a bug, please reach out to us in
|
# this option as part of troubleshooting or a bug, please reach out to us
|
||||||
# the conduwuit Matrix room with information and details.
|
# in the conduwuit Matrix room with information and details.
|
||||||
#
|
#
|
||||||
# Disabling compaction will lead to a significantly bloated and
|
# Disabling compaction will lead to a significantly bloated and
|
||||||
# explosively large database, gradually poor performance, unnecessarily
|
# explosively large database, gradually poor performance, unnecessarily
|
||||||
|
@ -1182,23 +1182,13 @@
|
||||||
#
|
#
|
||||||
#prune_missing_media = false
|
#prune_missing_media = false
|
||||||
|
|
||||||
# Vector list of regex patterns of server names that conduwuit will refuse
|
|
||||||
# to download remote media from.
|
|
||||||
#
|
|
||||||
# example: ["badserver\.tld$", "badphrase", "19dollarfortnitecards"]
|
|
||||||
#
|
|
||||||
#prevent_media_downloads_from = []
|
|
||||||
|
|
||||||
# List of forbidden server names via regex patterns that we will block
|
# List of forbidden server names via regex patterns that we will block
|
||||||
# incoming AND outgoing federation with, and block client room joins /
|
# incoming AND outgoing federation with, and block client room joins /
|
||||||
# remote user invites.
|
# remote user invites.
|
||||||
#
|
#
|
||||||
# Additionally, it will hide messages from these servers for all users
|
|
||||||
# on this server.
|
|
||||||
#
|
|
||||||
# Note that your messages can still make it to forbidden servers through
|
# Note that your messages can still make it to forbidden servers through
|
||||||
# backfilling. Events we receive from forbidden servers via backfill will
|
# backfilling. Events we receive from forbidden servers via backfill
|
||||||
# be stored in the database, but will not be sent to the client.
|
# from servers we *do* federate with will be stored in the database.
|
||||||
#
|
#
|
||||||
# This check is applied on the room ID, room alias, sender server name,
|
# This check is applied on the room ID, room alias, sender server name,
|
||||||
# sender user's server name, inbound federation X-Matrix origin, and
|
# sender user's server name, inbound federation X-Matrix origin, and
|
||||||
|
@ -1207,7 +1197,7 @@
|
||||||
# You can set this to ["*"] to block all servers by default, and then
|
# You can set this to ["*"] to block all servers by default, and then
|
||||||
# use `allowed_remote_server_names` to allow only specific servers.
|
# use `allowed_remote_server_names` to allow only specific servers.
|
||||||
#
|
#
|
||||||
# example: ["badserver\.tld$", "badphrase", "19dollarfortnitecards"]
|
# example: ["badserver\\.tld$", "badphrase", "19dollarfortnitecards"]
|
||||||
#
|
#
|
||||||
#forbidden_remote_server_names = []
|
#forbidden_remote_server_names = []
|
||||||
|
|
||||||
|
@ -1216,10 +1206,17 @@
|
||||||
#
|
#
|
||||||
# This option has no effect if `forbidden_remote_server_names` is empty.
|
# This option has no effect if `forbidden_remote_server_names` is empty.
|
||||||
#
|
#
|
||||||
# example: ["goodserver\.tld$", "goodphrase"]
|
# example: ["goodserver\\.tld$", "goodphrase"]
|
||||||
#
|
#
|
||||||
#allowed_remote_server_names = []
|
#allowed_remote_server_names = []
|
||||||
|
|
||||||
|
# Vector list of regex patterns of server names that conduwuit will refuse
|
||||||
|
# to download remote media from.
|
||||||
|
#
|
||||||
|
# example: ["badserver\.tld$", "badphrase", "19dollarfortnitecards"]
|
||||||
|
#
|
||||||
|
#prevent_media_downloads_from = []
|
||||||
|
|
||||||
# List of forbidden server names via regex patterns that we will block all
|
# List of forbidden server names via regex patterns that we will block all
|
||||||
# outgoing federated room directory requests for. Useful for preventing
|
# outgoing federated room directory requests for. Useful for preventing
|
||||||
# our users from wandering into bad servers or spaces.
|
# our users from wandering into bad servers or spaces.
|
||||||
|
@ -1228,6 +1225,29 @@
|
||||||
#
|
#
|
||||||
#forbidden_remote_room_directory_server_names = []
|
#forbidden_remote_room_directory_server_names = []
|
||||||
|
|
||||||
|
# Vector list of regex patterns of server names that conduwuit will not
|
||||||
|
# send messages to the client from.
|
||||||
|
#
|
||||||
|
# Note that there is no way for clients to receive messages once a server
|
||||||
|
# has become unignored without doing a full sync. This is a protocol
|
||||||
|
# limitation with the current sync protocols. This means this is somewhat
|
||||||
|
# of a nuclear option.
|
||||||
|
#
|
||||||
|
# example: ["reallybadserver\.tld$", "reallybadphrase",
|
||||||
|
# "69dollarfortnitecards"]
|
||||||
|
#
|
||||||
|
#ignore_messages_from_server_names = []
|
||||||
|
|
||||||
|
# Send messages from users that the user has ignored to the client.
|
||||||
|
#
|
||||||
|
# There is no way for clients to receive messages sent while a user was
|
||||||
|
# ignored without doing a full sync. This is a protocol limitation with
|
||||||
|
# the current sync protocols. Disabling this option will move
|
||||||
|
# responsibility of ignoring messages to the client, which can avoid this
|
||||||
|
# limitation.
|
||||||
|
#
|
||||||
|
#send_messages_from_ignored_users_to_client = false
|
||||||
|
|
||||||
# Vector list of IPv4 and IPv6 CIDR ranges / subnets *in quotes* that you
|
# Vector list of IPv4 and IPv6 CIDR ranges / subnets *in quotes* that you
|
||||||
# do not want conduwuit to send outbound requests to. Defaults to
|
# do not want conduwuit to send outbound requests to. Defaults to
|
||||||
# RFC1918, unroutable, loopback, multicast, and testnet addresses for
|
# RFC1918, unroutable, loopback, multicast, and testnet addresses for
|
||||||
|
|
2
debian/conduwuit.service
vendored
2
debian/conduwuit.service
vendored
|
@ -3,7 +3,7 @@ Description=conduwuit Matrix homeserver
|
||||||
Wants=network-online.target
|
Wants=network-online.target
|
||||||
After=network-online.target
|
After=network-online.target
|
||||||
Alias=matrix-conduwuit.service
|
Alias=matrix-conduwuit.service
|
||||||
Documentation=https://conduwuit.puppyirl.gay/
|
Documentation=https://continuwuity.org/
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
DynamicUser=yes
|
DynamicUser=yes
|
||||||
|
|
|
@ -19,4 +19,4 @@
|
||||||
- [Contributing](contributing.md)
|
- [Contributing](contributing.md)
|
||||||
- [Testing](development/testing.md)
|
- [Testing](development/testing.md)
|
||||||
- [Hot Reloading ("Live" Development)](development/hot_reload.md)
|
- [Hot Reloading ("Live" Development)](development/hot_reload.md)
|
||||||
- [conduwuit Community Code of Conduct](conduwuit_coc.md)
|
- [Community (and Guidelines)](community.md)
|
||||||
|
|
139
docs/community.md
Normal file
139
docs/community.md
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
# Continuwuity Community Guidelines
|
||||||
|
|
||||||
|
Welcome to the Continuwuity commuwunity! We're excited to have you here. Continuwuity is a
|
||||||
|
continuation of the conduwuit homeserver, which in turn is a hard-fork of the Conduit homeserver,
|
||||||
|
aimed at making Matrix more accessible and inclusive for everyone.
|
||||||
|
|
||||||
|
This space is dedicated to fostering a positive, supportive, and welcoming environment for everyone.
|
||||||
|
These guidelines apply to all Continuwuity spaces, including our Matrix rooms and any other
|
||||||
|
community channels that reference them. We've written these guidelines to help us all create an
|
||||||
|
environment where everyone feels safe and respected.
|
||||||
|
|
||||||
|
For code and contribution guidelines, please refer to the
|
||||||
|
[Contributor's Covenant](https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CODE_OF_CONDUCT.md).
|
||||||
|
Below are additional guidelines specific to the Continuwuity community.
|
||||||
|
|
||||||
|
## Our Values and Expected Behaviors
|
||||||
|
|
||||||
|
We strive to create a community based on mutual respect, collaboration, and inclusivity. We expect
|
||||||
|
all members to:
|
||||||
|
|
||||||
|
1. **Be Respectful and Inclusive**: Treat everyone with respect. We're committed to a community
|
||||||
|
where everyone feels safe, regardless of background, identity, or experience. Discrimination,
|
||||||
|
harassment, or hate speech won't be tolerated. Remember that each person experiences the world
|
||||||
|
differently; share your own perspective and be open to learning about others'.
|
||||||
|
|
||||||
|
2. **Be Positive and Constructive**: Engage in discussions constructively and support each other.
|
||||||
|
If you feel angry or frustrated, take a break before participating. Approach disagreements with
|
||||||
|
the goal of understanding, not winning. Focus on the issue, not the person.
|
||||||
|
|
||||||
|
3. **Communicate Clearly and Kindly**: Our community includes neurodivergent individuals and those
|
||||||
|
who may not appreciate sarcasm or subtlety. Communicate clearly and kindly. Avoid ambiguity and
|
||||||
|
ensure your messages can be easily understood by all. Avoid placing the burden of education on
|
||||||
|
marginalized groups; please make an effort to look into your questions before asking others for
|
||||||
|
detailed explanations.
|
||||||
|
|
||||||
|
4. **Be Open to Improving Inclusivity**: Actively participate in making our community more inclusive.
|
||||||
|
Report behaviour that contradicts these guidelines (see Reporting and Enforcement below) and be
|
||||||
|
open to constructive feedback aimed at improving our community. Understand that discussing
|
||||||
|
negative experiences can be emotionally taxing; focus on the message, not the tone.
|
||||||
|
|
||||||
|
5. **Commit to Our Values**: Building an inclusive community requires ongoing effort from everyone.
|
||||||
|
Recognise that addressing bias and discrimination is a continuous process that needs commitment
|
||||||
|
and action from all members.
|
||||||
|
|
||||||
|
## Unacceptable Behaviors
|
||||||
|
|
||||||
|
To ensure everyone feels safe and welcome, the following behaviors are considered unacceptable
|
||||||
|
within the Continuwuity community:
|
||||||
|
|
||||||
|
* **Harassment and Discrimination**: Avoid offensive comments related to background, family status,
|
||||||
|
gender, gender identity or expression, marital status, sex, sexual orientation, native language,
|
||||||
|
age, ability, race and/or ethnicity, caste, national origin, socioeconomic status, religion,
|
||||||
|
geographic location, or any other dimension of diversity. Don't deliberately misgender someone or
|
||||||
|
question the legitimacy of their gender identity.
|
||||||
|
|
||||||
|
* **Violence and Threats**: Do not engage in any form of violence or threats, including inciting
|
||||||
|
violence towards anyone or encouraging self-harm. Posting or threatening to post someone else's
|
||||||
|
personally identifying information ("doxxing") is also forbidden.
|
||||||
|
|
||||||
|
* **Personal Attacks**: Disagreements happen, but they should never turn into personal attacks.
|
||||||
|
Don't insult, demean, or belittle others.
|
||||||
|
|
||||||
|
* **Unwelcome Attention or Contact**: Avoid unwelcome sexual attention, inappropriate physical
|
||||||
|
contact (or simulation thereof), sexualized comments, jokes, or imagery.
|
||||||
|
|
||||||
|
* **Disruption**: Do not engage in sustained disruption of discussions, events, or other
|
||||||
|
community activities.
|
||||||
|
|
||||||
|
* **Bad Faith Actions**: Do not intentionally make false reports or otherwise abuse the reporting
|
||||||
|
process.
|
||||||
|
|
||||||
|
This is not an exhaustive list. Any behaviour that makes others feel unsafe or unwelcome may be
|
||||||
|
subject to enforcement action.
|
||||||
|
|
||||||
|
## Matrix Community
|
||||||
|
|
||||||
|
These Community Guidelines apply to the entire
|
||||||
|
[Continuwuity Matrix Space](https://matrix.to/#/#space:continuwuity.org) and its rooms, including:
|
||||||
|
|
||||||
|
### [#continuwuity:continuwuity.org](https://matrix.to/#/#continuwuity:continuwuity.org)
|
||||||
|
|
||||||
|
This room is for support and discussions about Continuwuity. Ask questions, share insights, and help
|
||||||
|
each other out while adhering to these guidelines.
|
||||||
|
|
||||||
|
We ask that this room remain focused on the Continuwuity software specifically: the team are
|
||||||
|
typically happy to engage in conversations about related subjects in the off-topic room.
|
||||||
|
|
||||||
|
### [#offtopic:continuwuity.org](https://matrix.to/#/#offtopic:continuwuity.org)
|
||||||
|
|
||||||
|
For off-topic community conversations about any subject. While this room allows for a wide range of
|
||||||
|
topics, the same guidelines apply. Please keep discussions respectful and inclusive, and avoid
|
||||||
|
divisive or stressful subjects like specific country/world politics unless handled with exceptional
|
||||||
|
care and respect for diverse viewpoints.
|
||||||
|
|
||||||
|
General topics, such as world events, are welcome as long as they follow the guidelines. If a member
|
||||||
|
of the team asks for the conversation to end, please respect their decision.
|
||||||
|
|
||||||
|
### [#dev:continuwuity.org](https://matrix.to/#/#dev:continuwuity.org)
|
||||||
|
|
||||||
|
This room is dedicated to discussing active development of Continuwuity, including ongoing issues or
|
||||||
|
code development. Collaboration here must follow these guidelines, and please consider raising
|
||||||
|
[an issue](https://forgejo.ellis.link/continuwuation/continuwuity/issues) on the repository to help
|
||||||
|
track progress.
|
||||||
|
|
||||||
|
## Reporting and Enforcement
|
||||||
|
|
||||||
|
We take these Community Guidelines seriously to protect our community members. If you witness or
|
||||||
|
experience unacceptable behaviour, or have any other concerns, please report it.
|
||||||
|
|
||||||
|
**How to Report:**
|
||||||
|
|
||||||
|
* **Alert Moderators in the Room:** If you feel comfortable doing so, you can address the issue
|
||||||
|
publicly in the relevant room by mentioning the moderation bot, `@rock:continuwuity.org`, which
|
||||||
|
will immediately alert all available moderators.
|
||||||
|
* **Direct Message:** If you're not comfortable raising the issue publicly, please send a direct
|
||||||
|
message (DM) to one of the room moderators.
|
||||||
|
|
||||||
|
Reports will be handled with discretion. We will investigate promptly and thoroughly.
|
||||||
|
|
||||||
|
**Enforcement Actions:**
|
||||||
|
|
||||||
|
Anyone asked to stop unacceptable behaviour is expected to comply immediately. Failure to do so, or
|
||||||
|
engaging in prohibited behaviour, may result in enforcement action. Moderators may take actions they
|
||||||
|
deem appropriate, including but not limited to:
|
||||||
|
|
||||||
|
1. **Warning**: A direct message or public warning identifying the violation and requesting
|
||||||
|
corrective action.
|
||||||
|
2. **Temporary Mute**: Temporary restriction from participating in discussions for a specified
|
||||||
|
period.
|
||||||
|
3. **Kick or Ban**: Removal from a room (kick) or the entire community space (ban). Egregious or
|
||||||
|
repeated violations may result in an immediate ban. Bans are typically permanent and reviewed
|
||||||
|
only in exceptional circumstances.
|
||||||
|
|
||||||
|
Retaliation against those who report concerns in good faith will not be tolerated and will be
|
||||||
|
subject to the same enforcement actions.
|
||||||
|
|
||||||
|
Together, let's build and maintain a community where everyone feels valued, safe, and respected.
|
||||||
|
|
||||||
|
— The Continuwuity Moderation Team
|
|
@ -1,93 +0,0 @@
|
||||||
# Continuwuity Community Code of Conduct
|
|
||||||
|
|
||||||
Welcome to the Continuwuity community! We’re excited to have you here. Continuwuity is
|
|
||||||
a hard-fork of the Conduit homeserver, aimed at making Matrix more accessible
|
|
||||||
and inclusive for everyone.
|
|
||||||
|
|
||||||
This space is dedicated to fostering a positive, supportive, and inclusive
|
|
||||||
environment for everyone. This Code of Conduct applies to all Continuwuity spaces,
|
|
||||||
including any further community rooms that reference this CoC. Here are our
|
|
||||||
guidelines to help maintain the welcoming atmosphere that sets Continuwuity apart.
|
|
||||||
|
|
||||||
For the general foundational rules, please refer to the [Contributor's
|
|
||||||
Covenant](https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CODE_OF_CONDUCT.md).
|
|
||||||
Below are additional guidelines specific to the Continuwuity community.
|
|
||||||
|
|
||||||
## Our Values and Guidelines
|
|
||||||
|
|
||||||
1. **Respect and Inclusivity**: We are committed to maintaining a community
|
|
||||||
where everyone feels safe and respected. Discrimination, harassment, or hate
|
|
||||||
speech of any kind will not be tolerated. Recognise that each community member
|
|
||||||
experiences the world differently based on their past experiences, background,
|
|
||||||
and identity. Share your own experiences and be open to learning about others'
|
|
||||||
diverse perspectives.
|
|
||||||
|
|
||||||
2. **Positivity and Constructiveness**: Engage in constructive discussions and
|
|
||||||
support each other. If you feel angry, negative, or aggressive, take a break
|
|
||||||
until you can participate in a positive and constructive manner. Process intense
|
|
||||||
feelings with a friend or in a private setting before engaging in community
|
|
||||||
conversations to help maintain a supportive and focused environment.
|
|
||||||
|
|
||||||
3. **Clarity and Understanding**: Our community includes neurodivergent
|
|
||||||
individuals and those who may not appreciate sarcasm or subtlety. Communicate
|
|
||||||
clearly and kindly, avoiding sarcasm and ensuring your messages are easily
|
|
||||||
understood by all. Additionally, avoid putting the burden of education on
|
|
||||||
marginalized groups by doing your own research before asking for explanations.
|
|
||||||
|
|
||||||
4. **Be Open to Inclusivity**: Actively engage in conversations about making our
|
|
||||||
community more inclusive. Report discriminatory behavior to the moderators
|
|
||||||
and be open to constructive feedback that aims to improve our community.
|
|
||||||
Understand that discussing discrimination and negative experiences can be
|
|
||||||
emotionally taxing, so focus on the message rather than critiquing the tone
|
|
||||||
used.
|
|
||||||
|
|
||||||
5. **Commit to Inclusivity**: Building an inclusive community requires time,
|
|
||||||
energy, and resources. Recognise that addressing discrimination and bias is
|
|
||||||
an ongoing process that necessitates commitment and action from all community
|
|
||||||
members.
|
|
||||||
|
|
||||||
## Matrix Community
|
|
||||||
|
|
||||||
This Code of Conduct applies to the entire [Continuwuity Matrix
|
|
||||||
Space](https://matrix.to/#/#space:continuwuity.org) and its rooms,
|
|
||||||
including:
|
|
||||||
|
|
||||||
### [#continuwuity:continuwuity.org](https://matrix.to/#/#continuwuity:continuwuity.org)
|
|
||||||
|
|
||||||
This room is for support and discussions about Continuwuity. Ask questions, share
|
|
||||||
insights, and help each other out.
|
|
||||||
|
|
||||||
### [#offtopic:continuwuity.org](https://matrix.to/#/#offtopic:continuwuity.org)
|
|
||||||
|
|
||||||
For off-topic community conversations about any subject. While this room allows
|
|
||||||
for a wide range of topics, the same CoC applies. Keep discussions respectful
|
|
||||||
and inclusive, and avoid divisive subjects like country/world politics. General
|
|
||||||
topics, such as world events, are welcome as long as they follow the CoC.
|
|
||||||
|
|
||||||
### [#dev:continuwuity.org](https://matrix.to/#/#dev:continuwuity.org)
|
|
||||||
|
|
||||||
This room is dedicated to discussing active development of Continuwuity. Posting
|
|
||||||
requires an elevated power level, which can be requested in one of the other
|
|
||||||
rooms. Use this space to collaborate and innovate.
|
|
||||||
|
|
||||||
## Enforcement
|
|
||||||
|
|
||||||
We have a zero-tolerance policy for violations of this Code of Conduct. If
|
|
||||||
someone’s behavior makes you uncomfortable, please report it to the moderators.
|
|
||||||
Actions we may take include:
|
|
||||||
|
|
||||||
1. **Warning**: A warning given directly in the room or via a private message
|
|
||||||
from the moderators, identifying the violation and requesting corrective
|
|
||||||
action.
|
|
||||||
2. **Temporary Mute**: Temporary restriction from participating in discussions
|
|
||||||
for a specified period to allow for reflection and cooling off.
|
|
||||||
3. **Kick or Ban**: Egregious behavior may result in an immediate kick or ban to
|
|
||||||
protect other community members. Bans are considered permanent and will only
|
|
||||||
be reversed in exceptional circumstances after proven good behavior.
|
|
||||||
|
|
||||||
Please highlight issues directly in rooms when possible, but if you don't feel
|
|
||||||
comfortable doing that, then please send a DM to one of the moderators directly.
|
|
||||||
|
|
||||||
Together, let’s build a community where everyone feels valued and respected.
|
|
||||||
|
|
||||||
— The Continuwuity Moderation Team
|
|
|
@ -1855,7 +1855,10 @@ pub async fn leave_room(
|
||||||
|
|
||||||
// Ask a remote server if we don't have this room and are not knocking on it
|
// Ask a remote server if we don't have this room and are not knocking on it
|
||||||
if dont_have_room.and(not_knocked).await {
|
if dont_have_room.and(not_knocked).await {
|
||||||
if let Err(e) = remote_leave_room(services, user_id, room_id).boxed().await {
|
if let Err(e) = remote_leave_room(services, user_id, room_id, reason.clone())
|
||||||
|
.boxed()
|
||||||
|
.await
|
||||||
|
{
|
||||||
warn!(%user_id, "Failed to leave room {room_id} remotely: {e}");
|
warn!(%user_id, "Failed to leave room {room_id} remotely: {e}");
|
||||||
// Don't tell the client about this error
|
// Don't tell the client about this error
|
||||||
}
|
}
|
||||||
|
@ -1940,6 +1943,7 @@ async fn remote_leave_room(
|
||||||
services: &Services,
|
services: &Services,
|
||||||
user_id: &UserId,
|
user_id: &UserId,
|
||||||
room_id: &RoomId,
|
room_id: &RoomId,
|
||||||
|
reason: Option<String>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let mut make_leave_response_and_server =
|
let mut make_leave_response_and_server =
|
||||||
Err!(BadServerResponse("No remote server available to assist in leaving {room_id}."));
|
Err!(BadServerResponse("No remote server available to assist in leaving {room_id}."));
|
||||||
|
@ -2056,6 +2060,12 @@ async fn remote_leave_room(
|
||||||
.expect("Timestamp is valid js_int value"),
|
.expect("Timestamp is valid js_int value"),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
// Inject the reason key into the event content dict if it exists
|
||||||
|
if let Some(reason) = reason {
|
||||||
|
if let Some(CanonicalJsonValue::Object(content)) = leave_event_stub.get_mut("content") {
|
||||||
|
content.insert("reason".to_owned(), CanonicalJsonValue::String(reason));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// room v3 and above removed the "event_id" field from remote PDU format
|
// room v3 and above removed the "event_id" field from remote PDU format
|
||||||
match room_version_id {
|
match room_version_id {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
use core::panic;
|
||||||
|
|
||||||
use axum::extract::State;
|
use axum::extract::State;
|
||||||
use conduwuit::{
|
use conduwuit::{
|
||||||
Err, Result, at,
|
Err, Result, at,
|
||||||
|
@ -132,8 +134,6 @@ pub(crate) async fn get_message_events_route(
|
||||||
.take(limit)
|
.take(limit)
|
||||||
.collect()
|
.collect()
|
||||||
.await;
|
.await;
|
||||||
// let appservice_id = body.appservice_info.map(|appservice|
|
|
||||||
// appservice.registration.id);
|
|
||||||
|
|
||||||
let lazy_loading_context = lazy_loading::Context {
|
let lazy_loading_context = lazy_loading::Context {
|
||||||
user_id: sender_user,
|
user_id: sender_user,
|
||||||
|
@ -143,7 +143,7 @@ pub(crate) async fn get_message_events_route(
|
||||||
if let Some(registration) = body.appservice_info.as_ref() {
|
if let Some(registration) = body.appservice_info.as_ref() {
|
||||||
<&DeviceId>::from(registration.registration.id.as_str())
|
<&DeviceId>::from(registration.registration.id.as_str())
|
||||||
} else {
|
} else {
|
||||||
<&DeviceId>::from("")
|
panic!("No device_id provided and no appservice registration found, this should be unreachable");
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
room_id,
|
room_id,
|
||||||
|
@ -275,10 +275,12 @@ pub(crate) async fn is_ignored_pdu(
|
||||||
|
|
||||||
let ignored_server = services
|
let ignored_server = services
|
||||||
.moderation
|
.moderation
|
||||||
.is_remote_server_forbidden(pdu.sender().server_name());
|
.is_remote_server_ignored(pdu.sender().server_name());
|
||||||
|
|
||||||
if ignored_type
|
if ignored_type
|
||||||
&& (ignored_server || services.users.user_is_ignored(&pdu.sender, user_id).await)
|
&& (ignored_server
|
||||||
|
|| (!services.config.send_messages_from_ignored_users_to_client
|
||||||
|
&& services.users.user_is_ignored(&pdu.sender, user_id).await))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -614,24 +614,31 @@ fn custom_room_id_check(services: &Services, custom_room_id: &str) -> Result<Own
|
||||||
"Custom room ID contains an unexpected `:` which is not allowed.",
|
"Custom room ID contains an unexpected `:` which is not allowed.",
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
} else if custom_room_id.starts_with('!'){
|
} else if custom_room_id.starts_with('!') {
|
||||||
return Err(Error::BadRequest(
|
return Err(Error::BadRequest(
|
||||||
ErrorKind::InvalidParam,
|
ErrorKind::InvalidParam,
|
||||||
"Room ID is prefixed with !, but is not fully qualified. You likely did not want this."));
|
"Room ID is prefixed with !, but is not fully qualified. You likely did not want \
|
||||||
|
this.",
|
||||||
|
));
|
||||||
} else {
|
} else {
|
||||||
room_id = format!("!{custom_room_id}:{server_name}");
|
room_id = format!("!{custom_room_id}:{server_name}");
|
||||||
}
|
}
|
||||||
OwnedRoomId::parse(room_id)
|
OwnedRoomId::parse(room_id)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
.and_then(
|
.and_then(|full_room_id| {
|
||||||
|full_room_id| {
|
if full_room_id
|
||||||
if full_room_id.server_name().expect("failed to extract server name from room ID") != server_name {
|
.server_name()
|
||||||
Err(Error::BadRequest(ErrorKind::InvalidParam, "Custom room ID must be on this server."))
|
.expect("failed to extract server name from room ID")
|
||||||
} else {
|
!= server_name
|
||||||
Ok(full_room_id)
|
{
|
||||||
}
|
Err(Error::BadRequest(
|
||||||
|
ErrorKind::InvalidParam,
|
||||||
|
"Custom room ID must be on this server.",
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
Ok(full_room_id)
|
||||||
}
|
}
|
||||||
)
|
})
|
||||||
.inspect(|full_room_id| {
|
.inspect(|full_room_id| {
|
||||||
debug_info!(?full_room_id, "Full custom room ID");
|
debug_info!(?full_room_id, "Full custom room ID");
|
||||||
})
|
})
|
||||||
|
|
|
@ -163,6 +163,8 @@ pub struct Config {
|
||||||
/// If enabled, conduwuit will send a simple GET request periodically to
|
/// If enabled, conduwuit will send a simple GET request periodically to
|
||||||
/// `https://continuwuity.org/.well-known/continuwuity/announcements` for any new
|
/// `https://continuwuity.org/.well-known/continuwuity/announcements` for any new
|
||||||
/// announcements or major updates. This is not an update check endpoint.
|
/// announcements or major updates. This is not an update check endpoint.
|
||||||
|
///
|
||||||
|
/// default: true
|
||||||
#[serde(alias = "allow_check_for_updates", default = "true_fn")]
|
#[serde(alias = "allow_check_for_updates", default = "true_fn")]
|
||||||
pub allow_announcements_check: bool,
|
pub allow_announcements_check: bool,
|
||||||
|
|
||||||
|
@ -1130,9 +1132,9 @@ pub struct Config {
|
||||||
pub rocksdb_compaction_ioprio_idle: bool,
|
pub rocksdb_compaction_ioprio_idle: bool,
|
||||||
|
|
||||||
/// Enables RocksDB compaction. You should never ever have to set this
|
/// Enables RocksDB compaction. You should never ever have to set this
|
||||||
/// option to false. If you for some reason find yourself needing to use this
|
/// option to false. If you for some reason find yourself needing to use
|
||||||
/// option as part of troubleshooting or a bug, please reach out to us in
|
/// this option as part of troubleshooting or a bug, please reach out to us
|
||||||
/// the conduwuit Matrix room with information and details.
|
/// in the conduwuit Matrix room with information and details.
|
||||||
///
|
///
|
||||||
/// Disabling compaction will lead to a significantly bloated and
|
/// Disabling compaction will lead to a significantly bloated and
|
||||||
/// explosively large database, gradually poor performance, unnecessarily
|
/// explosively large database, gradually poor performance, unnecessarily
|
||||||
|
@ -1357,25 +1359,13 @@ pub struct Config {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub prune_missing_media: bool,
|
pub prune_missing_media: bool,
|
||||||
|
|
||||||
/// Vector list of regex patterns of server names that conduwuit will refuse
|
|
||||||
/// to download remote media from.
|
|
||||||
///
|
|
||||||
/// example: ["badserver\.tld$", "badphrase", "19dollarfortnitecards"]
|
|
||||||
///
|
|
||||||
/// default: []
|
|
||||||
#[serde(default, with = "serde_regex")]
|
|
||||||
pub prevent_media_downloads_from: RegexSet,
|
|
||||||
|
|
||||||
/// List of forbidden server names via regex patterns that we will block
|
/// List of forbidden server names via regex patterns that we will block
|
||||||
/// incoming AND outgoing federation with, and block client room joins /
|
/// incoming AND outgoing federation with, and block client room joins /
|
||||||
/// remote user invites.
|
/// remote user invites.
|
||||||
///
|
///
|
||||||
/// Additionally, it will hide messages from these servers for all users
|
|
||||||
/// on this server.
|
|
||||||
///
|
|
||||||
/// Note that your messages can still make it to forbidden servers through
|
/// Note that your messages can still make it to forbidden servers through
|
||||||
/// backfilling. Events we receive from forbidden servers via backfill will
|
/// backfilling. Events we receive from forbidden servers via backfill
|
||||||
/// be stored in the database, but will not be sent to the client.
|
/// from servers we *do* federate with will be stored in the database.
|
||||||
///
|
///
|
||||||
/// This check is applied on the room ID, room alias, sender server name,
|
/// This check is applied on the room ID, room alias, sender server name,
|
||||||
/// sender user's server name, inbound federation X-Matrix origin, and
|
/// sender user's server name, inbound federation X-Matrix origin, and
|
||||||
|
@ -1384,7 +1374,7 @@ pub struct Config {
|
||||||
/// You can set this to ["*"] to block all servers by default, and then
|
/// You can set this to ["*"] to block all servers by default, and then
|
||||||
/// use `allowed_remote_server_names` to allow only specific servers.
|
/// use `allowed_remote_server_names` to allow only specific servers.
|
||||||
///
|
///
|
||||||
/// example: ["badserver\.tld$", "badphrase", "19dollarfortnitecards"]
|
/// example: ["badserver\\.tld$", "badphrase", "19dollarfortnitecards"]
|
||||||
///
|
///
|
||||||
/// default: []
|
/// default: []
|
||||||
#[serde(default, with = "serde_regex")]
|
#[serde(default, with = "serde_regex")]
|
||||||
|
@ -1395,12 +1385,21 @@ pub struct Config {
|
||||||
///
|
///
|
||||||
/// This option has no effect if `forbidden_remote_server_names` is empty.
|
/// This option has no effect if `forbidden_remote_server_names` is empty.
|
||||||
///
|
///
|
||||||
/// example: ["goodserver\.tld$", "goodphrase"]
|
/// example: ["goodserver\\.tld$", "goodphrase"]
|
||||||
///
|
///
|
||||||
/// default: []
|
/// default: []
|
||||||
#[serde(default, with = "serde_regex")]
|
#[serde(default, with = "serde_regex")]
|
||||||
pub allowed_remote_server_names: RegexSet,
|
pub allowed_remote_server_names: RegexSet,
|
||||||
|
|
||||||
|
/// Vector list of regex patterns of server names that conduwuit will refuse
|
||||||
|
/// to download remote media from.
|
||||||
|
///
|
||||||
|
/// example: ["badserver\.tld$", "badphrase", "19dollarfortnitecards"]
|
||||||
|
///
|
||||||
|
/// default: []
|
||||||
|
#[serde(default, with = "serde_regex")]
|
||||||
|
pub prevent_media_downloads_from: RegexSet,
|
||||||
|
|
||||||
/// List of forbidden server names via regex patterns that we will block all
|
/// List of forbidden server names via regex patterns that we will block all
|
||||||
/// outgoing federated room directory requests for. Useful for preventing
|
/// outgoing federated room directory requests for. Useful for preventing
|
||||||
/// our users from wandering into bad servers or spaces.
|
/// our users from wandering into bad servers or spaces.
|
||||||
|
@ -1411,6 +1410,31 @@ pub struct Config {
|
||||||
#[serde(default, with = "serde_regex")]
|
#[serde(default, with = "serde_regex")]
|
||||||
pub forbidden_remote_room_directory_server_names: RegexSet,
|
pub forbidden_remote_room_directory_server_names: RegexSet,
|
||||||
|
|
||||||
|
/// Vector list of regex patterns of server names that conduwuit will not
|
||||||
|
/// send messages to the client from.
|
||||||
|
///
|
||||||
|
/// Note that there is no way for clients to receive messages once a server
|
||||||
|
/// has become unignored without doing a full sync. This is a protocol
|
||||||
|
/// limitation with the current sync protocols. This means this is somewhat
|
||||||
|
/// of a nuclear option.
|
||||||
|
///
|
||||||
|
/// example: ["reallybadserver\.tld$", "reallybadphrase",
|
||||||
|
/// "69dollarfortnitecards"]
|
||||||
|
///
|
||||||
|
/// default: []
|
||||||
|
#[serde(default, with = "serde_regex")]
|
||||||
|
pub ignore_messages_from_server_names: RegexSet,
|
||||||
|
|
||||||
|
/// Send messages from users that the user has ignored to the client.
|
||||||
|
///
|
||||||
|
/// There is no way for clients to receive messages sent while a user was
|
||||||
|
/// ignored without doing a full sync. This is a protocol limitation with
|
||||||
|
/// the current sync protocols. Disabling this option will move
|
||||||
|
/// responsibility of ignoring messages to the client, which can avoid this
|
||||||
|
/// limitation.
|
||||||
|
#[serde(default)]
|
||||||
|
pub send_messages_from_ignored_users_to_client: bool,
|
||||||
|
|
||||||
/// Vector list of IPv4 and IPv6 CIDR ranges / subnets *in quotes* that you
|
/// Vector list of IPv4 and IPv6 CIDR ranges / subnets *in quotes* that you
|
||||||
/// do not want conduwuit to send outbound requests to. Defaults to
|
/// do not want conduwuit to send outbound requests to. Defaults to
|
||||||
/// RFC1918, unroutable, loopback, multicast, and testnet addresses for
|
/// RFC1918, unroutable, loopback, multicast, and testnet addresses for
|
||||||
|
|
|
@ -38,7 +38,7 @@ struct GetMembership {
|
||||||
membership: MembershipState,
|
membership: MembershipState,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize, Debug)]
|
||||||
struct RoomMemberContentFields {
|
struct RoomMemberContentFields {
|
||||||
membership: Option<Raw<MembershipState>>,
|
membership: Option<Raw<MembershipState>>,
|
||||||
join_authorised_via_users_server: Option<Raw<OwnedUserId>>,
|
join_authorised_via_users_server: Option<Raw<OwnedUserId>>,
|
||||||
|
@ -149,9 +149,9 @@ where
|
||||||
Incoming: Event + Send + Sync,
|
Incoming: Event + Send + Sync,
|
||||||
{
|
{
|
||||||
debug!(
|
debug!(
|
||||||
"auth_check beginning for {} ({})",
|
event_id = format!("{}", incoming_event.event_id()),
|
||||||
incoming_event.event_id(),
|
event_type = format!("{}", incoming_event.event_type()),
|
||||||
incoming_event.event_type()
|
"auth_check beginning"
|
||||||
);
|
);
|
||||||
|
|
||||||
// [synapse] check that all the events are in the same room as `incoming_event`
|
// [synapse] check that all the events are in the same room as `incoming_event`
|
||||||
|
@ -383,10 +383,15 @@ where
|
||||||
|
|
||||||
let sender_membership_event_content: RoomMemberContentFields =
|
let sender_membership_event_content: RoomMemberContentFields =
|
||||||
from_json_str(sender_member_event.content().get())?;
|
from_json_str(sender_member_event.content().get())?;
|
||||||
let membership_state = sender_membership_event_content
|
let Some(membership_state) = sender_membership_event_content.membership else {
|
||||||
.membership
|
warn!(
|
||||||
.expect("we should test before that this field exists")
|
sender_membership_event_content = format!("{sender_membership_event_content:?}"),
|
||||||
.deserialize()?;
|
event_id = format!("{}", incoming_event.event_id()),
|
||||||
|
"Sender membership event content missing membership field"
|
||||||
|
);
|
||||||
|
return Err(Error::InvalidPdu("Missing membership field".to_owned()));
|
||||||
|
};
|
||||||
|
let membership_state = membership_state.deserialize()?;
|
||||||
|
|
||||||
if !matches!(membership_state, MembershipState::Join) {
|
if !matches!(membership_state, MembershipState::Join) {
|
||||||
warn!("sender's membership is not join");
|
warn!("sender's membership is not join");
|
||||||
|
|
|
@ -36,6 +36,7 @@ assets = [
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = [
|
default = [
|
||||||
|
"blurhashing",
|
||||||
"brotli_compression",
|
"brotli_compression",
|
||||||
"element_hacks",
|
"element_hacks",
|
||||||
"gzip_compression",
|
"gzip_compression",
|
||||||
|
|
|
@ -1,38 +1,57 @@
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use conduwuit::{Result, Server, implement};
|
use conduwuit::{Result, implement};
|
||||||
use ruma::ServerName;
|
use ruma::ServerName;
|
||||||
|
|
||||||
|
use crate::{Dep, config};
|
||||||
|
|
||||||
pub struct Service {
|
pub struct Service {
|
||||||
services: Services,
|
services: Services,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Services {
|
struct Services {
|
||||||
pub server: Arc<Server>,
|
// pub server: Arc<Server>,
|
||||||
|
pub config: Dep<config::Service>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl crate::Service for Service {
|
impl crate::Service for Service {
|
||||||
fn build(args: crate::Args<'_>) -> Result<Arc<Self>> {
|
fn build(args: crate::Args<'_>) -> Result<Arc<Self>> {
|
||||||
Ok(Arc::new(Self {
|
Ok(Arc::new(Self {
|
||||||
services: Services { server: args.server.clone() },
|
services: Services {
|
||||||
|
// server: args.server.clone(),
|
||||||
|
config: args.depend::<config::Service>("config"),
|
||||||
|
},
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn name(&self) -> &str { crate::service::make_name(std::module_path!()) }
|
fn name(&self) -> &str { crate::service::make_name(std::module_path!()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[implement(Service)]
|
||||||
|
#[must_use]
|
||||||
|
pub fn is_remote_server_ignored(&self, server_name: &ServerName) -> bool {
|
||||||
|
// We must never block federating with ourselves
|
||||||
|
if server_name == self.services.config.server_name {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.services
|
||||||
|
.config
|
||||||
|
.ignore_messages_from_server_names
|
||||||
|
.is_match(server_name.host())
|
||||||
|
}
|
||||||
|
|
||||||
#[implement(Service)]
|
#[implement(Service)]
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn is_remote_server_forbidden(&self, server_name: &ServerName) -> bool {
|
pub fn is_remote_server_forbidden(&self, server_name: &ServerName) -> bool {
|
||||||
// We must never block federating with ourselves
|
// We must never block federating with ourselves
|
||||||
if server_name == self.services.server.config.server_name {
|
if server_name == self.services.config.server_name {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if server is explicitly allowed
|
// Check if server is explicitly allowed
|
||||||
if self
|
if self
|
||||||
.services
|
.services
|
||||||
.server
|
|
||||||
.config
|
.config
|
||||||
.allowed_remote_server_names
|
.allowed_remote_server_names
|
||||||
.is_match(server_name.host())
|
.is_match(server_name.host())
|
||||||
|
@ -42,7 +61,6 @@ pub fn is_remote_server_forbidden(&self, server_name: &ServerName) -> bool {
|
||||||
|
|
||||||
// Check if server is explicitly forbidden
|
// Check if server is explicitly forbidden
|
||||||
self.services
|
self.services
|
||||||
.server
|
|
||||||
.config
|
.config
|
||||||
.forbidden_remote_server_names
|
.forbidden_remote_server_names
|
||||||
.is_match(server_name.host())
|
.is_match(server_name.host())
|
||||||
|
@ -56,7 +74,6 @@ pub fn is_remote_server_room_directory_forbidden(&self, server_name: &ServerName
|
||||||
self.is_remote_server_forbidden(server_name)
|
self.is_remote_server_forbidden(server_name)
|
||||||
|| self
|
|| self
|
||||||
.services
|
.services
|
||||||
.server
|
|
||||||
.config
|
.config
|
||||||
.forbidden_remote_room_directory_server_names
|
.forbidden_remote_room_directory_server_names
|
||||||
.is_match(server_name.host())
|
.is_match(server_name.host())
|
||||||
|
@ -70,7 +87,6 @@ pub fn is_remote_server_media_downloads_forbidden(&self, server_name: &ServerNam
|
||||||
self.is_remote_server_forbidden(server_name)
|
self.is_remote_server_forbidden(server_name)
|
||||||
|| self
|
|| self
|
||||||
.services
|
.services
|
||||||
.server
|
|
||||||
.config
|
.config
|
||||||
.prevent_media_downloads_from
|
.prevent_media_downloads_from
|
||||||
.is_match(server_name.host())
|
.is_match(server_name.host())
|
||||||
|
|
|
@ -577,7 +577,7 @@ impl Service {
|
||||||
|
|
||||||
self.db
|
self.db
|
||||||
.userid_usersigningkeyid
|
.userid_usersigningkeyid
|
||||||
.put(user_id, user_signing_key_key);
|
.raw_put(user_id, user_signing_key_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
if notify {
|
if notify {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue