Merge master into staging-next

This commit is contained in:
github-actions[bot]
2024-12-21 06:04:14 +00:00
committed by GitHub
27 changed files with 298 additions and 218 deletions
@@ -1,85 +0,0 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchYarnDeps
, jq
, yarn
, fixup-yarn-lock
, nodejs
, jitsi-meet
}:
let
pinData = import ./pin.nix;
inherit (pinData.hashes) webSrcHash webYarnHash;
noPhoningHome = {
disable_guests = true; # disable automatic guest account registration at matrix.org
};
in
stdenv.mkDerivation (finalAttrs: builtins.removeAttrs pinData [ "hashes" ] // {
pname = "element-web";
src = fetchFromGitHub {
owner = "element-hq";
repo = "element-web";
rev = "v${finalAttrs.version}";
hash = webSrcHash;
};
offlineCache = fetchYarnDeps {
yarnLock = finalAttrs.src + "/yarn.lock";
sha256 = webYarnHash;
};
nativeBuildInputs = [ yarn fixup-yarn-lock jq nodejs ];
buildPhase = ''
runHook preBuild
export VERSION=${finalAttrs.version}
yarn --offline build:res
yarn --offline build:module_system
yarn --offline build:bundle
runHook postBuild
'';
configurePhase = ''
runHook preConfigure
export HOME=$PWD/tmp
# with the update of openssl3, some key ciphers are not supported anymore
# this flag will allow those codecs again as a workaround
# see https://medium.com/the-node-js-collection/node-js-17-is-here-8dba1e14e382#5f07
# and https://github.com/element-hq/element-web/issues/21043
export NODE_OPTIONS=--openssl-legacy-provider
mkdir -p $HOME
fixup-yarn-lock yarn.lock
yarn config --offline set yarn-offline-mirror $offlineCache
yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
patchShebangs node_modules
runHook postConfigure
'';
installPhase = ''
runHook preInstall
cp -R webapp $out
tar --extract --to-stdout --file ${jitsi-meet.src} jitsi-meet/libs/external_api.min.js > $out/jitsi_external_api.min.js
echo "${finalAttrs.version}" > "$out/version"
jq -s '.[0] * $conf' "config.sample.json" --argjson "conf" '${builtins.toJSON noPhoningHome}' > "$out/config.json"
runHook postInstall
'';
meta = {
description = "Glossy Matrix collaboration client for the web";
homepage = "https://element.io/";
changelog = "https://github.com/element-hq/element-web/blob/v${finalAttrs.version}/CHANGELOG.md";
maintainers = lib.teams.matrix.members;
license = lib.licenses.asl20;
platforms = lib.platforms.all;
};
})
@@ -1,9 +0,0 @@
{
"version" = "1.11.87";
"hashes" = {
"desktopSrcHash" = "sha256-rIxuXMHQVJrbfWibpiIBmTkXKHrBqnTMiBYIP8VOIH4=";
"desktopYarnHash" = "05qs1an3mbqsfn1nmgwagp564lqvyrbkyj58z5h2cbczqbavnxxz";
"webSrcHash" = "sha256-FcXYwYCx//fqWuUKRqTTntlT7jVBD1Heayg4T7ACHmc=";
"webYarnHash" = "0anamnfm5g4nj7wp18byi49x38aia490qfard2d34myzjgiby8v3";
};
}
@@ -46,7 +46,7 @@ in
stdenv.mkDerivation {
inherit pname src;
version = "${edition}.${version}";
version = if edition != "" then "${edition}.${version}" else version;
nativeBuildInputs = [
autoPatchelfHook
@@ -0,0 +1,32 @@
{
callPackage,
fetchurl,
# This is a bit unusual, but makes version and hash easily
# overridable. This is useful when the upstream archive was replaced
# and nixpkgs is not in sync yet.
officeVersion ? {
version = "1222";
edition = "";
hash = "sha256-8ya9RYpd9G5SITYOpvhxjQE8ieV8TuAApkjNwCf9nHs=";
},
...
}@args:
callPackage ./generic.nix (
args
// rec {
inherit (officeVersion) version edition;
pname = "softmaker-office-nx";
suiteName = "SoftMaker Office NX";
src = fetchurl {
inherit (officeVersion) hash;
url = "https://www.softmaker.net/down/softmaker-office-nx-${version}-amd64.tgz";
};
archive = "officenx.tar.lzma";
}
)
@@ -0,0 +1,7 @@
{
"version" = "1.11.89";
"hashes" = {
"desktopSrcHash" = "sha256-vZLM1AIMxDltB+GeQEcYifnaBC1+4wWkotPFuelHxT0=";
"desktopYarnHash" = "1n057ic4dzcyg3wfr8jj7vab00jg2d1m38y5zk1kab1pka163f1q";
};
}
@@ -8,8 +8,6 @@
pkg-config,
libsecret,
xcbuild,
Security,
AppKit,
fetchNpmDeps,
npmHooks,
}:
@@ -36,12 +34,7 @@ stdenv.mkDerivation rec {
npmHooks.npmConfigHook
] ++ lib.optional stdenv.hostPlatform.isDarwin xcbuild;
buildInputs =
lib.optionals (!stdenv.hostPlatform.isDarwin) [ libsecret ]
++ lib.optionals stdenv.hostPlatform.isDarwin [
Security
AppKit
];
buildInputs = lib.optionals (!stdenv.hostPlatform.isDarwin) [ libsecret ];
npmDeps = fetchNpmDeps {
inherit src;
@@ -13,9 +13,6 @@
element-web,
sqlcipher,
callPackage,
Security,
AppKit,
CoreServices,
desktopToDarwinBundle,
useKeytar ? true,
# command line arguments which are always set
@@ -23,11 +20,11 @@
}:
let
pinData = import ./pin.nix;
pinData = import ./element-desktop-pin.nix;
inherit (pinData.hashes) desktopSrcHash desktopYarnHash;
executableName = "element-desktop";
keytar = callPackage ./keytar { inherit Security AppKit; };
seshat = callPackage ./seshat { inherit CoreServices; };
keytar = callPackage ./keytar { };
seshat = callPackage ./seshat { };
electron = electron_33;
in
stdenv.mkDerivation (
@@ -146,6 +143,7 @@ stdenv.mkDerivation (
'';
passthru = {
# run with: nix-shell ./maintainers/scripts/update.nix --argstr package element-desktop
updateScript = ./update.sh;
# TL;DR: keytar is optional while seshat isn't.
@@ -3,13 +3,11 @@
stdenv,
rustPlatform,
fetchFromGitHub,
rust,
sqlcipher,
nodejs,
python3,
yarn,
fixup-yarn-lock,
CoreServices,
fetchYarnDeps,
removeReferencesTo,
}:
@@ -37,7 +35,7 @@ rustPlatform.buildRustPackage rec {
yarn
fixup-yarn-lock
];
buildInputs = [ sqlcipher ] ++ lib.optional stdenv.hostPlatform.isDarwin CoreServices;
buildInputs = [ sqlcipher ];
npm_config_nodedir = nodejs;
@@ -1,5 +1,5 @@
#!/usr/bin/env nix-shell
#!nix-shell -I nixpkgs=../../../../../ -i bash -p nix wget prefetch-yarn-deps nix-prefetch-github jq
#!nix-shell -i bash -p nix wget prefetch-yarn-deps nix-prefetch-github jq
if [ "$#" -gt 1 ] || [[ "$1" == -* ]]; then
echo "Regenerates packaging data for the element packages."
@@ -22,6 +22,8 @@ version="${version#v}"
web_src="https://raw.githubusercontent.com/element-hq/element-web/v$version"
web_src_hash=$(nix-prefetch-github element-hq element-web --rev v${version} | jq -r .hash)
cd "$(dirname "${BASH_SOURCE[0]}")" || exit 1
web_tmpdir=$(mktemp -d)
trap 'rm -rf "$web_tmpdir"' EXIT
@@ -42,14 +44,22 @@ wget -q "$desktop_src/yarn.lock"
desktop_yarn_hash=$(prefetch-yarn-deps yarn.lock)
popd
cat > pin.nix << EOF
cat > ../element-web-unwrapped/element-web-pin.nix << EOF
{
"version" = "$version";
"hashes" = {
"desktopSrcHash" = "$desktop_src_hash";
"desktopYarnHash" = "$desktop_yarn_hash";
"webSrcHash" = "$web_src_hash";
"webYarnHash" = "$web_yarn_hash";
};
}
EOF
cat > element-desktop-pin.nix << EOF
{
"version" = "$version";
"hashes" = {
"desktopSrcHash" = "$desktop_src_hash";
"desktopYarnHash" = "$desktop_yarn_hash";
};
}
EOF
@@ -0,0 +1,7 @@
{
"version" = "1.11.89";
"hashes" = {
"webSrcHash" = "sha256-K9i5MxTJaX359qsnpfXZBZiNHbhCEy25plUPVUtbGQs=";
"webYarnHash" = "164smvrq9937x0pql20zdqab5w35fcidbywkzlyc5g4w7iwkd9kx";
};
}
@@ -0,0 +1,95 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchYarnDeps,
jq,
yarn,
fixup-yarn-lock,
nodejs,
jitsi-meet,
}:
let
pinData = import ./element-web-pin.nix;
inherit (pinData.hashes) webSrcHash webYarnHash;
noPhoningHome = {
disable_guests = true; # disable automatic guest account registration at matrix.org
};
in
stdenv.mkDerivation (
finalAttrs:
builtins.removeAttrs pinData [ "hashes" ]
// {
pname = "element-web";
src = fetchFromGitHub {
owner = "element-hq";
repo = "element-web";
rev = "v${finalAttrs.version}";
hash = webSrcHash;
};
offlineCache = fetchYarnDeps {
yarnLock = finalAttrs.src + "/yarn.lock";
sha256 = webYarnHash;
};
nativeBuildInputs = [
yarn
fixup-yarn-lock
jq
nodejs
];
buildPhase = ''
runHook preBuild
export VERSION=${finalAttrs.version}
yarn --offline build:res
yarn --offline build:module_system
yarn --offline build:bundle
runHook postBuild
'';
configurePhase = ''
runHook preConfigure
export HOME=$PWD/tmp
# with the update of openssl3, some key ciphers are not supported anymore
# this flag will allow those codecs again as a workaround
# see https://medium.com/the-node-js-collection/node-js-17-is-here-8dba1e14e382#5f07
# and https://github.com/element-hq/element-web/issues/21043
export NODE_OPTIONS=--openssl-legacy-provider
mkdir -p $HOME
fixup-yarn-lock yarn.lock
yarn config --offline set yarn-offline-mirror $offlineCache
yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
patchShebangs node_modules
runHook postConfigure
'';
installPhase = ''
runHook preInstall
cp -R webapp $out
tar --extract --to-stdout --file ${jitsi-meet.src} jitsi-meet/libs/external_api.min.js > $out/jitsi_external_api.min.js
echo "${finalAttrs.version}" > "$out/version"
jq -s '.[0] * $conf' "config.sample.json" --argjson "conf" '${builtins.toJSON noPhoningHome}' > "$out/config.json"
runHook postInstall
'';
meta = {
description = "Glossy Matrix collaboration client for the web";
homepage = "https://element.io/";
changelog = "https://github.com/element-hq/element-web/blob/v${finalAttrs.version}/CHANGELOG.md";
maintainers = lib.teams.matrix.members;
license = lib.licenses.asl20;
platforms = lib.platforms.all;
};
}
)
+3 -3
View File
@@ -10,16 +10,16 @@
buildGoModule rec {
pname = "gh";
version = "2.63.2";
version = "2.64.0";
src = fetchFromGitHub {
owner = "cli";
repo = "cli";
rev = "refs/tags/v${version}";
hash = "sha256-MxgwnRTIJFpYhZZhyc59ZAzgi6ud7mHpdSIImMlkwtg=";
hash = "sha256-5OdUA0rwBUjfoUZfXzFBmt/GFuvH3pm8JV2iLhaJQek=";
};
vendorHash = "sha256-UCEtvEpfoyJs5lpoAfMehg5cFQ3XlESRT8XFIwvyYas=";
vendorHash = "sha256-lMhSJSQHCY/bDeFM2L2Dfo4ApkjTkg8R0PwOpGr+Gi0=";
nativeBuildInputs = [ installShellFiles ];
+2 -2
View File
@@ -6,13 +6,13 @@
buildGoModule rec {
pname = "meteor-git";
version = "0.24.2";
version = "0.25.0";
src = fetchFromGitHub {
owner = "stefanlogue";
repo = "meteor";
rev = "v${version}";
hash = "sha256-VuP7W20Mtml6K41PxQ8fPBeXLNvnvlMT8+rL5RIYi+A=";
hash = "sha256-2VeCbxHQNV2gNsRs7JVdSRmKI1pYZzW+amybrSRcjGY=";
};
vendorHash = "sha256-jKd/eJwp5SZvTrP3RN7xT7ibAB0PQondGR3RT+HQXIo=";
+3 -3
View File
@@ -6,16 +6,16 @@
buildGoModule rec {
pname = "mieru";
version = "3.7.0";
version = "3.9.0";
src = fetchFromGitHub {
owner = "enfein";
repo = "mieru";
rev = "v${version}";
hash = "sha256-VFQWiihwd0YiLpgTxKUjVd+IkGivsa4jI/jb5ckjFt8=";
hash = "sha256-59TWABRIH3FEOyLvZ+jn7b3jhI0comjU4Mrl4Ggx2eA=";
};
vendorHash = "sha256-woQoqYjdv2TZo66IwNkSHzIHFlu9JH8q/RXGyLlnTTc=";
vendorHash = "sha256-hSTKhn39xKZx1N9x66EH/ql4oP4qn0eysGTbUk9mRAk=";
proxyVendor = true;
ldflags = [
@@ -1,9 +1,9 @@
diff --git a/src/protections/NsfwProtection.ts b/src/protections/NsfwProtection.ts
deleted file mode 100644
index 8b6f8fd..0000000
index a6f45b2..0000000
--- a/src/protections/NsfwProtection.ts
+++ /dev/null
@@ -1,99 +0,0 @@
@@ -1,115 +0,0 @@
-/*
-Copyright 2024 The Matrix.org Foundation C.I.C.
-
@@ -22,10 +22,9 @@ index 8b6f8fd..0000000
-
-import { Protection } from "./IProtection";
-import { Mjolnir } from "../Mjolnir";
-import * as nsfw from 'nsfwjs';
-import {LogLevel} from "@vector-im/matrix-bot-sdk";
-import { node } from '@tensorflow/tfjs-node';
-
-import * as nsfw from "nsfwjs";
-import { LogLevel, LogService } from "@vector-im/matrix-bot-sdk";
-import { node } from "@tensorflow/tfjs-node";
-
-export class NsfwProtection extends Protection {
- settings = {};
@@ -41,37 +40,50 @@ index 8b6f8fd..0000000
- }
-
- public get name(): string {
- return 'NsfwProtection';
- return "NsfwProtection";
- }
-
- public get description(): string {
- return "Scans all images sent into a protected room to determine if the image is " +
- "NSFW. If it is, the image will automatically be redacted.";
- return (
- "Scans all images sent into a protected room to determine if the image is " +
- "NSFW. If it is, the image will automatically be redacted."
- );
- }
-
- public async handleEvent(mjolnir: Mjolnir, roomId: string, event: any): Promise<any> {
- if (event['type'] === 'm.room.message') {
- let content = JSON.stringify(event['content']);
- if (event["type"] === "m.room.message") {
- let content = JSON.stringify(event["content"]);
- if (!content.toLowerCase().includes("mxc")) {
- return;
- }
- }
- // try and grab a human-readable alias for more helpful management room output
- const maybeAlias = await mjolnir.client.getPublishedAlias(roomId)
- const room = maybeAlias ? maybeAlias : roomId
- const maybeAlias = await mjolnir.client.getPublishedAlias(roomId);
- const room = maybeAlias ? maybeAlias : roomId;
-
- const mxcs = content.match(/(mxc?:\/\/[^\s'"]+)/gim);
- if (!mxcs) {
- //something's gone wrong with the regex
- await mjolnir.managementRoomOutput.logMessage(LogLevel.ERROR, "NSFWProtection", `Unable to find any mxcs in ${event["event_id"]} in ${room}`);
- await mjolnir.managementRoomOutput.logMessage(
- LogLevel.ERROR,
- "NSFWProtection",
- `Unable to find any mxcs in ${event["event_id"]} in ${room}`,
- );
- return;
- }
-
- // @ts-ignore - see null check immediately above
- for (const mxc of mxcs) {
- const image = await mjolnir.client.downloadContent(mxc);
- const decodedImage = await node.decodeImage(image.data, 3);
- const predictions = await this.model.classify(decodedImage);
-
- let decodedImage;
- try {
- decodedImage = await node.decodeImage(image.data, 3);
- } catch (e) {
- LogService.error("NsfwProtection", `There was an error processing an image: ${e}`);
- continue;
- }
-
- const predictions = await this.model.classify(decodedImage);
-
- for (const prediction of predictions) {
- if (["Hentai", "Porn"].includes(prediction["className"])) {
@@ -79,22 +91,26 @@ index 8b6f8fd..0000000
- try {
- await mjolnir.client.redactEvent(roomId, event["event_id"]);
- } catch (err) {
- await mjolnir.managementRoomOutput.logMessage(LogLevel.ERROR, "NSFWProtection", `There was an error redacting ${event["event_id"]} in ${room}: ${err}`);
- await mjolnir.managementRoomOutput.logMessage(
- LogLevel.ERROR,
- "NSFWProtection",
- `There was an error redacting ${event["event_id"]} in ${room}: ${err}`,
- );
- }
- let eventId = event["event_id"]
- let body = `Redacted an image in ${room} ${eventId}`
- let eventId = event["event_id"];
- let body = `Redacted an image in ${room} ${eventId}`;
- let formatted_body = `<details>
- <summary>Redacted an image in ${room}</summary>
- <pre>${eventId}</pre> <pre></pre>${room}</pre>
- </details>`
- <pre>${eventId}</pre> <pre>${room}</pre>
- </details>`;
- const msg = {
- msgtype: "m.notice",
- body: body,
- format: "org.matrix.custom.html",
- formatted_body: formatted_body
- formatted_body: formatted_body,
- };
- await mjolnir.client.sendMessage(mjolnir.managementRoomId, msg);
- break
- break;
- }
- }
- }
@@ -103,16 +119,15 @@ index 8b6f8fd..0000000
- }
- }
-}
\ No newline at end of file
diff --git a/src/protections/ProtectionManager.ts b/src/protections/ProtectionManager.ts
index 9b84318..67f10dc 100644
index 485f05e..6ffb0d1 100644
--- a/src/protections/ProtectionManager.ts
+++ b/src/protections/ProtectionManager.ts
@@ -31,7 +31,6 @@ import { htmlEscape } from "../utils";
import { ERROR_KIND_FATAL, ERROR_KIND_PERMISSION } from "../ErrorCache";
import { RoomUpdateError } from "../models/RoomUpdateError";
import { LocalAbuseReports } from "./LocalAbuseReports";
-import {NsfwProtection} from "./NsfwProtection";
-import { NsfwProtection } from "./NsfwProtection";
import { MentionSpam } from "./MentionSpam";
const PROTECTIONS: Protection[] = [
@@ -121,10 +136,10 @@ index 9b84318..67f10dc 100644
new JoinWaveShortCircuit(),
new LocalAbuseReports(),
- new NsfwProtection(),
new MentionSpam()
new MentionSpam(),
];
@@ -104,9 +102,6 @@ export class ProtectionManager {
@@ -106,9 +104,6 @@ export class ProtectionManager {
protection.settings[key].setValue(value);
}
if (protection.enabled) {
@@ -136,49 +151,54 @@ index 9b84318..67f10dc 100644
}
diff --git a/test/integration/nsfwProtectionTest.ts b/test/integration/nsfwProtectionTest.ts
deleted file mode 100644
index c86fd38..0000000
index ed215e0..0000000
--- a/test/integration/nsfwProtectionTest.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import {newTestUser} from "./clientHelper";
@@ -1,89 +0,0 @@
-import { newTestUser } from "./clientHelper";
-
-import {MatrixClient} from "@vector-im/matrix-bot-sdk";
-import {getFirstReaction} from "./commands/commandUtils";
-import {strict as assert} from "assert";
-import { readFileSync } from 'fs';
-import { MatrixClient } from "@vector-im/matrix-bot-sdk";
-import { getFirstReaction } from "./commands/commandUtils";
-import { strict as assert } from "assert";
-import { readFileSync } from "fs";
-
-describe("Test: NSFW protection", function () {
- let client: MatrixClient;
- let room: string;
- this.beforeEach(async function () {
- client = await newTestUser(this.config.homeserverUrl, {name: {contains: "nsfw-protection"}});
- client = await newTestUser(this.config.homeserverUrl, { name: { contains: "nsfw-protection" } });
- await client.start();
- const mjolnirId = await this.mjolnir.client.getUserId();
- room = await client.createRoom({ invite: [mjolnirId] });
- await client.joinRoom(room);
- await client.joinRoom(this.config.managementRoom);
- await client.setUserPowerLevel(mjolnirId, room, 100);
- })
- });
- this.afterEach(async function () {
- await client.stop();
- })
- });
-
- function delay(ms: number) {
- return new Promise(resolve => setTimeout(resolve, ms));
- return new Promise((resolve) => setTimeout(resolve, ms));
- }
-
-
- it("Nsfw protection doesn't redact sfw images", async function() {
- it("Nsfw protection doesn't redact sfw images", async function () {
- this.timeout(20000);
-
- await client.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir rooms add ${room}` });
- await getFirstReaction(client, this.mjolnir.managementRoomId, '✅', async () => {
- return await client.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir enable NsfwProtection` });
- await client.sendMessage(this.mjolnir.managementRoomId, {
- msgtype: "m.text",
- body: `!mjolnir rooms add ${room}`,
- });
- await getFirstReaction(client, this.mjolnir.managementRoomId, "✅", async () => {
- return await client.sendMessage(this.mjolnir.managementRoomId, {
- msgtype: "m.text",
- body: `!mjolnir enable NsfwProtection`,
- });
- });
-
- const data = readFileSync('test_tree.jpg');
- const mxc = await client.uploadContent(data, 'image/png');
- let content = {"msgtype": "m.image", "body": "test.jpeg", "url": mxc};
- const data = readFileSync("test_tree.jpg");
- const mxc = await client.uploadContent(data, "image/png");
- let content = { msgtype: "m.image", body: "test.jpeg", url: mxc };
- let imageMessage = await client.sendMessage(room, content);
-
- await delay(500);
@@ -186,36 +206,41 @@ index c86fd38..0000000
- assert.equal(Object.keys(processedImage.content).length, 3, "This event should not have been redacted");
- });
-
- it("Nsfw protection redacts nsfw images", async function() {
- it("Nsfw protection redacts nsfw images", async function () {
- this.timeout(20000);
- // dial the sensitivity on the protection way up so that all images are flagged as NSFW
- this.mjolnir.config.nsfwSensitivity = 0.0;
-
- await client.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir rooms add ${room}` });
- await getFirstReaction(client, this.mjolnir.managementRoomId, '✅', async () => {
- return await client.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir enable NsfwProtection` });
- await client.sendMessage(this.mjolnir.managementRoomId, {
- msgtype: "m.text",
- body: `!mjolnir rooms add ${room}`,
- });
- await getFirstReaction(client, this.mjolnir.managementRoomId, "✅", async () => {
- return await client.sendMessage(this.mjolnir.managementRoomId, {
- msgtype: "m.text",
- body: `!mjolnir enable NsfwProtection`,
- });
- });
-
- const data = readFileSync('test_tree.jpg');
- const mxc = await client.uploadContent(data, 'image/png');
- let content = {"msgtype": "m.image", "body": "test.jpeg", "url": mxc};
- const data = readFileSync("test_tree.jpg");
- const mxc = await client.uploadContent(data, "image/png");
- let content = { msgtype: "m.image", body: "test.jpeg", url: mxc };
- let imageMessage = await client.sendMessage(room, content);
-
- let formatted_body = `<img src=${mxc} />`
- let formatted_body = `<img src=${mxc} />`;
- let htmlContent = {
- msgtype: "m.image",
- body: formatted_body,
- format: "org.matrix.custom.html",
- formatted_body: formatted_body
- };
- let htmlMessage = await client.sendMessage(room, htmlContent)
- msgtype: "m.image",
- body: formatted_body,
- format: "org.matrix.custom.html",
- formatted_body: formatted_body,
- };
- let htmlMessage = await client.sendMessage(room, htmlContent);
-
- await delay(500);
- let processedImage = await client.getEvent(room, imageMessage);
- assert.equal(Object.keys(processedImage.content).length, 0, "This event should have been redacted");
-
- let processedHtml = await client.getEvent(room, htmlMessage)
- assert.equal(Object.keys(processedHtml.content).length, 0, "This html image event should have been redacted")
- let processedHtml = await client.getEvent(room, htmlMessage);
- assert.equal(Object.keys(processedHtml.content).length, 0, "This html image event should have been redacted");
- });
-});
\ No newline at end of file
+5 -3
View File
@@ -1,6 +1,6 @@
{
"name": "mjolnir",
"version": "1.8.3",
"version": "1.9.1",
"description": "A moderation tool for Matrix",
"main": "lib/index.js",
"repository": "git@github.com:matrix-org/mjolnir.git",
@@ -10,7 +10,7 @@
"scripts": {
"build": "tsc",
"postbuild": "rm -rf lib/test/ && cp -r lib/src/* lib/ && rm -rf lib/src/",
"lint": "tslint --project ./tsconfig.json -t stylish",
"lint": "tslint --project ./tsconfig.json -t stylish && npx prettier . --check",
"start:dev": "yarn build && node --async-stack-traces lib/index.js",
"test": "ts-mocha --project ./tsconfig.json test/commands/**/*.ts",
"test:integration": "NODE_ENV=harness ts-mocha --async-stack-traces --require test/integration/fixtures.ts --timeout 300000 --project ./tsconfig.json \"test/integration/**/*Test.ts\"",
@@ -58,6 +58,7 @@
"humanize-duration-ts": "^2.1.1",
"js-yaml": "^4.1.0",
"jsdom": "^16.6.0",
"lru-cache": "^11.0.1",
"matrix-appservice-bridge": "10.3.1",
"nsfwjs": "^4.1.0",
"parse-duration": "^1.0.2",
@@ -69,5 +70,6 @@
},
"engines": {
"node": ">=20.0.0"
}
},
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
+3 -3
View File
@@ -11,13 +11,13 @@
mkYarnPackage rec {
pname = "mjolnir";
version = "1.8.3";
version = "1.9.1";
src = fetchFromGitHub {
owner = "matrix-org";
repo = "mjolnir";
rev = "refs/tags/v${version}";
hash = "sha256-yD7QGsS2Em8Z95po9pGRUDmHgHe4z0j0Jnvy3IG7xKY=";
hash = "sha256-LK2CgMLDJHfr1+ejHYeJNw2ekCnUA8GHufZ6vbifzGQ=";
};
patches = [
@@ -29,7 +29,7 @@ mkYarnPackage rec {
offlineCache = fetchYarnDeps {
yarnLock = src + "/yarn.lock";
hash = "sha256-05DqddK8+136Qq/JGeiITZkVJ8Dw9K9HfACKW86989U=";
hash = "sha256-1V7ooONt9j+4hk/3w6Dsv/SdWwa1xsLk97EwhuPegNo=";
};
packageResolutions = {
+4 -4
View File
@@ -11,20 +11,20 @@
rustPlatform.buildRustPackage rec {
pname = "yazi";
version = "0.4.1";
version = "0.4.2";
src = fetchFromGitHub {
owner = "sxyazi";
repo = "yazi";
rev = "v${version}";
hash = "sha256-YKP+9EfLiXbVivKWWL+arx+2Ek+XydS2VjGy3DncD8s=";
hash = "sha256-2fBajVFpmgNHb90NbK59yUeaYLWR7rhQxpce9Tq1uQU=";
};
cargoHash = "sha256-vH2ihp/X6W1OQfYwMT2vpn8c1PKaX9Uf1Tp2HvQl+o8=";
cargoHash = "sha256-54KD20C1oFK2KlH6aCwvjT4tf4p15FJV5y6pJUoQXG0=";
env.YAZI_GEN_COMPLETIONS = true;
env.VERGEN_GIT_SHA = "Nixpkgs";
env.VERGEN_BUILD_DATE = "2024-12-11";
env.VERGEN_BUILD_DATE = "2024-12-20";
nativeBuildInputs = [ installShellFiles ];
buildInputs = [ rust-jemalloc-sys ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ Foundation ];
+9 -5
View File
@@ -10,18 +10,19 @@
pkg-config,
sqlite,
util-linux,
unstableGitUpdater,
nixosTests,
}:
stdenv.mkDerivation rec {
pname = "solanum";
version = "unstable-2022-07-12";
version = "0-unstable-2024-07-24";
src = fetchFromGitHub {
owner = "solanum-ircd";
repo = pname;
rev = "860187d02895fc953de3475da07a7a06b9380254";
hash = "sha256-g8hXmxTfcPDmQ/cu4AI/iJfrhPLaQJEAeMdDhNDsVXs=";
repo = "solanum";
rev = "4e89f6603d63b2f8dfdec7a83161fb0343236349";
hash = "sha256-kUgB0Q+U6jx8Xyh1DSv8D7+Q9tC2wK3aaNt4At5chFQ=";
};
patches = [
@@ -68,7 +69,10 @@ stdenv.mkDerivation rec {
# make[4]: *** [Makefile:634: solanum] Error 1
enableParallelInstalling = false;
passthru.tests = { inherit (nixosTests) solanum; };
passthru = {
tests = { inherit (nixosTests) solanum; };
updateScript = unstableGitUpdater { };
};
meta = with lib; {
description = "IRCd for unified networks";
+1 -1
View File
@@ -328,7 +328,7 @@ mapAliases {
edUnstable = throw "edUnstable was removed; use ed instead"; # Added 2024-07-01
elasticsearch7Plugins = elasticsearchPlugins;
# Electron
element-desktop-wayland = throw "element-desktop-wayland has been removed. Consider setting NIXOS_OZONE_WL=1 via 'environment.sessionVariables' instead"; # Added 2024-12-17
elixir_ls = elixir-ls; # Added 2023-03-20
+16 -13
View File
@@ -2279,17 +2279,7 @@ with pkgs;
electronplayer = callPackage ../applications/video/electronplayer/electronplayer.nix { };
element-desktop = callPackage ../applications/networking/instant-messengers/element/element-desktop.nix {
inherit (darwin.apple_sdk.frameworks) Security AppKit CoreServices;
};
element-desktop-wayland = writeScriptBin "element-desktop" ''
#!/bin/sh
NIXOS_OZONE_WL=1 exec ${element-desktop}/bin/element-desktop "$@"
'';
element-web-unwrapped = callPackage ../applications/networking/instant-messengers/element/element-web.nix { };
element-web = callPackage ../applications/networking/instant-messengers/element/element-web-wrapper.nix {
element-web = callPackage ../by-name/el/element-web/package.nix {
conf = config.element-web.conf or { };
};
@@ -13898,7 +13888,12 @@ with pkgs;
jre = jre8; # TODO: remove override https://github.com/NixOS/nixpkgs/pull/89731
};
freeoffice = callPackage ../applications/office/softmaker/freeoffice.nix { };
inherit
({
freeoffice = callPackage ../applications/office/softmaker/freeoffice.nix { };
})
freeoffice
;
inherit (xorg) xlsfonts;
@@ -14911,7 +14906,15 @@ with pkgs;
smtube = libsForQt5.callPackage ../applications/video/smtube { };
softmaker-office = callPackage ../applications/office/softmaker/softmaker_office.nix { };
inherit
({
softmaker-office = callPackage ../applications/office/softmaker/softmaker-office.nix { };
softmaker-office-nx = callPackage ../applications/office/softmaker/softmaker-office-nx.nix { };
})
softmaker-office
softmaker-office-nx
;
synapse-bt = callPackage ../applications/networking/p2p/synapse-bt {
inherit (darwin.apple_sdk.frameworks) CoreServices Security;