diff --git a/.dockerignore b/.dockerignore
index cd0b9c3..eaeb877 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,5 +1,4 @@
*
-!/entry.sh
!/backend/src
!/backend/Cargo.lock
@@ -13,3 +12,4 @@
!/frontend/pnpm-lock.yaml
!/frontend/svelte.config.js
!/frontend/tsconfig.json
+!/frontend/vite.config.js
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2dfe755..166e21d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [2.0.0] - 2022-07-16
+
+### Added
+
+- Theming for logo and description text
+
+### Changed
+
+- Moved to redis
+- New html sanitizing library
+
+## [2.0.0-rc.0] - 2022-07-15
+
+### Added
+
+- Theming for logo and description text
+
+### Changed
+
+- Moved to redis
+- New html sanitizing library
+
## [1.5.3] - 2022-06-07
### Changed
diff --git a/Dockerfile b/Dockerfile
index 52a5581..34af967 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,7 @@
# FRONTEND
FROM node:16-alpine as client
WORKDIR /tmp
-RUN npm install -g pnpm
+RUN npm install -g pnpm@7
COPY ./frontend ./
RUN pnpm install
RUN pnpm run build
@@ -18,9 +18,8 @@ RUN cargo build --release
# RUNNER
FROM alpine
WORKDIR /app
-COPY ./entry.sh .
COPY --from=backend /tmp/target/release/cryptgeon .
COPY --from=client /tmp/build ./frontend/build
-ENV MEMCACHE=memcached:11211
+ENV REDIS=redis://redis/
EXPOSE 5000
-ENTRYPOINT [ "/app/entry.sh" ]
+ENTRYPOINT [ "/app/cryptgeon" ]
diff --git a/README.md b/README.md
index 54d63e6..49fc2d9 100644
--- a/README.md
+++ b/README.md
@@ -50,13 +50,15 @@ of the notes even if it tried to.
## Environment Variables
-| Variable | Default | Description |
-| ---------------- | ----------------- | --------------------------------------------------------------------------------------- |
-| `MEMCACHE` | `memcached:11211` | Memcached URL to connect to. |
-| `SIZE_LIMIT` | `1 KiB` | Max size for body. Accepted values according to [byte-unit](https://docs.rs/byte-unit/) |
-| `MAX_VIEWS` | `100` | Maximal number of views. |
-| `MAX_EXPIRATION` | `360` | Maximal expiration in minutes. |
-| `ALLOW_ADVANCED` | `true` | Allow custom configuration. If set to `false` all notes will be one view only. |
+| Variable | Default | Description |
+| ---------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------- |
+| `REDIS` | `redis://redis/` | Redis URL to connect to. |
+| `SIZE_LIMIT` | `1 KiB` | Max size for body. Accepted values according to [byte-unit](https://docs.rs/byte-unit/). `512 MiB` is the maximum allowed |
+| `MAX_VIEWS` | `100` | Maximal number of views. |
+| `MAX_EXPIRATION` | `360` | Maximal expiration in minutes. |
+| `ALLOW_ADVANCED` | `true` | Allow custom configuration. If set to `false` all notes will be one view only. |
+| `THEME_IMAGE` | `""` | Custom image for replacing the logo. Must be publicly reachable |
+| `THEME_TEXT` | `""` | Custom text for replacing the description below the logo |
## Deployment
@@ -69,19 +71,18 @@ Docker is the easiest way. There is the [official image here](https://hub.docker
```yaml
# docker-compose.yml
-version: '3.7'
+version: '3.8'
services:
- memcached:
- image: memcached:1-alpine
- entrypoint: memcached -m 128M -I 4M # Limit to 128 MB Ram, 4M per entry, customize at free will.
+ redis:
+ image: redis:7-alpine
app:
image: cupcakearmy/cryptgeon:latest
depends_on:
- - memcached
+ - redis
environment:
- SIZE_LIMIT: 4M
+ SIZE_LIMIT: 4 MiB
ports:
- 80:5000
```
@@ -107,16 +108,15 @@ networks:
external: true
services:
- memcached:
- image: memcached:1-alpine
+ redis:
+ image: redis:7-alpine
restart: unless-stopped
- entrypoint: memcached -m 128M -I 4M # Limit to 128 MB Ram, 4M per entry, customize at free will.
app:
image: cupcakearmy/cryptgeon:latest
restart: unless-stopped
depends_on:
- - memcached
+ - redis
networks:
- default
- proxy
@@ -132,7 +132,7 @@ services:
**Requirements**
- `pnpm`: `>=6`
-- `node`: `>=14`
+- `node`: `>=16`
- `rust`: edition `2021`
**Install**
@@ -159,9 +159,9 @@ pnpm run dev
Running `pnpm run dev` in the root folder will start the following things:
-- a memcache docker container
-- rust backend with hot reload
-- client with hot reload
+- redis docker container
+- rust backend
+- client
You can see the app under [localhost:1234](http://localhost:1234).
diff --git a/README_zh-CN.md b/README_zh-CN.md
index d03f966..e91f001 100644
--- a/README_zh-CN.md
+++ b/README_zh-CN.md
@@ -26,7 +26,7 @@ _加密鸽_ 是一个受 [_PrivNote_](https://privnote.com)项目启发的安全
## 演示示例
-查看加密鸽的在线演示demo: https://cryptgeon.nicco.io.
+查看加密鸽的在线演示 demo: https://cryptgeon.nicco.io.
## 功能
@@ -39,7 +39,7 @@ _加密鸽_ 是一个受 [_PrivNote_](https://privnote.com)项目启发的安全
加密鸽会为每条笔记都生成一个独立的 id (256bit)
和 key 256(bit)
。
-其中id
用于保存和提取密信, 在这之后这封密信将会被客户端使用AES算法的GCM模式和`key`进行加密然后发送至服务器,数据将会保存在服务器的内存中且永远不会被持久化到硬盘上,服务端永远不会得到密钥并且无法解读密信的内容。
+其中id
用于保存和提取密信, 在这之后这封密信将会被客户端使用 AES 算法的 GCM 模式和`key`进行加密然后发送至服务器,数据将会保存在服务器的内存中且永远不会被持久化到硬盘上,服务端永远不会得到密钥并且无法解读密信的内容。
## 屏幕截图
@@ -47,13 +47,13 @@ _加密鸽_ 是一个受 [_PrivNote_](https://privnote.com)项目启发的安全
## 环境变量
-| 变量名称 | 默认值 | 描述 |
-| ------------------ | ----------------- | ------------------------------------------------------------ |
-| `MEMCACHE` | `memcached:11211` | Memcached 连接 URL |
-| `SIZE_LIMIT` | `1 KiB` | 最大请求体(body)限制。有关支持的数值请查看 [字节单位](https://docs.rs/byte-unit/) |
-| `MAX_VIEWS` | `100` | 密信最多查看次数限制 |
-| ` MAX_EXPIRATION` | `360` | 密信最长过期时间限制(分钟) |
-| `ALLOW_ADVANCED` | `true` | 是否允许自定义设置,该项如果设为`false`,则不会显示自定义设置模块 |
+| 变量名称 | 默认值 | 描述 |
+| ----------------- | ---------------- | --------------------------------------------------------------------------------- |
+| `REDIS` | `redis://redis/` | Redis URL to connect to. |
+| `SIZE_LIMIT` | `1 KiB` | 最大请求体(body)限制。有关支持的数值请查看 [字节单位](https://docs.rs/byte-unit/) |
+| `MAX_VIEWS` | `100` | 密信最多查看次数限制 |
+| ` MAX_EXPIRATION` | `360` | 密信最长过期时间限制(分钟) |
+| `ALLOW_ADVANCED` | `true` | 是否允许自定义设置,该项如果设为`false`,则不会显示自定义设置模块 |
## 部署
@@ -61,40 +61,39 @@ _加密鸽_ 是一个受 [_PrivNote_](https://privnote.com)项目启发的安全
### Docker
-Docker是最简单的部署方式。这里是[官方镜像的地址](https://hub.docker.com/r/cupcakearmy/cryptgeon)。
+Docker 是最简单的部署方式。这里是[官方镜像的地址](https://hub.docker.com/r/cupcakearmy/cryptgeon)。
附:译者的[部署笔记](https://www.hash070.top/archives/cryptgeon-docker-deploy.html)
```yaml
# docker-compose.yml
-version: '3.7'
+version: '3.8'
services:
- memcached:
- image: memcached:1-alpine
- entrypoint: memcached -m 128M -I 4M # 限制到最大 128 MB 内存占用,每个密信最大 4Mb 占用, 请根据自己的服务器内存的实际情况设置。
+ redis:
+ image: redis:7-alpine
app:
image: cupcakearmy/cryptgeon:latest
depends_on:
- - memcached
+ - redis
environment:
- SIZE_LIMIT: 4M
+ SIZE_LIMIT: 4 MiB
ports:
- 80:5000
```
### NGINX 反向代理
-查看 [examples/nginx](https://github.com/cupcakearmy/cryptgeon/tree/main/examples/nginx) 目录。那里有几个示例反代配置文件模板,其中一个是带https配置的反代配置模板,你需要指定服务器的名称和证书才能生效。
+查看 [examples/nginx](https://github.com/cupcakearmy/cryptgeon/tree/main/examples/nginx) 目录。那里有几个示例反代配置文件模板,其中一个是带 https 配置的反代配置模板,你需要指定服务器的名称和证书才能生效。
### Traefik 2
假设:
-- 外部Docker代理网络 `proxy`
+- 外部 Docker 代理网络 `proxy`
- 证书解析器 `le`
-- 一个https入站点 `secure`
+- 一个 https 入站点 `secure`
- 域名 `example.org`
```yaml
@@ -105,16 +104,15 @@ networks:
external: true
services:
- memcached:
- image: memcached:1-alpine
+ redis:
+ image: redis:7-alpine
restart: unless-stopped
- entrypoint: memcached -m 128M -I 4M # Limit to 128 MB Ram, 4M per entry, customize at free will.
app:
image: cupcakearmy/cryptgeon:latest
restart: unless-stopped
depends_on:
- - memcached
+ - redis
networks:
- default
- proxy
@@ -146,7 +144,7 @@ cargo install cargo-watch
**运行**
-确保你的Docker正在运行
+确保你的 Docker 正在运行
> If you are on `macOS` you might need to disable AirPlay Receiver as it uses port 5000 (So stupid...)
> https://developer.apple.com/forums/thread/682332
@@ -155,15 +153,14 @@ cargo install cargo-watch
pnpm run dev
```
-在根目录执行 `pnpm run dev` 会开启下列服务:
+在根目录执行 `pnpm run dev` 会开启下列服务:
-- 一个 memcache docker 容器
+- 一个 redis docker 容器
- 无热重载的 rust 后端
- 可热重载的客户端
-你可以通过1234端口进入该应用,即 [localhost:1234](http://localhost:1234).
+你可以通过 1234 端口进入该应用,即 [localhost:1234](http://localhost:1234).
###### Attributions
-本项目所使用的图标由www.flaticon.com的freepik制作
-
+本项目所使用的图标由www.flaticon.com 的freepik制作
diff --git a/backend/Cargo.lock b/backend/Cargo.lock
index 8ec24c5..fc50778 100644
--- a/backend/Cargo.lock
+++ b/backend/Cargo.lock
@@ -21,9 +21,9 @@ dependencies = [
[[package]]
name = "actix-files"
-version = "0.6.0"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d81bde9a79336aa51ebed236e91fc1a0528ff67cfdf4f68ca4c61ede9fd26fb5"
+checksum = "e04dcf7654254676d434b0285e2298d577ed4826f67f536e7a39bb0f64721164"
dependencies = [
"actix-http",
"actix-service",
@@ -44,9 +44,9 @@ dependencies = [
[[package]]
name = "actix-http"
-version = "3.0.4"
+version = "3.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5885cb81a0d4d0d322864bea1bb6c2a8144626b4fdc625d4c51eba197e7797a"
+checksum = "6f9ffb6db08c1c3a1f4aef540f1a63193adc73c4fbd40b75a95fc8c5258f6e51"
dependencies = [
"actix-codec",
"actix-rt",
@@ -66,16 +66,16 @@ dependencies = [
"http",
"httparse",
"httpdate",
- "itoa",
+ "itoa 1.0.2",
"language-tags",
"local-channel",
- "log",
"mime",
"percent-encoding",
"pin-project-lite",
"rand",
- "sha-1",
+ "sha1 0.10.1",
"smallvec",
+ "tracing",
"zstd",
]
@@ -154,9 +154,9 @@ dependencies = [
[[package]]
name = "actix-web"
-version = "4.0.1"
+version = "4.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4e5ebffd51d50df56a3ae0de0e59487340ca456f05dd0b90c0a7a6dd6a74d31"
+checksum = "a27e8fe9ba4ae613c21f677c2cfaf0696c3744030c6f485b34634e502d6bb379"
dependencies = [
"actix-codec",
"actix-http",
@@ -176,7 +176,7 @@ dependencies = [
"encoding_rs",
"futures-core",
"futures-util",
- "itoa",
+ "itoa 1.0.2",
"language-tags",
"log",
"mime",
@@ -194,9 +194,9 @@ dependencies = [
[[package]]
name = "actix-web-codegen"
-version = "4.0.0"
+version = "4.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7525bedf54704abb1d469e88d7e7e9226df73778798a69cea5022d53b2ae91bc"
+checksum = "5f270541caec49c15673b0af0e9a00143421ad4f118d2df7edcb68b627632f56"
dependencies = [
"actix-router",
"proc-macro2",
@@ -251,6 +251,28 @@ version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341"
+[[package]]
+name = "async-trait"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
[[package]]
name = "autocfg"
version = "1.1.0"
@@ -325,12 +347,6 @@ dependencies = [
"utf8-width",
]
-[[package]]
-name = "byteorder"
-version = "1.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
-
[[package]]
name = "bytes"
version = "1.1.0"
@@ -339,9 +355,9 @@ checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
[[package]]
name = "bytestring"
-version = "1.0.0"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90706ba19e97b90786e19dc0d5e2abd80008d99d4c0c5d1ad0b5e72cec7c494d"
+checksum = "86b6a75fd3048808ef06af5cd79712be8111960adaf89d90250974b38fc3928a"
dependencies = [
"bytes",
]
@@ -361,6 +377,16 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+[[package]]
+name = "combine"
+version = "4.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a604e93b79d1808327a6fca85a6f2d69de66461e7620f5a4cbf5fb4d1d7c948"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
[[package]]
name = "convert_case"
version = "0.4.0"
@@ -398,16 +424,17 @@ dependencies = [
[[package]]
name = "cryptgeon"
-version = "1.5.3"
+version = "2.0.0"
dependencies = [
"actix-files",
"actix-web",
"bs62",
"byte-unit",
"dotenv",
+ "env_logger",
"lazy_static",
- "memcache",
"mime",
+ "redis",
"ring",
"serde",
"serde_json",
@@ -415,9 +442,9 @@ dependencies = [
[[package]]
name = "crypto-common"
-version = "0.1.3"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
+checksum = "5999502d32b9c48d492abe66392408144895020ec4709e549e840799f3bb74c0"
dependencies = [
"generic-array",
"typenum",
@@ -452,6 +479,12 @@ version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
[[package]]
name = "encoding_rs"
version = "0.8.31"
@@ -462,15 +495,16 @@ dependencies = [
]
[[package]]
-name = "enum_dispatch"
-version = "0.3.8"
+name = "env_logger"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0eb359f1476bf611266ac1f5355bc14aeca37b299d0ebccc038ee7058891c9cb"
+checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
dependencies = [
- "once_cell",
- "proc-macro2",
- "quote",
- "syn",
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
]
[[package]]
@@ -495,21 +529,6 @@ version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-[[package]]
-name = "foreign-types"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
-dependencies = [
- "foreign-types-shared",
-]
-
-[[package]]
-name = "foreign-types-shared"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
-
[[package]]
name = "form_urlencoded"
version = "1.0.1"
@@ -562,13 +581,13 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.6"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
dependencies = [
"cfg-if",
"libc",
- "wasi 0.10.2+wasi-snapshot-preview1",
+ "wasi",
]
[[package]]
@@ -592,9 +611,9 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.11.2"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
[[package]]
name = "hermit-abi"
@@ -613,7 +632,7 @@ checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
dependencies = [
"bytes",
"fnv",
- "itoa",
+ "itoa 1.0.2",
]
[[package]]
@@ -634,6 +653,12 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
[[package]]
name = "idna"
version = "0.2.3"
@@ -647,22 +672,19 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "1.8.2"
+version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
dependencies = [
"autocfg",
"hashbrown",
]
[[package]]
-name = "instant"
-version = "0.1.12"
+name = "itoa"
+version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
-dependencies = [
- "cfg-if",
-]
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
[[package]]
name = "itoa"
@@ -681,9 +703,9 @@ dependencies = [
[[package]]
name = "js-sys"
-version = "0.3.57"
+version = "0.3.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397"
+checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27"
dependencies = [
"wasm-bindgen",
]
@@ -749,20 +771,6 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
-[[package]]
-name = "memcache"
-version = "0.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "757b4de02817c63ff4efc98a282b305977a7468b2bdf2085c140cdab1604fa61"
-dependencies = [
- "byteorder",
- "enum_dispatch",
- "openssl",
- "r2d2",
- "rand",
- "url",
-]
-
[[package]]
name = "memchr"
version = "2.5.0"
@@ -796,13 +804,13 @@ dependencies = [
[[package]]
name = "mio"
-version = "0.8.3"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799"
+checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
dependencies = [
"libc",
"log",
- "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasi",
"windows-sys",
]
@@ -857,59 +865,9 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.12.0"
+version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225"
-
-[[package]]
-name = "openssl"
-version = "0.10.40"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e"
-dependencies = [
- "bitflags",
- "cfg-if",
- "foreign-types",
- "libc",
- "once_cell",
- "openssl-macros",
- "openssl-sys",
-]
-
-[[package]]
-name = "openssl-macros"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "openssl-sys"
-version = "0.9.74"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "835363342df5fba8354c5b453325b110ffd54044e588c539cf2f20a8014e4cb1"
-dependencies = [
- "autocfg",
- "cc",
- "libc",
- "pkg-config",
- "vcpkg",
-]
-
-[[package]]
-name = "parking_lot"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
-dependencies = [
- "instant",
- "lock_api",
- "parking_lot_core 0.8.5",
-]
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
[[package]]
name = "parking_lot"
@@ -918,21 +876,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
dependencies = [
"lock_api",
- "parking_lot_core 0.9.3",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
-dependencies = [
- "cfg-if",
- "instant",
- "libc",
- "redox_syscall",
- "smallvec",
- "winapi",
+ "parking_lot_core",
]
[[package]]
@@ -972,12 +916,6 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
-[[package]]
-name = "pkg-config"
-version = "0.3.25"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
-
[[package]]
name = "ppv-lite86"
version = "0.2.16"
@@ -986,33 +924,22 @@ checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
[[package]]
name = "proc-macro2"
-version = "1.0.39"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
-version = "1.0.18"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
dependencies = [
"proc-macro2",
]
-[[package]]
-name = "r2d2"
-version = "0.8.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "545c5bc2b880973c9c10e4067418407a0ccaa3091781d1671d46eb35107cb26f"
-dependencies = [
- "log",
- "parking_lot 0.11.2",
- "scheduled-thread-pool",
-]
-
[[package]]
name = "rand"
version = "0.8.5"
@@ -1043,6 +970,21 @@ dependencies = [
"getrandom",
]
+[[package]]
+name = "redis"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a80b5f38d7f5a020856a0e16e40a9cfabf88ae8f0e4c2dcd8a3114c1e470852"
+dependencies = [
+ "async-trait",
+ "combine",
+ "dtoa",
+ "itoa 0.4.8",
+ "percent-encoding",
+ "sha1 0.6.1",
+ "url",
+]
+
[[package]]
name = "redox_syscall"
version = "0.2.13"
@@ -1054,9 +996,9 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.5.6"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
dependencies = [
"aho-corasick",
"memchr",
@@ -1065,9 +1007,9 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.6.26"
+version = "0.6.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
[[package]]
name = "ring"
@@ -1099,15 +1041,6 @@ version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
-[[package]]
-name = "scheduled-thread-pool"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "977a7519bff143a44f842fd07e80ad1329295bd71686457f18e496736f4bf9bf"
-dependencies = [
- "parking_lot 0.12.1",
-]
-
[[package]]
name = "scopeguard"
version = "1.1.0"
@@ -1116,24 +1049,24 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "semver"
-version = "1.0.9"
+version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd"
+checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1"
[[package]]
name = "serde"
-version = "1.0.137"
+version = "1.0.138"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
+checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.137"
+version = "1.0.138"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
+checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c"
dependencies = [
"proc-macro2",
"quote",
@@ -1142,11 +1075,11 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.81"
+version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c"
+checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7"
dependencies = [
- "itoa",
+ "itoa 1.0.2",
"ryu",
"serde",
]
@@ -1158,22 +1091,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
dependencies = [
"form_urlencoded",
- "itoa",
+ "itoa 1.0.2",
"ryu",
"serde",
]
[[package]]
-name = "sha-1"
-version = "0.10.0"
+name = "sha1"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+dependencies = [
+ "sha1_smol",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
]
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
[[package]]
name = "signal-hook-registry"
version = "1.4.0"
@@ -1191,9 +1139,9 @@ checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
[[package]]
name = "smallvec"
-version = "1.8.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
[[package]]
name = "socket2"
@@ -1213,9 +1161,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "syn"
-version = "1.0.96"
+version = "1.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
dependencies = [
"proc-macro2",
"quote",
@@ -1223,12 +1171,21 @@ dependencies = [
]
[[package]]
-name = "time"
-version = "0.3.9"
+name = "termcolor"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
dependencies = [
- "itoa",
+ "winapi-util",
+]
+
+[[package]]
+name = "time"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217"
+dependencies = [
+ "itoa 1.0.2",
"libc",
"num_threads",
"time-macros",
@@ -1266,7 +1223,7 @@ dependencies = [
"memchr",
"mio",
"once_cell",
- "parking_lot 0.12.1",
+ "parking_lot",
"pin-project-lite",
"signal-hook-registry",
"socket2",
@@ -1289,9 +1246,9 @@ dependencies = [
[[package]]
name = "tracing"
-version = "0.1.34"
+version = "0.1.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09"
+checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160"
dependencies = [
"cfg-if",
"log",
@@ -1301,11 +1258,11 @@ dependencies = [
[[package]]
name = "tracing-core"
-version = "0.1.26"
+version = "0.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f"
+checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7"
dependencies = [
- "lazy_static",
+ "once_cell",
]
[[package]]
@@ -1331,15 +1288,15 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
[[package]]
name = "unicode-ident"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
[[package]]
name = "unicode-normalization"
-version = "0.1.19"
+version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
dependencies = [
"tinyvec",
]
@@ -1368,24 +1325,12 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
-[[package]]
-name = "vcpkg"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-[[package]]
-name = "wasi"
-version = "0.10.2+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
-
[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
@@ -1394,9 +1339,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad"
+checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
@@ -1404,9 +1349,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4"
+checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a"
dependencies = [
"bumpalo",
"lazy_static",
@@ -1419,9 +1364,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5"
+checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -1429,9 +1374,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b"
+checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048"
dependencies = [
"proc-macro2",
"quote",
@@ -1442,15 +1387,15 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.80"
+version = "0.2.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744"
+checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be"
[[package]]
name = "web-sys"
-version = "0.3.57"
+version = "0.3.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283"
+checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -1472,6 +1417,15 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
@@ -1523,18 +1477,18 @@ checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
[[package]]
name = "zstd"
-version = "0.10.2+zstd.1.5.2"
+version = "0.11.2+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f4a6bd64f22b5e3e94b4e238669ff9f10815c27a5180108b849d24174a83847"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
dependencies = [
"zstd-safe",
]
[[package]]
name = "zstd-safe"
-version = "4.1.6+zstd.1.5.2"
+version = "5.0.2+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94b61c51bb270702d6167b8ce67340d2754b088d0c091b06e593aa772c3ee9bb"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
dependencies = [
"libc",
"zstd-sys",
@@ -1542,9 +1496,9 @@ dependencies = [
[[package]]
name = "zstd-sys"
-version = "1.6.3+zstd.1.5.2"
+version = "2.0.1+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8"
+checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b"
dependencies = [
"cc",
"libc",
diff --git a/backend/Cargo.toml b/backend/Cargo.toml
index d53156e..73bf04f 100644
--- a/backend/Cargo.toml
+++ b/backend/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "cryptgeon"
-version = "1.5.3"
+version = "2.0.0"
authors = ["cupcakearmy "]
edition = "2021"
@@ -18,7 +18,8 @@ serde_json = "1"
lazy_static = "1"
ring = "0.16"
bs62 = "0.1"
-memcache = "0.16"
byte-unit = "4"
dotenv = "0.15"
mime = "0.3"
+env_logger = "0.9"
+redis = "0.21.5"
diff --git a/backend/src/config.rs b/backend/src/config.rs
index 85fafd9..ff87c78 100644
--- a/backend/src/config.rs
+++ b/backend/src/config.rs
@@ -1,13 +1,18 @@
use byte_unit::Byte;
+// General
lazy_static! {
- pub static ref VERSION: String = option_env!("CARGO_PKG_VERSION")
- .unwrap_or("Unknown")
- .to_string();
- pub static ref LIMIT: u32 =
+ pub static ref VERSION: String = option_env!("CARGO_PKG_VERSION")
+ .unwrap_or("Unknown")
+ .to_string();
+}
+
+// CONFIG
+lazy_static! {
+ pub static ref LIMIT: usize =
Byte::from_str(std::env::var("SIZE_LIMIT").unwrap_or("1 KiB".to_string()))
.unwrap()
- .get_bytes() as u32;
+ .get_bytes() as usize;
pub static ref MAX_VIEWS: u32 = std::env::var("MAX_VIEWS")
.unwrap_or("100".to_string())
.parse()
@@ -21,3 +26,15 @@ lazy_static! {
.parse()
.unwrap();
}
+
+// THEME
+lazy_static! {
+ pub static ref THEME_IMAGE: String = std::env::var("THEME_IMAGE")
+ .unwrap_or("".to_string())
+ .parse()
+ .unwrap();
+ pub static ref THEME_TEXT: String = std::env::var("THEME_TEXT")
+ .unwrap_or("".to_string())
+ .parse()
+ .unwrap();
+}
diff --git a/backend/src/main.rs b/backend/src/main.rs
index 902cbce..45939cd 100644
--- a/backend/src/main.rs
+++ b/backend/src/main.rs
@@ -1,4 +1,7 @@
-use actix_web::{middleware, web, App, HttpServer};
+use actix_web::{
+ middleware::{self, Logger},
+ web, App, HttpServer,
+};
use dotenv::dotenv;
#[macro_use]
@@ -15,8 +18,10 @@ mod store;
#[actix_web::main]
async fn main() -> std::io::Result<()> {
dotenv().ok();
+ env_logger::init_from_env(env_logger::Env::new().default_filter_or("warning"));
return HttpServer::new(|| {
App::new()
+ .wrap(Logger::new("%a \"%r\" %s %b %T"))
.wrap(middleware::Compress::default())
.wrap(middleware::DefaultHeaders::default())
.configure(size::init)
diff --git a/backend/src/note/routes.rs b/backend/src/note/routes.rs
index 9ff5f06..d1a8f5a 100644
--- a/backend/src/note/routes.rs
+++ b/backend/src/note/routes.rs
@@ -22,9 +22,11 @@ struct NotePath {
async fn one(path: web::Path) -> impl Responder {
let p = path.into_inner();
let note = store::get(&p.id);
+
match note {
- None => return HttpResponse::NotFound().finish(),
- Some(_) => return HttpResponse::Ok().json(NoteInfo {}),
+ Ok(Some(_)) => HttpResponse::Ok().json(NoteInfo {}),
+ Ok(None) => HttpResponse::NotFound().finish(),
+ Err(e) => HttpResponse::InternalServerError().body(e.to_string()),
}
}
@@ -64,8 +66,10 @@ async fn create(note: web::Json) -> impl Responder {
}
_ => {}
}
- store::set(&id.clone(), &n.clone());
- return HttpResponse::Ok().json(CreateResponse { id: id });
+ match store::set(&id.clone(), &n.clone()) {
+ Ok(_) => return HttpResponse::Ok().json(CreateResponse { id: id }),
+ Err(e) => return HttpResponse::InternalServerError().body(e.to_string()),
+ }
}
#[delete("/{id}")]
@@ -73,8 +77,9 @@ async fn delete(path: web::Path) -> impl Responder {
let p = path.into_inner();
let note = store::get(&p.id);
match note {
- None => return HttpResponse::NotFound().finish(),
- Some(note) => {
+ Err(e) => HttpResponse::InternalServerError().body(e.to_string()),
+ Ok(None) => return HttpResponse::NotFound().finish(),
+ Ok(Some(note)) => {
let mut changed = note.clone();
if changed.views == None && changed.expiration == None {
return HttpResponse::BadRequest().finish();
@@ -84,9 +89,19 @@ async fn delete(path: web::Path) -> impl Responder {
changed.views = Some(v - 1);
let id = p.id.clone();
if v <= 1 {
- store::del(&id);
+ match store::del(&id) {
+ Err(e) => {
+ return HttpResponse::InternalServerError().body(e.to_string())
+ }
+ _ => {}
+ }
} else {
- store::set(&id, &changed.clone());
+ match store::set(&id, &changed.clone()) {
+ Err(e) => {
+ return HttpResponse::InternalServerError().body(e.to_string())
+ }
+ _ => {}
+ }
}
}
_ => {}
@@ -96,8 +111,12 @@ async fn delete(path: web::Path) -> impl Responder {
match changed.expiration {
Some(e) => {
if e < n {
- store::del(&p.id.clone());
- return HttpResponse::BadRequest().finish();
+ match store::del(&p.id.clone()) {
+ Ok(_) => return HttpResponse::BadRequest().finish(),
+ Err(e) => {
+ return HttpResponse::InternalServerError().body(e.to_string())
+ }
+ }
}
}
_ => {}
diff --git a/backend/src/size.rs b/backend/src/size.rs
index 3fd3f23..90f20d9 100644
--- a/backend/src/size.rs
+++ b/backend/src/size.rs
@@ -1,18 +1,11 @@
+use crate::config;
use actix_web::web;
-use byte_unit::Byte;
use mime;
-lazy_static! {
- pub static ref LIMIT: usize =
- Byte::from_str(std::env::var("SIZE_LIMIT").unwrap_or("1 KiB".to_string()))
- .unwrap()
- .get_bytes() as usize;
-}
-
pub fn init(cfg: &mut web::ServiceConfig) {
- let json = web::JsonConfig::default().limit(*LIMIT);
+ let json = web::JsonConfig::default().limit(*config::LIMIT);
let plain = web::PayloadConfig::default()
- .limit(*LIMIT)
+ .limit(*config::LIMIT)
.mimetype(mime::STAR_STAR);
cfg.app_data(json).app_data(plain);
}
diff --git a/backend/src/status/model.rs b/backend/src/status/model.rs
index baadedb..3b29118 100644
--- a/backend/src/status/model.rs
+++ b/backend/src/status/model.rs
@@ -2,9 +2,14 @@ use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
pub struct Status {
+ // General
pub version: String,
+ // Config
pub max_size: u32,
pub max_views: u32,
pub max_expiration: u32,
pub allow_advanced: bool,
+ // Theme
+ pub theme_image: String,
+ pub theme_text: String,
}
diff --git a/backend/src/status/routes.rs b/backend/src/status/routes.rs
index ce7144e..bbb8a43 100644
--- a/backend/src/status/routes.rs
+++ b/backend/src/status/routes.rs
@@ -7,10 +7,12 @@ use crate::status::Status;
async fn get_status() -> impl Responder {
return HttpResponse::Ok().json(Status {
version: config::VERSION.to_string(),
- max_size: *config::LIMIT,
+ max_size: *config::LIMIT as u32,
max_views: *config::MAX_VIEWS,
max_expiration: *config::MAX_EXPIRATION,
allow_advanced: *config::ALLOW_ADVANCED,
+ theme_image: config::THEME_IMAGE.to_string(),
+ theme_text: config::THEME_TEXT.to_string(),
});
}
diff --git a/backend/src/store.rs b/backend/src/store.rs
index 1a16dbb..f683132 100644
--- a/backend/src/store.rs
+++ b/backend/src/store.rs
@@ -1,36 +1,55 @@
-use memcache;
+use redis;
+use redis::Commands;
use crate::note::now;
use crate::note::Note;
lazy_static! {
- static ref CLIENT: memcache::Client = memcache::connect(format!(
- "memcache://{}?timeout=10&tcp_nodelay=true",
- std::env::var("MEMCACHE").unwrap_or("127.0.0.1:11211".to_string())
- ))
- .unwrap();
+ static ref REDIS_CLIENT: String = std::env::var("REDIS")
+ .unwrap_or("redis://127.0.0.1/".to_string())
+ .parse()
+ .unwrap();
}
-pub fn set(id: &String, note: &Note) {
+fn get_connection() -> Result {
+ let client =
+ redis::Client::open(REDIS_CLIENT.to_string()).map_err(|_| "Unable to connect to redis")?;
+ client
+ .get_connection()
+ .map_err(|_| "Unable to connect to redis")
+}
+
+pub fn set(id: &String, note: &Note) -> Result<(), &'static str> {
let serialized = serde_json::to_string(¬e.clone()).unwrap();
- let expiration: u32 = match note.expiration {
- Some(e) => e - now(),
- None => 0,
+ let mut conn = get_connection()?;
+
+ conn.set(id, serialized)
+ .map_err(|_| "Unable to set note in redis")?;
+ match note.expiration {
+ Some(e) => {
+ let seconds = e - now();
+ conn.expire(id, seconds as usize)
+ .map_err(|_| "Unable to set expiration on notion")?
+ }
+ None => {}
};
- CLIENT.set(id, serialized, expiration).unwrap();
+ Ok(())
}
-pub fn get(id: &String) -> Option {
- let value: Option = CLIENT.get(&id).unwrap();
+pub fn get(id: &String) -> Result