This commit is contained in:
parent
0123d93458
commit
09493c7f91
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,2 +1,5 @@
|
||||||
/target
|
/target
|
||||||
/docker/dev/volumes
|
/docker/dev/volumes
|
||||||
|
/.envrc
|
||||||
|
/.direnv
|
||||||
|
/result
|
||||||
|
|
855
Cargo.lock
generated
855
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -29,7 +29,7 @@ once_cell = "1.4"
|
||||||
opentelemetry = { version = "0.18", features = ["rt-tokio"] }
|
opentelemetry = { version = "0.18", features = ["rt-tokio"] }
|
||||||
opentelemetry-otlp = "0.11"
|
opentelemetry-otlp = "0.11"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_qs = { version = "0.10", features = ["actix4"] }
|
serde_qs = { version = "0.12", features = ["actix4"] }
|
||||||
thiserror = "1.0"
|
thiserror = "1.0"
|
||||||
tracing = "0.1"
|
tracing = "0.1"
|
||||||
tracing-error = "0.2"
|
tracing-error = "0.2"
|
||||||
|
@ -44,7 +44,7 @@ tracing-subscriber = { version = "0.3", features = [
|
||||||
url = "2.1"
|
url = "2.1"
|
||||||
|
|
||||||
[dependencies.tracing-actix-web]
|
[dependencies.tracing-actix-web]
|
||||||
version = "0.6.1"
|
version = "0.7.2"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["emit_event_on_error", "opentelemetry_0_18"]
|
features = ["emit_event_on_error", "opentelemetry_0_18"]
|
||||||
|
|
||||||
|
@ -56,4 +56,4 @@ features = ["emit_event_on_error", "opentelemetry_0_18"]
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
dotenv = "0.15.0"
|
dotenv = "0.15.0"
|
||||||
ructe = { version = "0.15.0", features = ["sass", "mime03"] }
|
ructe = { version = "0.16.1", features = ["sass", "mime03"] }
|
||||||
|
|
43
flake.lock
Normal file
43
flake.lock
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1676283394,
|
||||||
|
"narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1678293141,
|
||||||
|
"narHash": "sha256-lLlQHaR0y+q6nd6kfpydPTGHhl1rS9nU9OQmztzKOYs=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "c90c4025bb6e0c4eaf438128a3b2640314b1c58d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
34
flake.nix
Normal file
34
flake.nix
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
description = "pict-rs-proxy";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, flake-utils }:
|
||||||
|
flake-utils.lib.eachDefaultSystem (system:
|
||||||
|
let
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
packages = rec {
|
||||||
|
pict-rs-proxy = pkgs.callPackage ./pict-rs-proxy.nix { };
|
||||||
|
|
||||||
|
default = pict-rs-proxy;
|
||||||
|
};
|
||||||
|
|
||||||
|
apps = rec {
|
||||||
|
dev = flake-utils.lib.mkApp { drv = self.packages.${system}.pict-rs-proxy; };
|
||||||
|
default = dev;
|
||||||
|
};
|
||||||
|
|
||||||
|
devShell = with pkgs; mkShell {
|
||||||
|
nativeBuildInputs = [ cargo cargo-outdated cargo-zigbuild clippy gcc protobuf rust-analyzer rustc rustfmt ];
|
||||||
|
|
||||||
|
RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
27
pict-rs-proxy.nix
Normal file
27
pict-rs-proxy.nix
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{ lib
|
||||||
|
, makeWrapper
|
||||||
|
, nixosTests
|
||||||
|
, protobuf
|
||||||
|
, rustPlatform
|
||||||
|
, stdenv
|
||||||
|
}:
|
||||||
|
|
||||||
|
rustPlatform.buildRustPackage {
|
||||||
|
pname = "pict-rs-proxy";
|
||||||
|
version = "0.4.0-beta.1";
|
||||||
|
src = ./.;
|
||||||
|
cargoSha256 = "SKj8drv60RcdpWNGaU+nSiFlTAU+WT+byg5EtN7Efk8=";
|
||||||
|
|
||||||
|
PROTOC = "${protobuf}/bin/protoc";
|
||||||
|
PROTOC_INCLUDE = "${protobuf}/include";
|
||||||
|
|
||||||
|
nativeBuildInputs = [ ];
|
||||||
|
|
||||||
|
passthru.tests = { inherit (nixosTests) pict-rs-proxy; };
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "A simple image hosting service";
|
||||||
|
homepage = "https://git.asonix.dog/asonix/pict-rs-proxy";
|
||||||
|
license = with licenses; [ agpl3Plus ];
|
||||||
|
};
|
||||||
|
}
|
20
src/main.rs
20
src/main.rs
|
@ -379,7 +379,7 @@ impl ResponseError for Error {
|
||||||
|
|
||||||
fn error_response(&self) -> HttpResponse {
|
fn error_response(&self) -> HttpResponse {
|
||||||
match render(HttpResponse::build(self.status_code()), |cursor| {
|
match render(HttpResponse::build(self.status_code()), |cursor| {
|
||||||
self::templates::error(cursor, &self.kind.to_string())
|
self::templates::error_html(cursor, &self.kind.to_string())
|
||||||
}) {
|
}) {
|
||||||
Ok(res) => res,
|
Ok(res) => res,
|
||||||
Err(_) => HttpResponse::build(self.status_code())
|
Err(_) => HttpResponse::build(self.status_code())
|
||||||
|
@ -413,7 +413,7 @@ enum ErrorKind {
|
||||||
#[tracing::instrument(name = "Upload Page")]
|
#[tracing::instrument(name = "Upload Page")]
|
||||||
async fn index() -> Result<HttpResponse, Error> {
|
async fn index() -> Result<HttpResponse, Error> {
|
||||||
render(HttpResponse::Ok(), |cursor| {
|
render(HttpResponse::Ok(), |cursor| {
|
||||||
self::templates::index(cursor, "/upload", "images[]")
|
self::templates::index_html(cursor, "/upload", "images[]")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -526,12 +526,12 @@ async fn list_uploads(
|
||||||
}
|
}
|
||||||
|
|
||||||
return render(HttpResponse::Ok(), |cursor| {
|
return render(HttpResponse::Ok(), |cursor| {
|
||||||
self::templates::uploads(cursor)
|
self::templates::uploads_html(cursor)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
render(HttpResponse::Ok(), |cursor| {
|
render(HttpResponse::Ok(), |cursor| {
|
||||||
self::templates::finished_uploads(cursor, results)
|
self::templates::finished_uploads_html(cursor, results)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -592,7 +592,7 @@ async fn thumbs(
|
||||||
};
|
};
|
||||||
|
|
||||||
render(HttpResponse::Ok(), |cursor| {
|
render(HttpResponse::Ok(), |cursor| {
|
||||||
self::templates::thumbnails(cursor, image, THUMBNAIL_SIZES)
|
self::templates::thumbnails_html(cursor, image, THUMBNAIL_SIZES)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -647,7 +647,7 @@ async fn view_original(
|
||||||
};
|
};
|
||||||
|
|
||||||
render(HttpResponse::Ok(), |cursor| {
|
render(HttpResponse::Ok(), |cursor| {
|
||||||
self::templates::view(cursor, image, None, THUMBNAIL_SIZES.last())
|
self::templates::view_html(cursor, image, None, THUMBNAIL_SIZES.last())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -678,7 +678,7 @@ async fn view(
|
||||||
};
|
};
|
||||||
|
|
||||||
render(HttpResponse::Ok(), |cursor| {
|
render(HttpResponse::Ok(), |cursor| {
|
||||||
self::templates::view(cursor, image, Some(size), THUMBNAIL_SIZES.last())
|
self::templates::view_html(cursor, image, Some(size), THUMBNAIL_SIZES.last())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -766,13 +766,13 @@ async fn delete(
|
||||||
client.delete(url).send().await?;
|
client.delete(url).send().await?;
|
||||||
|
|
||||||
render(HttpResponse::Ok(), |cursor| {
|
render(HttpResponse::Ok(), |cursor| {
|
||||||
self::templates::deleted(cursor, &file)
|
self::templates::deleted_html(cursor, &file)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
let details: Details = res.json().await?;
|
let details: Details = res.json().await?;
|
||||||
|
|
||||||
render(HttpResponse::Ok(), move |cursor| {
|
render(HttpResponse::Ok(), move |cursor| {
|
||||||
self::templates::confirm_delete(
|
self::templates::confirm_delete_html(
|
||||||
cursor,
|
cursor,
|
||||||
&Image {
|
&Image {
|
||||||
file,
|
file,
|
||||||
|
@ -793,7 +793,7 @@ fn to_404() -> HttpResponse {
|
||||||
#[tracing::instrument(name = "Not Found")]
|
#[tracing::instrument(name = "Not Found")]
|
||||||
async fn not_found() -> Result<HttpResponse, Error> {
|
async fn not_found() -> Result<HttpResponse, Error> {
|
||||||
render(HttpResponse::NotFound(), |cursor| {
|
render(HttpResponse::NotFound(), |cursor| {
|
||||||
self::templates::not_found(cursor)
|
self::templates::not_found_html(cursor)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue