refactor: only download stickers with nix,

manually invoke sticker-pack from the devshell to upload stickers to
matrix, to avoid leaking the access token from config.json to the nix
store.

Nixify SigStickers https://github.com/FHPythonUtils/SigStickers and
dependency https://github.com/signalstickers/signalstickers-client to
download Signal stickers
This commit is contained in:
teutat3s 2024-04-29 00:12:49 +02:00
parent d441327099
commit f19ee88860
Signed by: teutat3s
GPG key ID: 4FA1D3FA524F22C1
8 changed files with 133 additions and 30 deletions

5
.gitignore vendored
View file

@ -1 +1,6 @@
result result
.venv
config.json
uploaded-packs/images
downloads
.cache

View file

@ -12,8 +12,6 @@ Here's an example of a stickerpicker
myStickerPicker = createStickerPicker { myStickerPicker = createStickerPicker {
homeserver = "https://my.matrix.server"; homeserver = "https://my.matrix.server";
userId = "@stickerbot:my.matrix.server"; userId = "@stickerbot:my.matrix.server";
# You should probably encrypt this with either agenix, sops-nix or whatever else
accessTokenFile = ./stickerbot_access_token.txt;
sha256 = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; sha256 = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
packs = [ packs = [
{ {

View file

@ -14,7 +14,6 @@
{ {
homeserver ? "https://matrix.org", homeserver ? "https://matrix.org",
userId, userId,
accessTokenFile,
packs, packs,
hash ? "", hash ? "",
sha256 ? "" sha256 ? ""
@ -44,14 +43,6 @@ else let
(map (x: fetchers."${x.type}-deps")) (map (x: fetchers."${x.type}-deps"))
builtins.concatLists builtins.concatLists
]; ];
config-json = writeText "stickerpicker-config.json" ''
{
"homeserver": "${homeserver}",
"user_id": "${userId}",
"access_token": "${fileContents accessTokenFile}"
}
'';
in stdenvNoCC.mkDerivation { in stdenvNoCC.mkDerivation {
name = "stickerpicker"; name = "stickerpicker";
src = maunium-stickerpicker; src = maunium-stickerpicker;
@ -73,13 +64,11 @@ in stdenvNoCC.mkDerivation {
buildPhase = '' buildPhase = ''
mkdir images mkdir images
IMG_DIR="$(pwd)/images" IMG_DIR="$(pwd)/images"
STICKERPACKS_DIR="$(pwd)/web/packs"
STICKER_CONFIG="${config-json}"
${stickerDownloadInstructions} ${stickerDownloadInstructions}
''; '';
installPhase = '' installPhase = ''
mv web $out cp -r . $out
''; '';
} }

View file

@ -9,14 +9,6 @@
${instructions} ${instructions}
popd popd
sticker-pack \
--config "$STICKER_CONFIG" \
--add-to-index "$STICKERPACKS_DIR" \
--title '${title}' \
'${dirname}'
popd
''; '';
in { in {
directory-deps = [ ]; directory-deps = [ ];

View file

@ -18,16 +18,16 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1672441588, "lastModified": 1714253743,
"narHash": "sha256-jx5kxOyeObnVD44HRebKYL3cjWrcKhhcDmEYm0/naDY=", "narHash": "sha256-mdTQw2XlariysyScCv2tTE45QSU9v/ezLcHJ22f0Nxc=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6a0d2701705c3cf6f42c15aa92b7885f1f8a477f", "rev": "58a1abdbae3217ca6b702f03d3b35125d88a2994",
"type": "github" "type": "github"
}, },
"original": { "original": {
"id": "nixpkgs", "id": "nixpkgs",
"ref": "nixos-22.11", "ref": "nixos-unstable",
"type": "indirect" "type": "indirect"
} }
}, },

View file

@ -1,6 +1,6 @@
{ {
inputs = { inputs = {
nixpkgs.url = "nixpkgs/nixos-22.11"; nixpkgs.url = "nixpkgs/nixos-unstable";
maunium-stickerpicker = { maunium-stickerpicker = {
url = "github:maunium/stickerpicker"; url = "github:maunium/stickerpicker";
@ -12,15 +12,64 @@
system = "x86_64-linux"; system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
fetchers = pkgs.callPackage ./fetchers.nix { }; fetchers = pkgs.callPackage ./fetchers.nix { };
createStickerPicker = pkgs.callPackage ./createStickerPicker.nix { downloadStickers = pkgs.callPackage ./downloadStickers.nix {
inherit maunium-stickerpicker fetchers; inherit maunium-stickerpicker fetchers;
inherit (self.packages.${system}) stickerpicker-tools; inherit (self.packages.${system}) stickerpicker-tools;
}; };
in { in {
inherit createStickerPicker; inherit downloadStickers;
packages.${system} = { devShells.${system}.default = pkgs.mkShell {
name = "python-venv";
venvDir = "./.venv";
buildInputs = [
pkgs.python3Packages.python
pkgs.python3Packages.venvShellHook
self.packages.${system}.stickerpicker-tools
self.packages.${system}.sigstickers
];
postVenvCreation = ''
unset SOURCE_DATE_EPOCH
pip install -r requirements.txt
'';
postShellHook = ''
# allow pip to install wheels
unset SOURCE_DATE_EPOCH
'';
};
packages.${system} =
let
signalstickers-client = (pkgs.python3Packages.callPackage ./python/signalstickers-client.nix {});
in
{
default = self.packages.${system}.stickerpicker-tools; default = self.packages.${system}.stickerpicker-tools;
sigstickers = (pkgs.python3Packages.callPackage ./python/sigstickers.nix { inherit signalstickers-client; });
pub-solar-stickers = downloadStickers {
homeserver = "https://matrix.pub.solar";
userId = "@hakkonaut:pub.solar";
sha256 = "sha256-e5KNPhtrETzgcJxbVZtlWwBXK3RlNKXCZPPZ5Zk46ok=";
packs = [
{
type = "chatsticker";
name = "donald-and-friends";
}
{
type = "chatsticker";
name = "heartwarming-cat-world";
}
{
type = "chatsticker";
name = "kawaii-potato-1";
}
];
};
stickerpicker-tools = pkgs.python3Packages.buildPythonPackage { stickerpicker-tools = pkgs.python3Packages.buildPythonPackage {
name = "stickerpicker-tools"; name = "stickerpicker-tools";
src = maunium-stickerpicker; src = maunium-stickerpicker;

View file

@ -0,0 +1,42 @@
{
buildPythonPackage,
fetchPypi,
setuptools,
anyio,
cryptography,
httpx,
protobuf,
pytest
}:
buildPythonPackage rec {
pname = "signalstickers-client";
version = "3.3.0";
src = fetchPypi {
pname = "signalstickers-client";
inherit version;
sha256 = "sha256-5be/SdVhCH8lF2Vq2sJpt9R9htGO+wj+Q7Cp8S8NZXo=";
};
propagatedBuildInputs = [
anyio
cryptography
httpx
protobuf
setuptools
];
checkInputs = [
pytest
anyio
httpx
protobuf
];
postPatch = ''
substituteInPlace setup.py \
--replace 'protobuf>=3.13.0,<4.0.0' 'protobuf>=3.13'
substituteInPlace setup.py \
--replace 'cryptography>=3.1.1,<4.0.0' 'cryptography'
substituteInPlace setup.py \
--replace 'httpx>=0.16.1,<=0.24.1' 'httpx'
substituteInPlace setup.py \
--replace 'anyio>=3.0.0,<4.0.0' 'anyio'
'';
}

28
python/sigstickers.nix Normal file
View file

@ -0,0 +1,28 @@
{
buildPythonPackage,
fetchPypi,
setuptools,
emoji,
loguru,
pillow,
signalstickers-client
}:
buildPythonPackage rec {
pname = "sigstickers";
version = "2024.1";
src = fetchPypi {
pname = "sigstickers";
inherit version;
sha256 = "sha256-hIfyQokEOzb1kkTIa8/ieCRNuLGUcMDhbIBSpvBVd9o=";
};
propagatedBuildInputs = [
setuptools
emoji
loguru
pillow
signalstickers-client
];
format = "pyproject";
checkInputs = [
];
}