Добавлена возможность шифровать данные (wrap).
Добавлена установка времени жизни токена (TTL). Добавлено соответствие ограничения длины пароля и длины текста для шифрования. Добавлена подготовка токена к расшифровке (ограничение длины, удаление пробельных символов).
This commit is contained in:
parent
41e1a553f6
commit
7ecdf7a606
|
@ -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"
|
||||||
|
|
|
@ -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>
|
||||||
|
|
15
vault.go
15
vault.go
|
@ -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 = "Введите текст для шифровки."
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user