corrige bug com registro txt e tradução

This commit is contained in:
2026-07-12 03:41:49 -03:00
parent 1901055e25
commit e629b829a3
9 changed files with 362 additions and 222 deletions

View File

@@ -159,14 +159,14 @@ func (s *Server) healthz(w http.ResponseWriter, _ *http.Request) {
func (s *Server) dashboard(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
http.Error(w, "pagina nao encontrada", http.StatusNotFound)
return
}
server, serverErr := s.client.GetServer(r.Context())
zones, zonesErr := s.client.ListZones(r.Context())
data := pageData{
Title: "Dashboard",
Title: "Painel",
Server: server,
Zones: zones,
Error: firstNonEmpty(errorText(serverErr), errorText(zonesErr)),
@@ -185,7 +185,7 @@ func (s *Server) login(w http.ResponseWriter, r *http.Request) {
}
data := pageData{
Title: "Login",
Title: "Entrar",
Error: r.URL.Query().Get("error"),
Next: safeRedirectPath(r.URL.Query().Get("next")),
}
@@ -198,7 +198,7 @@ func (s *Server) loginPost(w http.ResponseWriter, r *http.Request) {
return
}
if err := r.ParseForm(); err != nil {
http.Redirect(w, r, "/login?error="+url.QueryEscape("invalid form data"), http.StatusSeeOther)
http.Redirect(w, r, "/login?error="+url.QueryEscape("dados do formulario invalidos"), http.StatusSeeOther)
return
}
@@ -207,18 +207,18 @@ func (s *Server) loginPost(w http.ResponseWriter, r *http.Request) {
allowed, err := s.auth.Authenticate(r.Context(), username, password)
if err != nil {
s.logger.Printf("authentication failed for %q: %v", username, err)
http.Redirect(w, r, "/login?error="+url.QueryEscape("authentication backend failed"), http.StatusSeeOther)
http.Redirect(w, r, "/login?error="+url.QueryEscape("falha no servico de autenticacao"), http.StatusSeeOther)
return
}
if !allowed {
http.Redirect(w, r, "/login?error="+url.QueryEscape("invalid username or password"), http.StatusSeeOther)
http.Redirect(w, r, "/login?error="+url.QueryEscape("usuario ou senha invalidos"), http.StatusSeeOther)
return
}
token, err := s.createSession(username)
if err != nil {
s.logger.Printf("create session: %v", err)
http.Error(w, "session creation failed", http.StatusInternalServerError)
http.Error(w, "falha ao criar sessao", http.StatusInternalServerError)
return
}
http.SetCookie(w, &http.Cookie{
@@ -255,7 +255,7 @@ func (s *Server) logout(w http.ResponseWriter, r *http.Request) {
func (s *Server) listZones(w http.ResponseWriter, r *http.Request) {
zones, err := s.client.ListZones(r.Context())
data := pageData{
Title: "Zones",
Title: "Zonas",
Zones: zones,
Error: firstNonEmpty(r.URL.Query().Get("error"), errorText(err)),
}
@@ -264,30 +264,30 @@ func (s *Server) listZones(w http.ResponseWriter, r *http.Request) {
func (s *Server) createZone(w http.ResponseWriter, r *http.Request) {
if err := r.ParseForm(); err != nil {
s.redirectZonesError(w, r, "invalid form data")
s.redirectZonesError(w, r, "dados do formulario invalidos")
return
}
zoneName := dnsrecord.EnsureTrailingDot(r.FormValue("name"))
if !dnsrecord.IsFQDN(zoneName) {
s.redirectZonesError(w, r, "zone name must be a fully qualified domain name")
s.redirectZonesError(w, r, "o nome da zona deve ser um nome de dominio totalmente qualificado")
return
}
kind := strings.TrimSpace(r.FormValue("kind"))
if !validZoneKind(kind) {
s.redirectZonesError(w, r, "zone kind must be Native, Master, or Slave")
s.redirectZonesError(w, r, "o tipo da zona deve ser Native, Master ou Slave")
return
}
nameservers, err := parseFQDNLines(r.FormValue("nameservers"), "nameserver")
nameservers, err := parseFQDNLines(r.FormValue("nameservers"), "servidor de nomes")
if err != nil {
s.redirectZonesError(w, r, err.Error())
return
}
masters := parseLines(r.FormValue("masters"))
if kind == "Slave" && len(masters) == 0 {
s.redirectZonesError(w, r, "slave zones require at least one master address")
s.redirectZonesError(w, r, "zonas Slave exigem ao menos um endereco de servidor mestre")
return
}
@@ -317,7 +317,7 @@ func (s *Server) showZone(w http.ResponseWriter, r *http.Request) {
zoneID := r.PathValue("zoneID")
zone, err := s.client.GetZone(r.Context(), zoneID)
data := pageData{
Title: "Zone " + zoneID,
Title: "Zona " + zoneID,
ZoneID: zoneID,
Zone: zone,
Error: firstNonEmpty(r.URL.Query().Get("error"), errorText(err)),
@@ -329,7 +329,7 @@ func (s *Server) newRRSet(w http.ResponseWriter, r *http.Request) {
zoneID := r.PathValue("zoneID")
zone, err := s.client.GetZone(r.Context(), zoneID)
data := pageData{
Title: "Add record",
Title: "Adicionar registro",
ZoneID: zoneID,
Zone: zone,
Error: firstNonEmpty(r.URL.Query().Get("error"), errorText(err)),
@@ -337,8 +337,8 @@ func (s *Server) newRRSet(w http.ResponseWriter, r *http.Request) {
RecordForm: recordForm{
Type: "A",
TTL: 300,
Title: "Add record",
SubmitLabel: "Create record",
Title: "Adicionar registro",
SubmitLabel: "Criar registro",
},
}
s.render(w, r, "record_form.html", data)
@@ -356,7 +356,7 @@ func (s *Server) editRRSet(w http.ResponseWriter, r *http.Request) {
rrset, ok := findRRSet(zone, name, recordType)
if !ok {
s.redirectZoneError(w, r, zoneID, "record not found")
s.redirectZoneError(w, r, zoneID, "registro nao encontrado")
return
}
@@ -366,11 +366,11 @@ func (s *Server) editRRSet(w http.ResponseWriter, r *http.Request) {
TTL: rrset.TTL,
Records: recordValues(rrset),
IsEdit: true,
Title: "Edit record",
SubmitLabel: "Save record",
Title: "Editar registro",
SubmitLabel: "Salvar registro",
}
data := pageData{
Title: "Edit record",
Title: "Editar registro",
ZoneID: zoneID,
Zone: zone,
Error: r.URL.Query().Get("error"),
@@ -383,13 +383,13 @@ func (s *Server) editRRSet(w http.ResponseWriter, r *http.Request) {
func (s *Server) saveRRSet(w http.ResponseWriter, r *http.Request) {
zoneID := r.PathValue("zoneID")
if err := r.ParseForm(); err != nil {
s.redirectZoneError(w, r, zoneID, "invalid form data")
s.redirectZoneError(w, r, zoneID, "dados do formulario invalidos")
return
}
ttl, err := strconv.ParseUint(strings.TrimSpace(r.FormValue("ttl")), 10, 32)
if err != nil {
s.redirectZoneError(w, r, zoneID, "ttl must be a positive integer")
s.redirectZoneError(w, r, zoneID, "ttl deve ser um numero inteiro positivo")
return
}
@@ -412,18 +412,18 @@ func (s *Server) saveEditedRRSet(w http.ResponseWriter, r *http.Request) {
name := r.URL.Query().Get("name")
recordType := strings.ToUpper(strings.TrimSpace(r.URL.Query().Get("type")))
if name == "" || recordType == "" {
s.redirectZoneError(w, r, zoneID, "record identity is required")
s.redirectZoneError(w, r, zoneID, "a identidade do registro e obrigatoria")
return
}
if err := r.ParseForm(); err != nil {
s.redirectZoneError(w, r, zoneID, "invalid form data")
s.redirectZoneError(w, r, zoneID, "dados do formulario invalidos")
return
}
ttl, err := strconv.ParseUint(strings.TrimSpace(r.FormValue("ttl")), 10, 32)
if err != nil {
s.redirectZoneError(w, r, zoneID, "ttl must be a positive integer")
s.redirectZoneError(w, r, zoneID, "ttl deve ser um numero inteiro positivo")
return
}
@@ -443,18 +443,18 @@ func (s *Server) saveEditedRRSet(w http.ResponseWriter, r *http.Request) {
func (s *Server) deleteRRSet(w http.ResponseWriter, r *http.Request) {
zoneID := r.PathValue("zoneID")
if err := r.ParseForm(); err != nil {
s.redirectZoneError(w, r, zoneID, "invalid form data")
s.redirectZoneError(w, r, zoneID, "dados do formulario invalidos")
return
}
name := dnsrecord.EnsureTrailingDot(r.FormValue("name"))
recordType := strings.ToUpper(strings.TrimSpace(r.FormValue("type")))
if name == "." || recordType == "" {
s.redirectZoneError(w, r, zoneID, "record name and type are required")
s.redirectZoneError(w, r, zoneID, "nome e tipo do registro sao obrigatorios")
return
}
if isSOA(recordType) {
s.redirectZoneError(w, r, zoneID, "SOA records are required for zones and cannot be deleted")
s.redirectZoneError(w, r, zoneID, "registros SOA sao obrigatorios para zonas e nao podem ser excluidos")
return
}
@@ -475,7 +475,7 @@ func (s *Server) render(w http.ResponseWriter, r *http.Request, name string, dat
w.Header().Set("Content-Type", "text/html; charset=utf-8")
tmpl, ok := s.templates[name]
if !ok {
http.Error(w, "template not found", http.StatusInternalServerError)
http.Error(w, "template nao encontrado", http.StatusInternalServerError)
return
}
if err := tmpl.ExecuteTemplate(w, name, data); err != nil {
@@ -507,7 +507,7 @@ func (s *Server) withSessionAuth(next http.Handler) http.Handler {
return
}
if isUnsafeMethod(r.Method) && !validCSRFToken(r, sess.CSRFToken) {
http.Error(w, "invalid CSRF token", http.StatusForbidden)
http.Error(w, "token CSRF invalido", http.StatusForbidden)
return
}
next.ServeHTTP(w, r)
@@ -664,7 +664,7 @@ func parseFQDNLines(raw, label string) ([]string, error) {
for i, value := range values {
values[i] = dnsrecord.EnsureTrailingDot(value)
if !dnsrecord.IsFQDN(values[i]) {
return nil, fmt.Errorf("%s %q must be a fully qualified domain name", label, value)
return nil, fmt.Errorf("%s %q deve ser um nome de dominio totalmente qualificado", label, value)
}
}
return values, nil