Compare commits

..

7 Commits

Author SHA1 Message Date
70481341b9 Update README.md 2024-10-07 10:58:57 +02:00
6271ec1ee9 add basic auth example 2024-10-07 10:58:41 +02:00
c7ec587a2d bump version 2024-09-27 19:59:39 +00:00
3e8e82f51c Merge pull request #153 from scaedufax/imprint_html
Added Option to set a custom HTML Imprint
2024-09-27 21:57:44 +02:00
Uli
c314d4b485 Merge branch 'cupcakearmy:main' into imprint_html 2024-09-25 10:19:13 +02:00
Uli Roth
57ea5f0b28 added imprint_html option 2024-09-24 10:25:15 +02:00
Uli Roth
fca8761515 Added option to have an imprint
The environment Variable IMPRINT_URL simply adds a /imprint button in footer to the url
2024-09-24 10:15:22 +02:00
10 changed files with 101 additions and 5 deletions

View File

@@ -84,7 +84,8 @@ of the notes even if it tried to.
| `THEME_PAGE_TITLE` | `""` | Custom text the page title |
| `THEME_FAVICON` | `""` | Custom url for the favicon. Must be publicly reachable |
| `THEME_NEW_NOTE_NOTICE` | `true` | Show the message about how notes are stored in the memory and may be evicted after creating a new note. Defaults to `true`. |
| `IMPRINT_URL` | `""` | Custom url for an Imprint hosted somewhere else. Must be publicly reachable. Takes precedence above `IMPRINT_HTML`. |
| `IMPRINT_HTML` | `""` | Alternative to `IMPRINT_URL`, this can be used to specify the HTML code to show on `/imprint`. Only `IMPRINT_HTML` or `IMPRINT_URL` should be specified, not both.|
## Deployment
> `https` is required otherwise browsers will not support the cryptographic functions.

View File

@@ -2,7 +2,7 @@
Assumptions:
- Traefik 2 installed.
- Traefik 2/3 installed.
- External proxy docker network `proxy`.
- A certificate resolver `le`.
- A https entrypoint `secure`.
@@ -34,3 +34,43 @@ services:
- traefik.http.routers.cryptgeon.entrypoints=secure
- traefik.http.routers.cryptgeon.tls.certresolver=le
```
## With basic auth
Some times it's useful to hide the service behind auth. This is easily achieved with traefik middleware. Many reverse proxies support similar features, so while traefik is used in this example, other reverse proxies can do the same.
```yaml
services:
traefik:
image: traefik:v3.0
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
redis:
image: redis:7-alpine
cryptgeon:
image: cupcakearmy/cryptgeon
depends_on:
- redis
labels:
- "traefik.enable=true"
- "traefik.http.routers.cryptgeon.rule=Host(`cryptgeon.localhost`)"
- "traefik.http.routers.cryptgeon.entrypoints=web"
- "traefik.http.routers.cryptgeon.middlewares=cryptgeon-auth"
- "traefik.http.middlewares.cryptgeon-auth.basicauth.users=user:$$2y$$05$$juUw0zgc5ebvJ00MFPVVLujF6P.rcEMbGZ99Jfq6ZWEa1dgetacEq"
```
```bash
docker compose up -d
```
1. Open http://cryptgeon.localhost
2. Log in with `user` and `secret`

View File

@@ -261,7 +261,7 @@ dependencies = [
[[package]]
name = "cryptgeon"
version = "2.8.2"
version = "2.8.3"
dependencies = [
"axum",
"bs62",

View File

@@ -1,6 +1,6 @@
[package]
name = "cryptgeon"
version = "2.8.2"
version = "2.8.3"
authors = ["cupcakearmy <hi@nicco.io>"]
edition = "2021"
rust-version = "1.80"

View File

@@ -38,6 +38,14 @@ pub static ref ALLOW_FILES: bool = std::env::var("ALLOW_FILES")
.unwrap_or("true".to_string())
.parse()
.unwrap();
pub static ref IMPRINT_URL: String = std::env::var("IMPRINT_URL")
.unwrap_or("".to_string())
.parse()
.unwrap();
pub static ref IMPRINT_HTML: String = std::env::var("IMPRINT_HTML")
.unwrap_or("".to_string())
.parse()
.unwrap();
}
// THEME

View File

@@ -12,6 +12,8 @@ pub struct Status {
pub max_expiration: u32,
pub allow_advanced: bool,
pub allow_files: bool,
pub imprint_url: String,
pub imprint_html: String,
// Theme
pub theme_image: String,
pub theme_text: String,
@@ -28,6 +30,8 @@ pub async fn get_status() -> (StatusCode, Json<Status>) {
max_expiration: *config::MAX_EXPIRATION,
allow_advanced: *config::ALLOW_ADVANCED,
allow_files: *config::ALLOW_FILES,
imprint_url: config::IMPRINT_URL.to_string(),
imprint_html: config::IMPRINT_HTML.to_string(),
theme_new_note_notice: *config::THEME_NEW_NOTE_NOTICE,
theme_image: config::THEME_IMAGE.to_string(),
theme_text: config::THEME_TEXT.to_string(),

View File

@@ -1,6 +1,6 @@
{
"name": "cryptgeon",
"version": "2.8.2",
"version": "2.8.3",
"homepage": "https://github.com/cupcakearmy/cryptgeon",
"repository": {
"type": "git",

View File

@@ -113,6 +113,8 @@ export type Status = {
max_expiration: number
allow_advanced: boolean
allow_files: boolean
imprint_url: string
imprint_html: string
theme_image: string
theme_text: string
theme_favicon: string

View File

@@ -1,5 +1,6 @@
<script lang="ts">
import ThemeToggle from '$lib/ui/ThemeToggle.svelte'
import { status } from '$lib/stores/status'
</script>
<footer>
@@ -7,6 +8,11 @@
<nav>
<a href="/">/home</a>
<a href="/about">/about</a>
{#if $status?.imprint_url}
<a href={$status.imprint_url} target="_blank" rel="noopener noreferrer">/imprint</a>
{:else if $status?.imprint_html}
<a href="/imprint">/imprint</a>
{/if}
<a href="https://github.com/cupcakearmy/cryptgeon" target="_blank" rel="noopener noreferrer">
code
</a>

View File

@@ -0,0 +1,35 @@
<script lang="ts">
import { get } from 'svelte/store';
import { goto } from '$app/navigation';
import { status } from '$lib/stores/status'
status.subscribe((config) => {
if (config != null) {
if (config.imprint_url) {
window.location = config.imprint_url;
}
else if (config.imprint_html == "") {
goto("/about");
}
}
});
</script>
<svelte:head>
<title>Imprint</title>
</svelte:head>
<section class="content">
{#if $status?.imprint_html}
{@html $status.imprint_html}
{/if}
</section>
<style>
section {
width: 100%;
display: flex;
flex-direction: column;
gap: 2rem;
}
</style>