Добавлена возможность шифровать данные (wrap).

Добавлена установка времени жизни токена (TTL).
Добавлено соответствие ограничения длины пароля и длины текста для шифрования.
Добавлена подготовка токена к расшифровке (ограничение длины, удаление пробельных символов).
This commit is contained in:
Калинин Сергей Валерьевич 2024-10-28 16:03:45 +03:00
parent 41e1a553f6
commit 7ecdf7a606
3 changed files with 14 additions and 14 deletions

View File

@ -64,7 +64,7 @@ services:
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.traefik.entrypoints=https" - "traefik.http.routers.traefik.entrypoints=https"
- "traefik.http.routers.traefik.rule=Host(`somehost.example.ru`)" - "traefik.http.routers.traefik.rule=Host(`example.ru`)"
- "traefik.http.routers.traefik.tls=true" - "traefik.http.routers.traefik.tls=true"
# - "traefik.http.routers.traefik.tls.certresolver=letsEncrypt" # - "traefik.http.routers.traefik.tls.certresolver=letsEncrypt"
- "traefik.http.routers.traefik.service=api@internal" - "traefik.http.routers.traefik.service=api@internal"

View File

@ -15,24 +15,25 @@
<form method="post"> <form method="post">
<table> <table>
<tr><td> <tr><td>
Введите токен: Введите текст или токен:
</td></tr> </td></tr>
<tr><td> <tr><td>
<textarea id="wrapped_token" name="input_token" cols=50 rows=10>{{ .TEXT }}</textarea> <textarea id="wrapped_token" name="input_token" cols=50 rows=10 maxlength="{{ .MAXTEXTLENGTH }}">{{ .TEXT }}</textarea>
</td></tr> </td></tr>
<tr><td align=right> <tr><td align=right>
<!-- Время жизни токена {{.TOKENTTL}} сек.-->
<button type="submit" formaction="{{.URL}}/wrap">Зашифровать</button>
<button type="submit" formaction="{{.URL}}/unwrap">Расшифровать</button> <button type="submit" formaction="{{.URL}}/unwrap">Расшифровать</button>
<tr><td><hr></td></tr> <tr><td><hr></td></tr>
</td></tr> </td></tr>
<tr><td align=right> <tr><td align=right>
Длина пароля (от 15 до 1024) Длина пароля (от 15 до {{ .MAXTEXTLENGTH }})
<input type="text" name="passlength"/ size=4 pattern="[0-9]{2,4}"> <input type="text" name="passlength"/ size=4 pattern="[0-9]{2,4}">
<button type="submit" formaction="{{.URL}}/genpassword">Сгенерировать пароль</button> <button type="submit" formaction="{{.URL}}/genpassword">Сгенерировать пароль</button>
</td></tr> </td></tr>
</form> </form>
</td></tr> </td></tr>
<tr><td> <tr><td></td></tr>
</td></tr>
</table> </table>
</body> </body>
</html> </html>

View File

@ -1,10 +1,3 @@
// -------------------------------------------
// Hashicorp Vault wrap/unwrap web service
// Distributed under GNU Public License
// Author: Sergey Kalinin svk@nuk-svk.ru
// Home page: https://nuk-svk.ru https://git.nuk-svk.ru
// -------------------------------------------
package main package main
import ( import (
@ -63,6 +56,7 @@ type TemplateData struct {
URL string URL string
TEXT string TEXT string
MAXTEXTLENGTH int MAXTEXTLENGTH int
TOKENTTL string
} }
type UnwrappedData struct { type UnwrappedData struct {
Rerquest_id string `json: "request_id"` Rerquest_id string `json: "request_id"`
@ -192,6 +186,7 @@ func getStaticPage(w http.ResponseWriter, r *http.Request) {
templateData.URL = ActionAddress templateData.URL = ActionAddress
templateData.TEXT = Data templateData.TEXT = Data
templateData.MAXTEXTLENGTH = MaxTextLength templateData.MAXTEXTLENGTH = MaxTextLength
templateData.TOKENTTL = TokenTTL
// templateData.URL = FishingUrl + "/" + arrUsers[i].messageUUID // templateData.URL = FishingUrl + "/" + arrUsers[i].messageUUID
if body, err := ParseTemplate(template, templateData); err == nil { if body, err := ParseTemplate(template, templateData); err == nil {
@ -268,7 +263,7 @@ func genPassword(w http.ResponseWriter, r *http.Request) {
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} }
res, err := password.Generate(passwordLength, 10, 5, false, true) res, err := password.Generate(passwordLength, 5, 5, false, true)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} }
@ -312,6 +307,10 @@ func wrapDataFromHtmlForm(w http.ResponseWriter, r *http.Request) {
if Debug { if Debug {
log.Println(Data) log.Println(Data)
} }
// Переводим секунды в часы и дабавляем к токену для информации.
ttl, _ := strconv.Atoi(TokenTTL)
ttl = ttl / 3600
Data = fmt.Sprintf("%s\n\n---\nВремя жизни токена %s ч.", Data, strconv.Itoa(ttl))
} else if secret != "" { } else if secret != "" {
Data = "Введите текст для шифровки." Data = "Введите текст для шифровки."
} }