Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d21b959104 | ||
|
|
2b822af907 | ||
|
|
2aa636409a | ||
|
|
819af38886 | ||
|
|
65fe245e9f | ||
|
|
8ebde5ffbc |
@@ -1,29 +0,0 @@
|
|||||||
name: Docker Build and Push
|
|
||||||
#on: [push]
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-push:
|
|
||||||
runs-on: docker
|
|
||||||
if: branch == 'main'
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Login to Registry
|
|
||||||
run: |
|
|
||||||
echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ secrets.REGISTRY_URL }} -u "${{ secrets.REGISTRY_USERNAME }}" --password-stdin
|
|
||||||
|
|
||||||
- name: Build Docker Image
|
|
||||||
run: |
|
|
||||||
docker build -t ${{ secrets.REGISTRY_URL }}/FlorianWalther/password-generator:latest .
|
|
||||||
|
|
||||||
- name: Push Docker Image
|
|
||||||
run: |
|
|
||||||
docker push ${{ secrets.REGISTRY_URL }}/FlorianWalther/password-generator:latest
|
|
||||||
|
|
||||||
- name: Cleanup
|
|
||||||
run: |
|
|
||||||
docker system prune -f
|
|
||||||
|
|
||||||
54
README.md
54
README.md
@@ -4,52 +4,26 @@ _a web based password generator_
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
# Funktionsweise
|
## Features
|
||||||
|
|
||||||
* Passwortgenerierung: Die Anwendung generiert ein 32-stelliges Passwort mit Großbuchstaben, Kleinbuchstaben und Ziffern (entspricht dem Befehl `apg -a 1 -m 32 -n 1 -M NCL`).
|
* generates long and random, secure passwords (read about the [security considerations](SECURITY.md))
|
||||||
* Zwischenablage: Mit dem Button "In Zwischenablage kopieren" wird das Passwort in die Zwischenablage kopiert.
|
* copy to clipboard
|
||||||
* Docker: Der Container enthält nur die Go-Anwendung und keine zusätzliche Linux-Distribution.
|
* very small docker container, that only contains the application and has minimum attack surface
|
||||||
|
|
||||||
|
## Demo
|
||||||
|
|
||||||
# Baue die Go-Anwendung
|
There is a demo at [https://passwd.scu.si](https://passwd.scu.si)
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
The follwoing example shows how to get up your own instance with `docker compose`.
|
||||||
|
|
||||||
```
|
```
|
||||||
go build -o password-generator ./
|
git clone https://gitea.scu.si/FlorianWalther/Web-Password.git
|
||||||
```
|
cd Web-Password
|
||||||
|
cp misc/docker-compose.yml ./
|
||||||
# Baue das Docker-Image
|
|
||||||
|
|
||||||
```
|
|
||||||
docker build -t password-generator .
|
|
||||||
```
|
|
||||||
|
|
||||||
# Starte den Docker Container
|
|
||||||
|
|
||||||
```
|
|
||||||
docker run -p 8080:8080 password-generator
|
|
||||||
```
|
|
||||||
|
|
||||||
## mit docker-compose
|
|
||||||
|
|
||||||
Ein `docker-compose.yml` wird mitgeliefert.
|
|
||||||
|
|
||||||
### initial pull
|
|
||||||
|
|
||||||
```
|
|
||||||
docker compose login gitea.scu.si
|
|
||||||
docker compose pull
|
docker compose pull
|
||||||
```
|
|
||||||
|
|
||||||
### start up
|
|
||||||
|
|
||||||
```
|
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
### bring down
|
There are some more usage example in [misc/MoreUsage.md](misc/MoreUsage.md)
|
||||||
|
|
||||||
```
|
|
||||||
docker compose down
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 24 KiB |
28
main.go
28
main.go
@@ -9,8 +9,22 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
passwordLength = 32
|
passwordLength = 32
|
||||||
|
// Zeichensatz mit 62 möglichen Zeichen pro Position
|
||||||
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
|
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
|
||||||
//chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!?$%&=#+<>-:,.;_*@"
|
|
||||||
|
// Zeichensatz mit 58 möglichen Zeichen pro Position
|
||||||
|
// Verwechslungsanfällige Zeichen (0, O, 1, l, I) sind nicht enthalten.
|
||||||
|
//
|
||||||
|
// ## Security Note: ################################################
|
||||||
|
// Der reduzierte Zeichensatz setzt den Keyspace von 10^57 auf 10^56 herab.
|
||||||
|
// Die Entropie wird von ~192.6 Bit auf ~190.6 Bit herabgesetzt.
|
||||||
|
// Solange die Passwortlänge von 32 Zeichen beibehalten wird ist der
|
||||||
|
// Sicherheitsverlust durch einen reduzierten Zeichensatz akzeptabel,
|
||||||
|
// weil der Keyspace immer noch so groß ist dass ein erraten praktisch
|
||||||
|
// unmöglich ist.
|
||||||
|
//
|
||||||
|
//const chars = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789"
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func generatePassword() string {
|
func generatePassword() string {
|
||||||
@@ -182,6 +196,17 @@ html := fmt.Sprintf(
|
|||||||
.renew-button:hover {
|
.renew-button:hover {
|
||||||
background: #0056b3;
|
background: #0056b3;
|
||||||
}
|
}
|
||||||
|
.about-link {
|
||||||
|
position: absolute;
|
||||||
|
top: 1rem;
|
||||||
|
left: 1rem;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
color: #999;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.about-link:hover {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
.help-link {
|
.help-link {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 1rem;
|
top: 1rem;
|
||||||
@@ -218,6 +243,7 @@ html := fmt.Sprintf(
|
|||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<a href="/help" class="help-link">API</a>
|
<a href="/help" class="help-link">API</a>
|
||||||
|
<a class="about-link" href="https://gitea.scu.si/FlorianWalther/Web-Password">code</a>
|
||||||
<h1>Generiertes Passwort</h1>
|
<h1>Generiertes Passwort</h1>
|
||||||
<div id="password">%s</div>
|
<div id="password">%s</div>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
|
|||||||
45
misc/MoreUsage.md
Normal file
45
misc/MoreUsage.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
|
||||||
|
# Baue die Go-Anwendung
|
||||||
|
|
||||||
|
```
|
||||||
|
go build -o password-generator ./
|
||||||
|
```
|
||||||
|
|
||||||
|
# Baue das Docker-Image
|
||||||
|
|
||||||
|
```
|
||||||
|
docker build -t password-generator .
|
||||||
|
```
|
||||||
|
|
||||||
|
# Starte den Docker Container
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -p 8080:8080 password-generator
|
||||||
|
```
|
||||||
|
|
||||||
|
## mit docker-compose
|
||||||
|
|
||||||
|
Ein `docker-compose.yml` wird mitgeliefert.
|
||||||
|
|
||||||
|
### initial pull
|
||||||
|
|
||||||
|
```
|
||||||
|
docker compose login gitea.scu.si
|
||||||
|
docker compose pull
|
||||||
|
```
|
||||||
|
|
||||||
|
### start up
|
||||||
|
|
||||||
|
```
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### bring down
|
||||||
|
|
||||||
|
```
|
||||||
|
docker compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
24
misc/docker-compose.traefik.yml
Normal file
24
misc/docker-compose.traefik.yml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
services:
|
||||||
|
password-generator:
|
||||||
|
image: gitea.scu.si/florianwalther/password-generator:latest
|
||||||
|
container_name: password-generator
|
||||||
|
restart: always
|
||||||
|
expose:
|
||||||
|
- "8080:8080"
|
||||||
|
# Falls die Registry privat ist, muss der Host zuvor mit
|
||||||
|
# 'docker login gitea.scu.si' angemeldet worden sein.
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.docker.network=traefik_backend"
|
||||||
|
- "traefik.http.routers.webpass.rule=Host(`passwd.scu.si`)"
|
||||||
|
- "traefik.http.routers.webpass.entrypoints=web,websecure"
|
||||||
|
- "traefik.http.routers.webpass.tls=true"
|
||||||
|
- "traefik.http.routers.webpass.tls.certresolver=myresolver"
|
||||||
|
- "traefik.http.services.webpass.loadbalancer.server.port=8080"
|
||||||
|
networks:
|
||||||
|
- traefik_backend
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik_backend:
|
||||||
|
external: true
|
||||||
|
|
||||||
Reference in New Issue
Block a user