taldir

Directory service to resolve wallet mailboxes by messenger addresses
Log | Files | Refs | Submodules | README | LICENSE

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:
Mcmd/taldir-server/taldir.go | 80+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
Mtaldir.conf | 4++++
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"