commit 7c497df7ada7d68cc2891e11ee5ba6d4a16215db
parent 74aae1583eb49c5c169d9346d66ae30cc7224ecc
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date: Thu, 7 Jul 2022 16:10:39 +0200
better document type and localization handling
Diffstat:
2 files changed, 64 insertions(+), 20 deletions(-)
diff --git a/cmd/taldir-server/taldir.go b/cmd/taldir-server/taldir.go
@@ -470,41 +470,85 @@ func (t *Taldir) ClearDatabase() {
}
func (t *Taldir) termsResponse(w http.ResponseWriter, r *http.Request) {
- acceptLangs, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language"))
- // We ignore the error: the default language will be selected for t == nil.
- for _, lang := range acceptLangs {
- for _, typ := range r.Header["Accept"] {
- extensions, _ := mime.ExtensionsByType(typ)
+ fileType := t.Cfg.Section("taldir").Key("default_doc_filetype").MustString("text/markdown")
+ termsLocation := t.Cfg.Section("taldir").Key("default_tos_path").MustString("terms/")
+ for _, typ := range r.Header["Accept"] {
+ for _, a := range strings.Split(t.Cfg.Section("taldir").Key("supported_doc_filetypes").String(), " ") {
+ if typ == a {
+ fileType = a
+ }
+ }
+ }
+
+ if len(r.Header.Get("Accept-Language")) != 0 {
+ acceptLangs, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language"))
+ for _, lang := range acceptLangs {
+ extensions, _ := mime.ExtensionsByType(fileType)
for _, ext := range extensions {
- log.Printf("Trying %s\n", "terms/" + lang.String() + ext)
- fileBytes, err := ioutil.ReadFile("terms/" + lang.String() + ext)
+ log.Printf("Trying %s\n", termsLocation + lang.String() + ext)
+ fileBytes, err := ioutil.ReadFile(termsLocation + lang.String() + ext)
if nil == err {
- w.Header().Set("Content-Type", typ)
+ w.Header().Set("Content-Type", fileType)
w.Write(fileBytes)
return
}
}
}
+ w.WriteHeader(404)
+ return
+ }
+ // Default document in expected/default format
+ defaultLanguage := t.Cfg.Section("taldir").Key("default_doc_lang").MustString("en-US")
+ extensions, _ := mime.ExtensionsByType(fileType)
+ for _, ext := range extensions {
+ fileBytes, err := ioutil.ReadFile(termsLocation + defaultLanguage + ext)
+ if nil == err {
+ w.Header().Set("Content-Type", fileType)
+ w.Write(fileBytes)
+ return
+ }
}
w.WriteHeader(404)
}
func (t *Taldir) privacyResponse(w http.ResponseWriter, r *http.Request) {
- acceptLangs, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language"))
- // We ignore the error: the default language will be selected for t == nil.
- for _, lang := range acceptLangs {
- for _, typ := range r.Header["Accept"] {
- extensions, _ := mime.ExtensionsByType(typ)
+ fileType := t.Cfg.Section("taldir").Key("default_doc_filetype").MustString("text/markdown")
+ termsLocation := t.Cfg.Section("taldir").Key("default_pp_path").MustString("privacy/")
+ for _, typ := range r.Header["Accept"] {
+ for _, a := range strings.Split(t.Cfg.Section("taldir").Key("supported_doc_filetypes").String(), " ") {
+ if typ == a {
+ fileType = a
+ }
+ }
+ }
+
+ if len(r.Header.Get("Accept-Language")) != 0 {
+ acceptLangs, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language"))
+ for _, lang := range acceptLangs {
+ extensions, _ := mime.ExtensionsByType(fileType)
for _, ext := range extensions {
- log.Printf("Trying %s\n", "privacy/" + lang.String() + ext)
- fileBytes, err := ioutil.ReadFile("privacy/" + lang.String() + ext)
+ log.Printf("Trying %s\n", termsLocation + lang.String() + ext)
+ fileBytes, err := ioutil.ReadFile(termsLocation + lang.String() + ext)
if nil == err {
- w.Header().Set("Content-Type", typ)
+ w.Header().Set("Content-Type", fileType)
w.Write(fileBytes)
return
}
}
}
+ w.WriteHeader(404)
+ return
+ }
+ // Default document in expected/default format
+ defaultLanguage := t.Cfg.Section("taldir").Key("default_doc_lang").MustString("en-US")
+ extensions, _ := mime.ExtensionsByType(fileType)
+ for _, ext := range extensions {
+ fileBytes, err := ioutil.ReadFile(termsLocation + defaultLanguage + ext)
+ if nil == err {
+ w.Header().Set("Content-Type", fileType)
+ w.Write(fileBytes)
+ return
+ }
}
w.WriteHeader(404)
}
@@ -548,10 +592,6 @@ func (t *Taldir) Initialize(cfgfile string, clearDb bool) {
for _, a := range strings.Split(t.Cfg.Section("taldir").Key("validators").String(), " ") {
t.Validators[a] = true
}
- t.Validators = make(map[string]bool)
- for _, a := range strings.Split(t.Cfg.Section("taldir").Key("validators").String(), " ") {
- t.Validators[a] = true
- }
psqlconn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
t.Cfg.Section("taldir-pq").Key("host").MustString("localhost"),
diff --git a/taldir.conf b/taldir.conf
@@ -6,6 +6,10 @@ bind_to = "localhost:11000"
salt = "ChangeMe"
monthly_fee = KUDOS:1
request_frequency = 3
+default_doc_filetype = text/markdown
+default_doc_lang = en-US
+default_tos_path = terms/
+default_pp_path = privacy/
[taldir-email]
sender = "taldir@taler.net"